Postgres Cluster (citus): запрос диапазона для вложенного столбца jsonb
Я использую Postgres 9.5.4 настроен как кластер с использованием Citus 5.2
Таблица была очищена с использованием следующих команд.
SELECT master_create_distributed_table('mytest', 'id', 'hash');
SELECT master_create_worker_shards('mytest', 16, 1);
Ниже приведены примеры данных JSON, хранящихся в столбце JSONB, я хотел бы найти соответствующие записи
o['mid'] > 7000
Это образец записи одного пользователя. Таких пользователей будет миллионы.
{ "uid": 14105529, "o": [
{
"mid": 6551,
"ac": 1913,
"ip": "144.36.233.44",
"adw": 5,
"at": 133000,
"ad": 151015,
"aid": 0
},
{
"mid": 7552,
"ac": 1913,
"ip": "144.36.233.44",
"adw": 5,
"at": 133000,
"ad": 151015,
"aid": 0
},
{
"mid": 7553,
"ac": 1913,
"ip": "144.36.233.44",
"adw": 5,
"at": 133000,
"ad": 151015,
"aid": 0
} ]
}
Приведенный ниже запрос выдает ошибку, где он выполняется на необолоченной таблице.
select count(1) from mytest,jsonb_array_elements(data->'l') where (value->>'e')::bigint>7000;
ОШИБКА: невозможно выполнить распределенное планирование по этому запросу
ДЕТАЛИ: Сложные табличные выражения в настоящее время не поддерживаются
1 ответ
jsonb_array_elements(data->'l')
вызывает создание CTE, что приводит к отклонению этого запроса. Можете ли вы переписать свой запрос, чтобы избежать объединений?