BigQuery - выполнение SQL-запроса, сгенерированного из SQL-запроса - PullRequest
0 голосов
/ 08 марта 2019

Я работаю над динамическим запросом в BigQuery, который создаст x столбцов для каждой записи, которая передается через объект json.Я написал запрос, чтобы программно сгенерировать запрос, который будет иметь x столбцов, но я не знаю, как выполнить запрос на генерацию без копирования и вставки его в редакторе.Есть ли способ выполнить запрос, сгенерированный другим запросом?

Я знаю, что было бы возможно сгенерировать весь запрос на Python или любом другом языке программирования, но для этого конкретного случая использования я бы предпочел сохранить всев SQL.

Когда я выполняю этот запрос, он выводит сгенерированный запрос ниже.

with names_ids as (
  SELECT
    JSON_EXTRACT_SCALAR(json_text, '$.name') as name,
    JSON_EXTRACT_SCALAR(json_text, '$.id') as id
  FROM UNNEST([
    '{"id": "123456", "name": "test 1"}',
    '{"id": "789456", "name": "test 2"}',
    '{"id": "456123", "name": "test 3"}'
    ]) as json_text
)

select  
  concat(
    'select user_id, event_time, ',
    string_agg(
      concat(
      ' min(case when activity_id = ', json_extract(a.json_data, '$.id'), ' then 1 else end) as has_', lower(replace(json_extract_scalar(a.json_data, '$.name'), ' ', '_'))
      )
    )
  ) as query
  from (
    select to_json_string(a) as json_data
    from names_ids as a
    )

Вывод вышеуказанного запроса:

select user_id, event_time,  min(case when activity_id = "123456" then 1 else end) as has_test_1, min(case when activity_id = "789456" then 1 else end) as has_test_2, min(case when activity_id = "456123" then 1 else end) as has_test_3

Как выполнить вывод вышеуказанного запроса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...