時系列分析関数
ClickHouse における時系列分析は、標準的な SQL の集約関数およびウィンドウ関数を用いて実行できます。
時系列データを扱う際には、一般的に次の 3 種類のメトリクスを扱います。
- 時間とともに単調に増加するカウンターメトリクス(ページビューやイベント総数など)
- ある時点の状態を表し、増減しうるゲージメトリクス(CPU 使用率や温度など)
- 観測値をサンプリングし、バケット単位でカウントするヒストグラム(リクエストの処理時間やレスポンスサイズなど)
これらのメトリクスに対する一般的な分析パターンには、期間をまたいだ値の比較、累積合計の計算、変化率の算出、分布の分析などがあります。
これらはすべて、集約関数の組み合わせ、sum() OVER のようなウィンドウ関数、および histogram() のような専用関数を用いることで実現できます。
期間ごとの変化
時系列データを分析する際には、多くの場合、ある期間から次の期間へ値がどのように変化したかを把握する必要があります。
これは、ゲージメトリクスとカウンターメトリクスの両方において重要です。
lagInFrame ウィンドウ関数を使うと、直前の期間の値にアクセスして、これらの変化を計算できます。
次のクエリでは、"Weird Al" Yankovic の Wikipedia ページのビュー数について、日次の増減を計算する方法を示しています。
trend 列には、前日と比較してトラフィックが増加したか(正の値)、減少したか(負の値)が表示され、異常なスパイクや急激な減少を特定するのに役立ちます。
累積値
カウンター型メトリクスは、時間の経過とともに自然に値が増加していきます。 この累積的な増加を分析するには、ウィンドウ関数を使って累積合計を計算します。
次のクエリは、累積合計を作成する sum() OVER 句を利用した例です。bar() 関数は、この増加を視覚的に表現します。
レート計算
時系列データを分析する際には、単位時間あたりのイベントの発生レートを把握することがしばしば有用です。 このクエリは、1 時間あたりの合計値を 1 時間の秒数(3600)で割ることで、1 秒あたりのページビューのレートを計算します。 バーグラフの可視化により、アクティビティがピークとなる時間帯を特定しやすくなります。
ヒストグラム
時系列データのよくあるユースケースとして、追跡しているイベントに基づいてヒストグラムを構築することがあります。
合計ヒット数に基づいてページ数の分布を把握したいとし、対象を 10,000 ヒットを超えるページに限定するとします。
histogram() 関数を使用すると、ビンの数に基づいて自動的に適応的なヒストグラムを生成できます。
次に、arrayJoin() を使ってデータを加工し、bar() で可視化します。