Поиск по сайту:

Как конвертировать файлы CSV и журналов в столбчатый формат


Столбчатые форматы, такие как Apache Parquet, обеспечивают большую экономию при сжатии и их гораздо проще сканировать, обрабатывать и анализировать, чем другие форматы, такие как CSV. В этой статье мы покажем вам, как преобразовать данные CSV в Parquet с помощью AWS Glue.

Что такое столбчатый формат?

Файлы CSV, файлы журналов и любые другие файлы с разделителями символов эффективно хранят данные в столбцах. Каждая строка данных имеет определенное количество столбцов, разделенных разделителем, например запятыми или пробелами. Но внутри эти форматы по-прежнему представляют собой строки строк. Нет простого способа отсканировать только один столбец CSV-файла.

Это может быть проблемой для таких сервисов, как AWS Athena, которые могут выполнять SQL-запросы к данным, хранящимся в CSV и других файлах с разделителями. Даже если вы запрашиваете только один столбец, Athena должна сканировать все содержимое файла. Единственная плата Athena — это ГБ обработанных данных, поэтому увеличивать счет за обработку ненужных данных — не лучшая идея.

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

Поскольку Athena должна сканировать только один столбец, чтобы сделать выборку по столбцу, это значительно сокращает затраты, особенно для больших наборов данных. Если у вас есть 10 столбцов в каждом файле и вы сканируете только один, это означает экономию средств на 90 % только за счет перехода на Parquet.

Автоматическое преобразование с помощью AWS Glue

AWS Glue — это инструмент от Amazon, который конвертирует наборы данных между форматами. В основном он используется как часть конвейера для обработки данных, хранящихся в форматах с разделителями и других форматах, и вводит их в базы данных для использования в Athena. Хотя его можно настроить на автоматический режим, вы также можете запустить его вручную, а с небольшой настройкой его можно использовать для преобразования файлов CSV в формат Parquet.

Перейдите в консоль AWS Glue и выберите «Начать». На боковой панели нажмите «Добавить сканер» и создайте новый сканер. Искатель настроен на сканирование данных из корзин S3 и импорт данных в базу данных для использования в преобразовании.

Дайте своему сканеру имя и выберите импорт данных из хранилища данных. Выберите S3 (хотя DynamoDB — это еще один вариант) и введите путь к папке, содержащей ваши файлы. Если у вас есть только один файл, который вы хотите преобразовать, поместите его в отдельную папку.

Далее вас попросят создать роль IAM для вашего поискового робота. Создайте роль, затем выберите ее из списка. Возможно, вам придется нажать кнопку обновления рядом с ним, чтобы он появился.

Выберите базу данных, в которую сканер будет выводить данные; если вы использовали Athena раньше, вы можете использовать свою собственную базу данных, но если это не база данных по умолчанию, она должна работать нормально.

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

Как только он будет создан, запустите сканер, чтобы импортировать данные в выбранную вами базу данных. Если все работает, вы должны увидеть, что ваш файл импортирован с правильной схемой. Типы данных для каждого столбца назначаются автоматически на основе входных данных источника.

Как только ваши данные окажутся в системе AWS, вы сможете их преобразовать. В Glue Console перейдите на вкладку «Задания» и создайте новое задание. Дайте ему имя, добавьте свою роль IAM и выберите «Предлагаемый сценарий, сгенерированный AWS Glue» в качестве задания, которое выполняется.

Выберите свою таблицу на следующем экране, затем выберите «Изменить схему», чтобы указать, что это задание выполняет преобразование.

Затем вам нужно выбрать «Создать таблицы в вашей цели данных», указать Parquet в качестве формата и ввести новый целевой путь. Убедитесь, что это пустое место без каких-либо других файлов.

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

Создайте задание, и вы попадете на страницу, которая позволит вам отредактировать скрипт Python, который он запускает. Сценарий по умолчанию должен работать нормально, поэтому нажмите «Сохранить» и вернитесь на вкладку заданий.

В нашем тестировании сценарий всегда терпел неудачу, если только роли IAM не было предоставлено специальное разрешение на запись в расположение, в которое мы указали выходные данные. Возможно, вам придется вручную изменить разрешения в консоли управления IAM, если вы столкнетесь с той же проблемой.

В противном случае нажмите «Выполнить», и ваш скрипт должен запуститься. Обработка может занять минуту или две, но вы должны увидеть статус на информационной панели. Когда это будет сделано, вы увидите новый файл, созданный в S3.

Это задание можно настроить на выполнение триггеров, установленных сканером, который импортирует данные, поэтому весь процесс можно автоматизировать от начала до конца. Если вы импортируете журналы сервера в S3 таким образом, это может быть простой способ преобразовать их в более удобный формат.