将csv文件的全部内容加载到Hive表中的单个列中

时间:2017-01-12 20:21:35

标签: csv hadoop hive

可以在Hive相关问题上使用一些帮助。

我正在尝试将整个csv文件加载到单个列Hive表中。文件中的每个条目都应该是Hive表中的单个行。我试图改变ROW FORMAT - 特别试图改为LINES TERMINATED BY','而不是'\ n'。但是,目前仅支持'\ n'字符。它目前是一个JIRA问题(https://issues.apache.org/jira/browse/HIVE-11996)。

我目前唯一的想法就是通过linux命令用\ n替换文件中的逗号但是我想知道是否有人可以提出一些值得考虑的其他解决方案。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以在Hive中创建临时表,然后分开选择每个列。让我们在HDFS“/tmp/test.csv”中使用以下内容测试文件:

  

COL1,COL2,COL3

     

COL4,COL5,COL6

     

COL7,col8,col9

如果您创建此临时表:

CREATE TABLE tmp_csv(c1 STRING, c2 STRING, c3 STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

LOAD DATA INPATH '/tmp/test.csv' OVERWRITE INTO TABLE tmp_csv;

然后您可以使用以下内容重建表:

CREATE TABLE final_csv AS SELECT * FROM 
(   SELECT t1.c1 as col FROM tmp_csv t1 
    UNION ALL 
    SELECT t2.c2 as col FROM tmp_csv t2
    UNION ALL 
    SELECT t3.c3 as col FROM tmp_csv t3
)combined;    

表final_csv的内容是:

col1
col4
col7
col2
col5
col8
col3
col6
col9