2017-01-23 5 views
0

Я просто читал на секционированном столе на BigQuery и не мог понять раздел лучшей практики. Я попытался запустить следующиеКак запросить таблицу разделов в BigQuery

#standardSQL 
SELECT * 
FROM `myproject.affiliate.log_20170101` 
WHERE _PARTITIONTIME BETWEEN TIMESTAMP_TRUNC(TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 * 24 HOUR),DAY) 
AND TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(),DAY); 

на основе этого documentation link

Но я получаю эту ошибку,

Error: Unrecognized name: _PARTITION_TIME; 

Что я делаю неправильно? И как это отличается от подстановочных запросов?

ответ

2

Что я делаю неправильно?

Снизу линии - я предполагаю, что вы на самом деле не с помощью секционированной таблицы, а sharded стол

FROM `myproject.affiliate.log_20170101` 

Чтобы справиться с sharded таблицы в BigQuery Standard SQL вы должны использовать _TABLE_SUFFIX

И как это отличается от подстановочного запроса?

Sharded таблица представляет собой набор ежедневных таблиц, названные в tablename_YYYYMMDD и может быть запрошено с использованием Table wildcard functions в Наследстве SQL или с _TABLE_SUFFIX в стандарте SQL
Partitioned table является тон таблицей, которая внутренне разделена на день

+0

I Я удивлен, как быстро ты это заметил. Да, таблицы по дате, которые, как я думал, были разделены, были просто закрытыми таблицами. Мне интересно, насколько отличаются производительность и удобство использования между секционированными и оштукатуренными таблицами – dorachan2010

+0

. Мое личное предположение заключалось бы в том, чтобы перейти к секционированным таблицам. В то время - только закрытые столы были доступны, поэтому выбора не было. Но теперь - разделенный путь. См. Больше в ссылках, представленных в моем ответе –

+0

Да, я прочитал статьи, но они не дали ясных примеров того, как они отличаются по производительности или удобству использования. Синтаксис определения диапазона дат не кажется более простым при использовании секционированных – dorachan2010

Смежные вопросы