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
。