несоответствующий ввод «ПЕРЕЗАПИСАТЬ». Ожидая: «В»

#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. @ШИВАМДЖИНДАЛ Прав. Это не повлияет ни на какие глобальные настройки