Мы написали запрос, в котором подсчитывается время, необходимое для направления электронной почты из Gmail в стороннюю службу безопасности, а затем возврата в Gmail.Теперь мы хотим отобразить это в DataStudio, но способ его написания требует указания дня в двух местах, чтобы уменьшить количество запрашиваемых разделов, однако большинство систем, таких как DataStudio, могут работать только с одним полем для временных диапазонов.Как еще я могу написать это так, чтобы одно поле использовалось для временного диапазона?
SELECT
datetime_diff(timestamp_after, timestamp_before, SECOND) as delay,
timestamp_before,
timestamp_after,
sender_before as sender,
recipient_before as recipient,
message_id_before as message_id,
subject_before as subject,
spf_pass_before,
spf_pass_after,
pt_before,
pt_after
FROM(
SELECT
_TABLE_SUFFIX as pt_after,
DATETIME(timestamp_micros(event_info. timestamp_usec), "America/New_York") as timestamp_after,
message_info.rfc2822_message_id as message_id_after,
message_info.connection_info.spf_pass as spf_pass_after,
message_info.source.address as sender_after,
message_info.subject as subject_after,
dest.address as recipient_after,
rule.rule_name as rule_name_after
FROM
`g-suite-logs.gmail_logs.daily_*`,
UNNEST ( message_info.destination ) as dest,
UNNEST ( message_info.triggered_rule_info ) as rule
WHERE rule.rule_name = "AFTER RETURNING FROM THIRD PARTY SYSTEM"
GROUP BY
pt_after,
message_id_after,
timestamp_after,
spf_pass_after,
sender_after,
recipient_after,
rule_name_after,
subject_after
) rule_after
JOIN(
SELECT
_TABLE_SUFFIX as pt_before,
DATETIME(timestamp_micros(event_info. timestamp_usec), "America/New_York") as timestamp_before,
message_info.rfc2822_message_id as message_id_before,
message_info.connection_info.spf_pass as spf_pass_before,
message_info.source.address as sender_before,
message_info.subject as subject_before,
dest.address as recipient_before,
rule.rule_name as rule_name_before
FROM
`g-suite-logs.gmail_logs.daily_*`,
UNNEST ( message_info.destination ) as dest,
UNNEST ( message_info.triggered_rule_info ) as rule
WHERE rule.rule_name = "BEFORE ROUTING TO THIRD PARTY SYSTEM"
GROUP BY
pt_before,
message_id_before,
timestamp_before,
spf_pass_before,
sender_before,
recipient_before,
rule_name_before,
subject_before
) rule_before
ON
rule_before.message_id_before = rule_after.message_id_after AND recipient_before = recipient_after
Я могу сохранить это как представление и установить 'WHERE pt_before = "20190618" AND pt_after = "20190618"', иэто значительно снижает стоимость запроса (с 1,5 ТБ до 24 ГБ), но тогда я не могу легко подключить представление к DataStudio, поскольку необходимо использовать два поля даты.
Один из вариантов - использоватьпараметризованные запросы, но я не думаю, что DataStudio их поддерживает.
В отдельной теме this - это то, как я изначально написал запрос, что кажется более эффективным, однако я нашелмного ложных срабатываний с этим запросом, где он соответствовал одному правилу, но не другому, и записывал временную разницу 0, искажая результаты.Так что, если у кого-то есть предложения по более эффективному способу написания этого, я открыт для предложений.