从 bigquery 卸载 table 到 Google 云存储非常慢
extremely slow unloading table from bigquery to Google cloud storage
我是 运行 一个 python 脚本,它将一个名为 newdataset.newtable2
的 table 从 Bigquery 卸载到我应用程序的 google 存储桶。
这是我的代码:
scope = ["https://www.googleapis.com/auth/bigquery"]
project_id='txxxxxxx9'
dataset_id = 'newdataset'
table_id = 'newtable2'
with open('/home/xxxxxxx/Dropbox/access_keys/google_storage/xxxxxxxx.json') as auth_file:
key = json.load(auth_file)
client_email = key['client_email']
pv_key = key['private_key']
credentials = SignedJwtAssertionCredentials(client_email, pv_key, scope=scope)
bigquery_service = build('bigquery', 'v2', credentials=credentials)
job_data = {
'jobReference': {
'projectId': project_id,
'jobId': str(uuid.uuid4())
},
'configuration': {
'extract': {
'sourceTable': {
'projectId': project_id,
'datasetId': dataset_id,
'tableId': table_id,
},
'destinationUris': ['gs://xxxxxxx/test.csv'],
'destinationFormat': 'CSV'
}
}
}
query_job = bigquery_service.jobs().insert(projectId=project_id, body=job_data).execute()
我对请求的缓慢感到惊讶。我的 table 是 300Mb,请求持续 5 分钟。请注意,此请求未出现在我的 BigQuery UI 的作业部分中,但 5 分钟后,可以在我的存储桶中找到 .csv 并且看起来不错。
在 Redshift 和 S3 中,这样的请求不会再持续 5 秒。我的问题:我在做正确的事吗?还是我遗漏了什么?
如果我的代码很好,谁能告诉我为什么这个基本任务要花这么多时间?
注意:我现在使用的是免费账户(未升级)
按照您制定请求的方式,它是在单个工作人员中编写一个 300 MB 的 CSV 文件。这将是相当缓慢的。 (5分钟还是比我预想的要长,但在合理范围内)
如果您在目标 URI 中使用 glob 模式(例如 gs://xxxxxxx/test*.csv
),它应该会快得多,因为它可以并行完成。
我是 运行 一个 python 脚本,它将一个名为 newdataset.newtable2
的 table 从 Bigquery 卸载到我应用程序的 google 存储桶。
这是我的代码:
scope = ["https://www.googleapis.com/auth/bigquery"]
project_id='txxxxxxx9'
dataset_id = 'newdataset'
table_id = 'newtable2'
with open('/home/xxxxxxx/Dropbox/access_keys/google_storage/xxxxxxxx.json') as auth_file:
key = json.load(auth_file)
client_email = key['client_email']
pv_key = key['private_key']
credentials = SignedJwtAssertionCredentials(client_email, pv_key, scope=scope)
bigquery_service = build('bigquery', 'v2', credentials=credentials)
job_data = {
'jobReference': {
'projectId': project_id,
'jobId': str(uuid.uuid4())
},
'configuration': {
'extract': {
'sourceTable': {
'projectId': project_id,
'datasetId': dataset_id,
'tableId': table_id,
},
'destinationUris': ['gs://xxxxxxx/test.csv'],
'destinationFormat': 'CSV'
}
}
}
query_job = bigquery_service.jobs().insert(projectId=project_id, body=job_data).execute()
我对请求的缓慢感到惊讶。我的 table 是 300Mb,请求持续 5 分钟。请注意,此请求未出现在我的 BigQuery UI 的作业部分中,但 5 分钟后,可以在我的存储桶中找到 .csv 并且看起来不错。
在 Redshift 和 S3 中,这样的请求不会再持续 5 秒。我的问题:我在做正确的事吗?还是我遗漏了什么?
如果我的代码很好,谁能告诉我为什么这个基本任务要花这么多时间?
注意:我现在使用的是免费账户(未升级)
按照您制定请求的方式,它是在单个工作人员中编写一个 300 MB 的 CSV 文件。这将是相当缓慢的。 (5分钟还是比我预想的要长,但在合理范围内)
如果您在目标 URI 中使用 glob 模式(例如 gs://xxxxxxx/test*.csv
),它应该会快得多,因为它可以并行完成。