由逗号和多个空格分隔的配置单元表

jhiyze9q  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(472)

我这里有一个类似的问题:由多个空格分隔的配置单元表源
我的数据如下:

  1. AL, 01, 2016010700, , BEST, 0, 266N, 753W
  2. AL, 01, 2016010706, , BEST, 0, 276N, 747W
  3. AL, 01, 2016010712, , BEST, 0, 287N, 738W
  4. AL, 01, 2016010712, , BEST, 0, 287N, 738W

这意味着我的列分隔符是“一个逗号加上可变数量的空格”。
我试着简单地修改 field.delim 在正则表达式中添加这个逗号,但它不起作用。结果是,所有数据都被放入第一列( basin )所有其他列都为空。

  1. CREATE EXTERNAL TABLE IF NOT EXISTS default.myTable1
  2. (
  3. basin string
  4. ,cy string
  5. ,yyyymmddhh int
  6. ,technum_min string
  7. ,tech string
  8. ,tau string
  9. ,lat_n_s string
  10. ,lon_e_w string
  11. )
  12. ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
  13. WITH SERDEPROPERTIES ("field.delim"=",\\s+")
  14. LOCATION '/data';

我正在运行hdp2.5(配置单元1.2.1)。
谢谢你的帮助和建议。

x7yiwoj4

x7yiwoj41#

这个怎么样

  1. (\S+),\s+(\S+),\s(\S+),\s+,\s(\S+)\s+(\S+),\s+(\S+),\s+(\S*)
deikduxw

deikduxw2#

我们有两种方法来解决你的问题。使用下面的选项创建表“rawtbl” ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 并使用trim()删除空间

  1. Insert into baseTbl select trim(basin), trim(cy),...., from rawTbl

或者你可以用正则表达式
我已经用regex更新了答案,regex是由请求字段组成的独立文本输入文件。regex包含7个regex组,在每行上捕获请求的字段。

  1. CREATE EXTERNAL TABlE tableex(basin string
  2. ,cy string
  3. ,yyyymmddhh int
  4. ,technum_min string
  5. ,tech string
  6. ,tau string
  7. ,lat_n_s string
  8. ,lon_e_w string )
  9. ROW FORMAT 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
  10. WITH SERDEPROPERTIES (
  11. "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})'
  12. )
  13. LOCATION '/data';
展开查看全部

相关问题