Lezen van Databricks tables vanuit Iceberg-clients
Gebruik de Iceberg REST-catalog om Unity Cataloggeregistreerde tables op Azure Databricks te lezen van ondersteunde Iceberg-clients, waaronder Apache Spark, Apache Flink, Trino en Snowflake.
Lezen met behulp van het Unity Catalog Iceberg catalog -eindpunt
Unity Catalog biedt een alleen-lezen implementatie van de Iceberg REST catalog-API voor tables met Iceberg-leesbewerkingen ingeschakeld.
Toegang configureren met behulp van het eindpunt /api/2.1/unity-catalog/iceberg
. Zie de Iceberg REST API-specificatie voor meer informatie over het gebruik van deze REST API.
Notitie
Azure Databricks heeft referentieverkoop geïntroduceerd voor sommige Iceberg-lezersclients. Databricks raadt het gebruik van referentieverkoop aan om de toegang tot cloudopslaglocaties voor ondersteunde systemen te beheren. Zie Unity Catalog credential uitgifte voor toegang tot externe systemen.
Als verificatie-uitgifte niet wordt ondersteund voor uw client, moet u de toegang van de client configureren tot de cloudopslaglocatie die de bestanden en metadata bevat voor de Delta-table met ingeschakelde Iceberg-leesmodus (UniForm). Raadpleeg de documentatie voor uw Iceberg Reader-client voor configuratiegegevens.
Eisen
Azure Databricks biedt ondersteuning voor Iceberg REST catalog toegang tot tables als onderdeel van Unity Catalog. U moet Unity Catalog in uw werkruimte hebben ingeschakeld om deze eindpunten te kunnen gebruiken. De volgende table typen komen in aanmerking voor Iceberg REST catalog leesbewerkingen:
- Unity Catalog beheerde tables met Iceberg-leesbewerkingen (UniForm) ingeschakeld.
- Unity Catalog extern tables opgeslagen met Delta Lake met Iceberg-leesmogelijkheden (UniForm) ingeschakeld.
Zie Delta-tables lezen met Iceberg-clients.
U moet de volgende configuratiestappen uitvoeren om de toegang te configureren voor het lezen van Databricks-tables van Iceberg-clients met behulp van de Iceberg REST-catalog:
- Schakel externe gegevenstoegang in voor uw metastore. Zie Externe gegevenstoegang inschakelen in de metastore.
-
Grant de principal die de integratie configureert, de
EXTERNAL USE SCHEMA
bevoegdheid voor de schema die de tablesbevat. Zie Grant een belangrijkste EXTERNAL USE SCHEMA. - Verifieer met behulp van een persoonlijk databricks-toegangstoken. Zie Toegang tot Azure Databricks-resources verifiëren.
Iceberg-tables lezen met Apache Spark
Hier volgt een voorbeeld van de instellingen voor het configureren van Apache Spark voor het lezen van Azure Databricks tables als 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>"
Vervang de volgende variabelen:
-
<uc-catalog-name>
: de naam van de catalog in Unity Catalog die uw tablesbevat. -
<spark-catalog-name>
: de naam die u wilt toewijzen aan de catalog in uw Spark-sessie. -
<workspace-url>
: URL van de Azure Databricks-werkruimte. -
<token>
: PAT-token voor de principal die de integratie configureert.
Met deze configuraties kunt u een query uitvoeren op Azure Databricks tables als Iceberg in Apache Spark met behulp van de identifier<catalog-name>.<schema-name>.<table-name>
. Als u toegang wilt krijgen tot tables in meerdere catalogs, moet u elke catalog afzonderlijk configureren.
Wanneer u query's uitvoert op tables in Unity Catalog met behulp van Spark-configuraties, moet u rekening houden met het volgende:
Je hebt
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
alleen nodig als je opgeslagen procedures specifiek voor Iceberguitvoert.Azure Databricks maakt gebruik van cloudobjectopslag voor alle tables. U moet de cloudspecifieke JAR van de Iceberg-bundel toevoegen als een Spark-pakket:
- 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>
Zie de documentatie voor de Iceberg AWS-integratie voor Sparkvoor meer informatie.
- AWS:
Databricks-tables lezen met Snowflake
Hier volgt een voorbeeld van de aanbevolen configuratie-instellingen waarmee Snowflake Azure Databricks tables als Iceberg kan lezen:
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;
Vervang de volgende variabelen:
-
<catalog-integration-name>
: de naam die u wilt toewijzen aan de catalog geregistreerd bij Snowflake. -
<uc-schema-name>
: de naam van de schema in de Unity Catalog waartoe u toegang nodig hebt. -
<uc-catalog-name>
: de naam van de catalog in Unity Catalog die u moet openen. -
<workspace-url>
: URL van de Azure Databricks-werkruimte. -
<token>
: PAT-token voor de principal die de integratie configureert.
Voorbeeld van REST API curl
U kunt ook een REST API-aanroep zoals in dit curl
voorbeeld gebruiken om een tablete laden:
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>
Vervolgens ontvangt u een antwoord dat er als volgt uitziet:
{
"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>"
}
}
Notitie
Het expires-at-ms
veld in het antwoord geeft de verlooptijd van de credentials aan en heeft een standaardverlooptijd van één uur. Voor betere prestaties moet de client de credentials in de cache opslaan tot de vervaltijd voordat u een nieuwe aanvraagt.