メインコンテンツへスキップ
時系列データを扱う際には、データの欠損やデータが発生していない期間によって、ギャップが生じることがあります。 通常、データをクエリする際には、そのようなギャップはないほうが望まれます。このような場合に、WITH FILL 句が役立ちます。 このガイドでは、WITH FILL を使用して時系列データのギャップを補完する方法を説明します。

準備

GenAI画像サービスで生成された画像のメタデータを格納する、次のようなテーブルがあるとします。
いくつかのレコードをインポートしてみましょう:

バケットごとのクエリ

2023年3月24日の 00:24:03 から 00:24:04 の間に作成されたイメージを調べるため、その時点に対応するパラメータをいくつか作成しましょう。
次に、データを100ms単位のバケットにまとめ、そのバケット内で作成された画像の数を返すクエリを記述します:
結果セットには、イメージが作成されたバケットだけが含まれますが、時系列分析では、エントリがない場合でも100msごとのすべてのバケットを返したいことがあります。

WITH FILL

これらのギャップを補完するには、WITH FILL 句を使用します。 補完するギャップの間隔を表す STEP も指定します。 DateTime 型では既定で 1 秒ですが、ここでは 100ms 間隔のギャップを補完したいため、ステップ値として 100ms の時間間隔を指定します:
ギャップが 0 で補完され、count カラムに反映されていることがわかります。

WITH FILL…FROM

ただし、時間範囲の先頭には依然としてギャップがあるため、FROM を指定して補完できます。
結果から、00:24:03.000 から 00:24:03.500 までのすべてのバケットが表示されるようになったことがわかります。

WITH FILL…TO

ただし、時間範囲の末尾にはまだいくつか欠けているバケットがあり、これは TO の値を指定することで補完できます。 TO には終端値が含まれないため、確実に含めるには終了時刻に少し値を足します。
これでギャップはすべて補完され、00:24:03.000 から 00:24:05.000 まで 100 ms ごとにエントリが存在するようになりました。

累積カウント

ここで、バケット全体で作成されたイメージ数の累積カウントを保持したいとします。 これを行うには、以下のように cumulative カラムを追加します。
累積カラムの値が、期待どおりに機能していません。

WITH FILL…INTERPOLATE

count カラムが 0 の行では、累積カラムの値も 0 になりますが、ここでは cumulative カラムの直前の値を使いたいところです。 これを行うには、以下のように INTERPOLATE 句を使用します。
ずっと見栄えが良くなりました。 では最後の仕上げとして、bar 関数を使って棒グラフを追加し、新しいカラムを INTERPOLATE 句に加えるのも忘れないようにしましょう。
最終更新日 2026年7月2日