首页 > 解决方案 > 如果存在于列表中,则根据另一列的值选择列

问题描述

我正在尝试使用pandas.read_gbq基于列 C 的值(如果存在于列表中)从我的 Bigquery 表中选择列 A 和 B。但是,当我format在查询字符串中插入列表时,列表的内容会被[]方括号括起来。这打破了我的查询。

replace在查询字符串上使用了手动删除方括号。

values_in_list = ['a', 'b', 'c']
query = """
SELECT
  column_A,
  column_B

FROM
  my_table

WHERE
 column_C IN ({})
""".format(values_in_list).replace('[', '').replace(']', '')
query_df = pandas.read_gbq(query, project_id='some-project', dialect='standard')

这可以完成工作。我想知道是否有比暴力破解更优雅的解决方案。

标签: pythonpandasgoogle-bigquery

解决方案


我不确定是否pandas.read_gbq支持关键字 arg ArrayQueryParametersquery_config这是我的解决方法:

from google.cloud import bigquery
client = bigquery.Client()

values_in_list = ['a', 'b', 'c']
query = """
SELECT
  column_A,
  column_B

FROM
  my_table

WHERE
 column_C IN UNNEST(@col_c_vals)
"""

query_params = [bigquery.ArrayQueryParameter('col_c_vals', 'STRING', values_in_list)]
job_config = bigquery.QueryJobConfig()
job_config.query_parameters = query_params
query_df = client.query(query, job_config=job_config).to_dataframe()

推荐阅读