Cloudera-Hive/Impala显示创建表-语法错误

Cloudera-Hive/Impala显示创建表-语法错误,hive,cloudera,ddl,create-table,hiveddl,Hive,Cloudera,Ddl,Create Table,Hiveddl,我正在进行一些自动过程来在Cloudera Hive上创建表 为此,我使用了showcreatetable语句,该语句给出(例如)以下ddl: CREATE TABLE clsd_core.factual_player ( player_name STRING, number_goals INT ) PARTITIONED BY ( player_name STRING ) WITH SERDEPROPERTIES ('serialization.format'='1') STORE

我正在进行一些自动过程来在Cloudera Hive上创建表

为此,我使用了
showcreatetable
语句,该语句给出(例如)以下ddl:

CREATE TABLE clsd_core.factual_player (   player_name STRING,   number_goals INT ) PARTITIONED BY (   player_name STRING ) WITH SERDEPROPERTIES ('serialization.format'='1') STORED AS PARQUET LOCATION 'hdfs://nameservice1/factual_player'
我需要的是在不同的位置运行ddl,以创建具有相同名称的表

但是,当我运行该代码时,返回以下错误:

Error while compiling statement: FAILED: ParseException line 1:123 missing EOF at 'WITH' near ')'
我手动删除了这个部分“WITH SERDEPROPERTIES('serialization.format'='1'),它能够成功地创建表


有没有更好的函数来检索没有SERDE信息的表DDL?

在DDL中的第一个问题是分区列不应该列在列规范中,而应该列在分区的
中。分区是名为
Partition\u column=value
的文件夹,该列不存储在表文件中,仅存储在分区目录中。如果希望分区列位于数据文件中,则应使用不同的名称

第二个问题是SerdeProperty是SERDE规范的一部分,如果未指定SERDE,则它应该不是SerdeProperty。请参阅本手册:

固定DDL:

 CREATE TABLE factual_player (number_goals INT) 
 PARTITIONED BY (player_name STRING) 
 STORED AS PARQUET
 LOCATION 'hdfs://nameservice1/factual_player';
存储为拼花
已经意味着
SERDE
INPUTFORMAT
ouputformat

如果要使用SERDE的属性指定SERDE,请使用以下语法:

CREATE TABLE factual_player(number_goals int)
PARTITIONED BY (player_name string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES ('serialization.format'='1') --I believe you really do not need this
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'hdfs://nameservice1/factual_player'

DDL中的第一个问题是,分区列不应列在列规范中,而应列在分区依据
中。分区是名为
Partition\u column=value
的文件夹,该列不存储在表文件中,仅存储在分区目录中。如果希望分区列位于数据文件中,则应使用不同的名称

第二个问题是SerdeProperty是SERDE规范的一部分,如果未指定SERDE,则它应该不是SerdeProperty。请参阅本手册:

固定DDL:

 CREATE TABLE factual_player (number_goals INT) 
 PARTITIONED BY (player_name STRING) 
 STORED AS PARQUET
 LOCATION 'hdfs://nameservice1/factual_player';
存储为拼花
已经意味着
SERDE
INPUTFORMAT
ouputformat

如果要使用SERDE的属性指定SERDE,请使用以下语法:

CREATE TABLE factual_player(number_goals int)
PARTITIONED BY (player_name string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES ('serialization.format'='1') --I believe you really do not need this
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'hdfs://nameservice1/factual_player'

我的问题是:我不需要指定SERDE,但每次我制作一个show create表时,DDL都会附带SERDEproperties@PedroAlves是的。作为拼花地板储存要简单得多。原因显示创建表显示所有详细信息,以备您需要。创建桌子时,只需使用存储的拼花地板。不幸的是,似乎没有显示短DDL的函数。我的问题是:我不需要指定SERDE,但每次我制作一个show create表时,DDL都会附带SERDEproperties@PedroAlves是的。作为拼花地板储存要简单得多。原因显示创建表显示所有详细信息,以备您需要。创建桌子时,只需使用存储的拼花地板。不幸的是,似乎没有显示短DDL的函数