Перейти к основному содержимому

Экспорт данных с помощью EXPORT

В этой теме описывается, как экспортировать данные из указанных таблиц или разделов в вашем кластере Selena в виде CSV-файлов во внешнюю систему хранения, которая может быть распределенной файловой системой HDFS или облачной системой хранения, такой как AWS S3.

УВЕДОМЛЕНИЕ

Вы можете экспортировать данные из таблиц Selena только как пользователь, имеющий привилегию EXPORT на эти таблицы Selena. Если у вас нет привилегии EXPORT, следуйте инструкциям в GRANT, чтобы предоставить привилегию EXPORT пользователю, которого вы используете для подключения к кластеру Selena.

Справочная информация

В версии 2.4 и более ранних Selena зависит от брокеров для установки соединений между вашим кластером Selena и внешней системой хранения при использовании оператора EXPORT для экспорта данных. Поэтому вам нужно указать WITH BROKER "<broker_name>" для указания брокера, который вы хотите использовать в операторе EXPORT. Это называется "выгрузкой на основе брокера". Брокер — это независимый сервис без состояния, интегрированный с интерфейсом файловой системы, помогающий Selena экспортировать данные во внешнюю систему хранения.

Начиная с версии 1.5.0, Selena больше не зависит от брокеров для установки соединений между вашим кластером Selena и внешней системой хранения при использовании оператора EXPORT для экспорта данных. Поэтому вам больше не нужно указывать брокера в операторе EXPORT, но вы все еще должны сохранить ключевое слово WITH BROKER. Это называется "выгрузкой без брокера".

Однако когда ваши данные хранятся в HDFS, выгрузка без брокера может не работать, и вы можете прибегнуть к выгрузке на основе брокера:

  • Если вы экспортируете данные в несколько кластеров HDFS, вам нужно развернуть и настроить независимый брокер для каждого из этих кластеров HDFS.
  • Если вы экспортируете данные в один кластер HDFS и у вас настроено несколько пользователей Kerberos, вам нужно развернуть один независимый брокер.

Поддерживаемые системы хранения

  • Распределенная файловая система HDFS
  • Облачная система хранения, такая как AWS S3

Меры предосторожности

  • Мы рекомендуем, чтобы данные, которые вы экспортируете за раз, не превышали несколько десятков ГБ. Если вы экспортируете чрезмерно большое количество данных за раз, экспорт может завершиться неудачей, и стоимость повторного экспорта увеличится.

  • Если исходная таблица Selena содержит большое количество данных, мы рекомендуем экспортировать данные только из нескольких разделов таблицы за раз, пока все данные из таблицы не будут экспортированы.

  • Если FE в вашем кластере Selena перезапускаются или выбирается новый Leader FE во время выполнения задания экспорта, задание экспорта завершается неудачей. В этой ситуации вы должны снова отправить задание экспорта.

  • Если FE в вашем кластере Selena перезапускаются или выбирается новый Leader FE после завершения задания экспорта, некоторая информация о задании, возвращаемая оператором SHOW EXPORT, может быть потеряна.

  • Selena экспортирует только данные базовых таблиц. Selena не экспортирует данные материализованных представлений, созданных на базовых таблицах.

  • Задания экспорта требуют сканирования данных, что занимает ресурсы ввода-вывода и, следовательно, увеличивает задержку запросов.

Рабочий процесс

После отправки задания экспорта Selena идентифицирует все tablet, участвующие в задании экспорта. Затем Selena разделяет участвующие tablet на группы и генерирует планы запросов. Планы запросов используются для чтения данных из участвующих tablet и записи данных в указанный путь целевой системы хранения.

На следующем рисунке показан общий рабочий процесс.

img

Общий рабочий процесс состоит из следующих трех шагов:

  1. Пользователь отправляет задание экспорта Leader FE.

  2. Leader FE выдает инструкции snapshot всем BE или CN в кластере Selena, чтобы BE или CN могли делать снимки участвующих tablet для обеспечения согласованности экспортируемых данных. Leader FE также генерирует несколько задач экспорта. Каждая задача экспорта — это план запроса, и каждый план запроса используется для обработки части участвующих tablet.

  3. Leader FE распределяет задачи экспорта между BE или CN.

Принципы

Когда Selena выполняет планы запросов, она сначала создает временную папку с именем __starrocks_export_tmp_xxx в указанном пути целевой системы хранения. В имени временной папки xxx представляет ID задания экспорта. Пример имени временной папки: __starrocks_export_tmp_921d8f80-7c9d-11eb-9342-acde48001122. После успешного выполнения плана запроса Selena генерирует временный файл во временной папке и записывает экспортированные данные в созданный временный файл.

После экспорта всех данных Selena использует оператор RENAME для сохранения созданных временных файлов в указанный путь.

Связанные параметры

В этом разделе описываются некоторые параметры, связанные с экспортом, которые вы можете настроить в FE вашего кластера Selena.

  • export_checker_interval_second: интервал, с которым планируются задания экспорта. Интервал по умолчанию составляет 5 секунд. После перенастройки этого параметра для FE вам нужно перезапустить FE, чтобы новая настройка параметра вступила в силу.

  • export_running_job_num_limit: максимальное количество выполняющихся заданий экспорта, которые разрешены. Если количество выполняющихся заданий экспорта превышает этот лимит, избыточные задания экспорта переходят в состояние ожидания после выполнения snapshot. Максимальное количество по умолчанию — 5. Вы можете перенастроить этот параметр во время выполнения заданий экспорта.

  • export_task_default_timeout_second: период тайм-аута для заданий экспорта. Период тайм-аута по умолчанию составляет 2 часа. Вы можете перенастроить этот параметр во время выполнения заданий экспорта.

  • export_max_bytes_per_be_per_task: максимальное количество сжатых данных, которые могут быть экспортированы за одну задачу экспорта с каждого BE или CN. Этот параметр предоставляет политику, на основе которой Selena разделяет задания экспорта на задачи экспорта, которые могут выполняться параллельно. Максимальное количество по умолчанию составляет 256 МБ.

  • export_task_pool_size: максимальное количество задач экспорта, которые могут выполняться параллельно пулом потоков. Максимальное количество по умолчанию — 5.

Основные операции

Отправка задания экспорта

Предположим, что ваша база данных Selena db1 содержит таблицу с именем tbl1. Чтобы экспортировать данные столбцов col1 и col3 из разделов p1 и p2 таблицы tbl1 в путь export вашего кластера HDFS, выполните следующую команду:

EXPORT TABLE db1.tbl1 
PARTITION (p1,p2)
(col1, col3)
TO "hdfs://HDFS_IP:HDFS_Port/export/lineorder_"
PROPERTIES
(
"column_separator"=",",
"load_mem_limit"="2147483648",
"timeout" = "3600"
)
WITH BROKER
(
"username" = "user",
"password" = "passwd"
);

Для подробного синтаксиса и описания параметров, а также примеров команд экспорта данных в AWS S3, см. EXPORT.

Получение ID запроса задания экспорта

После отправки задания экспорта вы можете использовать оператор SELECT LAST_QUERY_ID() для запроса ID запроса задания экспорта. С помощью ID запроса вы можете просматривать или отменять задание экспорта.

Для подробного синтаксиса и описания параметров см. last_query_id.

Просмотр статуса задания экспорта

После отправки задания экспорта вы можете использовать оператор SHOW EXPORT для просмотра статуса задания экспорта. Пример:

SHOW EXPORT WHERE queryid = "edee47f0-abe1-11ec-b9d1-00163e1e238f";

ПРИМЕЧАНИЕ

В предыдущем примере queryid — это ID запроса задания экспорта.

Возвращается информация, похожая на следующий вывод:

JobId: 14008
State: FINISHED
Progress: 100%
TaskInfo: {"partitions":["*"],"mem limit":2147483648,"column separator":",","line delimiter":"\n","tablet num":1,"broker":"hdfs","coord num":1,"db":"default_cluster:db1","tbl":"tbl3",columns:["col1", "col3"]}
Path: oss://bj-test/export/
CreateTime: 2019-06-25 17:08:24
StartTime: 2019-06-25 17:08:28
FinishTime: 2019-06-25 17:08:34
Timeout: 3600
ErrorMsg: N/A

Для подробного синтаксиса и описания параметров см. SHOW EXPORT.

Отмена задания экспорта

Вы можете использовать оператор CANCEL EXPORT для отмены отправленного задания экспорта. Пример:

CANCEL EXPORT WHERE queryid = "921d8f80-7c9d-11eb-9342-acde48001122";

ПРИМЕЧАНИЕ

В предыдущем примере queryid — это ID запроса задания экспорта.

Для подробного синтаксиса и описания параметров см. CANCEL EXPORT.

Лучшие практики

Разделение планов запросов

Количество планов запросов, на которые разделяется задание экспорта, варьируется в зависимости от количества tablet, участвующих в задании экспорта, и от максимального количества данных, которые могут быть обработаны за один план запроса. Задания экспорта повторяются как планы запросов. Если количество данных, обрабатываемых планом запроса, превышает максимально допустимое количество, план запроса сталкивается с ошибками, такими как колебания в удаленном хранилище. В результате стоимость повторного выполнения плана запроса увеличивается. Максимальное количество данных, которые могут быть обработаны за один план запроса каждым BE или CN, задается параметром export_max_bytes_per_be_per_task, который по умолчанию составляет 256 МБ. В плане запроса каждому BE или CN выделяется как минимум один tablet, и он может экспортировать количество данных, не превышающее лимит, указанный параметром export_max_bytes_per_be_per_task.

Несколько планов запросов задания экспорта выполняются параллельно. Вы можете использовать параметр FE export_task_pool_size для указания максимального количества задач экспорта, которые разрешено выполнять параллельно пулом потоков. Этот параметр по умолчанию равен 5.

В обычных случаях каждый план запроса задания экспорта состоит только из двух частей: сканирования и экспорта. Логика выполнения вычислений, требуемых планами запросов, не потребляет много памяти. Поэтому лимит памяти по умолчанию в 2 ГБ может удовлетворить большинство ваших бизнес-требований. Однако в определенных обстоятельствах, например, когда план запроса требует сканирования многих tablet на BE или CN, или tablet имеет много версий, емкости памяти в 2 ГБ может быть недостаточно. В этих обстоятельствах вам нужно использовать параметр load_mem_limit для указания более высокого лимита емкости памяти, например 4 ГБ или 8 ГБ.