数据未从 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 <HDFS_Path> <local_path>
【讨论】:
【参考方案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 文件正确加载到配置单元表的主要内容,如果未能解决你的问题,请参考以下文章
尝试将 hdfs 中的 csv 文件加载到配置单元表时未选择行
如何使用 Spark 数据帧将 csv 数据加载到配置单元中?