gpt4 book ai didi

google-cloud-platform - 如何以 CSV 格式将数据从 Bigquery 导出到外部服务器?

转载 作者:行者123 更新时间:2023-12-03 22:11:12 25 4
gpt4 key购买 nike

我需要自动化一个过程,以从 Google Big Query 中提取数据并导出到 GCP 外部外部服务器中的外部 CSV。

我只是在研究如何做到这一点,我发现了一些可以从我的外部服务器运行的命令。但我更喜欢在 GCP 中做所有事情以避免可能出现的问题。

在 Google 存储中运行对 CSV 的查询

bq --location=US extract --compression GZIP 'dataset.table' gs://example-bucket/myfile.csv

从 Google Storage 下载 csv
gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION]

但我想听听你的建议

最佳答案

如果您想完全自动化此过程,我会执行以下操作:

  • 创建一个 Cloud Function办理导出 :

  • 这是更轻量级的解决方案,因为 Cloud Functions 是无服务器的,并提供了使用 Client Libraries 实现代码的灵活性.见 quickstart ,我建议您使用控制台来创建函数。

    在本例中,我建议您触发 Cloud Function from an HTTP request ,即当函数 URL 被调用时,它将运行其中的代码。

    Python 中的示例 Cloud Function 代码,它在发出 HTTP 请求时创建导出:

    main.py
    from google.cloud import bigquery

    def hello_world(request):
    project_name = "MY_PROJECT"
    bucket_name = "MY_BUCKET"
    dataset_name = "MY_DATASET"
    table_name = "MY_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

    请注意,作业将在后台异步运行,您将收到带有作业 ID 的返回响应,您可以使用它来检查 Cloud Shell 中导出作业的状态,方法是运行:
    bq show -j <job_id>
  • 创建一个 Cloud Scheduler预定作业 :

  • 关注此 documentation开始。您可以使用 standard cron format 设置频率,例如 0 0 * * *将在每天午夜运行作业。

    作为目标,选择 HTTP ,在 URL 中放置 Cloud Function HTTP URL(您可以在控制台中的 Cloud Function details 内的 Trigger 选项卡下找到它),并作为 HTTP method选择 GET .

    创建它,您可以通过按 Run now 在 Cloud Scheduler 中对其进行测试。控制台中的按钮。
  • 同步您的外部服务器和存储桶 :

  • 到目前为止,您只安排了每 24 小时运行一次的导出,现在要将存储桶内容与本地计算机同步,您可以使用 gsutil rsync 命令。如果你想保存导入,让我们说 my_exports文件夹,您可以在外部服务器中运行:
    gsutil rsync gs://BUCKET_WITH_EXPORTS /local-path-to/my_exports

    要在您的服务器中定期运行此命令,您可以创建一个标准 cron job in your crontab在您的外部服务器内,每天运行,仅在 bigquery 导出后几个小时运行,以确保导出已完成。

    额外 :

    我已将 Cloud Function 中的大部分变量硬编码为始终相同。但是,如果您执行 POST,您可以向函数发送参数。请求而不是 GET请求,并将参数作为数据发送到正文中。

    您必须更改 Cloud Scheduler 作业才能发送 POST请求到 Cloud Function HTTP URL,在同一个地方你可以设置 body 来发送关于 table 的参数。 , datasetbucket , 例如。这将允许您在不同的时间从不同的表和不同的存储桶运行导出。

    关于google-cloud-platform - 如何以 CSV 格式将数据从 Bigquery 导出到外部服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54317565/

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