Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 如何安排从BigQuery表到云存储的导出?_Google Cloud Platform_Google Bigquery_Google Cloud Storage - Fatal编程技术网

Google cloud platform 如何安排从BigQuery表到云存储的导出?

Google cloud platform 如何安排从BigQuery表到云存储的导出?,google-cloud-platform,google-bigquery,google-cloud-storage,Google Cloud Platform,Google Bigquery,Google Cloud Storage,我已经成功地在BigQuery中安排了查询,结果保存为数据集中的表。我在中看到了很多关于调度数据传输到BigQuery或云存储的信息,但是我还没有找到任何关于调度从BigQuery表导出到云存储的信息 是否可以安排将BigQuery表导出到云存储,以便我可以进一步安排通过Google BigQuery Data Transfer Services将其发送给我?没有用于安排BigQuery表导出的托管服务,但一种可行的方法是将与结合使用 Cloud函数将包含从BigQuery表导出到云存储所需的代

我已经成功地在BigQuery中安排了查询,结果保存为数据集中的表。我在中看到了很多关于调度数据传输到BigQuery或云存储的信息,但是我还没有找到任何关于调度从BigQuery表导出到云存储的信息


是否可以安排将BigQuery表导出到云存储,以便我可以进一步安排通过Google BigQuery Data Transfer Services将其发送给我?

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

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

云调度程序将以cron格式定期向云函数发送HTTP调用,该函数将被触发并以编程方式运行导出

作为一个示例,更具体地说,您可以遵循以下步骤:

  • 。要在代码中与BigQuery交互,需要使用BigQuery。从google.cloud导入bigquery,使用
    导入它。然后,您可以使用main.py中的以下代码创建从BigQuery到云存储的导出作业:

        # 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
    
  • 。设置您希望的频率 要与一起执行的作业。例如,将其设置为
    01**0
    将在每个星期天早上1点每周运行一次作业。这个 在实验方面非常有用 使用cron调度

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

    创建后,通过按“立即运行”按钮,可以测试导出的方式 行为。但是,在执行此操作之前,请确保至少具有Cloud IAM角色,否则操作可能会因权限错误而失败。默认的应用程序引擎服务帐户的形式为
    YOUR\u PROJECT_ID@appspot.gserviceaccount.com

    如果希望在不同的表上执行导出, 每次执行的数据集和存储桶,但本质上使用相同的云函数,您可以使用HTTP
    POST
    方法 而是将包含所述参数的主体配置为数据 将传递给云函数-尽管这意味着 代码中的一些小改动


  • 最后,创建作业时,您可以使用云函数返回的
    作业ID
    bq
    CLI,使用
    bq show-j
    查看导出作业的状态。您可以选择Maxim答案的第二部分。提取表并将其存储到云存储的代码应该可以工作

    但是,当您计划查询时,也可以在作业结束时发布消息。因此,如Maxim所述的调度器设置是可选的,您可以简单地

    在执行提取之前,不要忘记检查。您还有很多关于计划查询的信息;如果要执行更多检查或要泛化函数,则此函数很有用

    那么,关于SFTP传输的另一点。I(不支持sFTP和FTPs,因为我以前的公司只使用FTP协议!)。如果你的文件小于1.5Gb,我可以更新我的项目以添加SFTP支持,如果你想使用它。让我知道