Google Big Query разбивает таблицу секционирования по времени приема - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть секционированная таблица времени приема, которая становится немного больше. Я хотел сгруппировать по значениям в одном из столбцов и использовать его, чтобы разбить его на несколько таблиц. Есть ли простой способ сделать это, сохранив исходные значения _PARTITIONTIME в наборе новых секционированных таблиц времени приема?

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

Также у меня есть достаточно уникальных значений в столбце, который я хочу разделить, чтобы сохранение результата запроса «WHERE column = value» в таблицу для каждого значения было бы непозволительным по стоимости. Я не нахожу никакой документации, в которой упоминается, сохранит ли этот подход разделы, так что, даже если это не слишком дорого, он может не сработать.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

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

0 голосов
/ 27 апреля 2018

Случай, который вы описываете, требует наличия двухуровневого разбиения, которое пока не поддерживается

Вы можете создать таблицу разделов столбцов https://cloud.google.com/bigquery/docs/creating-column-partitions И после этого постройте это значение столбца по мере необходимости, которое использовалось для разбиения перед вставкой - но в этом случае вы потеряли значение _PARTITIONTIME

На основании дополнительных разъяснений - у меня была похожая проблема - и я решил написать приложение на python, которое будет читать исходную таблицу (здесь важно чтение - не запрос - поэтому оно будет бесплатным) - разделение данных на основе ваших критериев и потока Для данных (простых - но не бесплатных) или для создания файлов json / csv и загрузки их в целевые таблицы (которые также будут бесплатными, но с некоторыми ограничениями по количеству этих операций) - потребуется дополнительная обработка кода / исключений, если вы идете вторым путем.

Вы также можете сделать это через DataFlow - это будет определенно дороже, чем пользовательское решение, но потенциально более надежно.

Примеры для библиотеки Python gcloud

client = bigquery.Client(project="PROJECT_NAME")

t1 = client.get_table(source_table_ref)
target_schema = t1.schema[1:] #removing first column which is a key to split
ds_target = client.dataset(project=target_project, dataset_id=target_dataset)

rows_to_process_iter = client.list_rows( t1, start_index=start_index, max_results=max_results)
# convert to list
rows_to_process = list(rows_to_process_iter)
# doing something with records

# stream records to destination 
errors = client.create_rows(target_table, records_to_stream)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...