Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 联合所有参数化查询_Python_Sql_Google Bigquery - Fatal编程技术网

Python 联合所有参数化查询

Python 联合所有参数化查询,python,sql,google-bigquery,Python,Sql,Google Bigquery,我有一个很好的疑问。问题是,该查询的一部分是需要从文件中读取的字符串。对每个字符串的查询产生6个输出。我需要该文件的所有结果的并集,以便最终结果是一个6倍数量的字符串表。我可以使用Python读取该文件 我已经尝试过使用参数化查询。它们每个只返回基于字符串的6行 我的大部分Python代码都基于BigQuery的文档 如何获得所有这些查询结果的联合 输出应该如下所示 pet_id | age | name ___________________ 1 | 5 | Max 2

我有一个很好的疑问。问题是,该查询的一部分是需要从文件中读取的字符串。对每个字符串的查询产生6个输出。我需要该文件的所有结果的并集,以便最终结果是一个6倍数量的字符串表。我可以使用Python读取该文件

我已经尝试过使用参数化查询。它们每个只返回基于字符串的6行

我的大部分Python代码都基于BigQuery的文档

如何获得所有这些查询结果的联合

输出应该如下所示

pet_id | age | name
___________________
1      | 5   | Max
2      | 8   | Alfred


请看下面使用公共数据的示例,您也可以运行查询

#standardSQL
SELECT * 
FROM `bigquery-public-data.baseball.schedules`
WHERE (year, duration_minutes) IN UNNEST([(2016, 187), (2016, 165), (2016, 189)])
这里的关键是为您提供一个要用于筛选表的值数组,并在UNNESTarray_中使用这些值来完成这项工作,理想情况下如下所示:

query = """
    SELECT pet_id, age, name
    FROM `myproject.mydataset.mytable`
    WHERE (name, species) IN UNNEST(@filter_array);
"""
有点遗憾的是,BigQuery Python API不允许您将数组指定为查询参数。因此,您可能必须:

query = """
    SELECT pet_id, age, name
    FROM `myproject.mydataset.mytable`
    WHERE concat(name, "_", species) IN UNNEST(@filter_array);
"""
array_of_pre_concatenated_name_and_species = ['Max_Dog', 'Alfred_Cat']
query_params = [
    bigquery.ArrayQueryParameter('filter_array', 'STRING', array_of_pre_concatenated_name_and_species),
]

请包括标准库之外的所有方法的导入。我的查询更像是使用str作为选择“Max”作为字符串从主表中选择名称作为mt.name==str.STRING上的mt internal JOIN str。字符串“Max”是从该文件派生的。我应该把钥匙放在哪里UNNEST@filter_array语句?现在,我已将这些字符串从文件中摄取到表中。这样,我就有了内在的联系。如果我不必摄入,可能会更好。@Pranaynada,在上面的示例中,您的字符串被放入这个数组中,数组由\u pre\u连接的\u name\u和\u species=['Max\u Dog','Alfred\u Cat']
query = """
    SELECT pet_id, age, name
    FROM `myproject.mydataset.mytable`
    WHERE concat(name, "_", species) IN UNNEST(@filter_array);
"""
array_of_pre_concatenated_name_and_species = ['Max_Dog', 'Alfred_Cat']
query_params = [
    bigquery.ArrayQueryParameter('filter_array', 'STRING', array_of_pre_concatenated_name_and_species),
]