Google cloud platform 如何将数据从Bigquery导出到CSV中的外部服务器?

Google cloud platform 如何将数据从Bigquery导出到CSV中的外部服务器?,google-cloud-platform,google-bigquery,google-cloud-storage,google-cloud-dataflow,Google Cloud Platform,Google Bigquery,Google Cloud Storage,Google Cloud Dataflow,我需要自动化从Google Big Query提取数据的过程,并将其导出到GCP外部服务器中的外部CSV 我只是在研究如何从外部服务器运行一些命令。但我更喜欢在GCP中做任何事情来避免可能出现的问题 在谷歌存储中运行CSV查询 bq --location=US extract --compression GZIP 'dataset.table' gs://example-bucket/myfile.csv gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [

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

我只是在研究如何从外部服务器运行一些命令。但我更喜欢在GCP中做任何事情来避免可能出现的问题

在谷歌存储中运行CSV查询

bq --location=US extract --compression GZIP 'dataset.table' gs://example-bucket/myfile.csv
gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION]
从谷歌存储下载csv

bq --location=US extract --compression GZIP 'dataset.table' gs://example-bucket/myfile.csv
gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION]

但我想听听您的建议

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

  • 创建一个用于处理导出的
  • 这是一个更轻量级的解决方案,因为云函数是无服务器的,并且提供了使用实现代码的灵活性。请参阅,我建议您使用控制台来创建要开始使用的函数

    在本例中,我建议您触发云函数,即当调用函数URL时,它将运行其中的代码

    Python中的云函数代码示例,在发出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)
    
    requirements.txt

    google-cloud-bigquery
    
    请注意,作业将在后台异步运行,您将收到一个带有作业ID的返回响应,您可以通过运行以下命令来检查Cloud Shell中导出作业的状态:

    bq show -j <job_id>
    
    要在服务器中定期运行此命令,您可以在外部服务器中创建一个标准,每天都运行,只需比bigquery导出晚几个小时,以确保导出已完成

    额外的

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


    您必须更改云调度程序作业,以向云函数HTTP URL发送
    POST
    请求,并且在同一位置,您可以设置正文以发送有关
    数据集
    存储桶
    的参数。这将允许您在不同的时间从不同的表运行导出,并将其导出到不同的存储桶。

    您的方法看起来不错。你想改进什么?谢谢@FelipeHoffa,唯一的问题是我想从GCP运行所有东西,并神奇地从客户端在本地服务器上每天导出CSV。而你已经在工作了!有什么比您拥有的更好呢?如果您需要一个自定义查询来通过连接多个表来导出数据,该怎么办?