Dela via


Läsa Databricks-tabeller från Iceberg-klienter

Använd Iceberg REST-katalogen för att läsa Unity Catalog-registrerade tabeller på Azure Databricks från icebergklienter som stöds, inklusive Apache Spark, Apache Flink, Trino och Snowflake.

Läs med hjälp av katalogslutpunkten för Unity Catalog Iceberg

Unity Catalog tillhandahåller en skrivskyddad implementering av REST-katalog-API:et för Iceberg för tabeller med Iceberg-läsningar aktiverade.

Konfigurera åtkomst med hjälp av slutpunkten /api/2.1/unity-catalog/iceberg. Se Iceberg REST API-specifikationen för mer information om hur du använder detta REST API.

Notera

Azure Databricks har introducerat en mekanism för distribution av autentiseringsuppgifter för vissa Iceberg-läsarklienter. Databricks rekommenderar att du använder autentiseringsuppgifter för att styra åtkomsten till molnlagringsplatser för system som stöds. Se distribution av autentiseringsuppgifter för Unity Catalog för extern systemåtkomst.

Om tillhandahållande av autentiseringsuppgifter inte stöds för klienten måste du konfigurera åtkomst från klienten till den molnlagringsplats som innehåller filerna och metadata för Delta-tabellen med aktiverade Isberg-läsningar (UniForm). Information om konfiguration finns i dokumentationen för din Iceberg-läsarklient.

Krav

Azure Databricks stöder Iceberg REST-katalogåtkomst till tabeller som en del av Unity Catalog. Du måste ha Unity Catalog aktiverat på din arbetsyta för att kunna använda dessa slutpunkter. Följande tabelltyper är berättigade till Iceberg REST-katalogläsningar:

  • Hanterade tabeller i Unity Catalog med aktiverade Iceberg-läsningar (UniForm).
  • Externa tabeller i Unity Catalog som lagras med Delta Lake, med Iceberg-läsningar (UniForm) aktiverade.

Se Läs Delta-tabeller med Iceberg-klienter.

Du måste utföra följande konfigurationssteg för att konfigurera åtkomst till att läsa Databricks-tabeller från Iceberg-klienter med hjälp av Iceberg REST-katalogen:

Läsa Iceberg-tabeller med Apache Spark

Följande är ett exempel på inställningarna för att konfigurera Apache Spark att läsa Azure Databricks-tabeller som 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>"

Ersätt följande variabler:

  • <uc-catalog-name>: Namnet på katalogen i Unity Catalog som innehåller dina tabeller.
  • <spark-catalog-name>: Namnet som du vill tilldela katalogen i Spark-sessionen.
  • <workspace-url>: URL för Azure Databricks-arbetsytan.
  • <token>: PAT token för huvudansvarig vid konfiguration av integreringen.

Med dessa konfigurationer kan du köra frågor mot Azure Databricks-tabeller som Iceberg i Apache Spark med hjälp av identifieraren <catalog-name>.<schema-name>.<table-name>. För att få åtkomst till tabeller i flera kataloger måste du konfigurera varje katalog separat.

Tänk på följande när du kör frågor mot tabeller i Unity Catalog med hjälp av Spark-konfigurationer:

  • Du behöver "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" bara om du kör lagrade procedurer specifika för Iceberg.

  • Azure Databricks använder molnobjektlagring för alla tabeller. Du måste lägga till det molnspecifika Iceberg-paketet JAR som ett Spark-paket:

    • 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>

    Mer information finns i dokumentationen för Iceberg AWS-integreringen för Spark.

Läsa Databricks-tabeller med Snowflake

Följande är ett exempel på de rekommenderade konfigurationsinställningarna så att Snowflake kan läsa Azure Databricks-tabeller som 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;

Ersätt följande variabler:

  • <catalog-integration-name>: Namnet du vill tilldela katalogen som är registrerad på Snowflake.
  • <uc-schema-name>: Namnet på schemat i Unity Catalog som du behöver komma åt.
  • <uc-catalog-name>: Namnet på katalogen i Unity Catalog som du behöver komma åt.
  • <workspace-url>: URL för Azure Databricks-arbetsytan.
  • <token>: PAT token för huvudansvarig vid konfiguration av integreringen.

REST API curl-exempel

Du kan också använda ett REST API-anrop som det i det här curl exemplet för att läsa in en tabell:

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>

Du bör sedan få ett svar som liknar detta:

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

Notera

Fältet expires-at-ms i svaret anger förfallotiden för autentiseringsuppgifterna och har en standardtid på en timme. För bättre prestanda måste klienten cachelagrat autentiseringsuppgifterna fram till förfallotiden innan du begär en ny.