Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

R4marketing | канал Алексея Селезнёва | Язык R

4 года назад
Открыть в
​​Как создать кластеризированную таблицу в Google BigQuery с помощью R Кластеризированная таблица в Google BigQuery, это таблица, которая физически разбита на блоки, по значениям одного или нескольких столбцов. Зачем кластеризировать таблицу в BigQUery По смыслу процесс кластеризации очень похож на индексирование таблиц, т.е. вы упорядочиваете данные по значению столбцов, за счёт чего значительно увеличиваете скорость выполнения запросов. В BigQuery кластеризация не только снижает запросы, но и экономит деньги, т.к. при правильной работе с кластеризированной таблицей происходит сканирование только нужных блоков данных. Как создать кластеризированную таблицу с помощью bigrquery Синтаксис не особо очевидный, поэтому я и решил написать этот пост. Ниже пример создания простейшей кластеризированной таблицы:
 
library(bigrquery)
library(magrittr)

bq_auth(email = '[email protected]')

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