Databricks и Apache Iceberg
Databricks построен на базе Delta Lake и хранит данные в формате Delta table. Databricks не поддерживает запись в каталоги Iceberg.
При этом Databricks может создавать как управляемые Iceberg-таблицы, так и Delta-таблицы, совместимые с Iceberg, за счёт хранения метаданных таблиц одновременно в Iceberg и Delta, что позволяет внешним клиентам их читать. Что касается чтения, Unity Catalog поддерживает чтение из внешних каталогов Iceberg.
Когда модель dbt сконфигурирована с табличным свойством UniForm, метаданные Delta дублируются в метаданные, совместимые с Iceberg. Это позволяет внешним вычислительным движкам Iceberg читать данные из Unity Catalog.
Пример SQL:
{{ config(
tblproperties={
'delta.enableIcebergCompatV2': 'true'
'delta.universalFormat.enabledFormats': 'iceberg'
}
) }}
Чтобы настроить Databricks для чтения и выполнения запросов к внешним таблицам, необходимо сконфигурировать Lakehouse Federation и определить каталог как внешний (foreign catalog). Эта настройка выполняется вне dbt, и после её завершения каталог будет доступен как ещё одна база данных, к которой можно выполнять запросы.
В настоящее время новые возможности Databricks managed Iceberg tables, находящиеся в статусе Private Preview, не поддерживаются.
Конфигурации интеграции dbt Catalog для Databricks
В таблице ниже перечислены поля конфигурации, необходимые для настройки интеграции каталога для Iceberg-совместимых таблиц в Databricks.
| Loading table... |
Примечание
В Databricks, если у модели в конфигурации указано catalog_name=<>, имя каталога становится частью FQN модели. Например, если каталог называется my_database, модель с catalog_name='my_database' будет материализована как my_database.<schema>.<model>.
Настройте интеграцию каталога для управляемых таблиц Iceberg
- Создайте файл
catalogs.ymlв корне проекта dbt (на одном уровне сdbt_project.yml).
Пример использования Unity Catalog в качестве каталога:
catalogs:
- name: unity_catalog
active_write_integration: unity_catalog_integration
write_integrations:
- name: unity_catalog_integration
table_format: iceberg
catalog_type: unity
file_format: delta
- Добавьте параметр конфигурации
catalog_nameлибо в блокconfig(внутри.sql-файла модели), либо в YAML-файл свойств (папка модели), либо в файл проекта (dbt_project.yml).
Пример iceberg_model.sql:
{{
config(
materialized = 'table',
catalog_name = 'unity_catalog'
)
}}
select * from {{ ref('jaffle_shop_customers') }}
- Запустите модель dbt с помощью команды
dbt run -s iceberg_model.