Utilizzare la cronologia delle modifiche
La cronologia delle modifiche di BigQuery consente di tenere traccia delle modifiche apportate a una tabella BigQuery. La cronologia delle modifiche di una tabella viene mostrata come una funzione con valore di tabella (TVF) SQL che mostra particolari tipi di modifiche apportate durante un intervallo di tempo specificato. Questa funzionalità consente di elaborare le modifiche incrementali apportate a una tabella. Capire quali modifiche sono state apportate a una tabella può aiutarti a eseguire operazioni come la gestione incrementale di una replica della tabella al di fuori di BigQuery evitando copie costose.
Autorizzazioni obbligatorie
Per visualizzare la cronologia delle modifiche in una tabella, devi disporre dell'autorizzazione bigquery.tables.getData
per tale tabella. I seguenti ruoli IAM (Identity and Access Management) predefiniti includono questa autorizzazione:
roles/bigquery.dataViewer
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
Se una tabella ha o ha avuto criteri di accesso a livello di riga, solo un amministratore della tabella può accedere ai dati storici per la tabella. L'autorizzazione bigquery.rowAccessPolicies.overrideTimeTravelRestrictions
è obbligatoria nella tabella ed è inclusa nel ruolo IAM roles/bigquery.admin
predefinito.
Se una tabella ha la sicurezza a livello di colonna, puoi visualizzare la cronologia delle modifiche solo nelle colonne a cui hai accesso.
APPENDS
TVF
Il TVF APPENDS
restituisce una tabella di tutte le righe aggiunte a una tabella per un determinato intervallo di tempo. Le seguenti operazioni aggiungono righe alla cronologia delle modifiche di APPENDS
:
CREATE TABLE
Istruzione DDLINSERT
Istruzione DMLMERGE
Istruzione DML- Caricamento dei dati in BigQuery
- Importazione dei flussi di dati
Sintassi
APPENDS( TABLE table, start_timestamp DEFAULT NULL, end_timestamp DEFAULT NULL)
table
: il nome della tabella BigQuery. Non può essere una vista, una sottoquery, una tabella esterna, una vista materializzata o tabella con funzione carattere jolly. Questo argomento deve essere preceduto dalla parolaTABLE
.start_timestamp
: un valoreTIMESTAMP
che indica la prima volta in cui una modifica viene inclusa nell'output. Se èNULL
, vengono restituite tutte le modifiche apportate dopo la creazione della tabella. Se la tabella viene creata dopo il giornostart_timestamp
, viene utilizzata la data e l'ora di creazione effettiva della tabella. Se l'ora è antecedente a quella consentita dal viaggio nel tempo, viene restituito un errore. Per le tabelle standard, questa finestra è di sette giorni, ma puoi configurare la finestra di spostamento cronologico in modo che sia inferiore.end_timestamp
: unTIMESTAMP
che indica l'ora più recente, esclusiva, in cui è inclusa una modifica nell'output. Se èNULL
, vengono incluse tutte le modifiche apportate fino all'inizio della query.
Valore restituito
Il TVF APPENDS
restituisce una tabella con le seguenti colonne:
- Tutte le colonne della tabella di input al momento dell'esecuzione della query. Se una colonna viene aggiunta dopo
end_timestamp
, verrà visualizzata con i valoriNULL
completati nelle righe inserite prima dell'aggiunta della colonna. _CHANGE_TYPE
:STRING
che indica il tipo di modifica che ha generato la riga. L'unico valore supportato perAPPENDS
èINSERT
._CHANGE_TIMESTAMP
:TIMESTAMP
che indica il tempo di commit della transazione che ha apportato la modifica.
Dettagli
I record delle righe inserite vengono conservati anche se i dati vengono eliminati in un secondo momento. Le eliminazioni
non si riflettono nel TVF APPENDS
. Se una tabella viene copiata, la chiamata del TVF APPENDS
nella tabella copiata restituisce ogni riga così come inserita al momento della creazione della tabella. La modifica di una riga a causa di un'operazione UPDATE
non ha alcun effetto.
Esempi
Questo esempio mostra la cronologia delle modifiche restituita da APPENDS
mentre vengono apportate varie modifiche a una tabella denominata Produce
. Questo esempio potrebbe non funzionare se
completato su una durata più lunga di quella della
finestra di spostamento cronologico.
Per prima cosa, crea la tabella.
CREATE TABLE mydataset.Produce (product STRING, inventory INT64) AS ( SELECT "apples" AS product, 10 AS inventory);
Quindi, inserisci due righe nella tabella.
INSERT INTO mydataset.Produce VALUES ("bananas", 20), ("carrots", 30);
Visualizza la cronologia delle modifiche completa delle aggiunte. Utilizza i valori NULL
per ottenere la
cronologia completa all'interno della finestra di spostamento cronologico.
SELECT product, inventory, _CHANGE_TYPE AS change_type, _CHANGE_TIMESTAMP AS change_time FROM APPENDS(TABLE mydataset.Produce, NULL, NULL);
L'output è simile al seguente:
+---------+-----------+-------------+--------------------------------+ | product | inventory | change_type | change_time | +---------+-----------+-------------+--------------------------------+ | apples | 10 | INSERT | 2022-04-15 20:06:00.488000 UTC | | bananas | 20 | INSERT | 2022-04-15 20:06:08.490000 UTC | | carrots | 30 | INSERT | 2022-04-15 20:06:08.490000 UTC | +---------+-----------+-------------+--------------------------------+
Successivamente, aggiungi una colonna, inserisci una nuova riga di valori, aggiorna l'inventario ed elimina la riga "banane".
ALTER TABLE mydataset.Produce ADD COLUMN color STRING; INSERT INTO mydataset.Produce VALUES ("grapes", 40, "purple"); UPDATE mydataset.Produce SET inventory = inventory + 5 WHERE TRUE; DELETE mydataset.Produce WHERE product = "bananas";
Visualizza la nuova tabella.
SELECT * FROM mydataset.Produce;
+---------+-----------+--------+ | product | inventory | color | +---------+-----------+--------+ | apples | 15 | NULL | | carrots | 35 | NULL | | grapes | 45 | purple | +---------+-----------+--------+
Visualizza la cronologia delle modifiche completa delle aggiunte.
SELECT product, inventory, color, _CHANGE_TYPE AS change_type, _CHANGE_TIMESTAMP AS change_time FROM APPENDS(TABLE mydataset.Produce, NULL, NULL);
L'output è simile al seguente:
+---------+-----------+--------+-------------+--------------------------------+ | product | inventory | color | change_type | change_time | +---------+-----------+--------+-------------+--------------------------------+ | apples | 10 | NULL | INSERT | 2022-04-15 20:06:00.488000 UTC | | bananas | 20 | NULL | INSERT | 2022-04-15 20:06:08.490000 UTC | | carrots | 30 | NULL | INSERT | 2022-04-15 20:06:08.490000 UTC | | grapes | 40 | purple | INSERT | 2022-04-15 20:07:45.751000 UTC | +---------+-----------+--------+-------------+--------------------------------+
La colonna inventory
mostra i valori impostati al momento dell'inserimento delle righe nella tabella. Non mostra le modifiche dell'istruzione UPDATE
. La riga con informazioni sulle banane è ancora presente poiché il TVF APPENDS
acquisisce solo le aggiunte alle tabelle, non le eliminazioni.
Limitazioni
La cronologia delle modifiche è soggetta alle seguenti limitazioni:
- Puoi visualizzare solo le informazioni sulle aggiunte, non sugli aggiornamenti o sulle eliminazioni.
- I dati sono limitati alla finestra di spostamento cronologico della tabella.