繁体   English   中英

如何使用Spark SQL创建分区表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM