0

Google Python API を使用して BigQuery を操作しています。

プロジェクト内のすべてのジョブを使用jobs().list()してページ分割しようとしています。jobs().list_next()次のコードでジェネレーターを使用しています。

request = service.jobs().list(projectId=project_id,
                              allUsers=True,
                              stateFilter="done",
                              )
                              # or maxResults=500) 
                              # or maxResults=1000) 
                              # or maxResults=64000)
while request is not None:
    response = request.execute()
    for x in response["jobs"]:
        yield x
    request = service.jobs().list_next(request, response)

問題は、 の使い方によってmaxResults、得られるジョブ リストが異なることです。

  • 引数を使用しないmaxResultsと、9986 個のジョブが表示されます。
  • 使用するmaxResults=500と、8596 個のジョブが表示されます。
  • 使用するmaxResults=1000と、6743 件のジョブが表示されます。
  • 使用するmaxResults=64000と、6743 件のジョブが表示されます。

ジョブの数は毎回同じであると予想しているため、API を正しく使用しているかどうかはわかりません。

プロジェクト内のすべてのジョブをループする正しい方法は何ですか?


(2013 年 8 月 14 日水曜日 15:30:29 CDT 更新)

まだこれを理解しようとしています。@Michael Manoochehri が親切に提供してくれたコードを、異なる を使用して 3 回実行しましたmaxResults。毎回報告されるジョブ数に関するさまざまな情報と、それらの相互関係を以下に示します。

s1 -> no maxResults
s2 -> maxResults=500
s3 -> maxResults=1000

|s1| -> 10112
|s2| -> 8579
|s3| -> 6556

|s1 intersection s2| -> 8578
|s2 difference s1| -> 1
|s1 difference s2| -> 1534

|s1 intersection s3| -> 6556
|s3 difference s1| -> 0
|s1 difference s3| -> 3556

|s3 intersection s2| -> 6398
|s2 difference s3| -> 2181
|s3 difference s2| -> 158

使用されているジョブに関係なく、一貫した合計ジョブ数が表示されない理由はまだわかりませんmaxResults

4

1 に答える 1