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 结果,以及附加的键/值对。

  1. 创建样本表:

    => CREATE FLEX TABLE vmapdata1();
    CREATE TABLE
    
  2. 从 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}
    >> \.
    
  3. 创建另一个 Flex 表并使用该函数将数据插入其中: => CREATE FLEX TABLE vmapdata2(); => INSERT INTO vmapdata2 SELECT MAPPUT(__raw__, '7','8','9' using parameters keys=SetMapKeys('xxx','yyy','zzz')) from vmapdata1;

  4. 查看原始 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"
       }
     }
    

另请参阅