#google-bigquery
#google-bigquery
Вопрос:
Эта таблица разделена по часам:
SELECT *
FROM `blockchain-etl-internal.crypto_ethereum_partitioned.logs_by_topic_0xd78`
WHERE block_timestamp >= '2020-11-14 00:00:00' and block_timestamp < '2020-11-14 01:00:00'
ORDER BY block_timestamp DESC
Но какой бы фильтр в метке block_timestamp я ни указал, BigQuery сканирует всю таблицу. Вы можете увидеть размер таблицы и объем данных, проверенных в запросе, чтобы убедиться.
Разве BigQuery не должен сканировать данные только в отфильтрованных разделах?
Комментарии:
1. каков размер таблицы?
2. @MikhailBerlyant около 400 МБ
3. ваш фильтр не по часам, а скорее по дате, вы пробовали фильтровать по часам и посмотреть, по-прежнему ли он сканирует всю таблицу?
4. Просто обновил вопрос фильтром по часам. Он по-прежнему сканирует всю таблицу. кстати, таблица в вопросе является общедоступной
5. если вы проверите информацию о разделах этой таблицы (например, через $ __PARTITIONS_SUMMARY__ ), вы обнаружите, что разделов нет, и все данные принадлежат так называемому _РАЗДЕЛЬНОМУ разделу — это объяснило бы ваш вопрос — но теперь реальный вопрос заключается в том, как это возможно, поскольку таблица явно настроена набыть разделенным по часам ??!!
Ответ №1:
Это потому, что все строки в таблице все еще находятся в UNPARTITIONED
разделе и не были перераспределены в соответствующие разделы. Перераспределение запускается только при наличии достаточного количества данных (размер байта не ниже определенного порога) (https://cloud.google.com/bigquery/streaming-data-into-bigquery#streaming_into_partitioned_tables ).
На данный момент этот порог установлен на уровне 5 ГБ, в то время как таблица имеет около 400 МБ, как вы указали.
Комментарии:
1. эти 5 ГБ где-то задокументированы? почему-то я не помню этот номер: o (