Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 我无法将csv加载到临时表配置单元_Arrays_Database_Hadoop_Hive_Hiveql - Fatal编程技术网

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
另外,临时表的概念是,它存在于当前会话期间,数据存储在用户临时目录中,并在会话结束时删除。当然,它是管理表。即使配置单元允许删除外部表,也最好删除外部表;如果希望数据持久化,最好使用普通表,而不是临时表