将数据导入包含空白的Hive

时间:2013-01-15 13:10:15

标签: hive

我正在将数据从csv文件导入Hive。我的表包含字符串和整数。但是,在我的输入文件中,int在它们周围有空格,所以它看起来像这样:

some string,     2    ,another string  ,    7    , yet another string

不幸的是我无法控制提供文件的程序的格式。

使用(例如)导入数据时:

CREATE TABLE MYTABLE(string1 STRING, alpha INT, string2 STRING, beta INT, string3 STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

然后我的所有整数都设置为NULL。我假设这是因为额外的空格使解析失败。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

您可以执行多阶段导入。在第一阶段,将所有数据保存为STRING,在第二阶段使用trim()删除空格,然后将数据另存为INT。您还可以使用Pig将源文件中的数据作为原始文本读取,然后将其写入Hive,与正确的数据类型一样。

修改

如果您可以将源文件指向外部表,也可以一次性执行此操作。

CREATE TABLE myTable(
    string1 STRING, alpha STRING, string2 STRING, beta STRING, string3 STRING
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '\\server\path\file.csv'

INSERT INTO myOtherTable
SELECT string1,
       CAST(TRIM(alpha) AS INT),
       string2,
       CAST(TRIM(beta) AS INT),
       string3
FROM myTable;