Arrays 我无法将csv加载到临时表配置单元
我编写了以下查询:Arrays 我无法将csv加载到临时表配置单元,arrays,database,hadoop,hive,hiveql,Arrays,Database,Hadoop,Hive,Hiveql,我编写了以下查询: 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.ap
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']
启动后不会发生错误
在运行这部分代码之后,一切都正常,但是当我添加
'从临时数据中选择*
我得到一个错误:
无法获取结果集的下一批
org.apache.hive.service.cli.HiveSQLException:java.io.IOException:java.lang.RuntimeException:ORC拆分生成失败,出现异常:org.apache.ORC.FileFormatException:ORC文件/user/abc/data/data.csv格式错误。无效的附言。
有人知道怎么修吗
编辑:
在此之后:
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'=',');
因为数组列不同,所以需要创建数组数据类型 数组:数组 像这样
CREATE TEMPORARY EXTERNAL TABLE IF NOT EXISTS `temp_data`(
`price` double,
`genre` string,
`all_genres` array<string>,
`languages` array<string>) ... remaining as it is.
另一方面,我认为它无法确定ASE数组列
因为数组列不同,所以需要创建数组数据类型 数组:数组 像这样
CREATE TEMPORARY EXTERNAL TABLE IF NOT EXISTS `temp_data`(
`price` double,
`genre` string,
`all_genres` array<string>,
`languages` array<string>) ... remaining as it is.
另一方面,我认为它无法确定ASE数组列
除了@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允许这样做,或者如果希望数据持久化,请使用普通而非临时表。除了@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
另外,临时表的概念是,它存在于当前会话期间,数据存储在用户临时目录中,并在会话结束时删除。当然,它是管理表。即使配置单元允许删除外部表,也最好删除外部表;如果希望数据持久化,最好使用普通表,而不是临时表