![](/img/trans.png)
[英]What is valid syntax for spark hive create table with USING and PARTITIONED BY clauses?
[英]How to create a partitioned table using Spark SQL
我知道我们可以通过创建自动分区发现表
CREATE TABLE my_table
USING com.databricks.spark.avro
OPTIONS (path "/path/to/table");
但这需要将数据路径更改为partition_key = partition_value格式
/path/to/table/dt=2016-10-09
/path/to/table/dt=2016-10-10
/path/to/table/dt=2016-10-11
但是数据结构看起来像:
/path/to/table/2016-10-09
/path/to/table/2016-10-10
/path/to/table/2016-10-11
我不想更改现有的数据结构,所以我试图像Hive那样做,我只创建了一个分区表,然后我可以自己添加这些分区,所以我不需要更改现有的数据结构为partition_key = partition_value格式。
但是下面的SQL不起作用:
CREATE TABLE my_table
USING com.databricks.spark.avro
PARTITIONED BY (dt)
OPTIONS (path "/path/to/table");
SQL命令行工具将引发异常: Error in query: cannot recognize input near 'thrive_event_pt' 'USING' 'com' in table name; line 2 pos 0
Error in query: cannot recognize input near 'thrive_event_pt' 'USING' 'com' in table name; line 2 pos 0
Spark SQL是否支持以这种方式创建分区表? 还是还有其他我想念的东西?
Spark可能不支持此功能。 我在使用Spark 2.0的AVRO文件和存储表中遇到了相同的问题,先将其转换为ORC,然后才起作用。 因此,请尝试使用基础的ORC文件而不是AVRO。 例如,在“当前”中使用ORC文件,在“归档”中使用AVRO文件。
桶和分区对于Spark(SQL)来说是相当新的东西。 也许他们将来会支持此功能。 甚至Hive之前的早期版本(低于2.x)也不支持存储和创建表的所有功能。 另一方面,在Hive中进行分区是一个更老的东西。
Spark 2.3现在支持此功能。 如果使用EMR,则图像5.13支持spark 2.3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.