【问题标题】:How to create a partitioned table using Spark SQL如何使用 Spark SQL 创建分区表
【发布时间】:2016-10-21 02:20:00
【问题描述】:

我知道我们可以通过

创建一个自动分区发现表
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 是否支持以这种方式创建分区表?还是我还缺少其他东西?

【问题讨论】:

    标签: hadoop apache-spark hive apache-spark-sql


    【解决方案1】:

    Spark 可能还不支持此功能。我在使用 Spark 2.0 的 AVRO 文件和分桶表时遇到了同样的问题,首先转换为 ORC,然后它才起作用。所以尝试底层的 ORC 文件而不是 AVRO。例如,在“当前”中使用 ORC 文件并在“存档”中使用 AVRO 文件。

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

    【讨论】:

      【解决方案2】:

      Spark 2.3 现在支持此功能。如果你使用的是 EMR,那么镜像 5.13 支持 spark 2.3

      【讨论】:

        猜你喜欢
        • 2022-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        • 2019-01-29
        • 2023-04-10
        • 1970-01-01
        相关资源
        最近更新 更多