Поделиться через


Чтение таблиц Databricks с использованием клиентов Iceberg

Используйте каталог REST Iceberg для чтения таблиц, зарегистрированных в каталоге Unity, в Azure Databricks из поддерживаемых клиентов Iceberg, включая Apache Spark, Apache Flink, Trino и Snowflake.

чтение с помощью конечной точки каталога Iceberg в системе Unity Catalog

Каталог Unity предоставляет доступную только для чтения реализацию REST API каталога Iceberg для таблиц с включенной поддержкой операций чтения Iceberg.

Настройте доступ с помощью конечной точки /api/2.1/unity-catalog/iceberg. См. спецификацию Iceberg REST API для получения подробной информации об использовании данного REST API.

Заметка

Azure Databricks ввела предоставление учетных данных для некоторых клиентов, использующих Iceberg для чтения данных. Databricks рекомендует использовать выдачу учетных данных для управления доступом к расположениям облачного хранилища для поддерживаемых систем. См. "Выдача учетных данных для доступа к внешней системе" в каталоге Unity.

Если обмен учетными данными не поддерживается для клиента, необходимо настроить доступ от клиента к расположению облачного хранилища, содержащему файлы и метаданные для таблицы Delta с включенным параметром "Айсберг" (UniForm). Дополнительные сведения о конфигурации см. в документации для клиента средства чтения Iceberg.

Требования

Azure Databricks поддерживает доступ к каталогам Iceberg REST для таблиц в Unity Catalog. Для использования этих конечных точек необходимо включить каталог Unity в рабочей области. Следующие типы таблиц доступны для чтения каталога REST Iceberg:

  • Управляемые таблицы в каталоге Unity с включенной поддержкой Iceberg (UniForm).
  • Внешние таблицы каталога Unity, хранящиеся в Delta Lake с включенной поддержкой чтения с помощью Iceberg (UniForm).

См. как считывать таблицы Delta с помощью клиентов Iceberg.

Чтобы настроить доступ для чтения таблиц Databricks из клиентов Iceberg с использованием каталога REST Iceberg, необходимо выполнить следующие шаги.

Чтение таблиц Айсберга с помощью Apache Spark

Ниже приведен пример настроек для конфигурации Apache Spark, чтобы читать таблицы Azure Databricks как таблицы Iceberg.

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",

# Configuration for accessing Uniform tables in Unity Catalog
"spark.sql.catalog.<spark-catalog-name>": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.<spark-catalog-name>.type": "rest",
"spark.sql.catalog.<spark-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.<spark-catalog-name>.token":"<token>",
"spark.sql.catalog.<spark-catalog-name>.warehouse":"<uc-catalog-name>"

Замените следующие переменные:

  • <uc-catalog-name>: имя каталога в каталоге Unity, содержащего таблицы.
  • <spark-catalog-name>: имя, которое необходимо назначить этому каталогу в сеансе Spark.
  • <workspace-url>: URL-адрес рабочей области Azure Databricks.
  • <token>: маркер PAT для субъекта, настраивающего интеграцию.

С помощью этих конфигураций можно запрашивать таблицы Azure Databricks как Iceberg в Apache Spark, используя идентификатор <catalog-name>.<schema-name>.<table-name>. Чтобы получить доступ к таблицам в нескольких каталогах, необходимо настроить каждый каталог отдельно.

При запросе таблиц в каталоге Unity с помощью конфигураций Spark помните следующее:

  • Вам потребуется "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" только в том случае, если вы запускаете хранимые процедуры, специфичные для Айсберга,.

  • Azure Databricks использует облачное хранилище объектов для всех таблиц. Необходимо добавить JAR-файл пакета Iceberg для конкретного облака в виде пакета Spark:

    • AWS: org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>
    • Azure: org.apache.iceberg:iceberg-azure-bundle:<iceberg-version>
    • GCP: org.apache.iceberg:iceberg-gcp-bundle:<iceberg-version>

    Для получения дополнительной информации см. документацию по интеграции Iceberg AWS для Spark.

Чтение таблиц Databricks с помощью Snowflake

Ниже приведен пример рекомендуемых параметров конфигурации, позволяющих Snowflake читать таблицы Azure Databricks как Iceberg:

CREATE OR REPLACE CATALOG INTEGRATION <catalog-integration-name>
  CATALOG_SOURCE = ICEBERG_REST
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = '<uc-schema-name>'
  REST_CONFIG = (
    CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg',
    WAREHOUSE = '<uc-catalog-name>'
  )
  REST_AUTHENTICATION = (
    TYPE = BEARER
    BEARER_TOKEN = '<token>'
  )
  ENABLED = TRUE;

Замените следующие переменные:

  • <catalog-integration-name>: имя, которое нужно назначить каталогу, зарегистрированным в Snowflake.
  • <uc-schema-name>: имя схемы в каталоге Unity, к который требуется получить доступ.
  • <uc-catalog-name>: имя каталога в каталоге Unity, к который требуется получить доступ.
  • <workspace-url>: URL-адрес рабочей области Azure Databricks.
  • <token>: маркер PAT для субъекта, настраивающего интеграцию.

Пример команды curl для REST API

Для загрузки таблицы можно также использовать вызов REST API, например в этом curl примере:

curl -X GET -H "Authentication: Bearer $OAUTH_TOKEN" -H "Accept: application/json" \
https://<workspace-instance>/api/2.1/unity-catalog/iceberg/v1/catalogs/<uc_catalog_name>/namespaces/<uc_schema_name>/tables/<uc_table_name>

Затем вы должны получить ответ следующим образом:

{
  "metadata-location": "abfss://my-container@my-storage-account.dfs.core.windows.net/path/to/iceberg/table/metadata/file",
  "metadata": <iceberg-table-metadata-json>,
  "config": {
    "expires-at-ms": "<epoch-ts-in-millis>",
    "adls.sas-token.<storage-account-name>.dfs.core.windows.net": "<temporary-sas-token>"
  }
}

Заметка

Поле expires-at-ms в ответе указывает время истечения срока действия учетных данных и имеет время истечения срока действия по умолчанию в течение одного часа. Для повышения производительности клиент кэширует учетные данные до истечения срока действия перед запросом нового.