Создайте секционированную таблицу с суффиксом даты в bigquery, используя SQL или веб-интерфейс - PullRequest
0 голосов
/ 29 мая 2020

Я хочу создать такую ​​таблицу:

CREATE TABLE sometable
(SELECT columns, columns, date_col)
PARTITIONED BY date_col

И я хочу, чтобы она была разделена по дате с суффиксом даты в таблице: sometable $ date_partition

Я читаю документы, но могу Не выполняйте это ни с помощью веб-интерфейса, ни с помощью SQL.

Веб-интерфейс показывает такую ​​ошибку «Отсутствует аргумент для параметра DATE.»

My table name is "daily_export_${DATE}"
My partitioning column isn't blank, it's date_col.

Могу я привести простой пример, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 01 июня 2020
  • PARTITION BY идет раньше
  • Запрос должен преобразовать суффикс таблицы в тип DATE.

Например:

CREATE OR REPLACE TABLE temp.so
PARTITION BY date_from_table_name
AS
SELECT PARSE_DATE('%Y%m%d', _table_suffix) date_from_table_name, event_timestamp, event_name, items  
FROM `bingo-blast-174dd.analytics_151321511.events_*`
WHERE _table_suffix BETWEEN '20200530' AND '20200531'
LIMIT 10
0 голосов
/ 04 июня 2020

Как вы можете видеть в этой документации , BigQuery реализует две разные концепции: сегментированные таблицы и сегментированные таблицы

Первый one (сегментированные таблицы) - это способ разделить всю таблицу на множество таблиц с суффиксом даты. Вы можете запрашивать эти таблицы по отдельности или использовать подстановочные знаки. Например, вместо создания одной таблицы с именем events , вы можете создать множество таблиц с именами events_20200101 , events_20200102 , [...]

Когда вы это сделаете, вы можете запросить любую из этих таблиц по отдельности или вы можете запросить все из них, выполнив некоторый запрос, например select * from events_*

Вторая концепция (секционированные таблицы) - это подход к фрагментации ваших таблицу на более мелкие части, чтобы повысить производительность и снизить затраты при запросе данных. Секционированные таблицы могут быть основаны на каком-либо столбце вашей таблицы или даже на времени приема. Когда ваша таблица секционируется по времени приема, вы можете получить доступ к псевдостолбцу с именем _PARTITIONTIME

При сравнении обоих подходов в документации говорится:

Таблицы, секционированные по дате / времени, работают лучше, чем таблицы сегментированы по дате. Когда вы создаете таблицы с именами по дате, BigQuery должен поддерживать копию схемы и метаданных для каждой таблицы с именами по дате. Кроме того, когда используются таблицы с указанием даты, BigQuery может потребоваться для проверки разрешений для каждой запрашиваемой таблицы. Эта практика также увеличивает накладные расходы на запрос и влияет на производительность запроса. Рекомендуется использовать секционированные таблицы по дате / времени вместо таблиц с сегментированием даты.

В вашем случае вам в основном нужно создать многораздельную таблицу без даты в ее имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...