Почему BigQuery сканирует всю таблицу, хотя она разделена по часам?

#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 (