2015-11-04 80 views
1

我正在运行一个python脚本,该脚本从Bigquery卸载名为newdataset.newtable2的表格,以便将其存储到我的应用的Google存储分区中。从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() 

我的请求的缓慢感到惊讶。我的表格是300Mb,请求持续5分钟。请注意,此请求未显示在我的BigQuery用户界面的作业部分中,但5分钟后,可以在我的存储区中找到.csv并且看起来不错。

在Redshift和S3中,这样的请求不会持续5秒。我的问题:我做对了吗?或者我错过了什么?

如果我的代码好,有人能告诉我为什么这个基本任务需要这么多时间吗?

注:我使用的是免费帐户现在(未升级)

+0

你跑了多少次,5分钟是平均还是只有一次? – Pentium10

+0

我尝试了几次,更改了gs上的输出文件的名称。平均时间为5分钟。即使从控制台上做,时间也只有5分钟。事实上它从来没有低于5分钟。请注意,我的桶可以在欧洲西部,我不知道如何知道它在哪里。 – sweeeeeet

+1

我认为您应该提交性能问题通知单https://code.google.com/p/google-bigquery/请提及您的项目并提供详细信息,以便工程师确定您的问题作业。 – Pentium10

回答

1

你制定你的要求的方式,它是写在一个工人一个300 MB CSV文件。这将会相当缓慢。 (5分钟仍比我预期的要长,但在合理范围内)

如果在目标URI中使用glob模式(例如gs://xxxxxxx/test*.csv),它应该快得多,因为它可以并行完成。

+0

https://code.google.com/p/google-bigquery/issues/detail?id= 361&sort = -id – Pentium10

+0

你打算优化这个出口时间吗? – sweeeeeet

+0

我预计这会变得更快;但我不想在时间框架上猜测什么时候会发生。 –