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

Cloudera - Hive/Impala Show Create Table - Error with the syntax

我正在执行一些自动流程以在 Cloudera Hive 上创建 tables。

为此,我正在使用 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创建一个table同名

然而,当我运行那个代码时,我return出现以下错误:

Error while compiling statement: FAILED: ParseException line 1:123 missing EOF at 'WITH' near ')'

然后我手动删除了这部分 "WITH SERDEPROPERTIES ('serialization.format'='1')" 它能够成功创建 table。

有没有更好的函数来检索没有 SERDE 信息的 tables ddls?

您的 DDL 中的第一个问题 是分区列不应列在列规范中,只能列在 partitioned by 中。分区是名称为 partition_column=value 的文件夹,此列不存储在 table 文件中,仅存储在分区目录中。如果您希望分区列位于数据文件中,则应以不同的方式命名。

第二个问题是SERDEPROPERTIES是SERDE规范的一部分,如果不指定SERDE,应该是no SERDEPROPERTIES。请参阅本手册:StorageFormat andSerDe

固定 DDL:

 CREATE TABLE factual_player (number_goals INT) 
 PARTITIONED BY (player_name STRING) 
 STORED AS PARQUET
 LOCATION 'hdfs://nameservice1/factual_player';

STORED AS PARQUET 已经暗示了 SERDEINPUTFORMATOUPPUTFORMAT.

如果要指定 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'