問題
分割テーブルの概要 | BigQuery | Google Cloud
BigQuery の取り込み時間分割テーブルが持つ _PARTITIONTIME
疑似列には,そのレコードが挿入された日付が記録される.つまり 2018-06-22 に挿入されたレコードに絞って検索したい場合は SQL にて以下のように指定すればよい.
WHERE _PARTITIONTIME BETWEEN TIMESTAMP("2018-06-22") AND TIMESTAMP("2018-06-23")
しかし,上記のように WHERE
句を指定してもデータが返ってこなかった.一方で _PARTITIONTIME
を指定しなければデータが返ってきた.この結果を受けて _PARTITIONTIME
に何が格納されているのか調べたところ NULL だった.
原因と解決
BigQuery へのデータのストリーミング | BigQuery | Google Cloud
データがコピーやエクスポートのオペレーションに使用可能になるまでに最大 90 分かかることがあります。また、分割テーブルにストリーミングする場合、ストリーミング バッファ内のデータは _PARTITIONTIME 疑似列が NULL 値になります。
データ挿入後の最大 90 分間は _PARTITIONTIME
が NULL 値になるとのこと.確かに,挿入からある程度時間が経ったレコードについては _PARTITIONTIME
にレコードが挿入された日付が格納されており, WHERE
句で使用できるようになっていた.
検索対象に直近 90 分間に挿入されたデータを含めたい場合は WHERE
句で OR _PARTITIONTIME IS NULL
を指定すればよい.