У меня возникла проблема с параметризацией 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
Python Google BigQuery с параметрами SELECT ⇐ Python
Программы на Python
-
Anonymous
1736256760
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)
Подробнее здесь: [url]https://stackoverflow.com/questions/52104141/python-google-bigquery-paramaterized-select[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия