MAPDELIMITEDEXTRACTOR

用分隔符和其他可选实参提取数据,并返回单一的 VMap 值。

语法

MAPDELIMITEDEXTRACTOR (record-value [ USING PARAMETERS param=value[,...] ])

参数

record-value
包含要对其应用表达式的 JSON 或分隔符格式记录的字符串。

参数

delimiter
单个分隔符。

默认值: |

header_names
列标题名称的分隔符分隔列表。

默认值: ucoln,其中 n 为列偏移数,第一列以 0 开头。

trim
布尔值,从标题名和字段值中去掉空格。

默认值: true

treat_empty_val_as_null
布尔值,将空字段设置为 NULL 而不是空字符串 ('')。

默认值: true

示例

这些示例使用了一个简短的分隔数据集:

Name|CITY|New city|State|zip
Tom|BOSTON|boston|MA|01
Eric|Burlington|BURLINGTON|MA|02
Jamie|cambridge|CAMBRIDGE|MA|08

首先,将此数据保存为 delim.dat

  1. 创建一个 Flex 表 dflex

    => CREATE FLEX TABLE dflex();
    CREATE TABLE
    
  2. 使用 COPY 加载 delim.dat 文件。使用 Flex 表 fdelimitedparserheader='false' 选项:

    => COPY dflex FROM '/home/release/kmm/flextables/delim.dat' parser fdelimitedparser(header='false');
     Rows Loaded
    -------------
             4
    (1 row)
    
  3. 创建列式表 dtab,它具有一个表示身份的 id 列、一个 delim 列和一个用于存储 VMap 的 vmap 列:

    => CREATE TABLE dtab (id IDENTITY(1,1), delim varchar(128), vmap long varbinary(512));
    CREATE TABLE
    
  4. 使用 COPY 将 delim.dat 文件加载到 dtab 表中。MAPDELIMITEDEXTRACTOR 使用 header_names 参数以及 delimiter '!' 为示例数据指定标题行:

    => COPY dtab(delim, vmap AS MAPDELIMITEDEXTRACTOR (delim
       USING PARAMETERS header_names='Name|CITY|New City|State|Zip')) FROM '/home/dbadmin/data/delim.dat'
    DELIMITER '!';
    
    
     Rows Loaded
    -------------
               4
    (1 row)
    
  5. MAPTOSTRING 用于 Flex 表 dflex,以查看 __raw__ 列内容。请注意使用中的默认标题名 (ucol0ucol4),因为您在加载 Flex 表时指定 header='false'

    => SELECT MAPTOSTRING(__raw__) FROM dflex limit 10;
                                  maptostring
    -------------------------------------------------------------------------------------
     {
       "ucol0" : "Jamie",
       "ucol1" : "cambridge",
       "ucol2" : "CAMBRIDGE",
       "ucol3" : "MA",
       "ucol4" : "08"
    }
    
     {
       "ucol0" : "Name",
       "ucol1" : "CITY",
       "ucol2" : "New city",
       "ucol3" : "State",
       "ucol4" : "zip"
    }
    
     {
       "ucol0" : "Tom",
       "ucol1" : "BOSTON",
       "ucol2" : "boston",
       "ucol3" : "MA",
       "ucol4" : "01"
    }
    
     {
       "ucol0" : "Eric",
       "ucol1" : "Burlington",
       "ucol2" : "BURLINGTON",
       "ucol3" : "MA",
       "ucol4" : "02"
    }
    
    (4 rows)
    
  6. 再次使用 MAPTOSTRING,这次将其用于 dtab 表的 vmap 列。将此输出的结果与 Flex 表的结果进行比较。请注意,MAPTOSTRING 返回了您在加载数据时指定的 header_name 参数值:

    => SELECT MAPTOSTRING(vmap) FROM dtab;
                                                          maptostring
    ------------------------------------------------------------------------------------------------------------------------
     {
       "CITY" : "CITY",
       "Name" : "Name",
       "New City" : "New city",
       "State" : "State",
       "Zip" : "zip"
    }
    
     {
       "CITY" : "BOSTON",
       "Name" : "Tom",
       "New City" : "boston",
       "State" : "MA",
       "Zip" : "02121"
    }
    
     {
       "CITY" : "Burlington",
       "Name" : "Eric",
       "New City" : "BURLINGTON",
       "State" : "MA",
       "Zip" : "02482"
    }
    
     {
       "CITY" : "cambridge",
       "Name" : "Jamie",
       "New City" : "CAMBRIDGE",
       "State" : "MA",
       "Zip" : "02811"
    }
    
    (4 rows)
    
  7. 查询 delim 列,以不同的方式查看其内容:

    => SELECT delim FROM dtab;
                    delim
    -------------------------------------
     Name|CITY|New city|State|zip
     Tom|BOSTON|boston|MA|02121
     Eric|Burlington|BURLINGTON|MA|02482
     Jamie|cambridge|CAMBRIDGE|MA|02811
    (4 rows)
    

另请参阅