数据未从csv文件正确加载到hive表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据未从csv文件正确加载到hive表相关的知识,希望对你有一定的参考价值。
嗨,我是stackoverflow的新手。我想将一个csv文件加载到一个配置单元表中。我使用以下方法创建了hive表:
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表中正确加载(即列式)。
请帮我。
答案
您可以通过在HDFS中执行属于此表的文件的cat
来检查这一点,并查看是否缺少任何记录的列值。
hdfs dfs -cat <hdfs_path/file>
如果您不知道它,可以通过在Hive中运行以下查询来获取此HDFS路径。
SHOW CREATE TABLE database1.table1;
在上面的查询结果中查找单词LOCATION,您可以获得HDFS路径。
提示:您可以将文件提取到本地并使用逗号作为分隔符在Excel工作表中加载数据,并查看是否看到任何行的任何缺失值。
要将文件从HDFS获取到本地:hdfs dfs -get <HDFS_Path> <local_path>
另一答案
你没错,数据没有在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”=“,” - 默认分隔符char为','因此在这种情况下此属性不是必需的。
- 而不是SERDE类,你也可以使用ROW FORMAT DELIMITED FIELDS TERMINATED BY','
- 表也以TEXT FILE格式存储。这是由于输入文件的格式。 'load data'命令不对数据进行任何转换。
以上是关于数据未从csv文件正确加载到hive表的主要内容,如果未能解决你的问题,请参考以下文章
通过 Spark 将 csv 文件加载到现有的 HIVE 故事中
LOAD DATA INPATH 将相同的基于 CSV 的数据加载到两个不同的外部 Hive 表中