создайте операторы DDL таблицы изменения, используя имя таблицы разделов, используя spark-shell, используя scala - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть таблица в одной среде, которая актуальна для каждого раздела с каналом данных на aws. таблица разбита на части, а данные хранятся в корзине s3.

У нас есть требование реплицировать эту таблицу в другую среду, и для этого я копирую корзину s3 этой таблицы из среды environment1 в корзину среды 2, используя s3disctp, и до этого момента все было хорошо. Однако добавление новой папки каждого раздела в корзину s3 не делает ее видимой и требует выполнения инструкции alter table перед тем, как я реплицирую данные.

step-1: Выполнить DDL для добавления раздела в таблицу

ALTER TABLE test_table ADD PARTITION (ггггмм = '201704')

step-2: копировать данные для этого раздела из исходного сегмента в целевой контейнер

Нет проблем, пока эта точка и данные не видны.

Теперь я хочу автоматизировать создание этого оператора DDL, и для этого я написал простой искровой код, но столкнулся с некоторыми проблемами семантического кода

Вот результат показа разделов

show partitions test_table;
yyyymm=201704
yyyymm=201705
yyyymm=201706
yyyymm=201707
yyyymm=201708
yyyymm=201709
yyyymm=201710
yyyymm=201711
yyyymm=201712
yyyymm=201801
yyyymm=201802
yyyymm=201803

Вот мой код

import org.apache.spark.sql.hive.HiveContext
val sqlContext = new HiveContext(sc)
val partitionDF = sqlContext.sql("show partitions prod_adp_9_analytics.13mth_rfp_201704_201803")
val data = partitionDF.collect()
val m = data.map( row =>
 // Below line prompt error: illegal start of simple expression
 val split = row.getString(0).split("=")
(split(0),split(1))
)

val b = new Array[String](m.length)
var i = 0
while (i < m.length) {
val k = m(i)._1
val v = m(i)._2
val s1 = s"ALTER TABLE $tableName ADD PARTITION ($k='$v')"
b(i) = s1
i += 1
}

Теперь у меня есть b, который мне также нужно записать в виде текстового файла где-нибудь на s3.

Примечание. Эта программа работает в производственной среде, где она создает файл DDL, а другое задание по расписанию в тестовой среде выберет его и выполнит в тестовой среде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...