Как к CTAS с внешним местоположением как csv.gz - PullRequest
0 голосов
/ 17 января 2020

У меня есть около 90 ГБ данных, которые необходимо загрузить в корзину S3 с указанным c соглашением об именах.

Если я использую запрос CTAS с external_location, это не дает мне возможность присвоить файлу конкретное c имя. Кроме того, с format csv это не вариант.

CREATE TABLE ctas_csv_partitioned 
WITH (
     format = 'TEXTFILE',  
     external_location = 's3://my_athena_results/ctas_csv_partitioned/', 
     partitioned_by = ARRAY['key1']
) 
AS SELECT name1, address1, comment1, key1
FROM tables1

Я хочу загрузить выходной файл, чтобы он выглядел как sample_file.csv.gz

Что является самым простым способом для go о это?

1 Ответ

0 голосов
/ 17 января 2020

К сожалению, нет способа указать ни имя файла, ни расширение для него только с помощью Athena. Более того, файлы, созданные с помощью запроса CTAS, вообще не будут иметь никакого расширения. Тем не менее, вы можете переименовать файлы напрямую с помощью CLI для S3.

aws s3 ls s3://path/to/external/location/ --recursive \
| awk '{cmd="aws s3 mv s3://path/to/external/location/"$4 " s3://path/to/external/location/"$4".csv.gz"; system(cmd)}'

Только что попробовал этот фрагмент, и все работало нормально. Однако иногда также создается пустой файл s3://path/to/external/location/.csv.gz. Примечание Я не включил опцию --recursive для aws s3 mv, поскольку это также привело бы к странным результатам.

Что касается поля format, то вам просто нужно добавить field_delimiter=',' в предложение WITH.

CREATE TABLE ctas_csv_partitioned 
WITH (
     format = 'TEXTFILE',
     field_delimiter=','  
     external_location = 's3://my_athena_results/ctas_csv_partitioned/', 
     partitioned_by = ARRAY['key1']
) 
AS SELECT name1, address1, comment1, key1
FROM tables1

...