【发布时间】:2021-12-16 17:05:07
【问题描述】:
我正在使用以下脚本从 bigquery 表中进行选择,然后遍历查询作业结果行并一次写入一行到 csv 文件。
我的问题是,对于某些查询作业,写入的总行数与预期相符,但有些行重复而其他行丢失。例如,查询本身可能返回 25k 行并且没有重复。但是在写入的25k行中,与查询结果相比,有15条记录重复,15条记录丢失。
一个有问题的文件在压缩前超过 3Gb,但对于其他查询(选择相同的列但不同的 visitStartTime 范围),该文件会更大,但不会出现重复问题。为什么对于某些查询作业,一些记录会重复写入,而另一些则根本不写入,这是否有原因?
from google.cloud import bigquery
from google.oauth2 import service_account
import csv
query_string = """select c1,c2,c3,c4,c5
from `mydb.mydataset.mytable_20211212`
where visitStartTime >= 1639350000.0 AND
visitStartTime < 1639353600.0"""
credentials = service_account.Credentials.from_service_account_file(key_path, scopes=["https://www.googleapis.com/auth/cloud-platform"],)
client = bigquery.Client(credentials=credentials, project=credentials.project_id, )
query_job = client.query(query_string)
with open('myfilename.csv', 'w', newline='', encoding="utf-8") as csvfile:
writer = csv.writer(csvfile, quoting=csv.QUOTE_NONE, delimiter='|', quotechar='', escapechar='\\')
# write header row
writer.writerow(["c1","c2","c3","c4","c5"])
# write data rows
for row in query_job:
writer.writerow([row.c1, row.c2, row.c3, row.c4, row.c5])
【问题讨论】: