我知道我们可以通过
创建自动分区发现表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是否支持以这种方式创建分区表?或者还有其他我想念的东西?
答案 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