MAPJSONEXTRACTOR
提取重复 JSON 数据对象(包括嵌套映射)或具有 JSON 元素外部列表的数据的内容。您可以设置一个或多个可选参数来控制提取过程。
注意
空输入不会生成警告或错误。语法
MAPJSONEXTRACTOR (record-value [ USING PARAMETERS param=value[,...] ])
参数
- record-value
- 包含要对其应用表达式的 JSON 或包含分隔符格式记录的字符串。
参数
flatten_maps
- 布尔值,将 JSON 数据中的子映射平展,以句点 (
.
) 分隔映射层级。默认值:
true
flatten_arrays
- 布尔值,将列表转换为带有整数键的子映射。默认不对列表进行平展。
默认值:
false
reject_on_duplicate
- 布尔值,忽略重复记录 (
false
),或拒绝重复记录 (true
)。在任何一种情况下,加载都不受影响。默认值:
false
reject_on_empty_key
- 布尔值,拒绝任何包含不带值的键的行。
默认值:
false
omit_empty_keys
- 布尔值,从加载数据中省略任何没有值的键。
默认值:
false
start_point
- JSON 加载数据中用作解析起点的键的名称。解析器忽略
start_point
值之前的所有数据。解析器会处理第一个实例后面的数据,最多到第二个,便会忽略任何保留的数据。默认值: 无
示例
这些示例使用以下示例 JSON 数据:
{ "id": "5001", "type": "None" }
{ "id": "5002", "type": "Glazed" }
{ "id": "5005", "type": "Sugar" }
{ "id": "5007", "type": "Powdered Sugar" }
{ "id": "5004", "type": "Maple" }
将此示例数据保存为 bake_single.json
,然后加载该文件。
-
创建一个 Flex 表
flexjson
:=> CREATE FLEX TABLE flexjson(); CREATE TABLE
-
通过
fjsonparser
解析器,使用 COPY 加载bake_single.json
文件:=> COPY flexjson FROM '/home/dbadmin/data/bake_single.json' parser fjsonparser(); Rows Loaded ------------- 5 (1 row)
-
创建列式表
coljson
,它具有一个身份列 (id
)、一个json
列和一个用于存储 VMap 的vmap
列:=> CREATE TABLE coljson(id IDENTITY(1,1), json varchar(128), vmap long varbinary(10000)); CREATE TABLE
-
利用 MAPJSONEXTRACTOR,使用 COPY 将
bake_single.json
文件加载到coljson
表中:=> COPY coljson (json, vmap AS MapJSONExtractor(json)) FROM '/home/dbadmin/data/bake_single.json'; Rows Loaded ------------- 5 (1 row)
-
将 MAPTOSTRING 函数用于 Flex 表
flexjson
以将__raw__
列的内容输出为字符串:=> SELECT MAPTOSTRING(__raw__) FROM flexjson limit 5; maptostring ----------------------------------------------------- { "id" : "5001", "type" : "None" } { "id" : "5002", "type" : "Glazed" } { "id" : "5005", "type" : "Sugar" } { "id" : "5007", "type" : "Powdered Sugar" } { "id" : "5004", "type" : "Maple" } (5 rows)
-
再次使用 MAPTOSTRING,这次将其用于
coljson
表的vmap
列,并比较结果。元素顺序有所不同:=> SELECT MAPTOSTRING(vmap) FROM coljson limit 5; maptostring ----------------------------------------------------- { "id" : "5001", "type" : "None" } { "id" : "5002", "type" : "Glazed" } { "id" : "5004", "type" : "Maple" } { "id" : "5005", "type" : "Sugar" } { "id" : "5007", "type" : "Powdered Sugar" } (5 rows)