Преобразование устаревшего SQL-запроса в стандартный SQL

Я хочу преобразовать приведенный ниже запрос Legacy SQL в стандартный SQL. Проблема, с которой я столкнулся, заключается в том, что мне нужно отключить две таблицы (метки и кредиты). Как я могу преобразовать этот запрос? Спасибо!

Каждый раз, когда я пытаюсь переписать этот запрос, я сталкиваюсь со «Скалярным подзапросом, созданным более чем одним элементом» (см. Ниже).

Устаревший запрос SQL, который я пытаюсь переписать:

SELECT
  service.description,
  sku.description,
  usage_start_time,
  usage_end_time,
  labels.key,
  labels.value,
  cost,
  usage.amount,
  project.name,
  credits.name,
  credits.amount
FROM
  flatten([gcp_billing_data.gcp_billing_export],
    credits)

Что я пробовал до сих пор в стандартном SQL:

SELECT
  service.description AS service,
  sku.description AS sku,
  usage_start_time,
  usage_end_time,
  l.key,
  l.value,
  cost,
  usage.amount AS usage,
  project.name AS project,
  c.name AS credit,
  c.amount
FROM
  `gcp_billing_data.gcp_billing_export`,
  UNNEST(labels) AS l,
  UNNEST(credits) AS c
Group by 1,2,3,4,5,7,8,9,10,11

Этот запрос выполняется, но количество строк значительно меньше, чем я ожидал.


person Simon Holstein    schedule 23.04.2019    source источник
comment
Лично мне исходный запрос, который вы используете, выглядит совсем не кошерным, поскольку он многократно дублирует стоимость и кредиты на этикетках, поэтому общие результаты будут в x раз больше, чем в действительности. Итак, если вы можете предоставить упрощенный пример входных данных и ожидаемого результата - и объяснить, что именно вы хотите получить - это ускорит ответ: o)   -  person Mikhail Berlyant    schedule 24.04.2019
comment
... а быстрое и формальное исправление - это что-то вроде замены (select l.value from unnest(labels) as l) на (select string_agg(l.value) from unnest(labels) as l)   -  person Mikhail Berlyant    schedule 24.04.2019
comment
а что с кредитами ?? должно быть перекрестное соединение с метками?   -  person Mikhail Berlyant    schedule 24.04.2019
comment
@MikhailBerlyant Я не совсем уверен. Вы можете видеть в устаревшем SQL все, что мне нужно сделать, это выбрать метки. Поэтому я не уверен в природе соединения via flatten и,. Я предполагаю, что это перекрестное соединение? Спасибо за вашу помощь в предыдущем комментарии. Теперь этот запрос выполняется.   -  person Simon Holstein    schedule 24.04.2019
comment
в порядке. Итак, кстати, вот почему я попросил вас опубликовать упрощенный пример ввода и вывода, чтобы мы могли помочь вам понять, что / как это должно работать. пока - если у вас сработает - выложу как ответ: о)   -  person Mikhail Berlyant    schedule 24.04.2019
comment
Я в курсе. Как я уже сказал, этот ответ не касается моих исходных вопросов, связанных с преобразованием основного устаревшего SQL-запроса в стандартный.   -  person Simon Holstein    schedule 27.04.2019
comment
понятно. раньше это не было понятно! хотя я до сих пор не понимаю ti - но ваш пост принадлежит вам, так что вам решать: o)   -  person Mikhail Berlyant    schedule 27.04.2019


Ответы (1)


быстрое и формальное исправление вашего запроса в стандартном SQL - это что-то вроде замены ниже

(select l.value from unnest(labels) as l)    

с участием

(select string_agg(l.value) from unnest(labels) as l)   

Но это все еще не совсем то, что делает исходная версия вашей устаревшей версии запроса SQL.

person Mikhail Berlyant    schedule 23.04.2019
comment
Спасибо за публикацию этого сообщения, хотя это решает ошибку, которую я видел в своей попытке решения, я согласен с вашим предыдущим комментарием о том, что это не отражает исходный запрос. - person Simon Holstein; 24.04.2019
comment
неясно - это отвечало на ваш вопрос? (в этом случае, пожалуйста, подумайте о том, чтобы принять, а затем проголосовать за ответ): o) - person Mikhail Berlyant; 24.04.2019
comment
Я обновил запрос в своем исходном вопросе на основе ваших комментариев, но в результате вижу значительно меньше строк, чем я ожидал. Будем признательны за ваши мысли. - person Simon Holstein; 10.05.2019