Skip to content
isdnetworks
Go back

BigQuery Legacy SQL 종료 — Standard SQL 전환 가이드

Google Cloud에서 “Legacy SQL will no longer be available in BigQuery”라는 Product Update를 보냈다. Legacy SQL을 아직 사용하고 있다면 Standard SQL로 전환해야 한다.

Table of contents

Open Table of contents

Legacy SQL vs Standard SQL

BigQuery는 초기에 독자적인 SQL 방언(Legacy SQL)을 사용했고, 이후 ANSI SQL 호환(Standard SQL)을 도입했다:

항목Legacy SQLStandard SQL
테이블 참조[project:dataset.table]`project.dataset.table`
서브쿼리제한적완전 지원
WITH 절 (CTE)미지원지원
ARRAY/STRUCT미지원지원
JOIN 문법비표준ANSI 표준
UDFJavaScript만SQL + JavaScript
접두사#legacySQL#standardSQL (기본값)

영향 확인

1. Legacy SQL 쿼리 찾기

BigQuery 콘솔이나 쿼리 로그에서 Legacy SQL 사용을 확인한다:

-- BigQuery INFORMATION_SCHEMA에서 최근 쿼리 중 Legacy SQL 사용 확인
SELECT
  user_email,
  query,
  creation_time,
  statement_type
FROM `region-ap-northeast3`.INFORMATION_SCHEMA.JOBS
WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND configuration.query.useLegacySql = true
ORDER BY creation_time DESC;

2. 저장된 쿼리/뷰 확인

Legacy SQL로 정의된 뷰(View)가 있으면 전환이 필요하다:

# bq 명령으로 뷰 목록 확인
bq ls --format=pretty dataset_name
bq show --format=prettyjson dataset_name.view_name
# "useLegacySql": true → 전환 대상

3. 외부 연동 확인

BI 도구, 스크립트, 스케줄 쿼리에서 Legacy SQL을 사용하는지 확인:

전환 방법

테이블 참조 변경

-- Legacy SQL
SELECT * FROM [project:dataset.table]

-- Standard SQL
SELECT * FROM `project.dataset.table`

JOIN 문법

-- Legacy SQL
SELECT a.id, b.name
FROM [dataset.table_a] a
JOIN EACH [dataset.table_b] b ON a.id = b.id

-- Standard SQL
SELECT a.id, b.name
FROM `dataset.table_a` a
JOIN `dataset.table_b` b ON a.id = b.id

JOIN EACH는 Standard SQL에서 그냥 JOIN으로 변경한다.

날짜 함수

-- Legacy SQL
SELECT STRFTIME_UTC_USEC(timestamp, '%Y-%m-%d')

-- Standard SQL
SELECT FORMAT_TIMESTAMP('%Y-%m-%d', timestamp)

GROUP BY

-- Legacy SQL (위치 기반)
SELECT name, COUNT(*) FROM [dataset.table] GROUP BY 1

-- Standard SQL (동일하게 위치 기반 가능, 명시적 권장)
SELECT name, COUNT(*) FROM `dataset.table` GROUP BY name

뷰 재생성

Legacy SQL 뷰는 삭제 후 Standard SQL로 재생성한다:

# 기존 뷰 정의 백업
bq show --format=prettyjson dataset.my_view > my_view_backup.json

# Standard SQL로 뷰 재생성
bq mk --use_legacy_sql=false --view \
  'SELECT * FROM `project.dataset.table` WHERE active = true' \
  dataset.my_view

자동 변환 도구

BigQuery 콘솔에서 Legacy SQL 쿼리를 입력하면 Standard SQL로 자동 변환을 제안하는 경우가 있다. 하지만 복잡한 쿼리는 수동 확인이 필요하다.

정리

BigQuery Legacy SQL 종료는 오래전부터 예고된 변경이다. INFORMATION_SCHEMA.JOBS에서 Legacy SQL 사용 쿼리를 찾고, 뷰 정의를 확인하고, 외부 연동의 useLegacySql 플래그를 false로 변경한다.


Share this post on:

Previous Post
컴퓨터과학과 중퇴 개발자의 15년
Next Post
같은 블록 안의 확인은 확인이 아니다