4

BigQuery でデータベースのローカル コピーを維持する予定です。API と tabledata:list を使用します。このデータベースは私自身のものではなく、新しいデータを追加することによってメンテナーによって定期的に更新されています (たとえば 1 時間ごと)。

  1. まず、このデータが追加されると、必ずデータベースの最後に追加されると想定できますか?

  2. ここで、現在データベースに 1,000,000 行があり、tabledata:list をページングしてこれらすべてをダウンロードしているとします。また、データベースが途中で (10,000 行で) 更新されたとします。ページ トークンを使用することで、開始時に存在する 100 万行のみをデータベースにある順序でダウンロードすることを保証できますか?

  3. 最後に、コピーを更新するために来たとしましょう。startIndex を 1,000,000 に設定して tabledata:list を開始し、maxResults を 1000 に設定した場合、予期した更新データを含む 10 ページを取得できますか?

これらの問題はすべて、bigquery がデータの順序を尊重しているかどうか、この順序が tabledata:list で使用されているかどうか、追加されたデータが前のデータに従うことが保証されているかどうかに帰着すると思います。

値が一意の列がありselect count(1) from table、テーブルの長さを簡単に取得できるため、もちろん、ローカル データベースの長さとリモート データベースの長さを比較することで、ローカル コピーが完全であることを確認できますが、上記が保証されず、データに穴が開いてしまった場合、主キーがシーケンシャルではなく (それ以外の場合は不足している行を埋めることができます)、データベースが非常に大きいため、修正するのは非常に非現実的です。

4

1 に答える 1

6
  1. データを追加すると、テーブル データ リストの末尾に追加されますが、bigquery は定期的にデータを結合する場合があり、順序は考慮されません。順序を保持できるようにすること、または少なくとも最新のデータにアクセスする方法があることについて議論してきましたが、これはまだ実装または設計されていません。それがあなたにとって重要な機能である場合は、お知らせください。それに応じて優先順位を付けます。

  2. ページ トークンを使用すると、安定したリスティングが保証されます。データのページングの途中でテーブルが更新された場合でも、ページ トークンを作成したときにテーブルにあったデータのみが表示されます。このため、ページ トークンは 24 時間のみ有効であることに注意してください。

  3. これは、テーブルを更新してから結合が発生していない限り機能するはずです。

テーブル内の行数を取得するには、tables.get を呼び出します。これは通常、クエリを実行するよりも簡単で高速です。

于 2013-05-31T17:59:50.627 に答える