我已经在BigQuery中成功地安排了我的查询,结果被保存为数据集中的表。我看到了很多关于将在中传输到BigQuery或Cloud的信息,但我还没有发现任何关于将导出从( BigQuery表)调度到云存储( Cloud )的信息。
是否有可能安排将BigQuery表导出到云存储,以便我可以进一步安排通过Google数据传输服务将其发送给我?
发布于 2020-01-10 21:43:16
没有用于调度BigQuery表导出的托管服务,但一种可行的方法是将云函数与云调度器结合使用。
云函数将包含从BigQuery表导出到云存储的必要代码。有多种编程语言可供选择,例如Python、Node.JS和Go。
云调度程序将定期以cron格式向云函数发送一个HTTP调用,然后触发该函数并以编程方式运行导出。
作为一个示例,,更具体地说,您可以遵循以下步骤:
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-云-bigquery0 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 ID和bq CLI来使用bq show -j <job_id>查看导出作业的状态。
发布于 2020-01-11 12:12:42
你可以选择Maxim答案的第二部分。提取表并将其存储到云存储中的代码应该可以工作。
但是,当您计划查询时,您也可以在作业结束时发布一条消息。因此,按照Maxim的描述,设置调度程序是可选的,您可以简单地使用将函数插入PubSub通知。。
在执行提取之前,不要忘记检查发布通知的错误状态。您还拥有很多关于计划查询的信息;有用的是您希望执行更多的检查,或者如果您想要泛化该函数。
因此,关于SFTP转移的另一点。I 打开一个用于查询BigQuery的projet,构建一个CSV文件并将该文件传输到FTP服务器 (不支持sFTP和FTP,因为我以前的公司只使用FTP协议!)如果您的文件小于1.5Gb,我可以更新我的项目,以添加SFTP支持是您想要使用的。让我知道
https://stackoverflow.com/questions/59687796
复制相似问题