我正在将数据从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。我假设这是因为额外的空格使解析失败。有办法解决这个问题吗?
答案 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;