将CSV文件加载到Hive表中

3

我有一个csv文件,其内容如下:

"DepartmentID","Name","GroupName","ModifiedDate"
"1","Engineering","Research and Development","2008-04-30 00:00:00"

I have

create external table if not exists AdventureWorks2014.Department
( 
    DepartmentID smallint , 
    Name string ,
   GroupName string, 
    rate_code string, 
    ModifiedDate timestamp 
)   
ROW FORMAT DELIMITED FIELDS TERMINATED BY '","' lines terminated by '\n'
STORED AS TEXTFILE LOCATION 'wasb:///ds/Department' TBLPROPERTIES('skip.header.line.count'='1');`

加载数据后
LOAD DATA INPATH 'wasb:///ds/Department.csv' INTO TABLE AdventureWorks2014.Department;

数据未加载。
select * from AdventureWorks2014.Department;

上述查询没有返回任何结果。

我认为每个字段周围的双引号是问题所在。有没有一种方法可以将这样的文件加载到Hive表中,而不必剥离双引号?


对于 smallint 类型,不应该使用 双引号。应该使用 1 代替 "1" - Venkata Dorisala
那么如果我将表定义中的DepartmentID smallint更改为DepartmentID string,这样就可以解决问题了吗?我会尝试一下。双引号是使用SSIS进行提取过程的结果。 - user5299
3个回答

2
"

FIELDS TERMINATED BY '","' 是不正确的。你的字段是以逗号而不是英文逗号句号结尾。请将DDL更改为 FIELDS TERMINATED BY ','

"

2
尝试使用这个(手机...)
create external table if not exists AdventureWorks2014.Department ( DepartmentID smallint , Name string , GroupName string, rate_code string, ModifiedDate timestamp )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'      
STORED AS TEXTFILE 
LOCATION 'wasb:///ds/Department' 

** 注意 **
该SerDe将所有列都视为字符串类型。即使您使用此SerDe创建了具有非字符串列类型的表,DESCRIBE TABLE输出也会显示字符串列类型。类型信息是从SerDe中检索的。要将表中的列转换为所需的类型,可以创建一个视图并在其中进行CAST操作以获得所需的类型。

https://cwiki.apache.org/confluence/display/Hive/CSV+Serde


0

将数据从本地路径'/home/hadoop/hive/log_2013805_16210.log'加载到表名中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接