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

Hive 数据未正确从csv文件加载到配置单元表,hive,hiveql,Hive,Hiveql,嗨,我是新来的。 我想将csv文件加载到配置单元表中。 我使用以下方法创建了配置单元表: create table database1.table1(......) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; LOAD DATA INPATH .... OVERWRITE INTO TABLE database1.table1; 我还使用以下方法将数据加载到表中: create table database1.table1(......)

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

 create table database1.table1(......) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
LOAD DATA INPATH .... OVERWRITE INTO TABLE database1.table1;
我还使用以下方法将数据加载到表中:

 create table database1.table1(......) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
LOAD DATA INPATH .... OVERWRITE INTO TABLE database1.table1;
但当我运行这个:

select distinct col1 from table1;
我从其他列中获取值,同时从col1中获取值

据我所知,配置单元表中的数据没有正确加载(即按列加载)


请帮助我。

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

hdfs dfs -cat <hdfs_path/file>
在上面的查询结果中查找单词位置,就可以得到HDFS路径

提示:您可以将文件放到本地,并将数据加载到excel表格中,以逗号作为分隔符,然后查看是否有任何行缺少值


若要将文件从HDFS获取到本地:
HDFS dfs-get

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

hdfs dfs -cat <hdfs_path/file>
在上面的查询结果中查找单词位置,就可以得到HDFS路径

提示:您可以将文件放到本地,并将数据加载到excel表格中,以逗号作为分隔符,然后查看是否有任何行缺少值


要将文件从HDFS获取到本地:
HDFS dfs-get

您说得对,配置单元表中的数据没有正确加载(即按列加载)。您将从其他列中获取值,同时从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类
  • 表也以文本文件格式存储。这是由于输入文件的格式造成的。”“加载数据”命令不会对数据进行任何转换

  • 您是对的,配置单元表中的数据没有正确加载(即按列加载)。您将从其他列中获取值,同时从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类
  • 表也以文本文件格式存储。这是由于输入文件的格式造成的。”“加载数据”命令不会对数据进行任何转换

  • 你能分享你的csv数据样本吗?你是想从本地还是hdfs加载数据?@KZapagol这里是csv:@KZapagol我是从hdfs加载的。虽然我也可以在Linux FS(本地)上执行此操作,但还没有尝试过。您可以共享您的示例csv数据吗?您正在尝试从本地或hdfs加载数据吗?@KZapagol这里是csv:@KZapagol我正在从hdfs加载它。虽然我也可以在LinuxFS(本地)上实现,但还没有尝试过。