Многие из нас внесли изменения в данные в соответствии с требованиями, которые впоследствии изменились. К тому времени, когда мы это осознаем, откат становится невозможным. Изменение — это не просто константа; это важная часть управления данными, требующая сложного подхода. Введите Git-подобную функциональность каталога данных Dremio Nessie.
Подобно тому, как Git стал основополагающим для разработки программного обеспечения, инженерам по работе с данными нужны аналогичные инструменты для параллельной работы, сравнения версий данных, внесения изменений в производство и отката данных при необходимости. Nessie предоставляет инженерам данных систему контроля версий, подобную Git, для управления версиями данных, ветвями, слияниями и фиксациями. Это может быть очень полезно, когда несколько инженеров данных одновременно работают и преобразовывают данные. Nessie позволяет каждому инженеру работать в отдельных ветках, сохраняя при этом единый источник истины в виде основной ветки. Эта функциональность позволяет командам разработчиков данных совместно поддерживать качество данных в условиях неослабевающих изменений.
В этой статье представлено пошаговое руководство, демонстрирующее, как Nessie, Dremio и MinIO работают вместе для повышения качества данных и улучшения совместной работы в рабочих процессах обработки данных. Независимо от того, являетесь ли вы инженером данных, инженером машинного обучения или просто энтузиастом современного озера данных, этот блог предоставит вам знания и инструменты, необходимые для эффективного улучшения практики управления версиями данных.
Nessie позволяет использовать рабочие нагрузки, подобные Git, которые позволяют тестировать, разрабатывать и запускать в производство. Давайте разберем некоторые ключевые понятия:
Ветки. Как и в Git, ветки в Nessie позволяют одновременно работать над различными задачами по обработке данных. Например, у вас может быть филиал по разработке функций, очистке и преобразованию данных. Каждая ветвь может иметь свой собственный набор изменений данных.
Коммиты: в Nessie коммит представляет собой снимок данных в определенный момент времени. Когда вы вносите изменения в свои данные, вы создаете новый коммит, который записывает эти изменения. Коммиты привязаны к конкретной ветке. Когда вам нужно вернуть данные в стабильное или заведомо хорошее состояние, Nessie позволяет легко выбрать конкретную фиксацию и вернуться к этой версии данных. Это обеспечивает качество и согласованность данных.
Слияния : Nessie позволяет объединять изменения из одной ветки в другую. Это похоже на объединение изменений кода в Git. При объединении ветки изменения данных, внесенные в эту ветку, становятся частью целевой ветки.
Dremio — это механизм распределенной аналитики, работающий как платформа с открытым исходным кодом и предлагающий интуитивно понятный интерфейс самообслуживания для исследования, преобразования и совместной работы данных. Его конструкция основана на
Мы уже рассмотрели, как развернуть Dremio с помощью Kubernetes, а также как
MinIO — это высокопроизводительное объектное хранилище. Известный своим исключительным
Вам понадобится
Эта часть урока основана на Dremio.
Для начала откройте терминал и перейдите в папку, в которую вы клонировали/загрузили репозиторий, и выполните приведенную ниже команду, чтобы запустить Dremio.
docker-compose up dremio
Подождите несколько минут, а затем перейдите по адресу http://localhost:9047
чтобы получить доступ к Dremio. Обновите запрошенные поля и нажмите «Далее».
Затем выполните следующую команду, чтобы запустить MinIO.
docker-compose up minio
Последняя команда docker-compose up
приведенная ниже, запустит Nessie.
docker-compose up nessie
Перейдите по адресу http://localhost:9001
, чтобы войти в MinIO, используя имя пользователя и пароль minioadmin:minioadmin
. Вам будет предложено создать корзину.
Создайте один с именем iceberg-datalake
.
Затем вернитесь в Dremio по http://localhost:9047
, нажмите «Добавить источник» и выберите «Несси».
nessie
http://nessie:19120/api/v2
none
Пока не нажимайте «Сохранить». Вместо этого на панели навигации слева нажмите «Хранилище». MinIO — это объектное хранилище, совместимое с S3-API, которое может использовать те же пути подключения, что и AWS S3.
minioadmin
minioadmin
/iceberg-datalake
Прокрутите вниз, чтобы увидеть следующий набор инструкций.
Add Property
в разделе Connection Properties
, чтобы создать и настроить следующие свойства.fs.s3a.path.style.access
к true
fs.s3a.endpoint
для minio:9000
dremio.s3.compat
в true
Encrypt connection
Затем нажмите «Сохранить». Теперь вы должны увидеть каталоги Nessie в своих источниках данных.
В Dremio перейдите к SQL Runner слева. Убедитесь, что в правом верхнем углу текстового редактора для параметра Context
выбран источник «Несси». В противном случае вам придется ссылаться на контекст, например nessie.SalesData
, а не просто SalesData
чтобы выполнить этот запрос. Скопируйте и вставьте приведенный ниже SQL и запустите.
CREATE TABLE SalesData ( id INT, product_name VARCHAR, sales_amount DECIMAL, transaction_date DATE ) PARTITION BY (transaction_date);
Запустите приведенный ниже запрос, чтобы вставить данные в только что созданную таблицу.
INSERT INTO SalesData (id, product_name, sales_amount, transaction_date) VALUES (1, 'ProductA', 1500.00, '2023-10-15'), (2, 'ProductB', 2000.00, '2023-10-15'), (3, 'ProductA', 1200.00, '2023-10-16'), (4, 'ProductC', 1800.00, '2023-10-16'), (5, 'ProductB', 2200.00, '2023-10-17');
Вернитесь в MinIO и убедитесь, что ваше озеро данных заполнено таблицами Iceberg.
Вернитесь в Дремио по http://localhost:9047
. Начните с запроса к таблице в главной ветке, используя синтаксис AT BRANCH
:
SELECT * FROM nessie.SalesData AT BRANCH main;
Создайте ветвь ETL (извлечение преобразования и загрузки), чтобы вы могли работать с данными и преобразовывать их, не влияя на производительность.
CREATE BRANCH etl_06092023 in nessie
В ветке ETL вставьте в таблицу новые данные:
USE BRANCH etl_06092023 in nessie; INSERT INTO nessie.SalesData (id, product_name, sales_amount, transaction_date) VALUES (6, 'ProductC', 1400.00, '2023-10-18');
Подтвердите немедленную доступность новых данных в ветке ETL:
SELECT * FROM nessie.SalesData AT BRANCH etl_06092023;
Обратите внимание на изоляцию изменений от пользователей в основной ветке:
SELECT * FROM nessie.SalesData AT BRANCH main;
Объедините изменения из ветки ETL обратно в основную ветку:
MERGE BRANCH etl_06092023 INTO main in nessie;
Снова выберите основную ветку, чтобы убедиться, что изменения действительно объединены.
SELECT * FROM nessie.SalesData AT BRANCH main
Эта стратегия ветвления позволяет инженерам данных независимо обрабатывать многочисленные транзакции в нескольких таблицах. Когда они будут готовы, инженеры по обработке данных смогут объединить эти транзакции в одну комплексную многотабличную транзакцию в основной ветке.
В этом сообщении блога подробно рассматриваются возможности Git-подобного контроля версий в инженерии данных, подчеркивая, как
Дайте нам знать, как выглядит ваш дом на озере данных
Также появляется здесь .