如何在 Qubole Metastore 中为我的 Hive 表设置分区位置?我知道这是 MySQL DB,但是如何访问它并使用 Spark 传递带有修复程序的 SQL 脚本?
UPD:问题是 ALTER TABLE table_name [PARTITION (partition_spec)] SET LOCATION 对于 > 1000 个分区工作缓慢。你知道如何直接为 Qubole 更新 Metastore 吗?我想将位置批量传递给 Metastore 以提高性能。
如何在 Qubole Metastore 中为我的 Hive 表设置分区位置?我知道这是 MySQL DB,但是如何访问它并使用 Spark 传递带有修复程序的 SQL 脚本?
UPD:问题是 ALTER TABLE table_name [PARTITION (partition_spec)] SET LOCATION 对于 > 1000 个分区工作缓慢。你知道如何直接为 Qubole 更新 Metastore 吗?我想将位置批量传递给 Metastore 以提高性能。
如果尚未设置,请在 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 文档