BigQuery 입문
Matt Forrest
Field CTO
세 가지 핵심 규칙:
SELECT *는 피하고, 필요한 열만 선택합니다.WHERE 절로 데이터를 일찍, 자주 필터링합니다.INT64 데이터 타입을 사용합니다.WITH filter_my_data AS (SELECT
-- Filter data with
-- WHERE in the CTE first
)
SELECT
-- This query will run
-- faster with less data
JOIN a USING (user_id)
BigQuery에서는 다음을 사용합니다.
BOOLINTFLOATDATE WHERE에서 STRING 또는 BYTE 사용은 비최적입니다.
비최적
SELECT user_id, date_ordered
FROM dataset.table
WHERE product = 'shoes'
최적
SELECT user_id, date_ordered
FROM dataset.table
WHERE product_id = 1234
ORDER BY는 항상 쿼리의 가장 바깥(끝)에 둡니다.ORDER BY를 쓰는 경우뿐입니다.비최적
WITH order_total AS (SELECT
user_id,
sum(product_price) as order_sum
FROM orders
GROUP BY user_id
-- Order by is not at the end of the query
ORDER BY last_purchase_date
)
SELECT order_total.order_sum,
users.user_name
FROM dataset.users users
JOIN order_total USING (user_id);
최적
WITH order_total AS (SELECT
user_id,
last_purchase_date
sum(product_price) as order_sum
GROUP BY user_id
)
SELECT order_total.order_sum,
users.user_name
FROM dataset.users users
JOIN a USING (user_id)
-- Order by should always be at the end
ORDER BY orders_total.last_purchase_date;
EXISTS를 사용합니다.COUNT 사용은 피합니다.SELECT EXISTS (
-- Write the main query as a subquery within the exists call
SELECT
user_id
FROM
dataset.table
WHERE
product_category = 'home_goods'
AND status = 'Closed Account'
);
APPROX_TOP_SUM, APPROX_COUNT_DISTINCT 같은 근사 집계를 사용합니다.WHERE 절에 날짜를 포함합니다.BigQuery 입문