#sql #hive #airflow #trino
Вопрос:
У меня есть таблица улья со схемой
CREATE TABLE `temp_table`(
`gpid` string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION
'wasbs://test@test.blob.core.windows.net/warehouse/test_data';
Я использую airflow2 для добавления в него данных. Мне нужно переопределять данные при каждом запуске задания, поэтому я попытался использовать
INSERT OVERWRITE TABLE default.temp_table
select id from sometable
но у меня возникают проблемы
трино.исключения.Ошибка TrinoUserError: ошибка TrinoUserError(тип=ОШИБКА ПОЛЬЗОВАТЕЛЯ, имя=ОШИБКА СИНТАКСИСА, сообщение=»строка 1:8: несоответствующий ввод «ПЕРЕЗАПИСАТЬ». Ожидание: «В»», query_id=20210817_140454_00001_rbuac)
Ответ №1:
По умолчанию запросы ВСТАВКИ не позволяют перезаписывать существующие данные. Вы можете использовать свойство сеанса каталога insert_existing_partitions_behavior
, чтобы разрешить перезапись. Добавьте имя каталога с помощью соединителя Hive, например hdfs, и задайте свойство в сеансе перед выполнением запроса на вставку:
SET SESSION hdfs.insert_existing_partitions_behavior = 'OVERWRITE';
INSERT INTO hdfs.schema.table ...
Полученное поведение эквивалентно использованию INSERT OVERWRITE
в улье.
Операция вставки перезаписи не поддерживается Trino, когда таблица хранится в S3, зашифрованных HDFS или во внешнем расположении. В таком случае удалите перед вставкой.
Комментарии:
1. Я храню данные в хранилище больших двоичных объектов azure. Кроме того, я не указал никакого ключа раздела, будет ли он указан выше и в этом случае?
2. @SHIVAMJINDAL Я не знаю… Просто создайте резервную таблицу и попробуйте
3. Просто подтвердите, что это не повлияет ни на какие глобальные настройки
4. @ШИВАМДЖИНДАЛ Прав. Это не повлияет ни на какие глобальные настройки