Разделение по неделям / годам / месяцам, чтобы преодолеть лимит разделов? - PullRequest
0 голосов
/ 14 мая 2019

У меня 32 года данных, которые я хочу поместить в многораздельную таблицу. Однако BigQuery говорит, что я пересекаю лимит (4000 разделов).

Для запроса типа:

CREATE TABLE `deleting.day_partition`
PARTITION BY FlightDate 
AS 
SELECT *
FROM `flights.original` 

Я получаю сообщение об ошибке:

Слишком много разделов, созданных по запросу, разрешено 2000, запрос производит не менее 11384 разделов

Как мне преодолеть этот лимит?

1 Ответ

3 голосов
/ 14 мая 2019

Вместо разделения по дням вы можете разделить по неделям / месяцам / годам.

В моем случае каждый год данных содержит около ~ 3 ГБ данных, поэтому я получу наибольшую выгоду от кластеризации, еслиЯ делю по годам.

Для этого я создам столбец даты year и раздел по нему:

CREATE TABLE `fh-bigquery.flights.ontime_201903`
PARTITION BY FlightDate_year
CLUSTER BY Origin, Dest 
AS
SELECT *, DATE_TRUNC(FlightDate, YEAR) FlightDate_year
FROM `fh-bigquery.flights.raw_load_fixed`

Обратите внимание, что я создал дополнительный столбец DATE_TRUNC(FlightDate, YEAR) AS FlightDate_year впроцесс.

Статистика таблицы:

enter image description here

Поскольку таблица кластеризована, я получу преимущества разбиения, даже если я не использую столбец разделения (год) в качестве фильтра:

SELECT *
FROM `fh-bigquery.flights.ontime_201903`
WHERE FlightDate BETWEEN '2008-01-01' AND '2008-01-10'

Predicted cost: 83.4 GB
Actual cost: 3.2 GB
...