我有一个类似的问题: Hive table source delimited by multiple spaces
我的数据如下:
AL, 01, 2016010700, , BEST, 0, 266N, 753W
AL, 01, 2016010706, , BEST, 0, 276N, 747W
AL, 01, 2016010712, , BEST, 0, 287N, 738W
AL, 01, 2016010712, , BEST, 0, 287N, 738W
这意味着我的列分隔符为"逗号加上可变数量的空格"。
我尝试通过将此逗号添加到正则表达式来简单地修改field.delim
,但它不起作用。
结果是,所有数据都放入第一列(basin
),所有其他列都为NULL。
CREATE EXTERNAL TABLE IF NOT EXISTS default.myTable1
(
basin string
,cy string
,yyyymmddhh int
,technum_min string
,tech string
,tau string
,lat_n_s string
,lon_e_w string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES ("field.delim"=",\\s+")
LOCATION '/data';
我正在运行HDP 2.5(Hive 1.2.1)。
感谢您提供任何帮助和建议。
答案 0 :(得分:1)
我们有两种方法来解决您的问题。 创建表' rawTbl'使用以下选项
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
并使用trim()删除空格
Insert into baseTbl select trim(basin), trim(cy),...., from rawTbl
或者您可以使用regEx
我已经用正则表达式更新了答案,它将由请求字段组成的文本输入文件分开。正则表达式包含7个正则表达式组,用于捕获每行上的请求字段。
CREATE EXTERNAL TABlE tableex(basin string
,cy string
,yyyymmddhh int
,technum_min string
,tech string
,tau string
,lat_n_s string
,lon_e_w string )
ROW FORMAT 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = '^([A-Za-z]{2}),\s+(\d{2}),\s(\d{10}),\s+,\s([A-Z]{4}),\s+(\d{1}),\s+(\d{3}[A-Z]{1}),\s+(\d+[A-Z]{1})'
)
LOCATION '/data';
答案 1 :(得分:0)
这个怎么样
(\S+),\s+(\S+),\s(\S+),\s+,\s(\S+)\s+(\S+),\s+(\S+),\s+(\S*)