概述
您可能有大量應用程式産生的JSON資料,您可能需要對這些JSON資料進行整理,去除不想要的字段,或者隻保留想要的字段,或者僅僅是進行資料查詢。
那麼,利用阿裡雲Data Lake Analytics或許是目前能找到的雲上最為便捷的達到這一目标的服務了。僅僅需要3步,就可以完成對海量JSON資料的處理,或者更為複雜的ETL流程。
第一步:JSON資料到阿裡雲OSS
利用各種手段,将JSON資料投遞到OSS
https://www.aliyun.com/product/oss)中。
通常,對于雲上日志鍊路,還有一種JSON到OSS的投遞鍊路,可以參考
“雲原生日志資料分析上手指南”其中的JSON部分。
第二步:DLA中建表
參考上述
,其中已經有海量JSON資料的分區模式建表方法了。本例中,以非分區表為例,假設,資料檔案中每一行一個JSON資料,JSON資料放置的OSS路徑為:
oss://your_bucket/json_data/...
則,在DLA中執行建表:
CREATE EXTERNAL TABLE simple_json (
data STRING
)
STORED AS TEXTFILE
LOCATION 'oss://your_bucket/json_data/';
第三步:利用DLA JSON函數SQL處理
json_remove
從JSON中去除指定JSON Path的資料。可以一次處理一個JSON path,也可以一次處理多個JSON path。注意:目前還不支援“..”等JSON path的模糊比對,不久後會支援。
json_remove(json_string, json_path_string) -> json_string
json_remove(json_string, array[json_path_string]) -> json_string
示例:
select json_remove(
'{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}'
, '$.glossary.GlossDiv') a;
-> {"glossary":{"title":"example glossary"}}
select json_remove(
'{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}'
, array['$.glossary.title', '$.glossary.GlossDiv.title']) a;
{"glossary":{"GlossDiv":{"GlossList":{"GlossEntry":{"GlossTerm":"Standard Generalized Markup Language","GlossSee":"markup","SortAs":"SGML","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"ID":"SGML","Acronym":"SGML","Abbrev":"ISO 8879:1986"}}}}}
json_reserve
從JSON中保留指定JSON Path的資料,去除其他的資料。可以一次處理一個JSON path,也可以一次處理多個JSON path。注意:目前還不支援“..”等JSON path的模糊比對,不久後會支援。
json_reserve(json_string, json_path_string) -> json_string
json_reserve(json_string, array[json_path_string]) -> json_string
select json_reserve(
'{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}'
, array['$.glossary.title']) a;
-> {"glossary":{"title":"example glossary"}}
select json_reserve(
'{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}'
, array['$.glossary.title', '$.glossary.GlossDiv.title', '$.glossary.GlossDiv.GlossList.GlossEntry.ID']) a;
-> "glossary":{"title":"example glossary","GlossDiv":{"GlossList":{"GlossEntry":{"ID":"SGML"}},"title":"S"}}}
後記
還可以利用Data Lake Analytics強大的雲上資料處理能力,進行多源資料融合處理、分析,回流到其他資料庫、存儲系統中。
更多資訊請參考:
https://datalakeanalytics.console.aliyun.com/overviewData Lake Analytics首購和流量包優惠
首購使用者1元10TB,流量包階梯折扣優惠:
https://et.aliyun.com/bdad/datalake産品詳情:
https://www.aliyun.com/product/datalakeanalytics雲栖社群:
https://yq.aliyun.com/teams/396知乎社群:
https://zhuanlan.zhihu.com/data-lake-analytics