3.5.4.3. S3 JSON 解析
JSON 文档可在对象或数组内启用嵌套值。在 S3 选择引擎的 JSON 文档中查询特定值时,该值的位置将通过 SELECT 语句中的路径来指定。
JSON 文档的通用结构没有 CSV 和 Parquet 等一行和列结构。相反,它是 SQL 语句本身,它在查询 JSON 文档时定义行和列。
S3 选择引擎的 JSON 解析器解析 S3-objects,如下所示:
-
SELECT语句中的FROM子句定义行边界。 - JSON 文档中的一行与使用行分隔符定义 CSV 对象行的方式类似,以及如何使用行组为 Parquet 对象定义行
考虑以下示例:
Example
{ "firstName": "Joe", "lastName": "Jackson", "gender": "male", "age": "twenty" }, { "firstName": "Joe_2", "lastName": "Jackson_2", "gender": "male", "age": 21 }, "phoneNumbers": [ { "type": "home1", "number": "734928_1","addr": 11 }, { "type": "home2", "number": "734928_2","addr": 22 } ], "key_after_array": "XXX", "description" : { "main_desc" : "value_1", "second_desc" : "value_2" } # the from-clause define a single row. # _1 points to root object level. # _1.age appears twice in Documnet-row, the last value is used for the operation. query = "select _1.firstname,_1.key_after_array,_1.age+4,_1.description.main_desc,_1.description.second_desc from s3object[*].aa.bb.cc;"; expected_result = Joe_2,XXX,25,value_1,value_2-
语句指示读者搜索路径
aa.bb.cc,并根据此路径发生定义行边界。 -
当读者遇到路径时,一行将开始,当读取器退出路径的最内部部分时,该路径的最内部部分是对象
cc。
-
语句指示读者搜索路径