Перейти к основному содержимому

О каталогах Iceberg

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

История развития​

В начале 2010-х годов, с появлением Hadoop и озёр данных, Hive Metastore стал стандартом для управления метаданными схем в экосистемах Hadoop. Хотя Hive Metastore эффективно поддерживал первые распределённые движки выполнения запросов с разделением вычислений и хранения, такие как Apache Spark и Trino, он ограничен в типах структурных метаданных, с которыми может работать, и в целом медленнее и дороже современных технических каталогов.

В последние годы появление стандарта Iceberg и его широкое принятие привели к развитию существующих каталогов данных (таких как Unity Catalog) и созданию новых каталогов с открытым исходным кодом (включая Polaris и Lakekeeper).

Важно отметить, что технические каталоги данных и бизнес-каталоги решают разные задачи, хотя и те и другие полезны командам по работе с данными:

  • Технические каталоги данных: Сосредоточены на структурных метаданных, включая такие сведения о данных, как имена таблиц и столбцов, типы данных, расположение хранилищ (что особенно важно для открытых форматов таблиц) и правила управления доступом. Они могут быть встроены в существующую платформу данных и не требовать настройки — как Databricks Unity Catalog или Snowflake Horizon Catalog — либо управляться отдельно и интегрироваться с каждым движком выполнения запросов. Эти движки используют каталог для поиска, чтения и записи данных.

  • Бизнес-каталоги данных: Предназначены для более широкого круга пользователей организации (например, BI-аналитиков и менеджеров продуктов). Они дополняют технические метаданные бизнес-контекстом: метриками, определениями бизнес-понятий, показателями качества данных, сведениями о характере использования и владельцах данных.

Почему каталоги данных важны для dbt​

Для пользователей dbt, работающих с архитектурой lakehouse или архитектурой с несколькими движками, каталоги данных могут решать две задачи:

  • Обнаружение таблиц: Модели dbt материализуются в открытом формате таблиц (часто Iceberg) и регистрируются в каталоге. Понимание структуры каталога критически важно для управления наборами данных и предоставления dbt сведений о том, что уже создано и где находится.

  • Совместимость между движками: Каталоги Iceberg позволяют читать наборы данных, созданные одним вычислительным движком, с помощью другого, без репликации. Это основа кроссплатформенного dbt Mesh.

Без каталога метаданные каждой таблицы Iceberg необходимо регистрировать в движке выполнения запросов отдельно, что требует множества дополнительных запросов create iceberg table и alter ... refresh. При использовании каталога метаданные каждой таблицы регистрируются и обновляются автоматически, а сведения обо всех таблицах доступны через единую конечную точку.

За последний год поставщики платформ данных начали добавлять поддержку «связывания» или «федерации» каталогов — механизма, при котором платформа данных управляет синхронизацией метаданных между внешними каталогами данных и собственным управляемым каталогом данных. Это означает, что таблица Iceberg, записанная одним движком выполнения запросов в один каталог, автоматически становится доступной для чтения другому движку. См.: базы данных Snowflake, связанные с каталогом, федерация каталогов Databricks, федерация каталогов AWS Glue, федерация каталогов BigQuery.

Как dbt работает с каталогами Iceberg​

dbt использует каталоги Iceberg, определённые в catalogs.yml, чтобы:

  • Материализовывать модели: Когда dbt материализует модель в виде таблицы или представления, при наличии объявленной интеграции с каталогом используемый адаптер (например, Spark, Trino или Snowflake) создаёт запись о таблице Iceberg в указанном каталоге — встроенном или внешнем.

  • Разрешать ссылки: Когда dbt читает модель, материализованную в каталоге, он использует «физическое» расположение, определённое активным адаптером (новая спецификация) или интеграцией записи (старая спецификация). Это позволяет ссылаться на модель (таблицу Iceberg) и читать её в одном движке выполнения запросов, даже если изначально она была материализована (записана) другим движком, при условии, что оба движка интегрированы с одним и тем же каталогом.

Ограничения​

За последние несколько лет многие платформы данных, движки выполнения запросов и каталоги данных существенно расширили поддержку стандартов Iceberg — однако это по-прежнему не гарантирует совместимость любого хранилища данных с любым каталогом данных.

Даже если такая поддержка есть, она может быть ограниченной. Например, большинство каталогов Iceberg поддерживают только таблицы (материализации table + incremental в dbt), но не представления. Они могут не поддерживать атомарные операторы create table as, а значит, dbt приходится обновлять таблицы с помощью нескольких операторов без гарантий ACID.

Benoit (специалист по взаимодействию с разработчиками в dbt Labs) создал полезную визуализацию (также доступную в виде увлекательной интерактивной игры), которая показывает текущее состояние совместимости хранилищ данных и каталогов. (Заметили неточность или устаревшую информацию? Создайте issue или PR в репозитории.)

Нашли ошибку?

0
Loading