DATETIMECONVERT
DATETIMECONVERT
DATETIMECONVERT 함수는 타임스탬프를 포함한 컬럼의 값을 다른 시간 단위로 변환하고, 주어진 시간 세밀도에 따라 버킷화하는 함수예요.
출처: 문서
본문
타임스탬프를 포함한 컬럼의 값을 다른 시간 단위로 변환하고, 주어진 시간 세밀도에 따라 버킷화해요.
시그니처 (Signature)
DATETIMECONVERT(columnName, inputFormat, outputFormat, outputGranularity, bucketTimeZone)
inputFormat과 outputFormat은 다음 구조로 정의돼요:
<time size>:<time unit>:<time format>:<pattern>
여기서:
time size- 시간 단위의 크기 (예: 1, 10)time unit-DAYS,HOURS,MINUTES,SECONDS,MILLISECONDS,MICROSECONDS,NANOSECONDStime formatEPOCHSIMPLE_DATE_FORMAT패턴 -SIMPLE_DATE_FORMAT인 경우 정의돼요 (예:yyyy-MM-dd).tz(timezone)을 사용해 특정 시간대를 전달할 수 있어요. 시간대는 길거나 짧은 문자열 형식일 수 있어요. (예:Asia/Kolkata또는PDT)
granularity는 <time size>:<time unit> 형식으로 지정돼요.
bucketTimeZone - (선택 사항) 버킷화할 때 사용되는 시간대로, 예: 'PST' 또는 'Europe/London' 또는 '+00:00'. 이 매개변수를 설정하면 입력과 출력이 에포크 타임스탬프인 경우에도 세밀도 단위보다 한 단계 큰 시간 단위(예: 일 단위 세밀도면 월)에 상대적으로 버킷화가 수행돼요.
예를 들어, 2024-09-20T00:13:27.834Z의 에포크 밀리초를 5시간으로 버킷화하면 다음과 같아요:
- 시간대 없음 -> 2024-09-19T20:00:00.000Z
- 명시적 UTC 시간대 -> 2024-09-20T00:00:00.000Z
마찬가지로 날짜의 에포크 밀리초를 5일로 버킷화하면 다음과 같아요:
- 시간대 없음 -> 2024-02-19T00:00:00.000Z
- 명시적 UTC 시간대 -> 2024-09-16T00:00:00.000Z
사용 예시 (Usage Examples)
다음 예시는 Batch JSON Quick Start를 기반으로 해요.
created_at_timestamp를 에포크 이후 밀리초에서 에포크 이후 일로 변환하고, 1일 세밀도로 버킷화:
select id,
created_at_timestamp,
cast(created_at_timestamp AS long) AS timeInMs,
DATETIMECONVERT(
created_at_timestamp,
'1:MILLISECONDS:EPOCH',
'1:DAYS:EPOCH',
'1:DAYS'
) AS convertedTime
from githubEvents
WHERE id = 7044874134
| id | created_at_timestamp | timeInMs | convertedTime |
|---|---|---|---|
| 7044874134 | 2018-01-01 11:00:00.0 | 1514804402000 | 17532 |
created_at_timestamp를 시간대 없이 1일 세밀도로 버킷화:
select id,
created_at_timestamp,
cast(created_at_timestamp AS long) AS timeInMs,
DATETIMECONVERT(
created_at_timestamp,
'1:MILLISECONDS:EPOCH',
'1:MILLISECONDS:EPOCH',
'1:DAYS'
) AS convertedTime
from githubEvents
WHERE id = 7044874134
| id | created_at_timestamp | timeInMs | convertedTime |
|---|---|---|---|
| 7044874134 | 2018-01-01 12:00:02.0 | 1514804402000 | 1514764800000 |
created_at_timestamp를 Europe/Berlin 시간대를 사용해 1일 세밀도로 버킷화:
select id,
created_at_timestamp,
cast(created_at_timestamp AS long) AS timeInMs,
DATETIMECONVERT(
created_at_timestamp,
'1:MILLISECONDS:EPOCH',
'1:MILLISECONDS:EPOCH',
'1:DAYS',
'Europe/Berlin'
) AS convertedTime
from githubEvents
WHERE id = 7044874134
| id | created_at_timestamp | timeInMs | convertedTime |
|---|---|---|---|
| 7044874134 | 2018-01-01 12:00:02.0 | 1514804402000 | 1514761200000 |
created_at_timestamp를 15분 세밀도로 버킷화:
select id,
created_at_timestamp,
cast(created_at_timestamp AS long) AS timeInMs,
DATETIMECONVERT(
created_at_timestamp,
'1:MILLISECONDS:EPOCH',
'1:MILLISECONDS:EPOCH',
'15:MINUTES'
) AS convertedTime
from githubEvents
WHERE id = 7044874134
| id | created_at_timestamp | timeInMs | convertedTime |
|---|---|---|---|
| 7044874134 | 2018-01-01 11:00:00.0 | 1514804402000 | 1514804400000 |
created_at_timestamp를 yyyy-MM-dd 형식으로 변환하고 1일 세밀도로 버킷화:
select id,
created_at_timestamp,
cast(created_at_timestamp AS long) AS timeInMs,
DATETIMECONVERT(
created_at_timestamp,
'1:MILLISECONDS:EPOCH',
'1:DAYS:SIMPLE_DATE_FORMAT:yyyy-MM-dd',
'1:DAYS'
) AS convertedTime
from githubEvents
WHERE id = 7044874134
| id | created_at_timestamp | timeInMs | convertedTime |
|---|---|---|---|
| 7044874134 | 2018-01-01 11:00:00.0 | 1514804402000 | 2018-01-01 |
created_at_timestamp를 Pacific/Kiritimati 시간대에서 yyyy-MM-dd HH:mm 형식으로 변환:
select id,
created_at_timestamp,
cast(created_at_timestamp AS long) AS timeInMs,
DATETIMECONVERT(
created_at_timestamp,
'1:MILLISECONDS:EPOCH',
'1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm tz(Pacific/Kiritimati)',
'1:MILLISECONDS'
) AS convertedTime
from githubEvents
WHERE id = 7044874134
| id | created_at_timestamp | timeInMs | convertedTime |
|---|---|---|---|
| 7044874134 | 2018-01-01 11:00:00.0 | 1514804402000 | 2018-01-02 01:00 |
created_at_timestamp를 Pacific/Kiritimati 시간대에서 yyyy-MM-dd 형식으로 변환하고 1일 세밀도로 버킷화:
select id,
created_at_timestamp,
cast(created_at_timestamp AS long) AS timeInMs,
DATETIMECONVERT(
created_at_timestamp,
'1:MILLISECONDS:EPOCH',
'1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm tz(Pacific/Kiritimati)',
'1:DAYS'
) AS convertedTime
from githubEvents
WHERE id = 7044874134
| id | created_at_timestamp | timeInMs | convertedTime |
|---|---|---|---|
| 7044874134 | 2018-01-01 11:00:00.0 | 1514804402000 | 2018-01-02 00:00 |
created_at_timestamp를 UTC(기본값) 시간대에서 yyyy-MM-dd 형식으로 변환하고 1일 세밀도로 버킷화:
select id,
created_at_timestamp,
cast(created_at_timestamp AS long) AS timeInMs,
DATETIMECONVERT(
created_at_timestamp,
'1:MILLISECONDS:EPOCH',
'1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm',
'1:DAYS',
'Europe/Berlin'
) AS convertedTime
from githubEvents
WHERE id = 7044874134
| id | created_at_timestamp | timeInMs | convertedTime |
|---|---|---|---|
| 7044874134 | 2018-01-01 12:00:02.0 | 1514804402000 | 2017-12-31 23:00 |