首页 > 解决方案 > 如何在 Spark SQL 中使用分区发现

问题描述

给定 HDFS 中带有 parquet 文件的下一个结构:

    data
    ├── name=Steve
    └── name=Michael

在 SparkSQL 中,使用以下查询:

CREATE TABLE test USING parquet OPTIONS (path 'hdfs://namenode:8020/data')

分区未正确恢复且未检测到数据:

SELECT * FROM test LIMIT 1

+---+----+
|ID |name|
+---+----+
+---+----+

但是,还有另一种方法,即在创建表时指定架构,然后使用恢复分区执行更改表

CREATE TABLE test2(ID Int, name String) USING parquet OPTIONS (path 'hdfs://namenode:8020/data')

ALTER TABLE test2 RECOVER PARTITIONS

SELECT * FROM test2 LIMIT 1

+----+---------+
| ID |    name |
+----+---------+
|  1 |   Steve |
|  2 | Michael |
+----+---------+

Spark SQL 中是否还有其他替代方法可以在创建表且不指定架构时仅使用一个查询来使用分区发现?

标签: apache-sparkapache-spark-sql

解决方案


通过 spark sql 创建表后,例如:

CREATE TABLE test USING parquet OPTIONS (path 'hdfs://namenode:8020/data')

请记住在使用之前修复表:

MSCK REPAIR TABLE test

然后表的分区将被注册到 Metastore。否则该表将不会返回任何结果。如本在线文档所述:https ://docs.databricks.com/user-guide/tables.html


推荐阅读