У меня есть 2 многораздельных таблицы:
Таблица 1:
| user_id | request_id |
Таблица 2:
| ip | user_id | request_id |
Я хочу получить для всех ips из partition_table2: - количество пользователей (из partition_table1) - запросы пользователей (из partition_table1) - запросы пользователей (из partition_table2)для пользователей (из partition_table1)
Информация: Ip связан с request_id из таблицы 1, поскольку один user_id может иметь более одного ip.
Проблема: Когда я фильтрую по _PARTITIONTIME в основном запросеон не распространяется на запрос из WITH, когда я выполняю LEFT JOIN, но фильтр по _PARTITIONTIME распространяется, когда я выполняю INNER JOIN.
Кажется, что удаление разделов не работает: https://cloud.google.com/bigquery/docs/querying-partitioned-tables для LEFTJOIN
Мой запрос:
WITH
users_info AS (
SELECT
t2.ip,
t1.user_id,
COUNT(DISTINCT t1.request_id) AS user_requests,
t1._PARTITIONTIME AS date
FROM partitioned_table1 t1
INNER JOIN partition_table2 t2
ON t1.request_id = t2.request_id
AND t1._PARTITIONTIME = t2._PARTITIONTIME
GROUP BY t2.ip, t1.user_id, t1._PARTITIONTIME
)
SELECT
t2.ip,
COUNT(DISTINCT m.user_id) AS users,
COUNT(DISTINCT t2.request_id) AS t2_users_requests,
SUM(m.user_requests) AS t1_users_requests
FROM partition_table2 t2
LEFT JOIN/INNER JOIN users_info m
ON t2.ip=m.ip
AND t2.user_id=m.user_id
AND m.date = t2._PARTITIONTIME
WHERE DATE(t2._PARTITIONTIME) = "2019-05-20"
GROUP BY t2.ip
Если я выполняю INNER JOIN, этот запрос обрабатывает ~ 4 ГБ, но с LEFT JOIN обрабатывает ~ 3 ТБ
Я сделал что-то не такили это поведение ожидается?
РЕДАКТИРОВАТЬ
Мне нужно тего запрос, чтобы создать вид.Условие (DATE (t2._PARTITIONTIME) = "2019-05-20") из вышеприведенного запроса, которое я буду использовать для фильтрации VIEW, когда сделаю запрос.