91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

輕松應對多層JSON數據計算與入庫

發布時間:2020-05-28 21:02:51 來源:網絡 閱讀:441 作者:raqsoft 欄目:大數據

JSON作為一種輕量級的數據交換格式,因其易于讀寫和交互的特點,已逐漸成為主流的數據類型之一。常見的編程語言大多都對 JSON 的讀取與解析提供了接口,但是接下來如何把多層 JSON 數據經過篩選、計算并展開成二維數據,就需要開發人員去頭疼了。本文就為大家分享一下如何利用集算器 SPL(結構化處理語言)輕松解決 JSON 數據解析入庫的問題。

JSON 數據文件導入與解析

根據 JSON 數據文件的復雜程度,以及不同的需求,我們會分三種情況來討論:

1. 單層的 JSON 數據文件

我們先從一個簡單的例子入手,看看普通鍵值映射的 JSON 文件如何讀取。下面是某產品訂單信息的 JSON 數據文件:

輕松應對多層JSON數據計算與入庫

SPL導入 JSON 數據文件只需要簡單的一句腳本:

= json(file("product.json").read())

不需要寫循環函數,也不用解析 JSON 對象,執行一下就可以看到,JSON 數據文件已經轉換為二維數據序表了:

輕松應對多層JSON數據計算與入庫

2. 明細數據相同結構的多層 JSON 數據文件

接下來,我們看一下多層的 JSON 文件如何處理。下面是我們要用到的 JSON 數據文件 orders.json:

輕松應對多層JSON數據計算與入庫

可以看到,JSON 數據分為兩層,第一層是 "貨主國家" 和 "貨主地區",第二層是明細數據。現在我們想要從中導入中國華北和華南地區 2013 年的訂單,讓我們看看如果用 SPL 實現。

這次我們先來定義一下參數:Country、Area 和 Year,分別對應需要導入的貨主國家、貨主地區和訂購日期的年份。通過定義參數,以后導入不同國家、地區和年份的時候,就不再需要修改 SPL,只需要提供相應的參數值就行了。這里需要注意的是,Area 的值是序列,默認值是 [華北, 華南],這樣就可以同時讀取多個地區的數據。如下圖:

輕松應對多層JSON數據計算與入庫

我們先看一下 SPL 腳本:


A

B

1

=json(file("orders.json").read())

=A1.select(貨主國家 ==Country   && Area.contain( 貨主地區))

2

=B1.news(區域訂單;B1. 貨主國家: 貨主國家,B1. 貨主地區: 貨主地區,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13)

=A2.select(year( 訂購日期)==Year)

下面來詳細解釋一下:

第一步:A1 中 =json(file("orders.json").read()),導入 JSON 文件生成序表。執行一下,可以看到 JSON 數據按層級被展現出來(在集算器設計器中我們可以通過雙擊“區域訂單”值,來查看下一層明細數據):

輕松應對多層JSON數據計算與入庫

第二步:從圖中可以看到,"貨主國家" 和 "貨主地區" 字段就在第一層,因此在 B1 中直接調用A1.select(貨主國家 ==Country && Area.contain( 貨主地區)) 就可以篩選出中國華北和華南的數據。

第三步:"區域訂單" 是我們想要的明細數據,但是其中不包含 "貨主國家" 和 "貨主地區" 這兩個字段,因此我們需要把這兩個字段和區域訂單的明細字段拼在一起。這么復雜的需求通過 news 函數就可以一步到位解決。從 A2 格的表達式可以看到參數并不復雜,把 B1. 貨主國家,B1. 貨主地區和 "區域訂單" 的全部字段拼在一起就可以了。看下執行結果:

輕松應對多層JSON數據計算與入庫

第四步:在 B2 中通過=A2.select(year( 訂購日期)==Year)篩選出 "訂購日期" 的年份是 2013 年的數據。

最后讓我們執行一下,可以看到最終得到的二維表完全符合需求:

輕松應對多層JSON數據計算與入庫

3. 明細數據不同結構的多層 JSON 數據文件

因為數據來源的復雜性,JSON 數據文件的明細數據有可能是不同結構的,我們一起看一下這種 JSON 文件如何處理。下面是我們要用到的 JSON 文件 sales.json:

輕松應對多層JSON數據計算與入庫

第一層以年和月為維度,第二層以國家為維度,第三層是明細數據。但是明細數據中,由于銷售渠道不同,結構是不完全一致的,比如 "PRODUCTLINE"、"ADDRESSLINE1"、"ADDRESSLINE2" 在明細數據中并不是必須的。現在,我們要從數據中讀取 2017 和 2018 年北美兩個大國美國和加拿大的銷售數據。

為了使用方便,我們還是先定義兩個參數:Year 和 Country:

輕松應對多層JSON數據計算與入庫

接下來先看一下 SPL:


A

B

1

=json(file("sales.json").read())

=A1.select(Year.contain(YEAR))

2

=B1.news(MONTHLY_SALES;B1.YEAR:YEAR,B1.MONTH:MONTH,#1,#2)

=A2.select(Country.contain(COUNTRY))

3

=B2.news(NATIONAL_MONTHLY_SALES;B2.YEAR:YEAR,B2.COUNTRY:COUNTRY,ORDERNUMBER,QUANTITYORDERED,PRICEEACH,ORDERLINENUMBER,SALES,ORDERDATE,STATUS,QTR_ID,PRODUCTLINE,MSRP,PRODUCTCODE,CUSTOMERNAME,PHONE,ADDRESSLINE1,ADDRESSLINE2,CITY,STATE,POSTALCODE,TERRITORY,CONTACTLASTNAME,CONTACTFIRSTNAME,DEALSIZE)


下面來詳細解釋一下。

A1格還是把 JSON 文件導入為多層序表。

由于年份字段就在第一層,B1 格中直接調用A1.select(Year.contain(YEAR))可以從 A1 中篩選出 2017 和 2018 年份的數據:

輕松應對多層JSON數據計算與入庫

接下來 A2 格中我們再次用到了 news 函數,用來把年月字段和下一層的月銷售明細拼在一起:

輕松應對多層JSON數據計算與入庫

B2格中我們通過A2.select(Country.contain(COUNTRY))從中篩選出來美國和加拿大的數據。

然后在 A3 格中,我們再次用到了 news 函數,這次需要把 YEAR,MONTH,COUNTRY 和再下一層的國家月銷售明細拼在一個序表中。由于這個文件中明細數據可能結構有所不同,我們使用全量的字段名作為參數來創建序表。字段的值會根據名稱設置,無此字段的會缺省為空值(例如下圖 "ADDRESSLINE1" 和 "ADDRESSLINE2" 字段):

輕松應對多層JSON數據計算與入庫

執行后可以看到最終結果:

輕松應對多層JSON數據計算與入庫

至此,一個多層結構的明細數據結構不完全一致的 JSON 文件就成功展開成為一個二維表了。

序表入庫

前面介紹了常見的 JSON 數據文件導入與解析,接下來是數據入庫的問題。之所以在最后才說入庫,并不是因為復雜,恰恰相反的是,由于前面的例子中最后生成的都是序表,因此更新數據庫就變得非常簡單方便。以前面導入 JSON 的例子 2 中的訂單表為例:


A

1

=file("orders.json").read().import@j().select(貨主國家 ==Country && 貨主地區 ==Area). 區域訂單.select(year( 訂購日期)==Year).derive(Country: 貨主國家,Area: 貨主地區)

2

=connect("demo").update(A1, 訂單; 訂單 ID)

可以看到,更新數據庫只需要一句腳本!

這里是比較常見的通過主鍵更新,用序表 A1 通過主鍵訂單 ID 來更新數據庫中的訂單表。SPL 中的 update 函數有很多選項,可以滿足更多的更新數據需求,這里就不再一一贅述了。

       因此,只要用對了工具,從 JSON 文件導入解析到數據入庫,再繁瑣的任務也可以輕松應對。除了 JSON 數據文件,集算器 SPL 還支持各種豐富多樣的數據來源,后續將通過更多的文章繼續分享給大家。



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云南省| 布尔津县| 琼海市| 宜城市| 内乡县| 堆龙德庆县| 连平县| 五大连池市| 庆云县| 临西县| 大同县| 醴陵市| 辛集市| 资中县| 龙泉市| 阿坝县| 苏尼特左旗| 涞源县| 龙口市| 荥经县| 临潭县| 长垣县| 璧山县| 武安市| 望奎县| 新巴尔虎左旗| 马龙县| 攀枝花市| 日喀则市| 西吉县| 东乡族自治县| 保德县| 新源县| 庆城县| 大理市| 郓城县| 凤山市| 湘潭市| 民丰县| 颍上县| 乃东县|