Python Google BigQuery с параметрами SELECTPython

Программы на Python
Ответить
Anonymous
 Python Google BigQuery с параметрами SELECT

Сообщение Anonymous »

У меня возникла проблема с параметризацией BigQuery. Я передаю в функцию дату начала и дату окончания, а также массив потенциальных полей, присутствующих в базе данных. Дата начала и окончания в формате «ггггммдд».

Цель состоит в том, чтобы иметь возможность передавать набор дат и набор полей и собирать данные, относящиеся к массиву. полей между двумя датами.

Операция с датами работает так, как задумано.

Массив полей передается следующим образом : ["user_pseudo_id", "event_name", "event_timestamp"] в качестве примера (возможны другие записи в массиве)

По сути, я хочу дополнительно параметризовать запрос, чтобы он выглядел аналогично приведенному ниже, где @search_params заменяет отдельные переменные в части запроса SELECT. Цель состоит в том, чтобы массив полей был более масштабируемым, от одной записи до нескольких.

Из моих поисков я считаю, что ArrayQueryParameter (вместо ScalarQueryParameter) решит проблему проблема, но я не нашел подробной документации по использованию.

query_job = client.query("""
SELECT @search_params, _TABLE_SUFFIX AS suffix
FROM `analytics_180354243.events_*`
WHERE REGEXP_EXTRACT(_TABLE_SUFFIX, r'[0-9]+')
BETWEEN @start_date AND @end_date
""", job_config=job_config)


ПОЛНЫЙ ФУНКЦИОНАЛЬНЫЙ НИЖЕ

def query_awe(start_date, end_date, fields):
credentials = service_account.Credentials.from_service_account_file('auth.json')

project_id = 'my-project-id'

client = bigquery.Client(credentials=credentials, project=project_id)

search_params = ""

for i in fields:
search_params += i + ", "
search_params = search_params[:-2]

query_params = [
bigquery.ScalarQueryParameter('start_date', 'STRING', start_date),
bigquery.ScalarQueryParameter('end_date', 'STRING', end_date),
bigquery.ScalarQueryParameter('search_params', 'STRING', search_params),

]
bigquery.ArrayQueryParameter

job_config = bigquery.QueryJobConfig()
job_config.use_legacy_sql = False
job_config.query_parameters = query_params

query_job = client.query("""
SELECT user_pseudo_id, event_name, _TABLE_SUFFIX AS suffix
FROM `analytics_180354243.events_*` #Each day saved as events_yyyymmdd
WHERE REGEXP_EXTRACT(_TABLE_SUFFIX, r'[0-9]+')
BETWEEN @start_date AND @end_date
ORDER BY user_pseudo_id DESC
""", job_config=job_config)

results = query_job.result() # Waits for job to complete.

for row in results:
print(row)


Подробнее здесь: https://stackoverflow.com/questions/521 ... zed-select
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»