CrateDB объединяет все элементы массива

#sql #cratedb

Вопрос:

Я работаю над агрегированием (суммированием) всех возвращаемых значений массива.
Целевой столбец содержит объекты, которые содержат массив объектов. например

 Object
- person: "bob"
- children: 
  - zaphod
    - age: 42 
  - ford
    - age: 42
 

В приведенном выше примере я пытаюсь провести агрегацию по возрастам, как это было, но безрезультатно:

 SELECT SUM(people['children']['age'])
FROM mydatabase
WHERE people IS NOT null
LIMIT 100;
 

Ошибка, которую я вижу, — «Исключение UnsupportedFeatureException».
Я могу согласиться, если эта функция не поддерживается. Но мне любопытно, не иду ли я просто по неправильному пути. Можно ли это сделать, или мне лучше управлять данными с помощью последующего процесса?

Ответ №1:

Версия 4.6 CrateDB (выпущена 2021-07-13) включает в себя новую скалярную функцию array_sum, которая может это делать:

 SELECT ARRAY_SUM(people['children']['age'])
FROM mydatabase
WHERE people IS NOT null
LIMIT 100;