如何使用 gsutil 向 table 写入查询?
How to use gsutil to write a query to table?
我目前正在使用 python 和 pandas 构建查询,将结果转换为 pandas dataframe
,然后写入 dataframe
回一个table。要跳过下载和上传步骤,我想我应该使用 gsutil
执行查询并将结果写入 table。
我使用的查询是:
SELECT id, weight, net_weight
FROM `body_table-1345.bodies.weights
WHERE birthdate >= '2017-01-01 00:00:00'
我想将结果写入名为 body_table-1345.bodies.eligible
的 table。
我当前的代码使用 pandas.DataFrame.read_gbq
和 pandas.DataFrame.to_gbq
但它花费的时间太长,我认为这样做是错误的。一旦我在命令行中执行了正确的事情(使用 gsutil
),我将把它包装在 python
代码中并使用 os.system
.
执行它
如何让 gsutil
自动检测 SCHEMA 并将结果发送到 table?
我建议使用官方 Google Cloud Python API,而不是使用 Python 作为 os
命令的包装器。您可以很容易地执行所有这些步骤,例如:
import google.cloud.bigquery as bq
client = bq.Client.from_service_account_json('path/to/credentials.json')
table = client.dataset("bodies").table("eligible")
query_config = bq.QueryJobConfig()
query_config.destination = table
query = """
SELECT id, weight, net_weight
FROM `body_table-1345.bodies.weights
WHERE birthdate >= '2017-01-01 00:00:00'
"""
job = client.query(query, job_config=query_config)
您将在 official docs 中找到其他几个示例,说明如何使用 API 进行此类操作。
我目前正在使用 python 和 pandas 构建查询,将结果转换为 pandas dataframe
,然后写入 dataframe
回一个table。要跳过下载和上传步骤,我想我应该使用 gsutil
执行查询并将结果写入 table。
我使用的查询是:
SELECT id, weight, net_weight
FROM `body_table-1345.bodies.weights
WHERE birthdate >= '2017-01-01 00:00:00'
我想将结果写入名为 body_table-1345.bodies.eligible
的 table。
我当前的代码使用 pandas.DataFrame.read_gbq
和 pandas.DataFrame.to_gbq
但它花费的时间太长,我认为这样做是错误的。一旦我在命令行中执行了正确的事情(使用 gsutil
),我将把它包装在 python
代码中并使用 os.system
.
如何让 gsutil
自动检测 SCHEMA 并将结果发送到 table?
我建议使用官方 Google Cloud Python API,而不是使用 Python 作为 os
命令的包装器。您可以很容易地执行所有这些步骤,例如:
import google.cloud.bigquery as bq
client = bq.Client.from_service_account_json('path/to/credentials.json')
table = client.dataset("bodies").table("eligible")
query_config = bq.QueryJobConfig()
query_config.destination = table
query = """
SELECT id, weight, net_weight
FROM `body_table-1345.bodies.weights
WHERE birthdate >= '2017-01-01 00:00:00'
"""
job = client.query(query, job_config=query_config)
您将在 official docs 中找到其他几个示例,说明如何使用 API 进行此类操作。