我无法将 csv 加载到临时表 HIVE
Posted
技术标签:
【中文标题】我无法将 csv 加载到临时表 HIVE【英文标题】:I can't load csv to temporary table HIVE 【发布时间】:2020-04-28 22:31:05 【问题描述】:我写了以下查询:
CREATE TEMPORARY EXTERNAL TABLE IF NOT EXISTS `temp_data`(
`price` double,
`genre` string,
`all_genres` string,
`languages` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
'/user/abc/data'
TBLPROPERTIES (
'transient_lastDdlTime'='1588006839');
最后两列是数组列表,格式如下:['val1', 'val2', 'val3'] 启动后没有错误。
运行这部分代码后,一切正常,但是当我添加'SELECT * FROM temp_data'
我收到一个错误:Failed to fetch next batch for the Resultset
org.apache.hive.service.cli.HiveSQLException: java.io.IOException: java.lang.RuntimeException: ORC split generation failed with exception: org.apache.orc.FileFormatException: Malformed ORC file /user/abc/data/data.csv. Invalid postscript.
有谁知道如何修理它?
编辑: 在此之后:
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/user/abc/data'
TBLPROPERTIES ('skip.header.line.count'='1');
我有一个问题,因为数组有逗号,所以 Select 错误地返回了数据
编辑 2 我设法通过添加来解决它:
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES ( "separatorChar" = ",", "quoteChar" = "\"")
LOCATION '/user/ABC/data'
TBLPROPERTIES ('skip.header.line.count'='1', 'colelction.delim'=',');
【问题讨论】:
【参考方案1】:AFAIK 因为数组列不同,你需要创建数组数据类型
arrays: ARRAY<data_type>
喜欢这个
CREATE TEMPORARY EXTERNAL TABLE IF NOT EXISTS `temp_data`(
`price` double,
`genre` string,
`all_genres` array<string>,
`languages` array<string>) ... remaining as it is.
否则我认为它无法确定这些数组列。
Working With Hive Complex Data Types
【讨论】:
【参考方案2】:除了@RamGhadiyaram 所说的,我想补充一下:
如果文件是 CSV,则将表定义为 TEXTFILE,而不是 ORC。
而不是这个:
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
写
STORED AS TEXTFILE
临时表的想法是它存在于当前会话期间,数据存储在用户临时目录中,并在会话结束时被删除。自然是托管表。即使 hive 允许这样做,最好删除 EXTERNAL,或者如果您希望数据持久化,请使用普通表,而不是临时表。
【讨论】:
以上是关于我无法将 csv 加载到临时表 HIVE的主要内容,如果未能解决你的问题,请参考以下文章