【问题标题】:Loading .csv file into HIVE produces a table with a single long row将 .csv 文件加载到 HIVE 会生成一个包含单个长行的表
【发布时间】:2015-07-25 08:57:52
【问题描述】:

我正在尝试将磁盘上的 .csv 文件加载到 Hive。

根据 StackOverflow 上的 answer,我使用以下查询创建了表:

CREATE TABLE mytable 
(
id_number STRING, 
country STRING
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

然后我使用以下查询将文件中的数据转储到 Hive:

LOAD DATA LOCAL INPATH /mytable.csv OVERWRITE INTO TABLE mytable;

不幸的是,hive 中的结果表由一行组成,其中每个元素(如下所示)是 .csv 文件中一行的拼凑版本:

“aDXLS23M\t俄罗斯”

我已经坚持了几个小时,无法弄清楚如何让 hive 识别 .csv 文件中的列分隔符。有什么建议吗?

提前致谢。

【问题讨论】:

  • \t 是制表符分隔的。试试... fields terminated by '\t'
  • 您好,我尝试将 ',' 替换为 '\t',不幸的是,这并没有解决问题。
  • 发布您的 csv 内容。只需 3 到 4 行就足够了。

标签: csv hive


【解决方案1】:

在 hive shell 中执行此操作:

DROP TABLE IF EXISTS mytable;

CREATE TABLE mytable (id_number STRING,country STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

LOAD DATA LOCAL INPATH /mytable.csv OVERWRITE INTO TABLE mytable;

只需在您的创建命令中将, 替换为\t。如果可能,请发布您的 csv 内容。

如果它仍然不起作用,请尝试从加载数据命令中删除 overwrite,如下所示:

LOAD DATA LOCAL INPATH /mytable.csv INTO TABLE mytable;

【讨论】:

    【解决方案2】:

    将 .CSV 数据文件加载到 hive 表中

    例如。 创建表薪水(yrsofexp小数(10,2),薪水小数(10,2)) 以“,”结尾的行格式分隔字段,存储为文本文件;

    LOAD DATA LOCAL INPATH '/home/Test/SalaryData.csv'
    OVERWRITE INTO TABLE salary;
    

    它正在完美加载

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      相关资源
      最近更新 更多