Databricks и Apache Iceberg
dbt поддерживает два способа материализации таблиц Iceberg в Unity Catalog:
- Самый простой: конфигурация модели
table_format = 'iceberg'указывает dbt материализовать эту модель как таблицу Iceberg в Unity Catalog - Расширяемый: определите каталог Iceberg в
catalogs.ymlи настройте эту модель с помощьюcatalog_name
dbt поддерживает создание таблиц Iceberg для двух материализаций Databricks:
Поддержка Iceberg в Databricks
Databricks построен на основе Delta Lake и хранит данные в формате таблиц Delta.
Databricks поддерживает два способа создания таблиц Iceberg в своём каталоге данных Unity Catalog:
- Создание управляемых таблиц Iceberg в Unity Catalog. Эта возможность поддерживается в Databricks Runtime 16.4 LTS и более поздних версиях.
- Включение чтения в формате Iceberg для таблиц Delta. Эти таблицы по-прежнему используют формат файлов Delta, но генерируют метаданные как для Delta, так и для Iceberg. Эта возможность поддерживается в Databricks Runtime 14.3 LTS и более поздних версиях.
dbt поддерживает создание как управляемых таблиц Iceberg, так и таблиц Delta с поддержкой Iceberg (ранее — UniForm).
(Версии dbt: v2.0 и новее)Параметр конфигурации use_uniform определяет, какую таблицу создаёт dbt: управляемую таблицу Iceberg или таблицу Delta. Поскольку значение use_uniform по умолчанию — false, при настройке table_format: 'iceberg' создаётся управляемая таблица Iceberg.
Внешние вычислительные движки Iceberg могут читать данные из этих таблиц Iceberg и записывать в них данные через конечную точку Iceberg REST API в Unity Catalog. Однако Databricks предоставляет лишь ограниченную поддержку чтения из внешних каталогов Iceberg (и таблиц Iceberg под внешним управлением) через федерацию каталогов Databricks (настраивается вне dbt).
dbt пока не поддерживает включение Iceberg v3 для управляемых таблиц Iceberg.
(Версии dbt: v2.0 и новее)Выбор между управляемыми таблицами Iceberg и UniForm
Задайте table_format: 'iceberg' для модели, чтобы создать управляемую таблицу Iceberg в Unity Catalog. Файл catalogs.yml и параметр конфигурации catalog_name для этого не нужны.
Два параметра конфигурации модели определяют, какой тип таблицы Iceberg создаёт dbt:
| Параметр | Тип | Обязательный | Описание | По умолчанию |
|---|---|---|---|---|
table_format | String | Да, для создания таблицы Iceberg | Задайте значение iceberg, чтобы материализовать модель как таблицу Iceberg. | default |
use_uniform | Boolean | Нет | При значении false dbt создаёт управляемую таблицу Iceberg в Unity Catalog (create table ... using iceberg). При значении true dbt создаёт таблицу Delta с включённым чтением в формате Iceberg (create table ... using delta tblproperties (...)). | false |
Эта модель создаёт управляемую таблицу Iceberg:
{{
config(
materialized='table',
table_format='iceberg'
)
}}
select * from {{ ref('raw_orders') }}
Чтобы вместо этого создать таблицу Delta с поддержкой Iceberg, задайте для use_uniform значение true:
{{
config(
materialized='table',
table_format='iceberg',
use_uniform=true
)
}}
select * from {{ ref('raw_orders') }}
Внешние таблицы
dbt также поддерживает создание таблиц Iceberg под внешним управлением с помощью параметра конфигурации модели location_root. DDL Databricks для создания таблиц требует полностью заданного пути location. dbt определяет этот параметр за пользователя, чтобы упростить использование и обеспечить базовую изоляцию данных таблиц:
- Если вы задаёте строку
location_root, dbt генерирует строкуlocationвида:{{ location_root }}/{{ model_name }}. - Если вы задаёте для параметра конфигурации
include_full_name_in_pathзначениеtrue, dbt генерирует строкуlocationвида{{ location_root }}/{{ database_name}}/{{ schema_name }}/{{ model_name }}.
В dbt v2 вы можете задать location_root в определении каталога в catalogs.yml, в разделе config.databricks (в новой спецификации каталогов) или adapter_properties (в старой спецификации каталогов).
Каталоги
Настройте каталоги, чтобы:
- Определить несколько конфигураций для таблиц Iceberg под управлением Databricks в одном каталоге
- Обеспечить поддержку межплатформенного Mesh
Примечания:
-
(Версии dbt: v2.0 и новее) В каждом каталоге Databricks настраивается параметр
table_format. Дляtype: unityтребуетсяiceberg, а дляtype: hive_metastore—default. - В Databricks параметр
catalog_nameимеет приоритет над параметромcatalogпри определении пространства имён верхнего уровня для модели.
Настройка интеграции каталога для таблиц Iceberg
- Создайте файл
catalogs.ymlв корневой директории вашего проекта dbt. Пример использования Unity Catalog в качестве каталога:
- (Версии dbt: v2.0 и новее) Новая спецификация
- Старая спецификация
catalogs:
- name: unity_catalog
type: unity
table_format: iceberg
config:
databricks:
# optional
location_root: s3://cloud-storage-uri
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
adapter_properties:
location_root: s3://cloud-storage-uri
- Добавьте параметр конфигурации
catalog_nameв блок конфигурации (внутри .sql-файла модели), в YAML-файл свойств (в папке моделей) или в 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.