Câu lệnh ngôn ngữ thao tác dữ liệu (DML)

Giới thiệu về BigQuery

Matt Forrest

Field CTO

Tổng quan thao tác dữ liệu trong BigQuery

  • INSERT: Thêm hàng dữ liệu mới.
  • UPDATE: Sửa giá trị hiện có trong một hàng.
  • DELETE: Xóa dữ liệu không cần thiết khỏi bảng.
  • MERGE: Kết hợp INSERT, UPDATE, và DELETE trong một câu lệnh.
  • CREATE TABLE AS: Tạo bảng mới từ kết quả truy vấn.
Giới thiệu về BigQuery

Lưu ý và hiệu năng

  • Gom các câu lệnh DML khi có thể thay vì chạy riêng lẻ
  • Phải dùng điều kiện WHERE khi chạy UPDATE
  • Cân nhắc dùng phân vùng và cụm bảng
1 https://cloud.google.com/bigquery/docs/reference/standard-sql/data-manipulation-language
Giới thiệu về BigQuery

INSERT

  • Thêm bản ghi vào bảng
-- Xác định cột trong ngoặc đơn 
INSERT INTO customers (customer_id, name, email)

-- Mỗi bộ giá trị là một hàng sẽ chèn
VALUES (1, "John Doe", "[email protected]"),
(2, "Jane Doe", "[email protected]"),
(3, "Alice Smith", "[email protected]");
Giới thiệu về BigQuery

UPDATE

  • Thay đổi dữ liệu theo điều kiện
UPDATE customers
-- Mỗi SET đặt một cột
SET email = "[email protected]"
-- Luôn có WHERE, nếu không
-- mọi hàng sẽ bị cập nhật
WHERE customer_id = 1;
  • UPDATE cùng truy vấn con hoặc join
    UPDATE customers c
    SET c.email = e.email
    FROM emails e
    WHERE c.customer_id = 1;
    
Giới thiệu về BigQuery

DELETE

  • DELETE xóa bản ghi vĩnh viễn và không thể hoàn tác
DELETE FROM customers

-- Thêm WHERE để chỉ xóa các hàng cụ thể
WHERE customer_id = 3;
DELETE FROM customers c
JOIN emails e USING (customer_id)
WHERE email = '[email protected]'
Giới thiệu về BigQuery

MERGE

  • Kết hợp INSERT, UPDATE, và DELETE trong một thao tác
-- Đặt bảng customers làm đích
MERGE customers AS target

-- Nguồn là new_customers USING new_customers AS source
-- Điều kiện khớp ON target.customer_id = source.customer_id
-- Nếu email không khớp, cập nhật email WHEN MATCHED AND target.email != source.email THEN UPDATE SET email = source.email
-- Nếu không khớp, chèn bản ghi WHEN NOT MATCHED THEN INSERT (customer_id, name, email) VALUES (source.customer_id, source.name, source.email);
Giới thiệu về BigQuery

CREATE TABLE

  • Tạo bảng mới từ truy vấn
CREATE TABLE active_customers AS
SELECT customer_id, name, email 
FROM customers
WHERE last_active_date > DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY);
Giới thiệu về BigQuery

Ayo berlatih!

Giới thiệu về BigQuery

Preparing Video For Download...