Post

[BigQuery] Invalid date


Error for “Invalid date”

다음과 같이 에러가 발생했을 경우, 자신이 짠 쿼리에관한 자료형을 면밀히 살펴볼 필요가있다.

1

나의 경우 아무생각없이 빅쿼리의 주의 문구 설명대로 자료형을 변환하다보니 위와 같은 오류가 발생하였다.

SELECT	DATE_DIFF( CAST(FORMAT_DATE('%Y/%m/%d', CURRENT_DATE()) AS DATE), 
        CAST(FORMAT_DATE('%Y/%m/%d', CAST([타임스탬프 자료형] AS DATE)) AS DATE), DAY) AS DATE_DIFF

우선 에러가 발생한 원인은 `NUMERIC( ex.날짜형자료형 )`필드의 데이터를 `STRING`으로 CAST를 진행했기 때문이다.

위의 SELECT절을 예로 들어 설명하면 다음과 같다. DATE_DIFF함수를 이용하여 날짜간의 차이를 구하기 위해, TIMESTAMP의 필드를DATE로 CAST시키고 포맷변환을 위해 FORMAT_DATE함수를 사용하였다.

FORMAT_DATE('%Y/%m/%d', CAST([타임스탬프 자료형]  AS  DATE))

CAST된 TIMESTAMP자료형이 DATE자료형으로 바뀌고 FORMAT_DATE를 통해 STRING자료형으로 변환되었다. 즉 DATE -> STRING의 과정을 거친 것이다.

나 같은 경우는 내가 사용할 쿼리의 자료형을 다시 파악하고,
NUMERIC데이터에서 STRING데이터로 변환하지않고 수행하였다.
(신경써서 쿼리를 작성하니 더 간결해지고 보기 깔끔해졌다…)

DATE_DIFF( CURRENT_DATE(), CAST(date_joined AS DATE), DAY)

항상 자료형을 CAST할 때는 꼼꼼히 신경쓰는 습관을 가지자.


Index

  • https://kb.tableau.com/articles/issue/Error-Invalid-date-When-Connecting-to-BigQuery-Using-Custom-SQL
This post is licensed under CC BY 4.0 by the author.