Abilitare l'accesso ai dati esterni alle tabelle di streaming e alle viste materializzate

Importante

Questa funzionalità è in Anteprima Pubblica.

Se è stato abilitato l'accesso ai dati esterni a Unity Catalog, è anche possibile aggiungere l'accesso ai dati esterni ai set di dati della pipeline. In questo modo, i client Delta ed Iceberg esterni possono accedere ai set di dati tramite le API REST del catalogo Unity e iceberg, senza richiedere una copia completa dei dati.

L'accesso ai dati esterni per i set di dati della pipeline funziona per le pipeline dichiarative di Lakeflow Spark.

Capabilities

L'uso dell'accesso ai dati esterni per i set di dati della pipeline espone gli stessi dati disponibili in Azure Databricks, senza creare un duplicato dei dati. In questo modo vengono fornite le caratteristiche seguenti per le prestazioni e le funzionalità:

  • Non è necessaria alcuna copia dei dati: L'accesso esterno è abilitato senza duplicare il set di dati completo.
  • Accesso esterno tramite API: Leggere viste materializzate e tabelle di streaming usando le API Delta Lake o Iceberg.
  • Coerenza di lettura dopo scrittura: I lettori esterni possono accedere a dati aggiornati dopo un aggiornamento del set di dati, garantendo l’assenza di dati obsoleti. Gli aggiornamenti sono disponibili immediatamente dopo l'aggiornamento.
  • Singolo oggetto tabella: I set di dati vengono visualizzati esternamente come tabelle gestite con lo stesso nome del set di dati di origine all'interno delle API del catalogo unity.
  • Basso costo: Poiché il set di dati completo non viene copiato, l'overhead per fornire l'accesso esterno è basso.

Requisiti

I requisiti per i set di dati sono:

  • L'accesso esterno deve essere abilitato nello schema: L'area di lavoro deve essere registrata nell'anteprima pubblica dell'accesso ai dati esterni per i set di dati della pipeline e deve essere abilitata per lo schema con i set di dati. Consulta: Abilitare l'accesso ai dati esterni a Unity Catalog.
  • Unity Catalog: Le tabelle di streaming e le viste materializzate devono utilizzare Unity Catalog.
  • Versione di Databricks Runtime: È necessario usare Databricks Runtime 17.3 e versioni successive.

I requisiti per i client sono:

  • Versione dell'API Delta: Il client deve supportare le API Delta Lake 4.0.0 o successive, inclusi i vettori di eliminazione e deve usare le API del catalogo di Unity per l'accesso.
  • Versione dell'API Iceberg: In alternativa, il client può accedere usando le API del catalogo Iceberg che supportano la specifica Iceberg v3.
  • Privilegi di Unity Catalog: Il soggetto che accede ai set di dati esternamente deve disporre del EXTERNAL USE SCHEMA privilege sullo schema e del SELECT privilege sulla tabella.

Note

Se il client non supporta questi requisiti, è anche possibile usare la modalità di compatibilità, che supporta tutti i client Delta e Iceberg, ma richiede la creazione di una copia completa del set di dati.

Come abilitare l'accesso per un set di dati

Esistono tre passaggi per abilitare l'accesso esterno per un set di dati.

  1. Nella definizione del set di dati aggiungere quanto segue TBLPROPERTIES. Questa operazione è necessaria solo per i lettori Iceberg v3. Se si dispone solo di lettori Delta, è possibile ignorare questo passaggio.

    Proprietà Utilizzo
    'delta.columnMapping.mode' = 'name' La mappatura delle colonne è necessaria per Iceberg.
    'delta.universalFormat.enabledFormats' = 'iceberg' Abilita UniForm per Iceberg.
    'delta.enableIcebergCompatV3' = 'true' Usare Iceberg V3 per UniForm.
    'delta.enableChangeDataFeed' = 'false' Il feed di dati delle modifiche non è compatibile con l'accesso esterno, quindi deve essere false.

    Ad esempio, è possibile aggiornare la definizione di una vista materializzata in Pipeline dichiarative di Lakeflow Spark aggiungendo quanto segue TBLPROPERTIES alla query:

    CREATE OR REFRESH MATERIALIZED VIEW view_name
      TBLPROPERTIES(
       ...
       'delta.columnMapping.mode' = 'name',
       'delta.enableIcebergCompatV3' = 'true',
       'delta.universalFormat.enabledFormats' = 'iceberg',
       'delta.enableChangeDataFeed' = 'false')
    ...
    

    Per visualizzare le proprietà del set di dati, è possibile usare l'istruzione DESCRIBE EXTENDED SQL.

  2. Applica le proprietà Iceberg alla pipeline. Questa operazione è necessaria solo per i lettori Iceberg v3. Se si dispone solo di lettori Delta, è possibile ignorare questo passaggio.

    • Pipeline attivate: eseguire la pipeline una sola volta.
    • Pipeline continue: arrestare e riavviare la pipeline.
  3. Nella configurazione della pipeline, impostare pipelines.externalMetadata.enabled su true.

    Interfaccia utente delle impostazioni della pipeline

    1. Aprire la pipeline e fare clic su Impostazioni.
    2. In Configurazione aggiungere una coppia chiave-valore: Chiavepipelines.externalMetadata.enabled, Valoretrue.
    3. Fai clic su Salva.

    JSON di configurazione della pipeline

    configuration Nella sezione del codice JSON della pipeline aggiungere:

    {
      "configuration": {
        "pipelines.externalMetadata.enabled": "true"
      }
    }
    

    Dopo aver salvato la configurazione, eseguire o riavviare la pipeline per applicare le modifiche:

    • Pipeline attivate: eseguire la pipeline una sola volta.
    • Pipeline continue: arrestare e riavviare la pipeline.

Lettura di dati da client esterni

Le sezioni seguenti descrivono come leggere il set di dati da client e ambienti diversi.

Usare l'API REST di Unity con il lettore Delta Spark

Usare Apache Spark™ versione 4.0 o successiva. È possibile scaricare da https://spark.apache.org/downloads.html.

  1. In base al provider di servizi cloud, eseguire il comando seguente per avviare una shell SPARK SQL con Delta 4.0 e Unity Catalog.

    AWS

    bin/spark-sql \
        --packages org.apache.spark:spark-hadoop-cloud_2.13:4.0.0,io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
        --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
        --conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.hadoop.fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \
        --conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
        --conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
        --conf spark.sql.defaultCatalog=<uc-catalog-name>
    

    Azure

    bin/spark-sql \
        --packages org.apache.hadoop:hadoop-azure:3.3.6,io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
        --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
        --conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
        --conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
        --conf spark.sql.defaultCatalog=<uc-catalog-name>
    

    GCP

    bin/spark-sql \
        --packages io.unitycatalog:unitycatalog-spark_2.13:0.3.1  \
        --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
        --conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.hadoop.fs.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem \
        --conf spark.hadoop.fs.AbstractFileSystem.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS \
        --conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
        --conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
        --conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
        --conf spark.sql.defaultCatalog=<uc-catalog-name>
    
  2. Dalla shell SQL è ora possibile accedere al set di dati con Spark SQL. Per esempio:

    spark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
    

Usare il lettore Snowflake Iceberg

In Snowflake, puoi usare Iceberg Reader. Questo richiede il supporto di Iceberg v3 in Snowflake.

  1. Configurare il catalogo REST Iceberg in Apache Spark.

    bin/spark-shell \
      --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.8.0,org.apache.iceberg:iceberg-aws-bundle:1.8.0 \
      --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
      --conf spark.sql.catalog.<uc-catalog-name>=org.apache.iceberg.spark.SparkCatalog \
      --conf spark.sql.catalog.<uc-catalog-name>.type=rest \
      --conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace-url>/api/2.1/unity-catalog/iceberg-rest \
      --conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
      --conf spark.sql.catalog.<uc-catalog-name>.warehouse=<uc-catalog-name>
    
  2. Configurare il catalogo REST Iceberg in Snowflake.

    CREATE OR REPLACE CATALOG INTEGRATION my_uc_int
      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'
        CATALOG_NAME = '<uc-catalog-name>'
        ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
      )
      REST_AUTHENTICATION = (
        TYPE = BEARER
        BEARER_TOKEN = '<PAT>'
      )
      ENABLED = TRUE;
    
    CREATE OR REPLACE ICEBERG TABLE my_table
      CATALOG = 'my_uc_int'
      CATALOG_TABLE_NAME = '<uc-table-name>';
    
  3. Accedere al set di dati da Spark SQL.

    spark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
    

Usare il catalogo REST di Iceberg con lettore Spark Iceberg

Usare Apache Spark™ versione 4.0 o successiva. È possibile scaricare da https://spark.apache.org/downloads.html.

  1. In AWS eseguire il comando seguente per avviare una shell SPARK SQL con Iceberg v3.

    bin/spark-sql \
      --packages org.apache.iceberg:iceberg-spark-runtime-4.0_2.13:1.10.0,org.apache.iceberg:iceberg-aws-bundle:1.10.0 \
      --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
      --conf spark.sql.catalog.<uc-catalog-name>=org.apache.iceberg.spark.SparkCatalog \
      --conf spark.sql.catalog.<uc-catalog-name>.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
      --conf spark.sql.catalog.<uc-catalog-name>.type=rest \
      --conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url>/api/2.1/unity-catalog/iceberg-rest \
      --conf spark.sql.catalog.<uc-catalog-name>.token='<PAT>' \
      --conf spark.sql.catalog.<uc-catalog-name>.warehouse=<uc-catalog-name> \
      --conf spark.sql.iceberg.vectorization.enabled=false
    
  2. Accedere al set di dati da Spark SQL.

    spark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
    

Eseguire la migrazione dalla modalità di compatibilità

Se si condivide un set di dati usando la modalità di compatibilità, è possibile eseguire la migrazione a usando l'accesso ai dati esterni.

  1. Abilitare questa funzionalità seguendo la procedura descritta in Come abilitare l'accesso per un set di dati.
  2. Disabilitare la modalità di compatibilità. Vedi Disabilitare la modalità di compatibilità

Limitations

Di seguito sono riportate le limitazioni note con l'accesso ai dati esterni per le tabelle di streaming e le viste materializzate.

  • Scritture esterne: Le scritture esterne nei set di dati della pipeline non sono supportate.
  • Path-Based Access: I lettori esterni che richiedono l'accesso basato sul percorso (la lettura diretta tramite un percorso di archiviazione anziché l'interfaccia API UC) non sono supportati. Per supportare l'accesso basato sul percorso, è possibile usare la modalità di compatibilità, che supporta l'accesso basato sul percorso, ma richiede una copia completa del set di dati.
  • Funzionalità di sicurezza: Il supporto di sicurezza a livello di riga o mascheramento a livello di colonna nelle letture esterne non è disponibile.
  • Tempo di viaggio o CDF: Il supporto del tempo di viaggio o del feed di dati delle modifiche (CDF) tramite questa funzionalità non è supportato. CDF deve essere disabilitato quando UniForm Iceberg è abilitato.
  • Commit del catalogo (beta):i commit del catalogo non sono compatibili con l'accesso a dati esterni. Per usare l'accesso ai dati esterni in una tabella di streaming, è prima necessario disabilitare i commit del catalogo. I commit del catalogo non sono disponibili per le viste materializzate.
  • Pipeline di inserimento: Le tabelle di streaming create con Lakeflow Connect non supportano l'abilitazione delle proprietà della tabella Iceberg e sono disponibili solo con i lettori Delta.
  • Fabric: La lettura da Microsoft Fabric non è supportata.
  • Lettore Snowflake Iceberg: Per leggere i set di dati della pipeline, è necessario usare il lettore Iceberg v3 in Snowflake.
  • MV e STS autonomi: Questa funzionalità è supportata solo per le viste materializzate e le tabelle di streaming gestite da una pipeline. Le viste materializzate autonome e le tabelle di streaming non sono supportate. Contatta il team responsabile dell'account Databricks se hai bisogno di accesso esterno per viste materializzate indipendenti e tabelle di streaming.