Перейти к основному содержимому

Объединение результатов двух и более запросов к stat.uni в одну таблицу

В одном запросе к stat.uni не может быть обращения к разным областям хранения данных, например доставка и открытия. Что же делать, если все таки хочется получить в одной таблице данные из нескольких областей? Как пример, вам надо выгрузить данные о всех событиях (доставка, открытия, клики, отписки) получателей конкретного выпуска.

Для этого нужно использовать конструкцию join. Параметр join запроса stat.uni - это массив необходимого числа запросов. Он дополняется параметром joinby - размер уникального ключа для группировки запросов. Более подробно вы можете почитать в документации к АПИ, а мы же перейдем непосредственно к примеру:

{
"action": "stat.uni",
"result": "save",
"joinby": 2,
"join": [
{
"select": [
"deliv.member.id",
"deliv.issue.id",
"deliv.member.email",
"deliv.status"
],
"filter": [
{
"a": "deliv.issue.id",
"op": "==",
"v": "777"
}
]
},
{
"select": [
"read.member.id",
"read.issue.id",
"count(*)"
],
"filter": [
{
"a": "read.issue.id",
"op": "==",
"v": "777"
}
]
},
{
"select": [
"click.member.id",
"click.issue.id",
"count(*)"
],
"filter": [
{
"a": "click.issue.id",
"op": "==",
"v": "777"
}
]
},
{
"select": [
"unsub.member.id",
"unsub.issue.id",
"min(unsub.dt)"
],
"filter": [
{
"a": "unsub.issue.id",
"op": "==",
"v": "777"
}
]
}
]
}

В результате выполнения запроса вы получите таблицу со следующими полями:

"member.id",
"issue.id",
"member.email",
"статус доставки"
"количество открытий"
"количество кликов"
"первая дата отписки"

Обратите внимание, что в запросах для открытий, кликов и отписок результат намеренно ограничен одной строкой с помощью одной из функций агрегации. Без этого вы в результате получите скорее всего не то, что ожидаете, так как "если в результате строки с уникальным ключом встречается больше одного раза, то используется только первый результат, а остальные отбрасываются".

Для создания первичного ключа используются ID получателя и ID рассылки, а email отдается первым запросом к таблице доставок. Это позволяет не запрашивать во всех запросах отдельно email, что уменьшает число передаваемых данных и ускоряет время выполнения всего запроса.