Стол Улья Разбиения Искры - PullRequest
2 голосов
/ 13 июня 2019

Я пытаюсь разделить таблицу кустов с разными временными метками.У меня есть таблица с временными метками, но когда я выполняю запрос раздела куста, он говорит, что это недопустимый столбец раздела.Вот таблица:

+---+-----------------------+
|id |rc_timestamp           |
+---+-----------------------+
|1  |2017-06-12 17:18:39.824|
|2  |2018-06-12 17:18:39.824|
|3  |2019-06-12 17:18:39.824|
+---+-----------------------+
spark.sql("SET hive.exec.dynamic.partition.mode=nonrestrict")

val tempTable  = spark.sql("SELECT * FROM partition_table")

val df = tempTable.select("rc_timestamp")

val a = x.toString().replaceAll("[\\[\\]]","")

df.collect().foreach(x => {
  spark.sql(s"ALTER TABLE mydb.partition_table ADD IF NOT EXISTS PARTITION 
  (rc_timestamp = '$a')").show()
)}

Вот ошибка, которую я получаю:

org.apache.spark.sql.AnalysisException: rc_timestamp is not a valid partition column 
in table mydb.partition_table.;

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Прежде всего, проверьте ваши синтаксисы, используя этот тестовый набор InsertSuite специально этот

AFAIK вам нужна таблица восстановления или обновления msck

spark.sql(s"refresh table tableNameWhereYouAddedPartitions")

он обновляет существующие разделы.

вы можете перейти с spark.sql('MSCK REPAIR TABLE table_name')

Есть что-то под названием recoverPartitions (Работает только с секционированной таблицей, но не с представлением).Это псевдоним версии msck repair table.Вы можете попробовать это ..

увидеть это ddl.scala похоже на документацию.
пример использования:

spark.catalog.recoverPartitions(tableName) 

Примечание:Предложение RECOVER PARTITIONS автоматически распознает любые файлы данных, присутствующие в этих новых каталогах, так же, как это делает оператор REFRESH.

1 голос
/ 13 июня 2019

Вы не можете изменить схему разбиения таблицы Hive.Это должно было бы переписать полный набор данных, так как разделы сопоставляются с папками в HDFS / S3 / FileSystem.

Если вы хотите изменить схему разделов, единственным вариантом является создание новой таблицы и предоставление информации о разделах вcreate table команда.После этого вы должны вставить данные в новую таблицу из старой таблицы.Вы можете также использовать команду CTAS для того же самого.

ALTER TABLE mydb.partition_table ADD IF NOT EXISTS PARTITION <(rc_timestamp = '$a')> - команда добавляет только новые разделы в метасторское хранилище для существующей многораздельной таблицы Hive.Например, допустим, у вас есть таблица T1, которая разбита на столбец year.Если вы хотите, чтобы metastore знал о «year = 2018», тогда используется эта команда.

...