datalens-tech / datalens-backend

Data processing backend for DataLens

Home Page:https://datalens.tech

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ошибка при построении таблицы со столбцом типа TREE и источника Postgres

Argentum4k opened this issue · comments

Берем Postgre, делаем источник данных, добавляем столбец типа TREE:
формула TREE(ARRAY([поле2],[поле2],[поле3]))
Полей может быть сколько угодно. Поля должны быть строковыми, подходят в т.ч. созданные через datalens копии нестроковых столбцов с указанным типом данных "строка".
Создаем чарт типа Таблица, добавляем в стоблцы созданный столбец типа TREE: все работает.
Разворачиваем строку по "плюсу" - получаем ошибку :
Ошибка загрузки данных { "azz0maafeoqcy_result": { "code": "ERR.DS_API.DB.INVALID_FUNCTION", "status": 400, "sourceType": "bi_datasets", "message": "Unknown function.", "details": { "db_message": "operator does not exist: character varying[] = text[]\nHINT: No operator matches the given name and argument types. You might need to add explicit type casts.", "query": "SELECT (ARRAY[t1.product_name, t1.product_sku])[$3::integer:($3::integer + $4::integer) - $5::integer] AS res_0\nFROM saleor.public.order_orderline AS t1\nWHERE\n ARRAY_LENGTH(ARRAY[t1.product_name, t1.product_sku], $1::integer) >= $4::integer AND (ARRAY[t1.product_name, t1.product_sku])[$6::integer:array_length(ARRAY[$7], $2::integer)] = ARRAY[$7]\nGROUP BY res_0\nLIMIT $8::integer [1, 1, 1, 2, 1, 1, 'Платный курс', 1000001]" }}}

В результате исследований выяснено, что ошибка возникает во всех случаях, кроме случая когда самое первое поле в ARRAY имеет в источнике тип text (не самый распространенный в postgre). Другие строковые типы данных, например varchar - также дают ошибку. Приведение к строковому типу через datalens или функции не меняет ситуацию.
Данная ошибка не позволяет пользоваться вложенными таблицами с источника postgre, хотя в документации заявлено что это работает.

@Argentum4k
Спасибо за обратную связь. Посмотрим, что с этим можно сделать.

В текущем виде должно помогать приведение первого элемента массива к типу text
ARRAY(DB_CAST([field1], 'text'), [field2], [field3])