AWS Glue: импорт JSON из Datalake (S3) со смешанными данными - PullRequest
0 голосов
/ 02 июля 2019

В настоящее время я пытаюсь понять, как создать каталог данных нашего озера данных (= Источник).

Фон:

У нас есть событие-управлял архитектурой и начал хранить все события, созданные нашим приложением, в озере данных (S3 Bucket).Перед сохранением событий мы очищаем их (удаляем конфиденциальную информацию) и добавляем конверт вокруг каждого события с некоторыми общими данными:

  • источник события (какое приложение генерировало событие)
  • событиетип (какое событие было сгенерировано)
  • отметка времени (когда было сгенерировано событие)
  • ...

С помощью Kinesis Streams и Firehose мы пакетируем этисобытия вместе и сохранить их в виде файла JSON в корзине S3.Контейнер имеет следующую структуру: /////

Там мы храним пакетные события с конвертом в виде файлов JSON.Это означает, что один файл JSON содержит несколько событий:

{
  "origin": "hummingbird",
  "type": "AuthenticationFailed",
  "timestamp": "2019-06-30T18:24:13.868Z",
  "correlation_id": "2ff0c077-542d-4307-a58b-d6afe34ba748",
  "data": {
    ...
  }
}
{
  "origin": "hummingbird",
  "type": "PostingCreated",
  "timestamp": "2019-06-30T18:24:13.868Z",
  "correlation_id": "xxxx",
  "data": {
    ...
  }
}

Объект данных содержит конкретные данные о событиях.

Теперь я подумал, что могу использовать AWS Glue для подключения к необработанным данным и использованияETL Jobs для агрегирования данных о событиях.Как я понял, мне нужен каталог данных для моих исходных данных, и вот здесь я борюсь, поскольку JSON всегда содержит разные события, которые объединяются в пакеты.Стандартный "Crawler" не может справиться с этим .. хорошо, но он создает бессмысленные схемы на основе каждого файла JSON.

Чего я хотел достичь:

  • Проанализировать озеро данных, чтобы отфильтровать интересующие меня события
  • Использовать интересующие меня события и выполнить с ним некоторые преобразования / агрегации / вычисления
  • Storeрезультаты в нашу текущую RDS Analytics или где угодно (достаточно для наших целей прямо сейчас)
  • Ежедневно анализировать новые события и вставлять / добавлять / обновлять это в нашу аналитику rds

Мои вопросы, которые у меня есть:

  • Как лучше всего использовать клей с нашим озером данных?
  • Существуют ли возможные способы использования сканеров с пользовательскими классификаторами и каким-либо фильтром вместе с нашим датаком?
  • Нужно ли преобразовывать данные еще до того, чтобы реально использовать клей AWS??

1 Ответ

0 голосов
/ 03 июля 2019

позвольте мне попробовать.

  1. Разобрать озеро данных, чтобы отфильтровать интересующие меня события. в
  2. Используйте события, которые меня интересуют, и сделайте несколько преобразование / агрегация / расчет с ним

-> Вы можете расплющить json для каждого события, а затем экспортировать его в другое ведро S3. Обратитесь к некоторому коду Python здесь https://aws.amazon.com/blogs/big-data/simplify-querying-nested-json-with-the-aws-glue-relationalize-transform/

-> используйте Glue для сканирования вашего нового сегмента и создания новой схемы таблицы, тогда в Афине вы сможете увидеть ее и выполнить свой фильтр / запрос / агрегацию поверх таблицы. Если вы довольны преобразованными данными, вы можете импортировать их в Redshift или RDS.

  1. Сохранение результатов в нашей текущей RDS Analytics или где угодно (достаточно для наши цели прямо сейчас)

-> В приведенном выше каталоге Glue добавьте соединение Redshift / RDS, затем используйте Python Spark (необходимы базовые знания по работе с датафреймами) для загрузки данных в Redshift или RDS. https://www.mssqltips.com/sqlservertip/5952/read-enrich-and-transform-data-with-aws-glue-service/

  1. Ежедневно анализировать новые события и вставлять / добавлять / обновлять что к нашей аналитике RDS

-> Вы можете запланировать свой гусеничный сканер, чтобы обнаружить новые данные из новой корзины. Кроме того, лямбда также является хорошим вариантом для этого. Может использовать создание объекта S3 (новое ведро со сплющенным json), чтобы запустить лямбда, предварительно обработать ETL и затем вставить в Redshift / RDS (используя драйвер JDBC)

...