将BigQuery数据集位置存储为变量的最佳方法-python

时间:2019-02-04 03:59:29

标签: python google-bigquery

我目前有一个读取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文件并手动更改“从”由于我有很多SQL文件,因此手动编辑每个单独的SQL文件的from子句变得很麻烦

所以我的问题是,使数据集位置动态化的最佳方法是什么? 理想情况下,数据集位置应该是一个变量,但问题是将变量放置在何处。如果它是一个变量,是否最好将其作为函数参数传递? I.E 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}

想知道执行此操作的最佳方法是什么。谢谢

1 个答案:

答案 0 :(得分:0)

如果您使用相同的函数对不同的数据集进行操作,则优良作法是使函数“与数据集无关”,即将数据集作为参数传递。对我来说,您的第二个例子是做到这一点的好方法。

此外,请记住,现在,您的应用程序可能很小,但是您需要为将来的扩展做准备。当然,您不必为每个数据集编写相同的SQL查询文件。

这取决于您的用例,但通常建议您使用代码来管理应用程序的参数。为此,使用了配置文件,当您使用Python时,请看一下this Python library,它对于读取它们很有用。