首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何安排从BigQuery表到云存储的导出?

如何安排从BigQuery表到云存储的导出?
EN

Stack Overflow用户
提问于 2020-01-10 19:19:59
回答 2查看 6.3K关注 0票数 3

我已经在BigQuery中成功地安排了我的查询,结果被保存为数据集中的表。我看到了很多关于将中传输到BigQuery或Cloud的信息,但我还没有发现任何关于将导出( BigQuery表)调度到云存储( Cloud )的信息。

是否有可能安排将BigQuery表导出到云存储,以便我可以进一步安排通过Google数据传输服务将其发送给我?

EN

回答 2

Stack Overflow用户

发布于 2020-01-10 21:43:16

没有用于调度BigQuery表导出的托管服务,但一种可行的方法是将云函数云调度器结合使用。

云函数将包含从BigQuery表导出到云存储的必要代码。有多种编程语言可供选择,例如PythonNode.JSGo

云调度程序将定期以cron格式向云函数发送一个HTTP调用,然后触发该函数并以编程方式运行导出。

作为一个示例,,更具体地说,您可以遵循以下步骤:

  1. 触发器。要从代码中与BigQuery进行交互,您需要使用BigQuery 客户库。用from google.cloud import bigquery导入它。然后,可以在requirements.txt文件中使用main.py中的以下代码创建从BigQuery到Cloud的导出作业:# Imports the BigQuery client library from google.cloud import bigquery def hello\_world(request): # Replace these values according to your project project\_name = "YOUR\_PROJECT\_ID" bucket\_name = "YOUR\_BUCKET" dataset\_name = "YOUR\_DATASET" table\_name = "YOUR\_TABLE" destination\_uri = "gs://{}/{}".format(bucket\_name, "bq\_export.csv.gz") bq\_client = bigquery.Client(project=project\_name) dataset = bq\_client.dataset(dataset\_name, project=project\_name) table\_to\_export = dataset.table(table\_name) job\_config = bigquery.job.ExtractJobConfig() job\_config.compression = bigquery.Compression.GZIP extract\_job = bq\_client.extract\_table( table\_to\_export, destination\_uri, # Location must match that of the source table. location="US", job\_config=job\_config, ) return "Job with ID {} started exporting data from {}.{} to {}".format(extract\_job.job\_id, dataset\_name, table\_name, destination\_uri) 通过添加以下行来指定客户端库依赖项: google-云-bigquery
  2. 创建一个云计划程序作业。设置要执行作业的频率。例如,将其设置为0 1 * * 0将在每周日上午1点每周运行一次任务。在实验cron调度时,crontab工具是非常有用的。 选择 HTTP 作为目标,将URL设置为Cloud (可以通过选择Cloud和导航到触发器选项卡找到它),并作为HTTP选择GET。 一旦创建,并按下RUN按钮,您就可以测试导出的行为。但是,在这样做之前,请确保默认App服务帐户至少具有Cloud roles/storage.objectCreator角色,否则操作可能会因权限错误而失败。默认App服务帐户有一种形式的YOUR_PROJECT_ID@appspot.gserviceaccount.com。 如果希望在不同的表、数据集和桶上为每次执行执行导出,但实际上使用相同的云函数,则可以使用HTTP POST方法,并将包含上述参数的主体配置为数据,这些参数将传递给云函数--尽管这将意味着对其代码进行一些小的更改。

最后,在创建作业时,可以使用云函数的返回的job IDbq CLI来使用bq show -j <job_id>查看导出作业的状态。

票数 5
EN

Stack Overflow用户

发布于 2020-01-11 12:12:42

你可以选择Maxim答案的第二部分。提取表并将其存储到云存储中的代码应该可以工作。

但是,当您计划查询时,您也可以在作业结束时发布一条消息。因此,按照Maxim的描述,设置调度程序是可选的,您可以简单地使用将函数插入PubSub通知。

在执行提取之前,不要忘记检查发布通知的错误状态。您还拥有很多关于计划查询的信息;有用的是您希望执行更多的检查,或者如果您想要泛化该函数。

因此,关于SFTP转移的另一点。I 打开一个用于查询BigQuery的projet,构建一个CSV文件并将该文件传输到FTP服务器 (不支持sFTP和FTP,因为我以前的公司只使用FTP协议!)如果您的文件小于1.5Gb,我可以更新我的项目,以添加SFTP支持是您想要使用的。让我知道

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59687796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档