kettle中json input中資料的解析

2021-10-20 08:35:33 字數 2857 閱讀 9677

類似於xpath在xml文件中的定位,jsonpath表示式通常是用來路徑檢索或設定json的。其表示式可以接受「dot–notation」和「bracket–notation」格式,例如$.store.book[0].title、$[『store』][『book』][0][『title』]

jsonpaht 用乙個抽象的名字$來表示最外層物件。

使用.符號:$.store.book[0].title

使用:$['store']['book'][0]['title']

陣列索引

1)jsonpath 允許使用萬用字元 * 表示所以的子元素名和陣列索引。還允許使用 '..' 從e4x參照過來的和陣列切分語法[start:end:step]

2$.store.book[(@.length-1)].title

3)使用'@'符號表示當前的物件,?(《判斷表示式》) 使用邏輯表示式來過濾

$.store.book[?(@.price < 10)].title

xpath

jsonpath

description

表示根元素

當前元素

. or

子元素n/a

父元素遞迴下降,jsonpath是從e4x借鑑的。

萬用字元,表示所有的元素

n/a屬性訪問字元

子元素操作符

連線操作符在xpath 結果合併其它結點集合。jsonp允許name或者陣列索引。

n/a[start:end:step]

陣列分割操作從es4借鑑。

應用過濾表示式

n/a指令碼表示式,使用在指令碼引擎下面。

n/axpath分組

介面返回:

[, , , , , , , ]

jsonpath

結果$.[*].name

所有學歷的name

$.[*].id

所有的id

$.[*]

所有元素

$.[(@.length-2)].name

倒數第二個元素的name

$.[2]

第三個元素

$.[(@.length-1)]

最後乙個元素

$.[0,1]

$.[:2]

前面的兩個元素

$.[?(@.name =~ /.*中/i)]

過濾出所有的name包含「中」的書。

$..book[?(@.price<10)]

過濾出**低於10的書。

$.[*].length()

所有元素的個數

介面返回:,,

,],"bicycle":

},"expensive": 10

}jsonpath表示式

結果$.store.book[*].author 

或 $..author

[「nigel rees」,

「evelyn waugh」,

「herman melville」,

「j. r. r. tolkien」

]$.store.* 顯示所有葉子節點值[[

,,,],

]$.store..price

[8.95,

12.99,

8.99,

22.99,

19.95

]$..book[0,1]

或$..book[:2][,

]$..book[-2:]

獲取最後兩本書

$..book[2:][,

]$..book[?(@.isbn)]

所有具有isbn屬性的書

$.store.book[?(@.price < 10)]

所有**小於10的書

$..book[?(@.price <= $[『expensive』])]

所有**低於expensive欄位的書

$..book[?(@.author =~ /.*rees/i)]

所有符合正規表示式的書 

返回所有

$..book.length()[4

]操作符

描述等於符號,但數字1不等於字元1(note that 1 is not equal to 『1』)

不等於符號

小於符號

小於等於符號

大於符號

大於等於符號

判斷是否符合正規表示式,例如[?(@.name =~ /foo.*?/i)]

in所屬符號,例如[?(@.size in [『s』, 『m』])]

nin排除符號

size

size of left (array or string) should match right

empty

判空符號

例如:1)所有具有isbn屬性的書

$.store.book[?(@.isbn)].author
2)所有**大於10的書

$.store.book[?(@.price >10)]
3)查詢***==3的所有物件

$.result.list[?(@.*** ==3)]

4)可以自定義過濾器來獲取想要的任何元素,可以多條件查詢

在這裡,你可以將你的json格式的資料拷貝上去,自己手動寫表示式解析檢視。

**

Kettle 中的迴圈

說道迴圈,小夥伴們肯定不陌生,就是重複幹一件事 而kettle中的迴圈一般是發生在job中,因為job是序列執行的 kettle的迴圈有兩種,一種是通過js指令碼,另外一種是通過遍歷前面步驟返回的每一行。下面是我寫的偽 我將使用kettle來實現這段 array sys1 sys2 sys3 sys...

使用kettle中遇到的問題

以4.2為例 1 使用merge join操作,資料大的時候會出現資料1條變兩條一樣的情況。但是在跑自帶例子的時候沒問題,資料量小的時候也沒問題。我使用的記錄為20w條,出現了重複問題。2 使用merge join的left outer連線的時候,如果右邊的資料連線值為空,則兩邊資料對應關係會亂掉,...

Kettle中ETL的效率優化

如果我們想要優化乙個etl ktr或者kjb 的效能,我們首先需要知道的就是它的瓶頸在 而這些資訊一般只能在etl執行的步驟度量中看到,並且是不會持久化的。如果你希望把一些資料記錄下來,幫助以後進行查閱,那麼可以開啟資料庫日誌和效能監控。作業edit settings log具體設定過程就不細講了,...