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
已经暗示了 SERDE
、INPUTFORMAT
和 OUPPUTFORMAT
.
如果要指定 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'
我正在执行一些自动流程以在 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
已经暗示了 SERDE
、INPUTFORMAT
和 OUPPUTFORMAT
.
如果要指定 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'