Udostępnij przez


Uzyskiwanie dostępu do tabel usługi Azure Databricks z klientów platformy Apache Iceberg

Ważne

Interfejs API katalogu REST Unity Catalog Apache Iceberg jest w wersji Public Preview w wersjach Databricks Runtime 16.4 LTS i nowszych. Ten endpoint jest zalecany do odczytywania i zapisywania w tabelach przez klientów Iceberg.

Unity Catalog ma również punkt końcowy API REST tylko do odczytu Iceberg. Jest to starszy punkt końcowy. Zobacz Odczytywanie tabel usługi Databricks z klientów platformy Apache Iceberg (starsza wersja).

Katalog REST usługi Apache Iceberg umożliwia obsługiwanym klientom, takim jak Apache Spark, Apache Flink i Trino, odczytywanie i zapisywanie w tabelach Iceberg zarejestrowanych w Unity Catalog w usłudze Azure Databricks.

Aby uzyskać pełną listę obsługiwanych integracji, zobacz Integracje Unity Catalog.

Użyj punktu końcowego katalogu Iceberg Unity Catalog

Unity Catalog zapewnia implementację specyfikacji API katalogu REST Iceberg.

Skonfiguruj dostęp przy użyciu punktu końcowego /api/2.1/unity-catalog/iceberg-rest. Aby uzyskać szczegółowe informacje na temat korzystania z tego interfejsu API REST, zobacz specyfikację interfejsu API REST Iceberg.

Notatka

Azure Databricks wprowadziło dystrybucję poświadczeń dla niektórych klientów Iceberg. Databricks zaleca używanie zarządzania poświadczeniami w celu kontrolowania dostępu do lokalizacji przechowywania w chmurze w obsługiwanych systemach. Zobacz udostępnianie poświadczeń katalogu Unity, aby uzyskać dostęp do systemu zewnętrznego.

Jeśli obsługa poświadczeń jest nieobsługiwana dla klienta, musisz skonfigurować dostęp z klienta do lokalizacji przechowywania zawierającej pliki i metadane dla tabeli Delta lub Iceberg. Aby uzyskać szczegółowe informacje o konfiguracji, zapoznaj się z dokumentacją klienta platformy Iceberg.

Wymagania

Usługa Azure Databricks obsługuje dostęp do katalogu Iceberg przez REST do tabel w ramach Unity Catalog. Aby korzystać z tych punktów końcowych, musisz mieć włączony Unity Catalog w swoim obszarze roboczym. Następujące typy tabel są dostępne za pośrednictwem Katalogu REST Iceberg:

Temat Przeczytaj Napisz
Zarządzana góra lodowa Tak Tak
Zagraniczna góra lodowa Tak Nie.
Zarządzana Delta (z włączonym odczytem Iceberg) Tak Nie.
Delta zewnętrzna (z włączoną funkcją odczytu Iceberg) Tak Nie.

Zewnętrzne tabele Iceberg nie są automatycznie odświeżane podczas odczytywania za pośrednictwem API katalogu REST Iceberg. Aby odświeżyć, należy uruchomić polecenie REFRESH FOREIGN TABLE , aby odczytać najnowszą migawkę. Dystrybucja poświadczeń na zagranicznych stołach Iceberg nie jest obsługiwana.

Notatka

Tabele Delta należy skonfigurować tak, aby były dostępne za pośrednictwem interfejsu API wykazu REST Iceberg. Zobacz Odczytywanie tabel Delta za pomocą klientów Iceberg.

Należy wykonać następujące kroki konfiguracji, aby skonfigurować dostęp do odczytu lub zapisu w tabelach usługi Azure Databricks z klientów Góry lodowej przy użyciu katalogu REST Iceberg:

Używanie tabel Iceberg z Apache Spark

Poniżej przedstawiono przykład konfigurowania platformy Apache Spark w celu uzyskiwania dostępu do tabel usługi Azure Databricks za pośrednictwem interfejsu API wykazu REST platformy Iceberg przy użyciu uwierzytelniania OAuth:

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

# Configuration for accessing 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>.rest.auth.type": "oauth2",
"spark.sql.catalog.<spark-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg-rest",
"spark.sql.catalog.<spark-catalog-name>.oauth2-server-uri": "<workspace-url>/oidc/v1/token",
"spark.sql.catalog.<spark-catalog-name>.credential":"<oauth_client_id>:<oauth_client_secret>",
"spark.sql.catalog.<spark-catalog-name>.warehouse":"<uc-catalog-name>"
"spark.sql.catalog.<spark-catalog-name>.scope":"all-apis"

Zastąp następujące zmienne:

  • <uc-catalog-name>: Nazwa katalogu w Unity Catalog, który zawiera twoje tabele.
  • <spark-catalog-name>: nazwa, którą chcesz przypisać do katalogu w sesji platformy Spark.
  • <workspace-url>: adres URL obszaru roboczego usługi Azure Databricks.
  • <oauth_client_id>: identyfikator klienta OAuth dla głównego uwierzytelnianego podmiotu.
  • <oauth_client_secret>: hasło tajne klienta OAuth dla podmiotu uwierzytelniającego.

Te konfiguracje umożliwiają wykonywanie zapytań w tabelach w katalogu Unity przy użyciu Apache Spark. Aby uzyskać dostęp do tabel w wielu katalogach, należy skonfigurować każdy wykaz oddzielnie.

Podczas wykonywania zapytań w tabelach w Katalogu Unity przy użyciu konfiguracji Spark warto pamiętać o następujących kwestiach:

  • Potrzebujesz "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" tylko w przypadku, gdy uruchamiasz procedury składowane specyficzne dla Iceberg .

  • Usługa Azure Databricks używa magazynu obiektów w chmurze dla wszystkich tabel. Musisz dodać JAR iceberg-spark-runtime jako pakiety programu Spark.

    • AWS: org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>
    • Błękit: org.apache.iceberg:iceberg-azure-bundle:<iceberg-version>
    • GCP: org.apache.iceberg:iceberg-gcp-bundle:<iceberg-version>

    Aby uzyskać szczegółowe informacje, zobacz dokumentację dotyczącą integracji Iceberg AWS z Apache Spark.

    Notatka

    Te konfiguracje nie są wymagane podczas uzyskiwania dostępu do tabel Iceberg z usługi Azure Databricks. Ładowanie zewnętrznych plików JAR Iceberg do klastrów Azure Databricks nie jest obsługiwane.

Uzyskiwanie dostępu do tabel usługi Azure Databricks za pomocą rozwiązania Snowflake

Poniżej przedstawiono przykład ustawień konfiguracji usługi Snowflake w celu uzyskania dostępu do tabel usługi Azure Databricks przez nawiązanie połączenia z wykazem REST platformy Iceberg w wykazie aparatu Unity:

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-rest',
    WAREHOUSE = '<uc-catalog-name>'
  )
  REST_AUTHENTICATION = (
    TYPE = BEARER
    BEARER_TOKEN = '<token>'
  )
  ENABLED = TRUE;

Zastąp następujące zmienne:

  • <catalog-integration-name>: nazwa, która ma zostać przypisana do katalogu zarejestrowanego w usłudze Snowflake.
  • <uc-schema-name>: nazwa schematu w Unity Catalog, do którego chcesz uzyskać dostęp.
  • <uc-catalog-name>: nazwa katalogu w Unity Catalog, do którego musisz uzyskać dostęp.
  • <workspace-url>: adres URL obszaru roboczego usługi Azure Databricks.
  • <token>: token PAT dla głównego podmiotu konfigurującego integrację.

Używanie tabel usługi Azure Databricks z rozwiązaniem PyIceberg

Poniżej przedstawiono przykład ustawień konfiguracji umożliwiających narzędziu PyIceberg uzyskanie dostępu do tabel platformy Azure Databricks przez nawiązanie połączenia z Katalogiem REST Iceberg w katalogu Unity:

catalog:
  unity_catalog:
    uri: https://<workspace-url>/api/2.1/unity-catalog/iceberg-rest
    warehouse: <uc-catalog-name>
    token: <token>

Zastąp następujące zmienne:

  • <workspace-url>: adres URL obszaru roboczego usługi Azure Databricks.
  • <uc-catalog-name>: nazwa katalogu w Unity Catalog, do którego musisz uzyskać dostęp.
  • <token>: token PAT dla głównego podmiotu konfigurującego integrację.

Zapoznaj się z dokumentacją konfiguracji katalogu REST PyIceberg.

Przykład użycia curl w API REST

Możesz również użyć wywołania interfejsu API REST, takiego jak w tym przykładzie curl, aby załadować tabelę:

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

Następnie powinna zostać wyświetlona odpowiedź podobna do następującej:

{
  "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>"
  }
}

Notatka

Pole expires-at-ms w odpowiedzi wskazuje czas wygaśnięcia poświadczeń i ma domyślny czas wygaśnięcia jednej godziny. Aby uzyskać lepszą wydajność, klient powinien buforować poświadczenia aż do momentu wygaśnięcia, zanim zażąda nowych.