带有 USING 和 PARTITIONED BY 子句的 spark hive 创建表的有效语法是啥?
Posted
技术标签:
【中文标题】带有 USING 和 PARTITIONED BY 子句的 spark hive 创建表的有效语法是啥?【英文标题】:What is valid syntax for spark hive create table with USING and PARTITIONED BY clauses?带有 USING 和 PARTITIONED BY 子句的 spark hive 创建表的有效语法是什么? 【发布时间】:2019-08-28 15:09:08 【问题描述】:我正在尝试创建 orc 格式的配置单元表,并将以下命令传递给SparkSesssion.sql(...)
:
CREATE TABLE `db`.`table`(
_id string,
...
)
PARTITIONED BY (load_date string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
USING ORC
得到像mismatched input 'USING' expecting <EOF>
这样的异常
更改上述条款的位置没有帮助。
Official documentation 省略了这部分,或者至少我找不到它。
正确的做法是什么?
【问题讨论】:
没有使用。这是错误的。 @Lamanus 是 Spark 语法吗? 是的,它是蜂巢查询。 sql 有 spark 语法吗?我不这么认为。spark.sql('create table db.table(id, string) stored as orc')
将使用您指定的所有上述格式。
@samkart 很好,我已经尝试过了,它在执行df.write.mode(SaveMode.Append).format("orc").saveAsTable("db.table")
时导致The format of the existing table db.table is HiveFileFormat. It doesn't match the specified format OrcFileFormat
【参考方案1】:
hive DDL 语句中没有 USING 标签:
你需要使用存储为ORC或者只是输入输出格式
CREATE TABLE `db`.`table`(
_id string,
...
)
PARTITIONED BY (load_date string)
STORED AS ORC
【讨论】:
谢谢你,我已经尝试过了,它在执行df.write.mode(SaveMode.Append).format("orc").saveAsTable("db.table")
时导致异常消息The format of the existing table db.table is HiveFileFormat. It doesn't match the specified format OrcFileFormat
如果您正在运行 saveAsTable 那么您之前不应该创建表。如果你已经创建了一个 ORC 表,那么跳过 saveAsTable 和格式部分,直接写。
你的意思是使用insertInto
?正如我所见,它忽略了列的顺序,因此不适用于我的用例
您也可以插入,但您可以根据目标表预先配置列的顺序,然后进行写入。类似的东西: df.select("col1","col2").write.mode()以上是关于带有 USING 和 PARTITIONED BY 子句的 spark hive 创建表的有效语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Hive PARTITIONED BY,列表索引超出范围错误?
hive创建表的时候没有partitioned by能否在创表之后添加分区