Выбрать столбцы на основе значений другого столбца, если он присутствует в списке - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь выбрать столбцы A и B из моей таблицы в Bigquery, используя pandas.read_gbq на основе значений столбца C, если они присутствуют в списке.Однако, когда я использую 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')

Это выполнит работу.Мне было интересно, есть ли более элегантное решение, чем грубое принуждение.

1 Ответ

1 голос
/ 04 апреля 2019

Я не уверен, поддерживает ли pandas.read_gbq ArrayQueryParameters в ключевом слове query_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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...