python - 将 BigQuery 数据集位置存储为变量的最佳方法 - python
问题描述
我目前有一个函数可以读取 SQL 文件以在 Google 的 BigQuery 上执行查询。
import pandas as pd
def func1(arg1,arg2):
with open('query.sql', 'r') as sqlfile:
sql_query= sqlfile.read()
df = pd.read_gbq(sql_query.format(arg1=arg1,arg2=arg2)
query.sql
SELECT *
FROM bigquery.dataset
WHERE col1= {arg1}
AND col2 = {arg2}
数据集位置在 SQL 文件本身中是硬编码的,因此,如果我要更改数据集位置,则很难进行更改(即,我必须单独转到每个 SQL 文件并手动更改“From”子句。因为我有很多 SQL 文件,手动编辑每个单独的 SQL 文件的 from 子句变得很麻烦)
所以我的问题是,使数据集位置动态化的最佳方法是什么?理想情况下,数据集位置应该是一个变量,但问题是放置变量的位置。如果它是一个变量,将它作为函数参数传递会更好吗?IE func1 将有一个参数,称为 dataset_loc
import pandas as pd
def func1(arg1,arg2,dataset_loc):
with open('query.sql', 'r') as sqlfile:
sql_query= sqlfile.read()
df = pd.read_gbq(sql_query.format(arg1=arg1,arg2=arg2,dataset_loc=dataset_loc)
query.sql
SELECT *
FROM {dataset_loc}
WHERE col1 = {arg1}
AND col2 = {arg2}
想知道这样做的最佳方法是什么。谢谢
解决方案
如果您使用相同的函数对不同的数据集进行操作,最好使函数“与数据集无关”,即将数据集作为参数传递。对我来说,你的第二个例子是这样做的好方法。
另外,请记住,现在,您的应用程序可能很小,但您需要为将来的扩展做准备。当然,您不希望为每个数据集编写相同的 SQL 查询文件。
这取决于您的用例,但作为一般规则,建议在代码之外管理应用程序的参数。为此,使用了配置文件,当您使用 Python 时,请查看这个 Python 库,它对阅读它们很有用。
推荐阅读
- javascript - 无法 POST 成功的 ajax 请求
- mysql - 使用聚合函数 mySQL 时不断出现错误
- git - 如何在 Mac 上使用 Git 和 NPM 安装此软件
- php - Symfony Doctrine 捕获连接异常
- java - 从另一个容器内的 Java 应用程序引用 docker 容器内的 MySQL 服务器
- reactjs - 我应该构建一个本地数据层/应用程序状态来维护 React Native/Firestore 应用程序中的状态吗?
- batch-file - 批处理:批处理文件终止时关闭可执行文件
- r - 是否有映射日期索引的 R 函数?
- google-colaboratory - 防止 Google Colab 进程断开连接
- react-native - 世博常量 deviceId 和 installationId 未定义