KQLのdatetime型/timespan型と関連する関数のまとめ
KQLにおける日時のdatetime型と時間間隔のtimespan型、それらに関連する関数のまとめです。
- timespanのリテラル
- datetime/timespanの演算
- bin関数
- startofday/startofweek/startofmonth/startofyear関数
- endofday/endofweek/endofmonth/endofyear関数
- dayofweek/dayofmonth/dayofyear関数
- datetime_part関数
- datetime_add関数
- datetime_diff関数
- now/ago関数
- getyear/getmonth関数
timespanのリテラル
関数の前にまずtimespanのリテラルのおさらい。
print
day = 1d,
hour = 2h,
minute = 3m,
second = 4s,
millisecond = 5ms,
microsecond = 6microsecond,
tick = 7tick
/*
day 1.00:00:00
hour 02:00:00
minute 00:03:00
second 00:00:04
millisecond 00:00:00.0050000
microsecond 00:00:00.0000060
tick 00:00:00.0000007
*/
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/scalar-data-types/timespan
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/samples?pivots=azuremonitor#date-and-time-operations
datetime/timespanの演算
datetimeとtimespanは演算できます。
let dt = datetime(2022-01-10);
print
// 3日前
dt - 3d,
// 3日後
dt + 3d
/*
print_0 [UTC] 2022-01-07T00:00:00Z
print_1 [UTC] 2022-01-13T00:00:00Z
*/
bin関数
値を切り捨てする関数です。日付以外にも利用できますがdatetime型で使うことも多いんじゃないかなと。
let dt = datetime(2022-02-22 11:12:13);
print
dt,
// 時間までで切り捨て
bin(dt, 1h),
// 日までで切り捨て
bin(dt, 1d)
/*
print_0 [UTC] 2022-02-22T11:12:13Z
print_1 [UTC] 2022-02-22T11:00:00Z
print_2 [UTC] 2022-02-22T00:00:00Z
*/
startofday/startofweek/startofmonth/startofyear関数
日・週・月・年の始まりの日を求める関数。
let dt = datetime(2022-03-01 11:12:13);
print
dt = dt,
// 指定した日の始まり
startOfDay = startofday(dt),
// 指定した日の週の始まり(日曜)
startOfWeek = startofweek(dt),
// 指定した日の月の始まり(月初)
startOfMonth = startofmonth(dt),
// 指定した日の年の始まり(年初)
startOfYear = startofyear(dt)
/*
dt [UTC] 2022-03-01T11:12:13Z
startOfDay [UTC] 2022-03-01T00:00:00Z
startOfWeek [UTC] 2022-02-27T00:00:00Z
startOfMonth [UTC] 2022-03-01T00:00:00Z
startOfYear [UTC] 2022-01-01T00:00:00Z
*/
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/startofdayfunction
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/startofmonthfunction
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/startofweekfunction
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/startofyearfunction
endofday/endofweek/endofmonth/endofyear関数
日・週・月・年の終わりの日を求める関数。
let dt = datetime(2022-03-01 11:12:13);
print
dt = dt,
// 指定した日の終わり
endOfDay = endofday(dt),
// 指定した日の週の終わり(土曜)
endOfWeek = endofweek(dt),
// 指定した日の月の終わり(月末)
endOfMonth = endofmonth(dt),
// 指定した日の年の終わり(年末)
endOfYear = endofyear(dt)
/*
dt [UTC] 2022-03-01T11:12:13Z
endOfDay [UTC] 2022-03-01T23:59:59.9999999Z
endOfWeek [UTC] 2022-03-05T23:59:59.9999999Z
endOfMonth [UTC] 2022-03-31T23:59:59.9999999Z
endOfYear [UTC] 2022-12-31T23:59:59.9999999Z
*/
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/endofdayfunction
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/endofmonthfunction
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/endofweekfunction
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/endofyearfunction
dayofweek/dayofmonth/dayofyear関数
週初め・月初・年初からの日数を求める関数。
dayoOfWeek関数の戻り値はtimespan型で、dayofmonth/dayofyear関数の戻り値はint型。
let dt = datetime(2022-03-14 11:12:13);
print
dt = dt,
// 週初め(日曜)からの日数
// 月曜なら1dになる
dayoOfWeek = dayofweek(dt),
// 月初からの日数
dayoOfMonth = dayofmonth(dt),
// 年初からの日数
dayoOfYear = dayofyear(dt)
/*
dt [UTC] 2022-03-14T11:12:13Z
dayoOfWeek 1.00:00:00
dayoOfMonth 14
dayoOfYear 73
*/
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/dayofweekfunction
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/dayofmonthfunction
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/dayofyearfunction
datetime_part関数
dattime型の部分を整数として取得します。
let dt = datetime(2022-03-10 11:12:13.14);
print
year = datetime_part("year", dt),
month = datetime_part("month", dt),
day = datetime_part("day", dt),
hour = datetime_part("hour", dt),
minute = datetime_part("minute", dt),
second = datetime_part("second", dt),
millisecond = datetime_part("millisecond ", dt),
// 四半期
quarter = datetime_part("quarter", dt),
// 年初からの日数
dayOfYear = datetime_part("dayOfYear", dt),
// 年初からの週数
weekOfYear = datetime_part("week_of_year", dt)
/*
year 2022
month 3
day 10
hour 11
minute 12
second 13
millisecond 140
quarter 1
dayOfYear 69
weekOfYear 10
*/
1月~3月の場合はクォーターが1になるようです。
print
q1 = datetime_part("quarter", datetime(2022-01-01)),
q2 = datetime_part("quarter", datetime(2022-04-01)),
q3 = datetime_part("quarter", datetime(2022-07-01)),
q4 = datetime_part("quarter", datetime(2022-10-01))
/*
q1 1
q2 2
q3 3
q4 4
*/
datetime_add関数
dattime型の指定した部分の値を加算する関数です。
let dt = datetime(2022-01-01);
print
year = datetime_add("year", 1, dt),
quarter = datetime_add("quarter", 1, dt),
month = datetime_add("month", 1, dt),
week = datetime_add("week", 1, dt),
day = datetime_add("day", 1, dt),
hour = datetime_add("hour", 1, dt),
minute = datetime_add("minute", 1, dt),
second = datetime_add("second", 1, dt)
/*
year [UTC] 2023-01-01T00:00:00Z
quarter [UTC] 2022-04-01T00:00:00Z
month [UTC] 2022-02-01T00:00:00Z
week [UTC] 2022-01-08T00:00:00Z
day [UTC] 2022-01-02T00:00:00Z
hour [UTC] 2022-01-01T01:00:00Z
minute [UTC] 2022-01-01T00:01:00Z
second [UTC] 2022-01-01T00:00:01Z
*/
datetime_diff関数
datetime型の差を指定した単位で求めます。
let dt1 = datetime(2023-01-01);
let dt2 = datetime(2022-01-01);
print
year = datetime_diff("year", dt1, dt2),
quater = datetime_diff("quarter", dt1, dt2),
month = datetime_diff("month", dt1, dt2),
week = datetime_diff("week", dt1, dt2),
day = datetime_diff("day", dt1, dt2)
/*
year 1
quater 4
month 12
week 53
day 365
*/
let dt1 = datetime(2022-01-01 02:00:00);
let dt2 = datetime(2022-01-01 01:00:00);
print
hour = datetime_diff("hour", dt1, dt2),
minute = datetime_diff("minute", dt1, dt2),
second = datetime_diff("second", dt1, dt2)
/*
hour 1
minute 60
second 3600
*/
now/ago関数
now関数は現在日時、ago関数は現在日時から減算した日時を取得します。同じステートメント内で複数呼び出した場合は同じ値になるとのことです。
print
// 今
now(),
// 1時間前
now(-1h),
// 1時間前
ago(1h)
// 結果は省略
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/nowfunction
- https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/query/agofunction
getyear/getmonth関数
日付から年や月を取得します。datetime_part関数のショートハンド的な感じですかね。
let dt = datetime(2022-03-10);
print
year = getyear(dt),
month = getmonth(dt)
/*
year 2022
month 3
*/