2016-10-21 33 views
2

我知道我們可以通過如何使用的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

是否星火SQL支持以這種方式來創建一個分區表?還是有其他東西我失蹤?

回答

0

也許這不是Spark支持。使用Spark 2.0時,我遇到了與AVRO文件和分區表相同的問題,首先將其轉換爲ORC,然後運行。因此,請嘗試使用底層的ORC文件而不是AVRO。例如,在「當前」中使用ORC文件,並在您的「歸檔」中使用AVRO文件。

Bucketing和Partitioning對於Spark(SQL)來說是相當新穎的東西。也許他們將來會支持這個功能。甚至在Hive之前的早期版本(低於2.x)都不支持關於分段和創建表的所有內容。另一方面,分區是Hive中更老的更進化的事物。