MAPPUT
接受一个 VMap 和一个或多个键/值对,并返回一个添加了键/值对的新 VMap。键必须使用辅助函数 SetMapKeys()
设置,并且只能是常量字符串。如果 VMap 有任何新的输入键,则原始值将被新的值替换。
语法
MAPPUT (VMap-data, value[,...] USING PARAMETERS keys=SetMapKeys('key'[,...])
参数
-
VMap-data
- 任何 Vmap 数据。Vmap 的存在形式可以是:
-
Flex 表的
__raw__
列 -
从 MAPLOOKUP 等映射函数返回的数据。
-
其他数据库内容
-
-
value[,...]
- 要添加到
VMap-data
中指定的 VMap 的一个或多个值。
参数
keys
SetMapKeys()
的结果。SetMapKeys()
接受一个或多个常量字符串实参。
以下示例展示了如何创建 Flex 表并使用 COPY 输入一些基本的 JSON 数据。创建第二个 Flex 表后,插入来自 mapput()
的新 VMap 结果,以及附加的键/值对。
-
创建样本表:
=> CREATE FLEX TABLE vmapdata1(); CREATE TABLE
-
从 STDIN 加载样本 JSON 数据:
=> COPY vmapdata1 FROM stdin parser fjsonparser(); Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself. >> {"aaa": 1, "bbb": 2, "ccc": 3} >> \.
-
创建另一个 Flex 表并使用该函数将数据插入其中:
=> CREATE FLEX TABLE vmapdata2();
=> INSERT INTO vmapdata2 SELECT MAPPUT(__raw__, '7','8','9' using parameters keys=SetMapKeys('xxx','yyy','zzz')) from vmapdata1;
-
查看原始 Flex 表和新 Flex 表之间的差异:
=> SELECT MAPTOSTRING(__raw__) FROM vmapdata1; maptostring ----------------------------------------------------- { "aaa" : "1", "bbb" : "2", "ccc" : "3" } (1 row) => SELECT MAPTOSTRING(__raw__) from vmapdata2; maptostring ------------------------------------------------------- { "mapput" : { "aaa" : "1", "bbb" : "2", "ccc" : "3", "xxx" : "7", "yyy" : "8", "zzz" : "9" } }