Google cloud platform 如何将数据从Bigquery导出到CSV中的外部服务器?
我需要自动化从Google Big Query提取数据的过程,并将其导出到GCP外部服务器中的外部CSV 我只是在研究如何从外部服务器运行一些命令。但我更喜欢在GCP中做任何事情来避免可能出现的问题 在谷歌存储中运行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] [
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]
但我想听听您的建议如果您想完全自动化此过程,我将执行以下操作:
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。而你已经在工作了!有什么比您拥有的更好呢?如果您需要一个自定义查询来通过连接多个表来导出数据,该怎么办?