如何使用Spark SQL创建分区表

时间:2016-10-21 02:20:01

标签: hadoop apache-spark hive apache-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

Spark SQL是否支持以这种方式创建分区表?或者还有其他我想念的东西?

2 个答案:

答案 0 :(得分:0)

可能Spark还没有支持。我对AVRO文件和使用Spark 2.0的分区表有同样的问题,先转换为ORC,然后才能工作。因此,尝试底层ORC文件而不是AVRO。例如,在“当前”中使用ORC文件,并在“存档”中使用AVRO文件。

Bucketing和Partitioning对于Spark(SQL)来说是一个相当新的东西。也许他们将来会支持这些功能。甚至在Hive之前的早期版本(低于2.x)也不支持围绕分组和创建表的所有内容。另一方面,分区是Hive中较老的更进化的东西。

答案 1 :(得分:0)

Spark 2.3现在支持此功能。如果您使用的是EMR,则图像5.13支持spark 2.3