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
。
-
创建一个 Flex 表
dflex
:=> CREATE FLEX TABLE dflex(); CREATE TABLE
-
使用 COPY 加载
delim.dat
文件。使用 Flex 表fdelimitedparser
的header='false'
选项:=> COPY dflex FROM '/home/release/kmm/flextables/delim.dat' parser fdelimitedparser(header='false'); Rows Loaded ------------- 4 (1 row)
-
创建列式表
dtab
,它具有一个表示身份的id
列、一个delim
列和一个用于存储 VMap 的vmap
列:=> CREATE TABLE dtab (id IDENTITY(1,1), delim varchar(128), vmap long varbinary(512)); CREATE TABLE
-
使用 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)
-
将 MAPTOSTRING 用于 Flex 表
dflex
,以查看__raw__
列内容。请注意使用中的默认标题名 (ucol0
–ucol4
),因为您在加载 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)
-
再次使用 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)
-
查询
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)