У меня есть таблица разделов / кластеров, как указано ниже:
Когда я запускаю этот запрос:
SELECT
projectId
FROM
`projectId.dataset.tables`
WHERE _PARTITIONTIME >= "2019-03-16 00:00:00" AND _PARTITIONTIME <= "2019-03-17 00:00:00"
AND projectId='myproject'
GROUP BY
projectId
limit 1
Я вижу фактическое сканирование 597 МБ
Однако, когда я выполняю тот же запрос в предыдущий день, как показано ниже:
SELECT
projectId
FROM
`projectId.dataset.tables`
WHERE _PARTITIONTIME >= "2019-03-15 00:00:00" AND _PARTITIONTIME <= "2019-03-16 00:00:00"
AND projectId='myproject'
GROUP BY
projectId
limit 1
Я вижу фактическое сканирование 122 МБ
Примечание: результаты будут еще хуже, если я добавлю больше столбцов.
Чтобы убедиться, что мой раздел имеет одинаковый размер, я посчитал количество projectId в каждом разделе
SELECT _partitionTime as date, count(projectId) as count
FROM
`projectId.dataset.tables`
WHERE _PARTITIONTIME >= "2019-03-15 00:00:00" AND _PARTITIONTIME <= "2019-03-17 00:00:00"
GROUP BY
date
И, как вы можете видеть, сегодня раздел содержит еще меньше строк, чем предыдущие 2 дня
В дополнении я попытался запросить буфер потоковой передачи, используя этот запрос, который не дал результата
SELECT projectId FROM `projectId.dataset.tables`
WHERE _PARTITIONTIME IS NULL
Мой вывод таков: потоковый буфер влияет на стоимость запроса к таблице кластера , но я не уверен, как это может быть и почему.
Любые идеи о том, что здесь происходит и почему я вижу более высокую стоимость при запросе сегодня раздела