Как преобразовать сжатые файлы без заголовков, файлы с разделителями, хранящиеся в S3, в паркет с помощью AWS Glue

В настоящее время у меня есть несколько тысяч сжатых GZIP файлов без заголовков, разделенных конвейером, в S3 общим объемом ~ 10 ТБ с той же схемой. Как лучше всего в AWS Glue (1) добавить файл заголовка, (2) преобразовать в формат паркета, разбитый по неделям, с использованием поля «дата» в файлах, (3) добавить файлы в Glue Каталог данных для доступности для запросов в AWS Athena?


person ikemblem    schedule 17.05.2019    source источник


Ответы (1)


1) Создайте таблицу athena, указывающую ваши данные на S3:

Создать внешнюю таблицу на Афине

2) Создайте динамический фрейм из каталога клея, используя таблицу, созданную вами на предыдущем шаге.

from awsglue.context import GlueContext
glueContext = GlueContext(SparkContext.getOrCreate())
DyF = glueContext.create_dynamic_frame.from_catalog(database="{{database}}", table_name="{{table_name}}")

3) Запишите данные обратно в новое место S3 в любом формате, который вам нравится:

glueContext.write_dynamic_frame.from_options(
   frame = DyF,
   connection_type = "s3",
   connection_options = {"path": "path to new s3 location"},
   format = "parquet")

4) Создайте таблицу athena, указав ваши паркетные данные на S3:

Создать внешнюю таблицу на Афине

Примечание: вместо того, чтобы создавать таблицу athena вручную, вы также можете использовать поисковый робот, чтобы создать ее для вас. Однако это повлечет за собой некоторые расходы.

person Harsh Bafna    schedule 18.05.2019
comment
Это отвечает только на 1 часть моего вопроса - person ikemblem; 19.05.2019
comment
Я обновил ответ на последнюю часть. Я не могу понять, что вы имеете в виду, говоря о добавлении файла заголовка? Не могли бы вы уточнить. Я предполагал, что вы хотите принудительно создать схему поверх данных CSV, что можно сделать на первом этапе. - person Harsh Bafna; 20.05.2019
comment
Файлы данных CSV в настоящее время не имеют заголовка (имен столбцов), но у меня есть отдельный файл с этой информацией, которую я хотел бы добавить. - person ikemblem; 20.05.2019
comment
все, что вам нужно, это стол Афины. Поскольку у вас уже есть схема и она вряд ли изменится, шаг 1 решит вашу проблему. Вам не нужно добавлять этот дополнительный файл, содержащий заголовки, в S3. - person Harsh Bafna; 20.05.2019
comment
Таблица athena хранит метаинформацию в каталоге клея, а задание glue etl извлечет схему из метаданных каталога клея. - person Harsh Bafna; 20.05.2019