数据未从 csv 文件正确加载到配置单元表

Posted

技术标签:

【中文标题】数据未从 csv 文件正确加载到配置单元表【英文标题】:Data not loaded properly from csv file to hive table 【发布时间】:2019-04-03 11:19:31 【问题描述】:

您好,我是 *** 的新手。 我想将 csv 文件加载到配置单元表中。 我使用以下方法创建了配置单元表:

 create table database1.table1(......) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

我还使用以下方法将数据加载到表中:

LOAD DATA INPATH .... OVERWRITE INTO TABLE database1.table1;

但是当我运行这个时:

select distinct col1 from table1;

我正在从其他列获取值以及来自 col1 的值。

据我说,hive 表中的数据未正确加载(即按列加载)。

请帮帮我。

【问题讨论】:

能否分享您的示例 csv 数据?您是从本地还是 hdfs 加载数据? @KZapagol 这是 csv:drive.google.com/open?id=15U4n-g5xjG2uCMs3lHUtvvFdDHr_ffhJ @KZapagol 我正在从 HDFS 加载它。虽然我也可以从 Linux FS(local) 做到这一点,但还没有尝试过。 【参考方案1】:

您可以通过在 HDFS 中对属于此表的文件执行 cat 来检查这一点,并查看该列的值是否缺少任何记录。

hdfs dfs -cat <hdfs_path/file>

如果您不知道此 HDFS 路径,您可以通过在 Hive 中运行以下查询来获取它。

SHOW CREATE TABLE database1.table1;

在上述查询结果中查找 LOCATION 字样,即可得到 HDFS 路径。

提示:您可以将文件下载到本地,然后将数据加载到以逗号作为分隔符的 Excel 工作表中,然后查看是否看到任何行的缺失值。

从 HDFS 获取文件到本地:hdfs dfs -get &lt;HDFS_Path&gt; &lt;local_path&gt;

【讨论】:

【参考方案2】:

您是对的,数据未正确加载(即按列)在 hive 表中。您正在从其他列获取值以及来自 col1 的值,这意味着整个行值都存储/加载到第 1 列中。

没有给出用于创建表的完整语句。所以我使用下面的 DDL 语句来创建表。

create table table1 (
date_received string,
Product varchar(100),
Sub_product string,
Issue string,
Sub_issue string,
Consumer_complaint_narrative string,
Company_public_response string,
Company string,
State string,
ZIP_code string,
Tags string,
Consumer_consent_provided string,
Submitted_via string,
Date_sent_to_company string,
Company_response_to_consumer string,
Timely_response varchar(3),
Consumer_disputed string,
Complaint_ID bigint
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
with SERDEPROPERTIES ( "separatorChar"=",","skip.header.line.count"="1")
stored as textfile;

使用以下语句加载数据

load data inpath '/user/test/Complaints2months.csv' into table table1;

在我的本地验证了这一点,并且正在正确加载数据。希望这能解决您的问题。

注意事项:

    "separatorChar"="," - 默认分隔符是 ',' 所以这个属性 在这种情况下不是强制性的。 除了 SERDE 类,您还可以使用 ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 表也以 TEXTFILE 格式存储。这是由于输入文件的格式。 “加载数据”命令不对数据进行任何转换。

【讨论】:

以上是关于数据未从 csv 文件正确加载到配置单元表的主要内容,如果未能解决你的问题,请参考以下文章

如何在将 csv 文件加载到配置单元表时跳过页脚/拖车记录

尝试将 hdfs 中的 csv 文件加载到配置单元表时未选择行

如何使用 Spark 数据帧将 csv 数据加载到配置单元中?

我们如何使用 URL 将数据加载到配置单元中

如何加载“|”分隔文件到配置单元中,而不使用“行格式分隔符”创建配置单元表

如何在没有使用“ROW FORMAT DELIMITER”创建配置单元表的情况下将“|”分隔文件加载到配置单元中