데이터 조작 언어(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, "John Doe", "[email protected]"),
(2, "Jane Doe", "[email protected]"),
(3, "Alice Smith", "[email protected]");
BigQuery 입문

UPDATE

  • 조건에 따라 데이터 변경
UPDATE customers
-- SET마다 하나의 열을 설정
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를 결합합니다
-- 대상 테이블을 customers로 설정
MERGE customers AS target

-- 소스는 new_customers USING new_customers AS source
-- 매칭 조건 ON target.customer_id = source.customer_id
-- 이메일이 다르면 이메일 업데이트 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...