Формат файла ‘GZIP_TRANSFER_FORMAT’ не существует или не авторизован

#sql #amazon-s3 #snowflake-cloud-data-platform

#sql #amazon-s3 #snowflake-cloud-data-platform

Вопрос:

Sowfalke — Я пытаюсь выполнить следующий запрос, чтобы извлечь данные из файла, хранящегося в ASW S3.

 select $1 as blah, $2 as blahh, $3 as blahhh, $4 as blahhhh, $5 as val, 'blahhhhh' as version
from  '@blah.csv.gz' (FILE_FORMAT => shared.GZIP_TRANSFER_FORMAT)
;
  

Но я получаю эту ошибку:

 SQL compilation error: File format 'GZIP_TRANSFER_FORMAT' does not exist or not authorized.
  

Еще больше запутался, потому что это задание выполняется всю ночь во время ETL и работает нормально.

Комментарии:

1. Похоже, проблема с контекстом и / или разрешениями. Проверьте, какая база данных и схема по умолчанию используются в процессе ETL, также попробуйте запустить SHOW FILE FORMATS, чтобы увидеть, действительно ли вы можете увидеть этот формат.

2. запустите show file formats для какой — моей роли?

3. Да, это проверка, чтобы узнать, есть ли у вас разрешение на формат файла. Если вы этого не сделаете, вы его не увидите. Предположительно, он действительно существует, поскольку ваш ETL использует его, но этот процесс может выполняться под другим пользователем / ролью.

Ответ №1:

Вы можете использовать только 1 роль одновременно. Поэтому убедитесь, что используемая вами роль имеет доступ к этому ФОРМАТУ ФАЙЛА.

Вы можете либо предоставить доступ к ФОРМАТУ ФАЙЛА используемой вами роли:

 GRANT USAGE on FILE FORMAT GZIP_TRANSFER_FORMAT to ROLE YOUR_ROLE;
  

ИЛИ предоставьте роль, которая, как вы знаете, имеет доступ к этому ФОРМАТУ ФАЙЛА, используемой вами роли:

 GRANT ROLE FILE_FORMAT_ACCESS_ROLE TO ROLE YOUR_ROLE;
  

Комментарии:

1. Почему это не работает, когда я пытаюсь использовать роль ETL?

2. Если вы знаете, что у роли есть к нему доступ, вам также необходимо убедиться, что у вас правильно установлены база ДАННЫХ и контекст СХЕМЫ. Формат файла «общий. GZIP_TRANSFER_FORMAT» существует в базе данных и схеме.. ваш приведенный выше код соответствует схеме, но не базе данных. Если вы используете графический интерфейс Snowflake, то убедитесь, что для вашего сеанса установлена база данных, в которой существует общая схема, содержащая этот формат файла. Или полностью соответствует «MYDB.SHARED.GZIP_TRANSFER_FORMAT»

Ответ №2:

«gzip» часто также используется для обозначения формата файла gzip, и он авторизован. Каждый отдельный файл сжимается в отдельный файл. суффикс «gz» удаляет исходный файл. Без аргументов gzib сжимает стандартный ввод и записывает сжатый файл в стандартный вывод.