Trasforma i dati con DML (Data Manipulation Language)
Il Data Manipulation Language (DML) di BigQuery consente di aggiornare, inserire ed eliminare dati dalle tabelle BigQuery.
Puoi eseguire istruzioni DML proprio come faresti con un'istruzione SELECT
, con
le seguenti condizioni:
- Devi usare GoogleSQL. Per attivare GoogleSQL, consulta Cambio di dialetti SQL.
- Non puoi specificare una tabella di destinazione per la query.
Per un elenco di istruzioni DML di BigQuery ed esempi di utilizzo vedere: Istruzioni Data Manipulation Language in GoogleSQL.
Limitazioni
Ogni istruzione DML avvia una transazione implicita, il che significa che di questa dichiarazione vengono automaticamente commessi alla fine di ogni un'istruzione DML riuscita.
Righe scritte di recente utilizzando Il metodo di flusso
tabledata.insertall
non può essere modificato con la manipolazione dei dati del linguaggio (DML), comeUPDATE
, Estratti contoDELETE
,MERGE
oTRUNCATE
. Le scritture recenti sono quelle che si sono verificate negli ultimi 30 minuti. Tutte le altre righe della tabella rimangono modificabili utilizzando Estratti contoUPDATE
,DELETE
,MERGE
oTRUNCATE
. I flussi di dati possono richiedere fino a 90 minuti prima che siano disponibili per le operazioni di copia.In alternativa, le righe scritte di recente utilizzando l'API StorageWrite possono essere modificate utilizzando istruzioni
UPDATE
,DELETE
oMERGE
(anteprima). Per ulteriori informazioni informazioni, vedi Utilizzare il Data Manipulation Language (DML) con flussi di dati recenti.Sottoquery correlate all'interno di un
when_clause
,search_condition
,merge_update_clause
omerge_insert_clause
non sono supportati perMERGE
istruzioni.Query che contengono istruzioni DML impossibile utilizzare una tabella con caratteri jolly come destinazione della query. Ad esempio, una tabella con funzione carattere jolly può essere utilizzata
FROM
di una queryUPDATE
, ma non è possibile utilizzare una tabella con funzione carattere jolly come target dell'operazioneUPDATE
.
Job simultanei
BigQuery gestisce la contemporaneità delle istruzioni DML che aggiungono, modificare o eliminare righe in una tabella.
INSERISCI contemporaneità DML
In un periodo di 24 ore, le prime 1500 istruzioni INSERT
vengono eseguite immediatamente
dopo l'invio. Una volta raggiunto questo limite,
di istruzioni di INSERT
che scrivono in una tabella è limitato a 10. Aggiuntivo
Le istruzioni INSERT
sono state aggiunte a una coda PENDING
. Fino a 100 INSERT
le istruzioni possono essere messe in coda in base a una tabella in un dato momento. Quando INSERT
viene completata, la successiva istruzione INSERT
viene rimossa dalla coda ed eseguita.
Se devi eseguire istruzioni DML INSERT
più spesso,
valuta la possibilità di trasmettere i flussi di dati alla tabella utilizzando
API Storage Scrivi.
AGGIORNA, ELIMINA, UNISCI contemporaneità DML
Le istruzioni DML UPDATE
, DELETE
e MERGE
sono chiamate DML mutante
estratti conto. Se invii una o più istruzioni DML mutanti in una tabella mentre
altri job DML mutanti sono ancora in esecuzione (o in attesa),
BigQuery ne esegue contemporaneamente fino a 2 e poi fino a 20
sono in coda come PENDING
. Al termine di un job precedentemente in esecuzione,
il job in attesa è stato rimosso dalla coda ed eseguito. Istruzioni DML mutanti in coda
Condividere una coda per tabella con una lunghezza massima di 20 caratteri. Estratti conto aggiuntivi precedenti
la lunghezza massima della coda per ogni tabella non riesce e viene visualizzato il messaggio di errore: Resources
exceeded during query execution: Too many DML statements outstanding against
table PROJECT_ID:TABLE, limit is 20.
I job DML con priorità interattiva che sono in coda da più di 6 ore non riescono con il seguente messaggio di errore:
DML statement has been queued for too long
Conflitti tra istruzione DML
La modifica delle istruzioni DML eseguite contemporaneamente su una tabella causa conflitti tra le istruzione DML quando le istruzioni tentano di mutare la stessa partizione. Le istruzioni hanno esito positivo purché non modifichino la stessa partizione. BigQuery prova a ripetere fino a tre volte le istruzioni non riuscite.
Un'istruzione DML
INSERT
che inserisce righe in una tabella non è in conflitto con qualsiasi altra istruzione DML in esecuzione contemporaneamente.Un'istruzione DML
MERGE
non è in conflitto con altre istruzioni DML in esecuzione contemporaneamente purché l'istruzione inserisca soltanto righe e non elimini o aggiorna le righe esistenti. Può includere istruzioniMERGE
conUPDATE
oDELETE
, purché queste clausole non vengano richiamate quando delle query eseguite.
Prezzi
Per informazioni sui prezzi di DML, vedi Prezzi di Data Manipulation Language nella pagina Prezzi.
Best practice
Per prestazioni ottimali, Google consiglia i seguenti pattern:
Evita di inviare un numero elevato di singoli aggiornamenti o inserimenti di righe. Se possibile, raggruppa invece le operazioni DML. Per ulteriori informazioni, vedi Istruzioni DML che aggiornano o inseriscono singole righe.
Se in genere gli aggiornamenti o le eliminazioni avvengono su dati meno recenti o all'interno di un un intervallo di date, considera il partizionamento le tue tabelle. Il partizionamento assicura che le modifiche siano limitate a specifiche delle partizioni di Compute Engine all'interno della tabella.
Evita di partizionare le tabelle se la quantità di dati in ogni partizione è piccola ogni aggiornamento modifica una grande frazione delle partizioni.
Se aggiorni spesso le righe in cui una o più colonne rientrano in un intervallo ristretto di valori, valuta la possibilità di utilizzare tabelle in cluster. Il clustering garantisce le modifiche sono limitate a insiemi specifici di blocchi, riducendo la quantità di dati che deve essere letto e scritto. Di seguito è riportato un esempio di
UPDATE
che filtra in base a un intervallo di valori di colonna:UPDATE mydataset.mytable SET string_col = 'some string' WHERE id BETWEEN 54 AND 75;
Ecco un esempio simile in cui viene applicato un filtro in base a un piccolo elenco di valori di colonna:
UPDATE mydataset.mytable SET string_col = 'some string' WHERE id IN (54, 57, 60);
In questi casi, valuta la possibilità di eseguire il clustering sulla colonna
id
.Se hai bisogno della funzionalità OLTP, valuta l'utilizzo Query federate di Cloud SQL, che consentono a BigQuery di eseguire query sui dati in Cloud SQL.
Per le best practice per ottimizzare le prestazioni delle query, vedi Introduzione all'ottimizzazione delle prestazioni delle query.
Passaggi successivi
- Per informazioni ed esempi di sintassi DML, consulta Sintassi DML.
- Per informazioni sull'utilizzo delle istruzioni DML nelle query pianificate, consulta Pianificazione delle query.