Объединить как массив СТРУКТОВ несколько столбцов в существующий массив - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть эта схема

enter image description here

Я хочу получить один массив массивов STRUCTS, который объединяет (feature,numerical_value) с уже массивом структур categorical_value.Помните, что категория также может быть пустой строкой, которую мы хотим пропустить.

Мне удалось сделать это таким образом, но я ищу альтернативный более короткий путь:

select centroid_id,array_agg(struct(name,value) order by centroid_id) as cluster from (
select centroid_id,concat(feature,'_',category) as name,value 
    FROM
    ML.CENTROIDS(MODEL `modelv1`), unnest(categorical_value)
    where length(category)>0
union all
select centroid_id,feature as name,numerical_value as value
FROM
    ML.CENTROIDS(MODEL `modelv1`)
    where numerical_value is not null
) 
group by centroid_id
order by centroid_id

1 Ответ

1 голос
/ 19 сентября 2019
#standardSQL
SELECT centroid_id, 
  (
    SELECT ARRAY_AGG(STRUCT(name,value)) FROM (
      SELECT CONCAT(feature,'_',category) AS name,value FROM UNNEST(categorical_value)
      WHERE LENGTH(category)>0
      UNION ALL
      SELECT feature, numerical_value
    ) 
    WHERE value IS NOT NULL
  ) AS cluster
FROM
    ML.CENTROIDS(MODEL `modelv1`)   

ИЛИ

#standardSQL
SELECT centroid_id, 
  ARRAY(
    SELECT AS STRUCT name,value FROM (
      SELECT CONCAT(feature,'_',category) AS name,value FROM UNNEST(categorical_value)
      WHERE LENGTH(category)>0
      UNION ALL
      SELECT feature, numerical_value
    ) 
    WHERE value IS NOT NULL
  ) AS cluster
FROM
    ML.CENTROIDS(MODEL `modelv1`) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...