我正在做一些自动过程来在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表?
1条答案
按热度按时间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)
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'