Как проверить схему клея AWS перед обработкой ETL? - PullRequest
1 голос
/ 17 октября 2019

Я хочу проверить схему до обработки ETL с помощью AWS Glue. Я пытаюсь сделать все в Glue, чтобы избежать использования Airflow или других инструментов.

Поток - необработанные данные S3 -> сканирование данных S3 в Glue -> выполнение проверки схемы -> базовый ETL с использованием AWS Glue (базовый выбор * на данный момент) -> вывод в S3 -> выполнение специальных запросовв качестве проверки перед дальнейшей обработкой с использованием установленного EC2 программного обеспечения ETL. Идея состоит в том, что если один шаг не удался, я хочу отправить уведомление (по электронной почте или иным образом) о том, что не удалось и где.

Пример файла данных: первая таблица (OrderDate, region, ...) из эта ссылка

Вариант 1. Скрипт AWL Glue ETL выполняет сопоставление полей внутри скрипта. Если существует недопустимый тип поля (например, int находится в столбце даты), произойдет ли сбой и остановка сценария? Я не видел способа в скрипте проверять схему только перед обработкой.

Пример строки скрипта в PySpark:

applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [("orderdate", "string", "orderdate", "date"), ("region", "string", "region", "string"), ("rep", "string", "rep", "string"), ("item", "string", "item", "string"), ("units", "long", "units", "int"), ("unitcost", "double", "unitcost", "double"), ("total", "double", "total", "double")], transformation_ctx = "applymapping1")

Вариант 2: я читал о классификаторах клея. Я создал тестовый классификатор CSV. Я не уверен, как применить это к моим фактическим просканированным данным, хотя нет никаких вариантов связать это вместе. Если классификатор завершится неудачно, будет ли скрипт ETL все еще выполняться?

Пример классификатора: Пример классификатора

Рабочие процессы требуют триггеров, триггеры требуют сценариев ETL, поэтому я не уверен, какдобавить классификатор. Я предполагаю, что классификатор налагается, когда происходит сканирование, но неясно, как.

1 Ответ

0 голосов
/ 17 октября 2019

Вариант 1:

Нет, это не подведет. Схема станет структурой, например

struct : choice
|   |-- int
|   |-- date 

Вы можете использовать метод dynamicframe.resolveChoice() для разрешения типа данных.

Проверка:

  1. https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-samples-medicaid.html
  2. https://github.com/aws-samples/aws-glue-samples/blob/master/examples/resolve_choice.md

Вариант 2:

В самом Crawler вы можете установить классификатор. При сканировании данных сканер будет использовать классификатор.

В случае сбоя классификатора может произойти сбой сканера ... ничего общего со сценарием ETL.

...