Istruzioni di Data Manipulation Language (DML)

Introduzione a BigQuery

Matt Forrest

Field CTO

Panoramica della manipolazione dati in BigQuery

  • INSERT: aggiunge nuove righe di dati.
  • UPDATE: modifica valori esistenti in una riga.
  • DELETE: rimuove dati non desiderati da tabelle.
  • MERGE: combina INSERT, UPDATE e DELETE in un'unica istruzione.
  • CREATE TABLE AS: crea una nuova tabella da un Risultato della query.
Introduzione a BigQuery

Considerazioni e prestazioni

  • Quando possibile, raggruppa le istruzioni DML invece di eseguirle singolarmente
  • Devi usare una condizione WHERE quando esegui un UPDATE
  • Valuta l'uso di partizioni e cluster di tabella
1 https://cloud.google.com/bigquery/docs/reference/standard-sql/data-manipulation-language
Introduzione a BigQuery

INSERT

  • Aggiungi record alle tabelle
-- Definisci le colonne tra parentesi 
INSERT INTO customers (customer_id, name, email)

-- Ogni tupla è una riga da inserire
VALUES (1, "John Doe", "[email protected]"),
(2, "Jane Doe", "[email protected]"),
(3, "Alice Smith", "[email protected]");
Introduzione a BigQuery

UPDATE

  • Modifica i dati in base a una condizione
UPDATE customers
-- Imposta una colonna per ogni istruzione SET
SET email = "[email protected]"
-- Includi sempre WHERE, altrimenti verranno aggiornate
-- tutte le righe
WHERE customer_id = 1;
  • UPDATE insieme a subquery o join
    UPDATE customers c
    SET c.email = e.email
    FROM emails e
    WHERE c.customer_id = 1;
    
Introduzione a BigQuery

DELETE

  • DELETE rimuove i record in modo permanente e non è reversibile
DELETE FROM customers

-- Includi WHERE per eliminare solo righe specifiche
WHERE customer_id = 3;
DELETE FROM customers c
JOIN emails e USING (customer_id)
WHERE email = '[email protected]'
Introduzione a BigQuery

MERGE

  • Combina INSERT, UPDATE e DELETE in un'unica operazione
-- Imposta la tabella customers come target
MERGE customers AS target

-- La sorgente è new_customers USING new_customers AS source
-- Condizione di corrispondenza ON target.customer_id = source.customer_id
-- Se le email non corrispondono, aggiorna l'email WHEN MATCHED AND target.email != source.email THEN UPDATE SET email = source.email
-- Se non c'è corrispondenza, inserisci il record WHEN NOT MATCHED THEN INSERT (customer_id, name, email) VALUES (source.customer_id, source.name, source.email);
Introduzione a BigQuery

CREATE TABLE

  • Crea nuove tabelle da query
CREATE TABLE active_customers AS
SELECT customer_id, name, email 
FROM customers
WHERE last_active_date > DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY);
Introduzione a BigQuery

Esercitiamoci!

Introduzione a BigQuery

Preparing Video For Download...