2022-04-18 11:00:03
Как создать кластеризированную таблицу в 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
859 viewsAlexey Seleznev, 08:00