Скалярный подзапрос создал более одного элемента - Стандартный SQL - PullRequest
0 голосов
/ 30 января 2019

Мой запрос не прошел, и появилось сообщение «Скалярный подзапрос создал более одного элемента»

  SELECT 
       EXTRACT (DATE FROM timestamp) AS Date
       ,jsonPayload.request.headers.origin AS URL
       ,jsonPayload.response.body.json.data.country.key AS Country
       ,(SELECT A.name FROM `pms_table_request_log.partners_request_log_*`, 
       UNNEST(jsonPayload.response.body.data.rows) AS A) AS Partner
       ,AVG((SELECT B.rating 
  FROM 
    `pms_table_request_log.partners_request_log_*`, 
     UNNEST(jsonPayload.response.body.data.rows) AS B)) AS Rating
    ,COUNT (*) AS Impression
    FROM 
       `pms_table_request_log.partners_request_log_*`
    GROUP BY 
        Date,URL,Country,Partner
    ORDER BY 
        Impression DESC;

Пожалуйста, укажите, что я сделал не так

1 Ответ

0 голосов
/ 30 января 2019

Ваш подзапрос приводит не к одному элементу, а к нескольким элементам.BQ не знает, что делать с более чем одним элементом, когда есть место для одного.

Вы можете либо передать результаты в массив, который сам по себе снова является только одним элементом.Вы можете агрегировать или ограничивать вывод вашего подзапроса.Например,

(SELECT STRING_AGG(DISTINCT A.name) FROM `pms_table_request_log.partners_request_log_*`, 
       UNNEST(jsonPayload.response.body.data.rows) AS A) AS Partner

или

(SELECT AVG(B.rating) 
  FROM 
    `pms_table_request_log.partners_request_log_*`, 
     UNNEST(jsonPayload.response.body.data.rows) AS B)) AS Rating

в качестве примеров агрегации.

Для ограничения:

(SELECT A.name FROM `pms_table_request_log.partners_request_log_*`, 
       UNNEST(jsonPayload.response.body.data.rows) AS A LIMIT 1) AS Partner

Правильный выбор зависит от значенияваши данные, хотя.Надеюсь, это поможет

...