BigQuery에서 가장 자주 겪는 오류 중 하나가
WHERE 절에서 날짜 조건이 작동하지 않는 문제다.
대표적인 증상:
- 결과가 0건
- 에러 메시지: No matching signature for operator
- 날짜가 하루 밀림
- 특정 구간 데이터가 누락
이 문제의 대부분은
DATE와 TIMESTAMP를 직접 비교했기 때문이다.
이 글에서는:
- 왜 DATE와 TIMESTAMP 비교가 문제인지
- 내부적으로 어떻게 처리되는지
- 실무에서 가장 안전한 비교 패턴
까지 정리한다.
자주 묻는 질문
Q. BigQuery WHERE 날짜 오류에서 가장 흔한 실수는?
BigQuery WHERE 날짜 오류 사용 시 가장 흔한 실수는 기본 설정을 확인하지 않는 것입니다. 공식 문서의 기본 예제부터 따라하는 것을 권장합니다.
Q. 이 방법이 최신 버전에서도 동작하나요?
네, 이 글의 내용은 2026년 기준으로 검증되었습니다. 버전 업데이트에 따라 UI가 다를 수 있으니 참고하세요.
DATE와 TIMESTAMP는 서로 다른 타입이다
BigQuery에서 DATE와 TIMESTAMP는 서로 다른 데이터 타입으로, 날짜와 시간 정보를 저장하는 방식이 다르다.
BigQuery는 강타입 시스템이다.
즉, 타입이 다르면 자동 변환하지 않는다.
예:
WHERE event_date >= event_timestamp
→ 오류 발생
이유는 단순하다.
- DATE → 날짜만 있음
- TIMESTAMP → UTC 기준 시간 포함
내부 구조가 완전히 다르기 때문이다.
대표 오류 사례 1 – 직접 비교
BigQuery에서 DATE 타입과 TIMESTAMP 타입을 직접 비교하면 타입 불일치로 인해 오류가 발생한다.
WHERE event_timestamp >= DATE '2025-01-01'
에러:
No matching signature for operator >=
🔎 왜 발생하는가?
BigQuery는 강타입 시스템으로, 서로 다른 데이터 타입을 명시적인 변환 없이 직접 비교할 수 없기 때문에 오류가 발생한다.
BigQuery는
DATE를 TIMESTAMP로 자동 변환하지 않는다.
따라서 명시적 변환이 필요하다.
핵심 정리: ① BigQuery에서 DATE와 TIMESTAMP는 서로 다른 타입이므로 직접 비교하면 오류가 발생한다. ② TIMESTAMP 데이터를 다룰 때 타임존을 명시하지 않으면 '하루 밀림 현상'이 발생한다. ③ 날짜 범위 비교 시 BETWEEN 대신 '>='와 '<' 연산자를 사용하는 것이 데이터 누락을 방지하는 안전한 패턴이다.
해결 방법 ① TIMESTAMP 기준으로 통일
TIMESTAMP 기준으로 날짜를 통일하는 방법은 모든 날짜/시간 데이터를 TIMESTAMP 타입으로 변환하여 비교하는 것이다.
WHERE event_timestamp >= TIMESTAMP('2025-01-01','Asia/Seoul')
이 방식은:
- 타임존 명시 가능
- 가장 안전
- 로그 데이터 분석에 적합
해결 방법 ② DATE 기준으로 통일
WHERE DATE(event_timestamp,'Asia/Seoul') >= DATE '2025-01-01'
이 방식은:
DATE 기준으로 날짜를 통일하는 방법은 TIMESTAMP 데이터를 DATE 타입으로 변환하여 비교하는 것이다.
- 일자 집계에 적합
- 리포트용 데이터에 유리
하루 밀림 현상 분석 (가장 많이 하는 실수)
하루 밀림 현상은 TIMESTAMP에 타임존을 명시하지 않아 UTC 기준으로 날짜가 변환되면서 발생하는 문제이다.
예:
한국 시간 2025-01-01 01:00
→ UTC 기준 2024-12-31 16:00
따라서:
DATE(event_timestamp)
만 사용하면
한국 기준 날짜와 다르게 나온다.
✅ 안전한 변환
안전한 변환은 BigQuery에서 DATE 또는 TIMESTAMP 값을 다룰 때 타임존 정보를 명시하여 예상치 못한 날짜 오류를 방지하는 것이다.
DATE(event_timestamp,'Asia/Seoul')
타임존을 반드시 명시해야 한다.
BETWEEN 대신 범위 비교를 추천하는 이유
잘못된 예:
BETWEEN 대신 범위 비교를 사용하는 것은 마지막 날짜의 자정 이후 데이터 누락을 방지하기 위함이다.
WHERE event_timestamp BETWEEN
TIMESTAMP('2025-01-01','Asia/Seoul')
AND TIMESTAMP('2025-01-31','Asia/Seoul')
이 경우 1월 31일 23:59:59 이후 데이터 누락 가능.
✅ 안전한 패턴
안전한 날짜 비교 패턴은 BETWEEN 대신 '>='와 '<' 연산자를 사용하여 정확한 날짜 범위를 지정하는 것이다.
WHERE event_timestamp >= TIMESTAMP('2025-01-01','Asia/Seoul')
AND event_timestamp < TIMESTAMP('2025-02-01','Asia/Seoul')
이 방식이 실무에서 가장 안전하다.
실무 시나리오 1 – 월간 매출 집계
월간 매출 집계는 특정 월의 전체 매출 데이터를 정확한 날짜 조건으로 조회하여 합산하는 것이다.
목표:
- 1월 매출 집계
안전한 방식:
SELECT
DATE(order_timestamp,'Asia/Seoul') AS order_date,
SUM(amount)
FROM table
WHERE order_timestamp >= TIMESTAMP('2025-01-01','Asia/Seoul')
AND order_timestamp < TIMESTAMP('2025-02-01','Asia/Seoul')
GROUP BY order_date
실무 시나리오 2 – 로그인 이벤트 분석
로그인 이벤트 분석은 사용자의 로그인 기록을 시간 단위로 상세하게 분석하여 행동 패턴을 파악하는 것이다.
시간 단위 분석은 TIMESTAMP 유지가 적합.
SELECT
EXTRACT(HOUR FROM event_timestamp AT TIME ZONE 'Asia/Seoul') AS hour,
COUNT(*)
FROM table
WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
GROUP BY hour
DATE vs TIMESTAMP 비교 표
| 비교 방식 | 가능여부 | 권장 |
| DATE vs DATE | ⭕ | ⭕ |
| TIMESTAMP vs TIMESTAMP | ⭕ | ⭕ |
| DATE vs TIMESTAMP 직접 비교 | ❌ | ❌ |
| DATE(event_timestamp) vs DATE | ⭕ |
Looker Studio 연결 시 주의점
Looker Studio 연결 시 주의점은 BigQuery의 TIMESTAMP 데이터를 그대로 사용하면 타임존 설정에 따라 날짜가 하루 밀릴 수 있다는 것이다.
TIMESTAMP 그대로 연결하면
리포트에서 날짜가 하루 밀릴 수 있다.
해결:
- 집계용 DATE 컬럼 생성
- 타임존 명시 후 전달
<가장 안전한 날짜 비교 패턴 요약>
가장 안전한 날짜 비교 패턴 요약은 BigQuery에서 날짜 및 시간 데이터를 다룰 때 발생할 수 있는 주요 오류를 피하기 위한 핵심 권장 사항을 정리한 것이다.
✔ 이벤트 로그는 TIMESTAMP 유지
✔ 집계용 DATE 별도 생성
✔ 타임존 명시
✔ BETWEEN 대신 범위 비교
✔ 타입 통일 후 비교
📌 최종 체크리스트
최종 체크리스트는 BigQuery에서 날짜 조건 오류를 방지하고 정확한 데이터를 얻기 위해 확인해야 할 사항들을 목록으로 정리한 것이다.
✔ WHERE에서 서로 다른 타입 비교하지 않았는가
✔ TIMESTAMP 변환 시 타임존 명시했는가
✔ DATE(event_timestamp) 사용 시 국가 기준 반영했는가
✔ BETWEEN 대신 >= / < 패턴 사용했는가
✔ Looker 연결 전 타입 정리했는가
마무리
BigQuery WHERE 날짜 오류를 해결하는 것은 데이터 타입과 타임존에 대한 정확한 이해를 바탕으로 한다.
BigQuery WHERE 날짜 오류는
쿼리 문법 문제가 아니라
타입과 타임존 이해 부족에서 발생한다.
DATE와 TIMESTAMP를 정확히 구분하면
실무 오류의 상당 부분을 예방할 수 있다.
데이터 분석에서 중요한 것은
함수 암기가 아니라
데이터 구조를 이해하는 것이다.
이 블로그에서는
구글시트·BigQuery·Looker Studio를 활용하면서
실제 실무에서 막혔던 문제를 구조적으로 정리하고 있다.
💬 이 글이 도움이 되셨다면
BigQuery WHERE 날짜 오류 관련 궁금한 점이나 더 알고 싶은 내용이 있다면 댓글로 남겨주세요! 실무에서 겪은 경험을 공유해 주셔도 좋습니다.
'업무 데이터 자동화' 카테고리의 다른 글
| BigQuery 날짜 변환 함수 정리 (DATE·DATETIME·TIMESTAMP 변환 패턴) (0) | 2026.02.11 |
|---|---|
| 엑셀에서 날짜 정렬이 안 될 때 원인과 해결 방법 (TEXT 날짜 문제) (0) | 2026.02.09 |
| BigQuery 날짜 타입 차이 정리 (DATE·DATETIME·TIMESTAMP 언제 쓰나?) (0) | 2026.02.04 |
| 구글시트 ARRAYFORMULA 사용 시 값이 안 나올 때 원인과 해결 방법 (0) | 2026.02.02 |
| 구글시트 날짜가 문자(TEXT)로 인식될 때 원인과 해결 방법 (0) | 2026.01.30 |
