Leggere le tabelle di Databricks dai client Iceberg
Utilizza il catalogo REST Iceberg per leggere le tabelle registrate nel catalogo Unity su Azure Databricks dai client Iceberg supportati, tra cui Apache Spark, Apache Flink, Trino e Snowflake.
Lettura utilizzando l'endpoint del catalogo Iceberg di Unity
Unity Catalog offre un'implementazione di sola lettura dell'API del catalogo REST Iceberg per le tabelle che hanno le letture Iceberg abilitate.
Configurare l'accesso usando l'endpoint /api/2.1/unity-catalog/iceberg
. Per informazioni dettagliate sull'uso di questa API REST, vedere la specifica dell'API REST Iceberg .
Nota
Azure Databricks ha introdotto la distribuzione di credenziali per alcuni client Iceberg reader. Databricks consiglia di usare il distributore di credenziali per controllare l'accesso alle posizioni di archiviazione cloud per i sistemi supportati. Vedere distribuzione delle credenziali del catalogo Unity per l'accesso al sistema esterno.
Se il distributore di credenziali non è supportato per il client, è necessario configurare l'accesso dal client al percorso di archiviazione cloud contenente i file e i metadati per la tabella Delta con le letture Iceberg (UniForm) abilitate. Per informazioni dettagliate sulla configurazione, vedere la documentazione relativa al client lettore Iceberg.
Requisiti
Azure Databricks supporta l'accesso al catalogo REST di Iceberg per le tabelle nell'ambito di Unity Catalog. Per usare questi endpoint, è necessario abilitare Unity Catalog nell'area di lavoro. I tipi di tabella seguenti sono idonei per le letture del catalogo REST di Iceberg:
- Tabelle gestite di Unity Catalog con letture Iceberg (UniForm) abilitate.
- Le tabelle esterne del catalogo Unity sono archiviate con Delta Lake e hanno le letture abilitate tramite Iceberg (UniForm).
Consulta il punto , "Leggere tabelle Delta con i client Iceberg".
È necessario completare i passaggi di configurazione seguenti per configurare l'accesso per leggere le tabelle di Databricks dai client Iceberg usando il catalogo REST di Iceberg:
- Abilitare l'accesso ai dati esterni per il metastore. Vedere Abilitare l'accesso ai dati esterni nel metastore.
- Concedere all'utente principale il privilegio
EXTERNAL USE SCHEMA
sullo schema contenente le tabelle per configurare l'integrazione. Consulta Concedi un principale ESTERNO USE SCHEMA. - Eseguire l'autenticazione usando un token di accesso personale di Databricks. Vedere Autorizzazione dell'accesso alle risorse di Azure Databricks.
Leggere le tabelle iceberg con Apache Spark
Di seguito è riportato un esempio delle impostazioni per configurare Apache Spark per leggere le tabelle di Azure Databricks come 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>"
Sostituire le variabili seguenti:
-
<uc-catalog-name>
: nome del catalogo in Unity Catalog che contiene le tabelle. -
<spark-catalog-name>
: nome che si vuole assegnare al catalogo nella sessione di Spark. -
<workspace-url>
: URL dell'area di lavoro di Azure Databricks. -
<token>
: token PAT per l'entità che configura l'integrazione.
Con queste configurazioni, è possibile eseguire query sulle tabelle di Azure Databricks come Iceberg in Apache Spark usando l'identificatore <catalog-name>.<schema-name>.<table-name>
. Per accedere alle tabelle in più cataloghi, è necessario configurare ogni catalogo separatamente.
Quando si eseguono query su tabelle in Unity Catalog usando configurazioni Spark, tenere presente quanto segue:
È necessario
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
solo se si eseguono procedure memorizzate specifiche per Iceberg .Azure Databricks usa l'archiviazione di oggetti cloud per tutte le tabelle. È necessario aggiungere come pacchetto Spark il file JAR del bundle Iceberg specifico del cloud.
- 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>
Per informazioni dettagliate, vedere la documentazione relativa all'integrazione di Iceberg AWS per Spark.
- AWS:
Leggere le tabelle di Databricks con Snowflake
Di seguito è riportato un esempio delle impostazioni di configurazione consigliate per consentire a Snowflake di leggere le tabelle di Azure Databricks come 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;
Sostituire le variabili seguenti:
-
<catalog-integration-name>
: nome da assegnare al catalogo registrato a Snowflake. -
<uc-schema-name>
: nome dello schema nel catalogo Unity a cui è necessario accedere. -
<uc-catalog-name>
: nome del catalogo in Unity Catalog a cui è necessario accedere. -
<workspace-url>
: URL dell'area di lavoro di Azure Databricks. -
<token>
: token PAT per l'entità che configura l'integrazione.
Esempio curl dell'API REST
È anche possibile usare una chiamata API REST come quella in questo esempio curl
per caricare una tabella:
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>
Si dovrebbe quindi ricevere una risposta simile alla seguente:
{
"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>"
}
}
Nota
Il campo expires-at-ms
nella risposta indica l'ora di scadenza delle credenziali e ha una scadenza predefinita di un'ora. Per prestazioni migliori, è necessario che il client memorizza nella cache le credenziali fino alla scadenza prima di richiederne una nuova.