我已在 BigQuery 中成功安排查询,并将结果保存为数据集中的表。我看到很多关于安排数据传输的信息in到 BigQuery 或 Cloud Storage,但我没有找到任何有关安排导出的信息from尚未将 BigQuery 表传输到 Cloud Storage。
是否可以安排将 BigQuery 表导出到 Cloud Storage,以便我可以进一步安排通过 Google BigQuery 数据传输服务将其 SFTP 发送给我?
没有用于安排 BigQuery 表导出的托管服务,但一种可行的方法是使用云功能和这个结合云调度器.
Cloud Function 将包含从 BigQuery 表导出到 Cloud Storage 所需的代码。有多种编程语言可供选择,例如Python, Node.JS, and Go.
云调度程序会发送一个HTTP定期调用cron格式转换为云函数,云函数反过来会被触发并以编程方式运行导出。
As an example更具体地说,您可以按照以下步骤操作:
-
创建云函数使用 Python 与HTTP trigger。要从代码中与 BigQuery 交互,您需要使用 BigQuery客户库。导入它from google.cloud import bigquery
。然后,您可以在中使用以下代码main.py创建从 BigQuery 到 Cloud Storage 的导出作业:
# 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)
指定客户端库依赖项要求.txt文件
通过添加这一行:
google-cloud-bigquery
-
创建云调度程序作业。设置频率你希望
要执行的作业。例如,将其设置为0 1 * * 0
每周日凌晨 1 点运行该作业一次。这定时任务工具在实验时非常有用
与 cron 调度。
Choose HTTP as the Target,设置URL正如云
函数的URL(可以通过选择云函数找到)
导航到“触发器”选项卡),并选择 HTTP 方法GET
.
创建后,按RUN NOW按钮,可以测试如何导出
行为。然而,在这样做之前,请确保默认 App Engine 服务帐户至少拥有 Cloud IAMroles/storage.objectCreator角色,否则操作可能会因权限错误而失败。默认 App Engine 服务帐户的形式为[email protected]
.
如果您希望在不同的表上执行导出,
每次执行都有数据集和存储桶,但本质上使用相同的云功能,您可以使用 HTTPPOST
方法
相反,并配置一个Body包含所述参数作为数据,其中
将被传递到云功能 - 不过,这意味着这样做
其代码有一些小的变化。
最后,当作业创建时,您可以使用云函数返回的job ID
和bq
用于查看导出作业状态的 CLIbq show -j <job_id>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)