Задать расположение раздела в метаборе 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 дорожка

Другие вопросы по тегам