Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
PipelineDB currently supports PostgreSQL versions 10.1, 10.2, 10.3, 10.4, 10.5, and 11.0Как быть — заюзать уже пг 10 )
select minute(eventtime) as time,
sum((data->>'value')::integer) as sum
from table1
Определённо да, вечером скину пример
Один JSON-объект можно разложить в запись с помощью jsonb_to_record
, а массив — с помощью jsonb_to_recordset
. См. официальную документацию и мой пример.
select *
from jsonb_to_recordset(
'[{"a":1,"b":"foo"},{"a":"2","c":"bar", "v":"2018-04-01"}]'::jsonb
) as x(a int, b text, v date, not_exists time);
Можно вытаскивать нужный кусок JSONB и скармливать его это же функции, на ходу подправляя, если требуется.
Вот, например, если у нас есть таблица listings
, у которой есть jsonb-поле raw
, где-то в недрах которого лежит нужный нам массив (а иногда не массив):
SELECT id, v."SKU"
FROM
listings,
jsonb_to_recordset(
CASE jsonb_typeof(raw->'Variations'->'Variation')
WHEN 'array' THEN raw->'Variations'->'Variation'
ELSE jsonb_build_array(raw->'Variations'->'Variation')
END
) AS v("SKU" varchar)
WHERE raw IS NOT NULL
AND raw->'Variations'->'Variation' IS NOT NULL
SELECT hour(datetime), somename, count(*), sum(somemetric)
from table
where datetime > :monthAgo
group by 1, 2
order by 1 desc, 2
CREATE FOREIGN TABLE flow_stream (
dtmsk timestamp without time zone,
action text,
duration smallint
) SERVER pipelinedb;
Вас когда-либо просили посчитать количество чего-то на основании данных в бд за последний месяц, сгруппировав результат по каким-то...
curl -s http://download.pipelinedb.com/apt.sh | bash
PostgreSQL: PipelineDB — агрегирующие запросы в режиме реального времени