データ操作言語(DML)文

BigQuery入門

Matt Forrest

Field CTO

BigQuery におけるデータ操作の概要

  • INSERT: 新しい行を追加。
  • UPDATE: 既存の値を変更。
  • DELETE: 不要なデータをテーブルから削除。
  • MERGE: INSERT・UPDATE・DELETE を一文に統合。
  • CREATE TABLE AS: クエリ結果から新しいテーブルを作成。
BigQuery入門

考慮事項とパフォーマンス

  • 可能なら DML 文は個別でなくまとめて実行
  • UPDATE 実行時は必ず WHERE 条件が必要
  • テーブルのパーティション化とクラスタ化を検討
1 https://cloud.google.com/bigquery/docs/reference/standard-sql/data-manipulation-language
BigQuery入門

INSERT

  • テーブルにレコードを追加
-- かっこ内で列を指定 
INSERT INTO customers (customer_id, name, email)

-- 各 VALUES 行が1レコード
VALUES (1, "John Doe", "[email protected]"),
(2, "Jane Doe", "[email protected]"),
(3, "Alice Smith", "[email protected]");
BigQuery入門

UPDATE

  • 条件に基づきデータを変更
UPDATE customers
-- 各 SET で1列ずつ設定
SET email = "[email protected]"
-- WHERE がないと全行が更新されるため必ず指定
WHERE customer_id = 1;
  • サブクエリや結合と併用した UPDATE
    UPDATE customers c
    SET c.email = e.email
    FROM emails e
    WHERE c.customer_id = 1;
    
BigQuery入門

DELETE

  • DELETE はレコードを完全に削除し、元に戻せません
DELETE FROM customers

-- 特定の行のみ削除するために WHERE を必ず指定
WHERE customer_id = 3;
DELETE FROM customers c
JOIN emails e USING (customer_id)
WHERE email = '[email protected]'
BigQuery入門

MERGE

  • INSERT、UPDATE、DELETE を1回で実行
-- 変更対象を customers テーブルに設定
MERGE customers AS target

-- ソースは new_customers USING new_customers AS source
-- 照合条件 ON target.customer_id = source.customer_id
-- email が異なる場合に更新 WHEN MATCHED AND target.email != source.email THEN UPDATE SET email = source.email
-- 一致しない場合は挿入 WHEN NOT MATCHED THEN INSERT (customer_id, name, email) VALUES (source.customer_id, source.name, source.email);
BigQuery入門

CREATE TABLE

  • クエリから新しいテーブルを作成
CREATE TABLE active_customers AS
SELECT customer_id, name, email 
FROM customers
WHERE last_active_date > DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY);
BigQuery入門

演習に進みましょう!

BigQuery入門

Preparing Video For Download...