正则表达式将数据行拆分为字段

regex split data line into fields

在配置单元中,如果我有一行数据,我想根据一些正则表达式(例如 "34,56 43--21"34, 56, 43, 21)分成 4 个字段,并且 table 看起来像这样

CREATE TABLE example (f1 INT, f2 INT, f3 INT, f4 INT);

有没有办法给它提供文件的位置并根据正则表达式自动将每一行拆分为 table?

谢谢!

是的,你可以

LOAD DATA INPATH ‘/path/on/hdfs/file_name.csv’ OVERWRITE INTO TABLE example1;

http://wise.ajou.ac.kr/mata/load-csv-file-to-hive-hadoop/ 假设您的列正确。请记住,这将覆盖整个 table。我想如果你想附加,你最好的选择是制作一个新的 table 然后找到一种方法来合并它。

使用正则表达式 serde 定义模式。括号内的部分应摘录。

CREATE external TABLE if not exists example (f1 INT, f2 INT, f3 INT, f4 INT)
 row format serde
   'org.apache.hadoop.hive.serde2.RegexSerde'
   with serdeproperties ("input.regex" = "(\d*)\,(\d*)\s(\d*)\-{2}(\d*)")

如果这不起作用,请将连字符从“\-”更改为“-”,但我认为它需要转义两次。抱歉,我现在无法测试。