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:
- Aktivera extern dataåtkomst för ditt metaarkiv. Se Aktivera åtkomst till externa data i metaarkivet.
- Ge den huvudansvarige som konfigurerar integreringen
EXTERNAL USE SCHEMA
-behörighet på schemat som innehåller tabellerna. Se Bevilja ett externt huvudnamn USE SCHEMA. - Autentisera med en personlig Databricks-åtkomsttoken. Se Auktorisera åtkomst till Azure Databricks-resurser.
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.
- AWS:
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.