Объединение результатов двух и более запросов к 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, что уменьшает число передаваемых данных и ускоряет время выполнения всего запроса.