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와 같게 설정되어 있다.
'분석 > 데이터분석' 카테고리의 다른 글
[SQL] 월별로 잔존타입별 고객수 계산 (0) | 2024.01.25 |
---|---|
[BigQuery] 연속된 일자 생성하기 (0) | 2023.10.10 |
[BigQuery] 빅쿼리에서 values 절을 구현해보자. (0) | 2023.02.20 |
[BigQuery] 빅쿼리에서 min_by, max_by (0) | 2023.01.30 |
[BigQuery] 빅쿼리에서 여러 날짜별 테이블을 한 쿼리로 (0) | 2022.08.17 |