Задать расположение раздела в метаборе Qubole с помощью Spark
Как установить расположение раздела для моей таблицы Hive в метаборе Qubole? Я знаю, что это MySQL DB, но как получить к нему доступ и передать SQL-скрипт с исправлением с помощью Spark?
UPD: проблема в том, что ALTER TABLE table_name [PARTITION (partition_spec)] SET LOCATION работает медленно для>1000 разделов. Знаете ли вы, как обновить metastore напрямую для Qubole? Я хочу передать местоположения в пакете в Metastore для повышения производительности.
1 ответ
Установите Hive metastore uris в настройках Spark, если он еще не установлен. Это можно сделать в настройках кластера 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.
Если вы хотите использовать внешние разделы, ознакомьтесь с документацией Hive по ALTER TABLE [PARTITION (spec)]
который принимает LOCATION
дорожка