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

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_formatStringДа, для создания таблицы IcebergЗадайте значение iceberg, чтобы материализовать модель как таблицу Iceberg.default
use_uniformBooleanНетПри значении false dbt создаёт управляемую таблицу Iceberg в Unity Catalog (create table ... using iceberg). При значении true dbt создаёт таблицу Delta с включённым чтением в формате Iceberg (create table ... using delta tblproperties (...)).false

Эта модель создаёт управляемую таблицу Iceberg:

models/my_iceberg_model.sql
{{
config(
materialized='table',
table_format='iceberg'
)
}}

select * from {{ ref('raw_orders') }}

Чтобы вместо этого создать таблицу Delta с поддержкой Iceberg, задайте для use_uniform значение true:

models/my_uniform_model.sql
{{
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​

  1. Создайте файл catalogs.yml в корневой директории вашего проекта dbt. Пример использования Unity Catalog в качестве каталога:
catalogs.yml

catalogs:
- name: unity_catalog
type: unity
table_format: iceberg
config:
databricks:
# optional
location_root: s3://cloud-storage-uri
  1. Добавьте параметр конфигурации catalog_name в блок конфигурации (внутри .sql-файла модели), в YAML-файл свойств (в папке моделей) или в YAML-файл проекта (dbt_project.yml).

Пример файла iceberg_model.sql:


{{
config(
materialized = 'table',
catalog_name = 'unity_catalog'

)
}}

select * from {{ ref('jaffle_shop_customers') }}

  1. Выполните модель dbt с помощью команды dbt run -s iceberg_model.

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

0
Loading