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

时间:2019-04-03 11:19:31

标签: hive hiveql

嗨,我是stackoverflow的新手。 我想将一个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 中的值。

据我说,数据没有在蜂巢表中正确加载(即按列)。

请帮助我。

2 个答案:

答案 0 :(得分:0)

您可以通过对属于HDFS中此表的文件进行sum(level = 1)来检查此情况,并查看是否有任何记录缺少该列的值。

cat

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

hdfs dfs -cat <hdfs_path/file>

在上述查询的结果中查找单词LOCATION,即可获取HDFS路径。

提示:您可以将文件保存到本地,然后将数据加载到以逗号为分隔符的excel工作表中,看看是否发现任何行缺少值。

要将文件从HDFS获取到本地:SHOW CREATE TABLE database1.table1;

答案 1 :(得分:0)

是的,数据没有在配置单元表中正确加载(即,按列)。您将从其他列中获取值以及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;

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

注释:

  1. “ separatorChar” =“,”-默认的分隔符为',',因此此属性 在这种情况下不是强制性的。
  2. 除了SERDE类,您还可以使用行格式由','
  3. 终止的字段
  4. 表也以TEXTFILE格式存储。这是由于输入文件的格式。 “加载数据”命令不会对数据进行任何转换。