如何使用 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_gbqpandas.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 进行此类操作。