Condividi tramite


Usare Unity Catalog con le Pipeline

Databricks consiglia di configurare pipeline dichiarative di Lakeflow Spark con il catalogo Unity. L'uso di Unity Catalog è l'impostazione predefinita per le pipeline appena create.

Le pipeline configurate con Il catalogo Unity pubblicano tutte le viste materializzate definite e le tabelle di streaming nel catalogo e nello schema specificati. Le pipeline di Unity Catalog possono leggere da altre tabelle e volumi di Unity Catalog.

Per gestire le autorizzazioni per le tabelle create da una pipeline di Catalogo Unity, usare GRANT e REVOKE.

Annotazioni

Questo articolo illustra le funzionalità per la modalità di pubblicazione predefinita corrente per le pipeline. Le pipeline create prima del 5 febbraio 2025 potrebbero usare la modalità di pubblicazione legacy e lo schema virtuale LIVE. Visualizza lo schema IN DIRETTA (legacy) .

Requisiti

Per creare tabelle di streaming e viste materializzate in uno schema di destinazione in Unity Catalog, è necessario disporre delle autorizzazioni seguenti per lo schema e il catalogo padre:

  • USE CATALOG privilegi nel catalogo di destinazione.
  • CREATE MATERIALIZED VIEW e USE SCHEMA nei privilegi nello schema di destinazione se la pipeline crea viste materializzate .
  • CREATE TABLE e USE SCHEMA privilegi sullo schema di destinazione se la pipeline crea tabelle di streaming .
  • Se la pipeline crea nuovi schemi, è necessario disporre di privilegi USE CATALOG e CREATE SCHEMA nel catalogo di destinazione.

Requisiti di calcolo per eseguire una pipeline abilitata per il catalogo unity:

  • La risorsa di calcolo deve essere configurata con la modalità di accesso standard. Il calcolo dedicato non è supportato. Vedere Modalità di accesso.

Il calcolo necessario per eseguire query su tabelle create da pipeline che usano il catalogo Unity (incluse le tabelle di streaming e le viste materializzate) include una delle opzioni seguenti:

  • Magazzini SQL
  • Calcolo in modalità di accesso standard in Databricks Runtime 13.3 LTS o versione successiva.
  • Calcolo in modalità di accesso dedicato, se il controllo di accesso con granularità fine è abilitato nell'ambiente di calcolo dedicato, ovvero è in esecuzione in Databricks Runtime 15.4 o versione successiva e il calcolo serverless è abilitato per l'area di lavoro. Per altre informazioni, vedere Controllo di accesso con granularità fine su calcolo dedicato.
  • Calcolo in modalità di accesso dedicato dal 13.3 LTS al 15.3, solo se il proprietario della tabella esegue la query.

Si applicano limitazioni di calcolo aggiuntive. Vedere la sezione seguente.

Limitazioni

Di seguito sono riportate alcune limitazioni quando si usa il catalogo Unity con le pipeline:

  • I file JAR non sono supportati. Sono supportate solo le librerie Python di terze parti. Vedere Gestire le dipendenze python per le pipeline.
  • Le query DML (Data Manipulation Language) che modificano lo schema di una tabella di streaming non sono supportate.
  • Una vista materializzata creata in una pipeline non può essere usata come origine di streaming all'esterno di tale pipeline, ad esempio in un'altra pipeline o in un notebook downstream.
  • I dati per le viste materializzate e le tabelle di streaming vengono archiviati nella posizione di archiviazione dello schema contenitore. Se non si specifica un percorso di archiviazione dello schema, le tabelle vengono archiviate nel percorso di archiviazione del catalogo. Se non vengono specificati percorsi di archiviazione dello schema e del catalogo, le tabelle vengono archiviate nel percorso di archiviazione radice del metastore.
  • La scheda Cronologia del Catalog Explorer non mostra la cronologia per le visualizzazioni materializzate.
  • La proprietà LOCATION non è supportata durante la definizione di una tabella.
  • Le pipeline abilitate per il Catalogo Unity non possono pubblicare nel metastore Hive.

Annotazioni

I file sottostanti che supportano le viste materializzate potrebbero includere dati provenienti da tabelle a monte ( comprendenti possibili informazioni di identificazione personale) che non compaiono nella definizione della vista materializzata. Questi dati vengono aggiunti automaticamente all'archivio sottostante per supportare l'aggiornamento incrementale delle viste materializzate.

Poiché i file sottostanti di una vista materializzata potrebbero rischiare di esporre dati da tabelle upstream non incluse nello schema della vista materializzata, Databricks consiglia di non condividere l'archiviazione sottostante con consumer downstream non attendibili.

Si supponga, ad esempio, che una definizione di vista materializzata includa una clausola COUNT(DISTINCT field_a). Anche se la definizione della vista materializzata include solo la clausola di aggregazione COUNT DISTINCT, i file sottostanti conterranno un elenco dei valori effettivi di field_a.

È possibile usare insieme le pipeline del metastore Hive e del Catalogo Unity?

L'ambiente di lavoro può includere pipeline che utilizzano Unity Catalog e il metastore Hive legacy. Tuttavia, una singola pipeline non può scrivere nel metastore Hive e nel catalogo Unity. Le pipeline esistenti che scrivono nel metastore Hive non possono essere aggiornate per l'uso del Catalogo Unity. Per eseguire la migrazione di una pipeline esistente che scrive nel metastore Hive, è necessario creare una nuova pipeline e re-importare i dati dalle sorgenti dati. Consultare per creare una pipeline del catalogo Unity clonando una pipeline del metastore di Hive.

Le pipeline esistenti che non usano Unity Catalog non sono interessate dalla creazione di nuove pipeline configurate con Unity Catalog. Queste pipeline continuano a persistere i dati nel metastore Hive utilizzando il percorso di archiviazione configurato.

Se non specificato diversamente in questo documento, tutte le origini dati e le funzionalità della pipeline esistenti sono supportate con le pipeline che usano Unity Catalog. Sia le interfacce di Python che SQL sono supportate con le pipeline che usano Unity Catalog.

Tabelle inattive

Quando una pipeline è configurata per rendere persistenti i dati in Unity Catalog, la pipeline gestisce il ciclo di vita e le autorizzazioni della tabella. Le tabelle possono diventare inattive se la definizione viene rimossa da una pipeline e verrà eliminata quando la pipeline viene eliminata.

Quando si rimuove una definizione di tabella dall'origine della pipeline, l'aggiornamento della pipeline successivo contrassegna la vista materializzata corrispondente o la voce della tabella di streaming come inattiva. È comunque possibile eseguire query su tabelle inattive, ma la pipeline non le aggiorna più. Per pulire le viste materializzate o le tabelle di streaming, in modo esplicito DROP la tabella.

  • È possibile ripristinare le tabelle eliminate entro 7 giorni usando il UNDROP comando .
  • Per mantenere il comportamento legacy in cui la vista materializzata o l'elemento della tabella di streaming viene rimosso da Unity Catalog al successivo aggiornamento della pipeline, configurare la pipeline con "pipelines.dropInactiveTables": "true". I dati effettivi vengono conservati per un periodo in modo che possano essere recuperati se eliminati per errore. I dati possono essere recuperati entro 7 giorni aggiungendo nuovamente la vista materializzata o la tabella di streaming nella definizione della pipeline.

L'eliminazione completa della pipeline , anziché la rimozione di una definizione di tabella dall'origine della pipeline, elimina anche tutte le tabelle definite in tale pipeline. L'interfaccia utente richiede di confermare l'eliminazione di una pipeline.

Scrivere tabelle nel Unity Catalog da una pipeline

Per scrivere le tabelle in Unity Catalog, è necessario configurare la pipeline per usarla tramite l'area di lavoro. Quando si crea una pipeline, selezionare Unity Catalog in Opzioni di archiviazione, selezionare un catalogo nel menu a discesa Catalogo e selezionare uno schema esistente o immettere il nome di un nuovo schema nel menu a discesa Schema di destinazione. Per informazioni sui cataloghi di Unity, vedere Che cosa sono i cataloghi in Azure Databricks?. Per informazioni sugli schemi in Unity Catalog, vedere Che cosa sono gli schemi in Azure Databricks?.

Ingerire dati in una pipeline di Unity Catalog

La pipeline configurata per l'uso di Unity Catalog può leggere i dati da:

  • Tabelle gestite ed esterne in Unity Catalog, viste, viste materializzate e tabelle di streaming.
  • Tabelle e viste del metastore di Hive.
  • Caricatore automatico usando la funzione read_files() per leggere da posizioni esterne del catalogo Unity.
  • Apache Kafka e Amazon Kinesis.

Di seguito sono riportati esempi di lettura da tabelle di Unity Catalog e del metastore di Hive.

Inserimento batch da una tabella del catalogo Unity

SQL

CREATE OR REFRESH MATERIALIZED VIEW
  table_name
AS SELECT
  *
FROM
  my_catalog.my_schema.table1;

Pitone

@dp.materialized_view
def table_name():
  return spark.read.table("my_catalog.my_schema.table")

Trasmettere le modifiche da una tabella del catalogo Unity

SQL

CREATE OR REFRESH STREAMING TABLE
  table_name
AS SELECT
  *
FROM
  STREAM(my_catalog.my_schema.table1);

Pitone

@dp.table
def table_name():
  return spark.readStream.table("my_catalog.my_schema.table")

Inserire dati dal metastore Hive

Una pipeline che usa Unity Catalog può leggere i dati dalle tabelle del metastore Hive usando il catalogo hive_metastore:

SQL

CREATE OR REFRESH MATERIALIZED VIEW
  table_name
AS SELECT
  *
FROM
  hive_metastore.some_schema.table;

Pitone

@dp.materialized_view
def table3():
  return spark.read.table("hive_metastore.some_schema.table")

Inserire dati dal caricatore automatico

SQL

CREATE OR REFRESH STREAMING TABLE table_name
AS SELECT *
FROM STREAM read_files(
  "/path/to/uc/external/location",
  format => "json"
)

Pitone

@dp.table(table_properties={"quality": "bronze"})
def table_name():
  return (
     spark.readStream.format("cloudFiles")
     .option("cloudFiles.format", "json")
     .load(f"{path_to_uc_external_location}")
 )

Condividere viste materializzate

Per impostazione predefinita, solo il proprietario della pipeline dispone dell'autorizzazione per eseguire query sui set di dati creati dalla pipeline. È possibile concedere ad altri utenti la possibilità di eseguire query su una tabella usando istruzioni GRANT ed è possibile revocare l'accesso alle query usando istruzioni REVOKE. Per altre informazioni sui privilegi nel catalogo unity, vedere Gestire i privilegi nel catalogo unity.

Concedere SELECT su una tabella

GRANT SELECT ON TABLE
  my_catalog.my_schema.table_name
TO
  `user@databricks.com`

Revoca il privilegio SELECT su una tabella

REVOKE SELECT ON TABLE
  my_catalog.my_schema.table_name
FROM
  `user@databricks.com`

Concedere la creazione di una tabella o creare privilegi di visualizzazione materializzati

GRANT CREATE { MATERIALIZED VIEW | TABLE } ON SCHEMA
  my_catalog.my_schema
TO
  { principal | user }

Visualizzare la tracciabilità per una pipeline

La derivazione per le tabelle definite nelle pipeline è visibile in Esplora Cataloghi. L'interfaccia utente della linea di derivazione di Esplora Cataloghi mostra le tabelle a monte e a valle per le viste materializzate o le tabelle di streaming in una pipeline con Unity Catalog abilitato. Per altre informazioni sulla derivazione del catalogo Unity, vedere Visualizzare la derivazione dei dati con Unity Catalog.

Per una vista materializzata o una tabella di streaming in una pipeline abilitata per il Catalogo Unity, l'interfaccia utente di derivazione dell'Esploratore di Cataloghi collegherà anche la pipeline che ha prodotto la vista materializzata o la tabella di streaming, se la pipeline è accessibile dall'area di lavoro corrente.

Aggiungere, modificare o eliminare dati in una tabella di streaming

È possibile usare istruzioni DML (Data Manipulation Language), incluse le istruzioni insert, update, delete e merge, per modificare le tabelle di Streaming pubblicate su Unity Catalog. Il supporto per le query DML sulle tabelle di streaming consente casi d'uso come l'aggiornamento delle tabelle per la conformità al Regolamento generale sulla protezione dei dati (GDPR).

Annotazioni

  • Le istruzioni DML che modificano lo schema di tabella di una tabella di streaming non sono supportate. Assicurarsi che le istruzioni DML non tentino di evolvere lo schema della tabella.
  • Le istruzioni DML che aggiornano una tabella di streaming possono essere eseguite solo in un cluster unity catalog condiviso o in un sql warehouse usando Databricks Runtime 13.3 LTS e versioni successive.
  • Poiché lo streaming richiede fonti dati a sola accodamento, se l'elaborazione necessita di streaming da una tabella di streaming di origine con modifiche, ad esempio tramite istruzioni DML, impostare il flag skipChangeCommits durante la lettura della tabella di streaming di origine. Quando viene impostata skipChangeCommits, le transazioni che eliminano o modificano i record nella tabella di origine vengono ignorate. Se il tuo processo di elaborazione non richiede una tabella di streaming, è possibile usare una vista materializzata (che non ha la limitazione di solo aggiunta) come tabella di destinazione.

Di seguito sono riportati esempi di istruzioni DML per modificare i record in una tabella di streaming.

Eliminare record con un ID specifico:

DELETE FROM my_streaming_table WHERE id = 123;

Aggiornare i record con un ID specifico:

UPDATE my_streaming_table SET name = 'Jane Doe' WHERE id = 123;

Pubblicare tabelle con filtri di riga e maschere di colonna

I filtri di riga consentono di specificare una funzione che viene applicata come filtro ogni volta che un'analisi di tabella recupera righe. Questi filtri assicurano che le query successive restituiscano solo righe per le quali il predicato di filtro risulti vero.

Le maschere di colonna consentono di mascherare i valori di una colonna ogni volta che un'analisi di tabella recupera le righe. Le query future per tale colonna restituiscono il risultato della funzione valutata anziché il valore originale della colonna. Per altre informazioni sull'uso di filtri di riga e maschere di colonna, vedere Filtri di riga e maschere di colonna.

Gestione dei filtri di riga e delle maschere di colonna

I filtri di riga e le maschere di colonna nelle viste materializzate e nelle tabelle di streaming devono essere aggiunti, aggiornati o eliminati tramite l'istruzione CREATE OR REFRESH.

Per una sintassi dettagliata sulla definizione di tabelle con filtri di riga e maschere di colonna, vedere Informazioni di riferimento sul linguaggio SQL della pipeline e Informazioni di riferimento sul linguaggio Python per le pipeline dichiarative di Lakeflow Spark.

Comportamento

Di seguito sono riportati dettagli importanti quando si usano filtri di riga o maschere di colonna in una pipeline:

  • Aggiorna come proprietario: quando un aggiornamento della pipeline aggiorna una vista materializzata o una tabella di streaming, le funzioni di filtro di riga e maschera di colonna vengono eseguite con i diritti del proprietario della pipeline. Ciò significa che l'aggiornamento della tabella usa il contesto di sicurezza dell'utente che ha creato la pipeline. Le funzioni che controllano il contesto utente (ad esempio CURRENT_USER e IS_MEMBER) vengono valutate usando il contesto utente del proprietario della pipeline.
  • Query: quando si esegue una query su una vista materializzata o una tabella di streaming, le funzioni che controllano il contesto utente (ad esempio CURRENT_USER e IS_MEMBER) vengono valutate usando il contesto utente del chiamante. Questo approccio applica controlli di accesso e sicurezza dei dati specifici dell'utente in base al contesto dell'utente corrente.
  • Quando si creano viste materializzate sulle tabelle di origine che contengono filtri di riga e maschere di colonna, l'aggiornamento della vista materializzata è sempre un aggiornamento completo. Un aggiornamento completo elabora tutti i dati disponibili nell'origine con le definizioni più recenti. Questo processo verifica che i criteri di sicurezza nelle tabelle di origine vengano valutati e applicati con i dati e le definizioni più up-to-date.

Observability

Usare DESCRIBE EXTENDED, INFORMATION_SCHEMAo Esplora cataloghi per esaminare i filtri di riga e le maschere di colonna esistenti applicabili a una vista materializzata specifica o a una tabella di streaming. Questa funzionalità consente agli utenti di controllare ed esaminare le misure di accesso e protezione dei dati nelle viste materializzate e nelle tabelle di streaming.