Google BigQuery 从 Python 脚本执行 SQL 文件

Posted

技术标签:

【中文标题】Google BigQuery 从 Python 脚本执行 SQL 文件【英文标题】:Google BigQuery Execute SQL file from Python Script 【发布时间】:2018-08-21 01:16:19 【问题描述】:

我有一个 python 文件,它使用 datalab.bigquery 来执行写出的 SQL 查询。但是,我将此 SQL 查询保存在同一个 GitHub 存储库中,所以我想知道是否有一种方法可以运行 github SQL 文件而无需复制和粘贴查询。

目前看起来是这样的:

import datalab
import datalab.bigquery as bq
import pandas as pd 

df = bq.Query('''
                SELECT
                  CASE
                    WHEN advance_date IS NULL
                        AND release_date IS NULL
                        AND resale_close_date IS NULL
                            THEN TRUE
 ...
 '''_.to_dataframe()

这工作正常,但是当对 SQL 脚本进行更新时,它们不会反映在这个 python 脚本中,这会产生问题。我希望它调用保存在 Github 存储库中的 SQL 查询。有没有办法做到这一点?比如 df = bq.execute(sql_file.sql).to_dataframe()。

【问题讨论】:

我在回答中添加了一个可能的解决方案,如果对您有帮助,请告诉我。 @Iñigo 非常有帮助,谢谢!如果SQL脚本和python脚本在同一个仓库,你知道我需要去脚本的URL吗? 它必须自己存储,把它想象成一个只需要SQL脚本的变量。我很高兴它有帮助,请考虑 accept/upvote 我的回答。祝你好运! 【参考方案1】:

您可以使用包含 SQL 脚本的 Github sn-p 的“原始”页面并检查该页面以获取脚本。

例如,假设我想要这个脚本[1](在你的情况下是 SQL 脚本),我点击“RAW”按钮并保存 URL。然后,您可以使用requests 在 Python 中查看该 URL 内的内容:

import requests

raw=<URL OF YOUR SQL SCRIPT>
#In my case it would be
#raw="https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/appengine/standard/bigquery/main.py"
r=requests.get(raw).text
df=bq.Query(r).to_dataframe()

如果我理解正确,那就是你想要的:D。

【讨论】:

以上是关于Google BigQuery 从 Python 脚本执行 SQL 文件的主要内容,如果未能解决你的问题,请参考以下文章

从 Google BigQuery 中过滤或替换非英文字符

从 Google BigQuery 导出到 CloudSQL?

如何在没有授权令牌的情况下从 python 脚本查询 google-bigquery 中的私有表?

在 Google Cloud Storage 中设置元数据(从 BigQuery 导出)

Google BigQuery 结果不显示

无法使用 Python 连接到 BigQuery - ServiceUnavailable