Получи случайную криптовалюту за регистрацию!

​​Как создать кластеризированную таблицу в Google BigQuery с п | R4marketing | канал Алексея Селезнёва | Язык R

​​Как создать кластеризированную таблицу в Google BigQuery с помощью R

Кластеризированная таблица в Google BigQuery, это таблица, которая физически разбита на блоки, по значениям одного или нескольких столбцов.

Зачем кластеризировать таблицу в BigQUery

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

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

Как создать кластеризированную таблицу с помощью bigrquery

Синтаксис не особо очевидный, поэтому я и решил написать этот пост. Ниже пример создания простейшей кластеризированной таблицы:

library(bigrquery)
library(magrittr)

bq_auth(email = 'me@gmail.com')

ds <- bq_dataset(project = "my_proj", dataset = 'my_ds')

# тестовые данные
df <- data.frame(
gr = c('a', 'a', 'a', 'b', 'b'),
val = c(3, 5, 1, 3,4)
)

# создаём кластеризированную таблицу
bq_mtcars <- bq_table_create(
bq_table(ds, 'cluster_tbl'),
clustering = list(fields = "gr"),
fields = as_bq_fields(df)
)

# записываем данные
bq_table(project = "my_proj",
dataset = "my_ds",
table = "cluster_tbl") %>%
bq_table_upload(
values = df,
write_disposition = "WRITE_APPEND"
)

# запрашиваем данные
sql <- "SELECT * FROM my_ds.cluster_tbl WHERE gr = 'b'"
bq_df <- bq_project_query('choice31', sql) %>%
bq_table_download()

Т.е. для создания кластеризированной таблицы необходимо:

1. Использовать аргумент clustering передав в него список столбцов для кластеризации.
2. Передать в аргумент fields структуру будущей таблицы с помощью as_bq_fields(df).

Как правильно запрашивать данные из кластеризированной таблицы

Вы можете запрашивать данные из кластеризированной таблицы также, как и из обычной. Но для того, что бы получить эффект от кластеризации соблюдайте следующие правила:

● Кластеризация работает при фильтрации данных в блоке WHERE, и агрегации данных используя блок GROUP BY.
● Соблюдайте порядок обращения к столбцам, такой же как указывали при кластеризации.
● Нельзя использовать в выражении фильтрации кластеризированное поле, с каким либо другим полем.
● Используйте только простейшие выражения, например нельзя использовать при фильтрации по кластерному полю функции его преобразования.

Ссылки:
- Introduction to clustered tables
- Creating and using clustered tables
- Querying clustered tables

#заметки_по_R