gpt4 book ai didi

google-cloud-platform - 如何安排从 BigQuery 表到 Cloud Storage 的导出?

转载 作者:行者123 更新时间:2023-12-04 01:35:40 24 4
gpt4 key购买 nike

我已经成功地在 BigQuery 中安排了我的查询,结果在我的数据集中保存为一个表。我看到很多关于将数据传输in 安排到 BigQuery 或 Cloud Storage 的信息,但我还没有找到任何关于安排从 BigQuery 表 导出到 Cloud Storage 的信息.

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

最佳答案

没有用于安排 BigQuery 表导出的托管服务,但一种可行的方法是使用 Cloud Functions 结合 Cloud Scheduler .

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

Cloud Scheduler 会以 cron 格式定期向 Cloud Function 发送一个 HTTP 调用,而 Cloud Function 又会被触发并以编程方式运行导出。

作为一个示例,更具体地说,您可以按照以下步骤操作:

  1. Create a Cloud Function using Python with an HTTP trigger .要从代码中与 BigQuery 交互,您需要使用 BigQuery client library .使用 from google.cloud import bigquery 导入它.然后,您可以在 ma​​in.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)

    requirements.txt文件中指定客户端库依赖通过添加这一行:

    google-cloud-bigquery
  2. Create a Cloud Scheduler job .设置您想要的频率要执行的作业。例如,将其设置为 0 1 * * 0每周日凌晨 1 点运行一次作业。这 crontab tool在实验方面非常有用与 cron 调度。

    选择 HTTP 作为目标,将URL 设置为云函数的 URL(可以通过选择 Cloud Function 和导航到“触发器”选项卡),并选择 GET 作为 HTTP 方法.

    创建后,按立即运行 按钮,您可以测试如何导出表现。但是,在这样做之前,请确保 default App Engine service account至少有 Cloud IAM roles/storage.objectCreator 角色,否则操作可能会因权限错误而失败。默认 App Engine 服务帐户的形式为 YOUR_PROJECT_ID@appspot.gserviceaccount.com .

    如果你想在不同的表上执行导出,每次执行的数据集和存储桶,但本质上使用相同的 Cloud Function,您可以使用 HTTP POST方法相反,并配置一个包含所述参数作为数据的 Body,这将被传递到 Cloud Functions - 虽然,这意味着做代码中的一些小改动。

最后,创建作业后,您可以使用 Cloud Function 返回的 job IDbq使用 bq show -j <job_id> 查看导出作业状态的 CLI .

关于google-cloud-platform - 如何安排从 BigQuery 表到 Cloud Storage 的导出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59687796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com