如何在Qubole Metastore中为我的Hive表设置分区位置? 我知道这是MySQL数据库,但是如何访问它并使用Spark传递带有修复的SQL脚本?
UPD:问题是ALTER TABLE table_name [PARTITION(partition_spec)] SET LOCATION对> 1000个分区运行缓慢。你知道如何直接为Qubole更新Metastore吗?我想将批处理中的位置传递给Metastore以提高性能。
答案 0 :(得分: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,使用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文档