hive/impala show create table-语法错误

jjhzyzn0  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(756)

我正在做一些自动过程来在cloudera hive上创建表。
为此,我使用 show create table 我给出(例如)以下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表?

xzabzqsa

xzabzqsa1#

ddl中的第一个问题是分区列不应该列在列规范中,而应该列在 partitioned by . partition是名为 partition_column=value 并且该列不存储在表文件中,只存储在分区目录中。如果希望分区列位于数据文件中,则应使用不同的名称。
第二个问题是serdeproperty是serde规范的一部分,如果不指定serde,它应该是no serdeproperty。请参阅本手册:storageformat和Serde
固定ddl:

CREATE TABLE factual_player (number_goals INT) 
 PARTITIONED BY (player_name STRING) 
 STORED AS PARQUET
 LOCATION 'hdfs://nameservice1/factual_player';
``` `STORED AS PARQUET` 已经暗示 `SERDE` ,  `INPUTFORMAT` 以及 `OUPPUTFORMAT` .
如果要使用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'

相关问题