【问题标题】:How to use gsutil to write a query to table?如何使用 gsutil 向表写入查询?
【发布时间】:2018-07-08 14:27:53
【问题描述】:

我目前正在使用 python 和 pandas 构建查询,将结果转换为 pandas dataframe,然后将 dataframe 写回表中。要跳过下载和上传步骤,我想我应该使用gsutil 执行查询并将结果写入表。

我使用的查询是:

SELECT id, weight, net_weight
FROM `body_table-1345.bodies.weights
WHERE birthdate >= '2017-01-01 00:00:00'

我想将结果写入名为body_table-1345.bodies.eligible 的表中。

我当前的代码使用pandas.DataFrame.read_gbq 和pandas.DataFrame.to_gbq,但它花费的时间太长,我认为这样做是错误的。一旦我在命令行中执行了正确的操作(使用gsutil),我会将其包装在python 代码中并使用os.system 执行它。

我如何告诉gsutil 自动检测 SCHEMA 并将结果发送到表格?

【问题讨论】:

  • 我建议使用 Willian Fuks 解决方案,另外,为了清楚起见,gsutil 用于 GCS,bq 用于 BigQuery (docs)。

标签: python pandas google-bigquery gsutil


【解决方案1】:

我建议不要使用 Python 作为os 命令的包装器,而是使用官方的Google Cloud Python API。您可以非常轻松地执行所有这些步骤,例如:

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 执行此类操作的示例。

【讨论】:

    猜你喜欢
    • 2018-10-06
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    相关资源
    最近更新 更多