0

如何在 Qubole Metastore 中为我的 Hive 表设置分区位置?我知道这是 MySQL DB,但是如何访问它并使用 Spark 传递带有修复程序的 SQL 脚本?

UPD:问题是 ALTER TABLE table_name [PARTITION (partition_spec)] SET LOCATION 对于 > 1000 个分区工作缓慢。你知道如何直接为 Qubole 更新 Metastore 吗?我想将位置批量传递给 Metastore 以提高性能。

4

1 回答 1

0

如果尚未设置,请在 Spark 配置中设置 Hive Metastore uris。这可以在 Qubole 集群设置中完成。

设置带有一些属性的 SparkSession

val spark: SparkSession =
    SparkSession
        .builder()
        .enableHiveSupport()
        .config("hive.exec.dynamic.partition", "true")
        .config("hive.exec.dynamic.partition.mode", "nonstrict")
        .getOrCreate()

假设 AWS,在 S3 上定义一个外部表,使用spark.sql

CREATE EXTERNAL TABLE foo (...) PARTITIONED BY (...) LOCATION 's3a://bucket/path'

根据该表架构生成您的数据框。

为数据帧注册一个临时表。让我们称之为tempTable

对分区运行插入命令,再次使用spark.sql

INSERT OVERWRITE TABLE foo PARTITION(part1, part2)
SELECT x, y, z, part1, part2 from tempTable

分区必须在选择中排在最后

分区位置将放置在 S3 中的表位置内。

如果您想使用外部分区,请查看ALTER TABLE [PARTITION (spec)]接受LOCATION路径的 Hive 文档

于 2018-04-11T13:30:34.650 回答