본문 바로가기
분석/데이터분석

[BigQuery] datetime 과 timestamp 의 차이점 ?

by 여우요원 2023. 8. 25.

Google 빅쿼리를 사용하면서 컬럼의 날짜 타입을 보면 date, time 등은 직관적으로 쉽게 이해할 수 있다.

그리고 datetime 이라는 타입은 역시 날짜와 시간의 정보가 함께 있는 타입이구나 라고 어렵지 않게 이해할 수 있다.

 

그런데 timestamp 라는 타입이 또 존재한다. 이 역시 날짜와 시간의 정보가 함께 있는 타입이다. 

 

그렇다면

(1) 이 두 타입 datetime 과 timestamp 의 차이는 무엇일까?

 

 결론 먼저 이야기하자면, 

  • datetime : 로컬의 시간을 저장하는 타입
  • timestamp : UTC 즉, 세계 표준시를 저장하는 타입

이라고 말할 수 있다.

 

그래서 bigquery 에서 아래의 그림처럼 조회를 해보면 timestamp 옆에는 UTC라는 표시가 되어있다.

그리고 위에 나온 시각은 글을 쓰고 있는 현재 한국 시각 (2023-08-25 16:09) 보다 9시간이 빠르다.

참고로 utc + 9 hour = kst (한국표준시) 이다.

 

 

(2) 그럼 현재 한국의 표준시를 구하려면 어떻게 해야할까?

  • current_date 또는 current_timestamp 에서 9시간을 더하여 구한다.
    아래 그림에서 처럼 둘 다 모두 9시간이 더해져서 한국시간이 구해졌지만, timestamp에서 9시간을 더한 결과에는 UTC가 아닌데, UTC라고 표시되어 있다.
  • 즉, 시간은 KST 이지만 내용(타입)은 UTC로 인식하고 있는 것이다. 

  • 그래서 UTC (current_timestamp) 를 KST 로 변환하는 것은 아래와 같이 하는 것이 맞다.
  • 하나. current_datetime 에 지역명을 명시하여 local time을 구한다.
  • 둘. utc에 지역명을 명시하여 datetime (로컬시간)으로 변경한다. 
  • 둘 다 같은 결과이며, 결과에도 UTC라는 표시가 되어있지않다. 

(3) 그럼 현재의 local 시간을 UTC로 변경하려면 아래와 같이 할 수 있다.

  • 'Asia/Seoul'의 로컬시인 current_datetime() 을 표준시 (datetime)으로 변경한다는 의미이다. 그래서 결과도 -9 시간이 적용되었다.

(4) 결론

  • 실제로는 큰 구분 없이 사용되기도 하고 사용상에 불편함이 있지도 않다. 
    단지, 비슷한 타입이 왜 두 개가 있는지, 그 차이는 무엇인지 확인한다.
  • datetime 은 엄밀히는 로컬타임을 , timestamp는 UTC를 저장하는 용도

 

참고로, 필자가 사용하는 시스템은 timezone이 utc와 같게 설정되어 있다.