2

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

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。我假设这是因为额外的空格使解析失败。有没有解决的办法?

4

1 回答 1

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;
于 2013-01-15T20:52:04.713 回答