gpload
Запускает задачу загрузки данных, описанную в управляющем файле формата YAML. Подробное описание и примеры использования см. в статье Использование gpload.
Синтаксис
gpload -f <control_file>
[ -l <log_file> ]
[ -h <hostname> ]
[ -p <port> ]
[ -U <username> ]
[ -d <database> ]
[ -W ]
[ --gpfdist_timeout <seconds> ]
[ --no_auto_trans ]
[ --max_retries <retry_times> ]
[ [ -v | -V ] [ -q ] ]
[ -D ]
gpload -?
gpload --version
Требования
Клиентский хост, с которого запускается gpload, должен соответствовать следующим требованиям:
-
Установлена утилита параллельной загрузки файлов gpfdist, доступная в
PATH. Обычно она находится в каталоге $GPHOME/bin вашей установки Greengage DB. -
Доступ по сети (входящие и исходящие соединения) ко всем хостам кластера Greengage DB, включая мастер и сегменты.
-
Доступ по сети (входящие и исходящие соединения) ко всем хостам, на которых расположены источники данных для загрузки (ETL-серверы).
Описание
gpload — утилита для загрузки данных, которая служит интерфейсом к функции параллельной загрузки внешних таблиц Greengage DB.
Используя спецификацию загрузки, заданную в управляющем файле в формате YAML, gpload выполняет следующие действия: вызывает параллельный файловый сервер Greengage DB (gpfdist), создает определение внешней таблицы на основе исходных данных и запускает операцию INSERT, UPDATE или MERGE для загрузки данных в целевую таблицу.
Утилита gpfdist совместима только с мажорной версией Greengage DB, с которой она поставляется.
Например, gpfdist, установленная вместе с Greengage DB 6.x, не может использоваться с Greengage DB 7.x.
Операции MERGE и UPDATE не поддерживаются, если имя столбца целевой таблицы является зарезервированным ключевым словом, содержит заглавные буквы или включает любой символ, требующий кавычек (" ") для идентификации столбца.
Операции, включая любые SQL-команды, указанные в разделе SQL управляющего YAML-файла (см. раздел Формат управляющего файла), выполняются в рамках одной транзакции, чтобы предотвратить неконсистентность данных при выполнении нескольких одновременных операций загрузки в целевую таблицу.
Параметры
- -f <control_file>
-
(Обязательно) YAML-файл, содержащий спецификацию загрузки. Подробности см. в разделе Формат управляющего файла.
- --gpfdist_timeout <seconds>
-
Устанавливает тайм-аут ожидания ответа программы параллельной загрузки файлов
gpfdist. Допустимые значения: от0до30секунд (0отключает тайм-ауты). Обратите внимание, что в сетях с высокой нагрузкой может потребоваться увеличить это значение. - -l <log_file>
-
Указывает путь к лог-файлу. По умолчанию ~/gpAdminLogs/gpload_YYYYMMDD. См. подробности в разделе Формат лог-файла.
- --no_auto_trans
-
Отключает обработку операции загрузки как единой транзакции при выполнении одной операции загрузки в целевую таблицу.
По умолчанию
gploadобрабатывает каждую операцию загрузки как единую транзакцию, чтобы предотвратить неконсистентность данных при выполнении нескольких одновременных операций над целевой таблицей. - -q
-
Запуск без вывода сообщений на экран. Вывод команды не отображается, но записывается в лог-файл.
Данная опция не может использоваться совместно с
-vили-V. - -D
-
Проверка на наличие ошибок без выполнения фактической загрузки.
- -v
-
Отображает подробный вывод шагов загрузки по мере их выполнения.
Данная опция не может использоваться совместно с
-q. - -V
-
Отображает максимально подробный вывод загрузки.
Данная опция не может использоваться совместно с
-q. - -?
-
Выводит справочную информацию.
- --version
-
Выводит версию утилиты и завершает работу.
Параметры подключения
- -d <database>
-
Имя базы данных, в которую выполняется загрузка. Если параметр не указан, используется значение из управляющего файла загрузки, переменной окружения
PGDATABASEили имя текущего пользователя системы. - -h <hostname>
-
Имя хоста, на котором запущен мастер Greengage DB. Если параметр не указан, используется значение из управляющего файла загрузки, переменной окружения
PGHOSTилиlocalhost. - -p <port>
-
TCP-порт, на котором мастер Greengage DB ожидает подключения. Если параметр не указан, используется значение из управляющего файла загрузки, переменной окружения
PGPORTили5432. - --max_retries <retry_times>
-
Максимальное количество попыток подключения
gploadк Greengage DB после тайм-аута подключения. Значение по умолчанию —0(не выполнять повторных попыток). Отрицательное число, например-1, указывает на неограниченное количество попыток. - -U <username>
-
Имя роли базы данных для подключения. Если параметр не указан, используется значение из управляющего файла загрузки, переменной окружения
PGUSERили имя текущего пользователя системы. - -W
-
Принудительно запрашивает пароль у пользователя. Если параметр не указан, пароль читается из переменной окружения
PGPASSWORD, файла паролей, указанного вPGPASSFILE, или из ~/.pgpass. Если ни один из этих источников не указан,gploadзапросит пароль даже без указания-W.
Формат управляющего файла
Управляющий файл gpload использует формат YAML 1.1 и содержит собственную схему для описания шагов операции загрузки в Greengage DB.
Файл должен быть корректным YAML-документом.
gpload обрабатывает управляющий файл последовательно, используя отступы (пробелы) для определения иерархии документа и взаимосвязей между разделами.
Использование пробелов имеет значение.
Не стоит использовать пробелы для форматирования, а символы табуляции полностью запрещены.
Базовая структура управляющего файла загрузки:
---
VERSION: 1.0.0.1
DATABASE: <db_name>
USER: <db_username>
HOST: <master_hostname>
PORT: <master_port>
GPLOAD:
INPUT:
- SOURCE:
LOCAL_HOSTNAME:
- <hostname_or_ip>
PORT: <http_port>
| PORT_RANGE: [ <start_port_range>, <end_port_range> ]
FILE:
- </path/to/input_file>
SSL: true | false
CERTIFICATES_PATH: </path/to/certificates>
- FULLY_QUALIFIED_DOMAIN_NAME: true | false
- COLUMNS:
- <field_name>: <data_type>
- TRANSFORM: '<transformation>'
- TRANSFORM_CONFIG: '<configuration-file-path>'
- MAX_LINE_LENGTH: <integer>
- FORMAT: text | csv
- DELIMITER: '<delimiter_character>'
- ESCAPE: '<escape_character>' | 'OFF'
- NEWLINE: 'LF' | 'CR' | 'CRLF'
- NULL_AS: '<null_string>'
- FILL_MISSING_FIELDS: true | false
- FORCE_NOT_NULL: <column_name> [, ...]
- QUOTE: '<csv_quote_character>'
- HEADER: true | false
- ENCODING: <database_encoding>
- ERROR_LIMIT: <integer>
- LOG_ERRORS: true | false
EXTERNAL:
- SCHEMA: <schema> | '%'
OUTPUT:
- TABLE: <schema.table_name>
- MODE: insert | update | merge
- MATCH_COLUMNS:
- <target_column_name>
- UPDATE_COLUMNS:
- <target_column_name>
- UPDATE_CONDITION: '<boolean_condition>'
- MAPPING:
<target_column_name>: <source_column_name> | '<expression>'
PRELOAD:
- TRUNCATE: true | false
- REUSE_TABLES: true | false
- STAGING_TABLE: <external_table_name>
- FAST_MATCH: true | false
SQL:
- BEFORE: "<sql_command>"
- AFTER: "<sql_command>"
| Ключ | Описание | Обязательность |
|---|---|---|
VERSION |
Версия схемы управляющего файла |
Да |
DATABASE <db_name> |
База данных, к которой выполняется подключение. Если значение не указано, по умолчанию применяется значение |
Нет |
USER <db_username> |
Указывает имя роли, с помощью которой выполняется подключение к базе данных. Если значение не указано, по умолчанию используется имя текущего пользователя или применяется значение |
Нет |
HOST <master_hostname> |
Имя мастер-хоста Greengage DB. Если значение не указано, по умолчанию используется |
Нет |
PORT <master_port> |
Порт, прослушиваемый мастер-сервером Greengage DB. Если значение не указано, по умолчанию используется порт |
Нет |
GPLOAD |
Содержит спецификацию загрузки.
Спецификация должна содержать разделы |
Да |
INPUT |
Определяет местоположение и формат исходных данных |
Да |
SOURCE |
Указывает местоположение исходного файла данных. В разделе |
Да |
LOCAL_HOSTNAME <hostname_or_ip> |
Указывает имя хоста или IP-адрес локальной машины, на которой запущен Если на машине настроено несколько сетевых адаптеров (NIC), можно указать имя хоста или IP-адрес каждого отдельного адаптера, чтобы разрешить сетевому трафику использовать их все одновременно. По умолчанию используется только основное имя хоста или IP-адрес локальной машины |
Нет |
PORT <http_port> |
Указывает номер порта, который использует утилита Можно также использовать |
Нет |
PORT_RANGE <start_port_range>, <end_port_range> |
Указывает диапазон портов, из которого утилита |
Нет |
FILE </path/to/input_file> |
Указывает местоположение файла, каталога в локальной файловой системе или именованного канала, содержащего данные для загрузки. Можно указать несколько файлов при условии, что все они используют один и тот же формат данных.
Для указания нескольких файлов можно использовать подстановочные знаки (wildcards), например, |
Да |
SSL true | false |
Указывает, что используется защищенное SSL-соединение. Если указано значение Более подробную информацию можно получить в разделе Настройка SSL |
Нет |
CERTIFICATES_PATH </path/to/certificates> |
Указывает местоположение хранилища сертификатов. Обязателен, если ключу Каталог, указанный в
Корневой каталог ( |
Да, если ключу |
FULLY_QUALIFIED_DOMAIN_NAME true | false |
Указывает способ определения имен хостов в Если указано значение |
Нет |
COLUMNS <field_name>: <data_type> |
Указывает схему файлов данных в формате пары из имени столбца и типа данных ( Символ разделителя ( Это сопоставление по умолчанию можно переопределить с помощью раздела |
Нет |
TRANSFORM '<transformation>' |
Указывает имя трансформации, переданной Более подробную информацию можно получить в разделе Загрузка с помощью gpload |
Нет |
TRANSFORM_CONFIG '<configuration-file-path>' |
Указывает местоположение файла конфигурации трансформации. Более подробную информацию можно получить в разделе Файл конфигурации трансформации |
Да, если указано значение |
MAX_LINE_LENGTH <integer> |
Устанавливает максимальный размер строки данных в байтах, по умолчанию Ключ следует использовать, если в данных содержатся очень длинные строки (или при получении сообщения об ошибке |
Нет |
FORMAT text | csv |
Указывает формат исходных данных: текст ( Более подробную информацию можно получить в статье Форматирование внешних данных |
Нет |
DELIMITER '<delimiter_character>' |
Указывает ASCII-символ, использующийся в качестве разделителя. Разделитель должен располагаться между полями, но не в начале и не в конце строки. Вы также можете указать непечатаемый ASCII-символ или Unicode-символ, например Для текстовых файлов по умолчанию используется знак табуляции ( Для CSV файлов по умолчанию используется знак запятой ( Более подробную информацию можно получить в разделе Форматирование столбцов |
Нет |
ESCAPE '<escape_character>' | 'OFF' |
Указывает символ экранирования. Для текстовых файлов по умолчанию используется знак обратной косой черты ( Для CSV файлов по умолчанию используется знак кавычек ( Более подробную информацию можно получить в разделе Символы экранирования |
Нет |
NEWLINE 'LF' | 'CR' | 'CRLF' |
Указывает символ переноса строки и принимает значения Если значение не указано, используется символ переноса строки, которым заканчивается первая строка файла данных. Более подробную информацию можно получить в разделе Форматирование строк |
Нет |
NULL_AS '<null_string>' |
Указывает строку, обозначающую null-значение — неизвестное значение колонки или поля. Для текстовых файлов по умолчанию используется строка Для CSV файлов по умолчанию используется пустое значение, не заключенное в кавычки. Более подробную информацию можно получить в разделе Обработка NULL-значений |
Нет |
FILL_MISSING_FIELDS true | false |
Устанавливает значения |
Нет |
FORCE_NOT_NULL ( <column_name> [, …] ) |
Позволяет обрабатывать значения полей как заключенные в кавычки. Так как null-значение по умолчанию — пустое значение, не заключенное в кавычки, это позволяет обрабатывать отсутствующие значения как пустые строки |
Нет |
QUOTE '<csv_quote_character>' |
Указывает символ кавычек. По умолчанию используется знак двойных кавычек ( |
Нет |
HEADER true | false |
Указывает на наличие заголовка в файле данных. Если используются несколько файлов с данными, то все они должны иметь заголовок. По умолчанию предполагается, что заголовок в файлах данных отсутствует |
Нет |
ENCODING <database_encoding> |
Определяет кодировку символов исходных данных. Если значение не указано, используется клиентская кодировка по умолчанию. При изменении значения Более подробную информацию можно получить в разделе Кодировка символов |
Нет |
ERROR_LIMIT <integer> |
Включает для данной загрузки режим изоляции ошибок для одной строки. При включении этого режима входные строки данных, содержащие ошибки форматирования, отклоняются до тех пор, пока на любом сегменте Greengage DB не будет превышено пороговое значение количества ошибок. Если порог не достигнут, все корректные строки загружаются, а некорректные — отклоняются либо сохраняются в лог ошибок. По умолчанию операция загрузки прерывается при первой ошибке. Обратите внимание, что изоляция ошибок для одной строки применяется только к строкам данных с ошибками формата, например, лишними или отсутствующими атрибутами, атрибутами с неправильным типом данных или неверной кодировкой. Ошибки ограничений, например, нарушения первичного ключа, все равно приводят к отмене операции загрузки |
Нет |
LOG_ERRORS true | false |
Указывает, сохранять ли в лог информацию об ошибках, если установлено значение Может принимать значения Ошибки форматирования можно просмотреть с помощью встроенной SQL-функции Если для Возвращается только сводная информация об ошибках форматирования.
Вы можете удалить ошибки форматирования из логов ошибок с помощью функции |
Нет |
EXTERNAL |
Указывает схему внешних таблиц, создаваемых По умолчанию используется схема из |
Нет |
SCHEMA <schema> | '%' |
Имя схемы внешней таблицы.
Если схемы с таким именем не найдено, возвращается ошибка.
Если указан символ процента ( Если в имени таблицы не указано имя схемы, используется схема по умолчанию |
Да, если указано значение |
OUTPUT |
Определяет целевую таблицу и значения колонок для загрузки в БД |
Да |
TABLE <schema.table_name> |
Указывает целевую таблицу для загрузки данных |
Да |
MODE insert | update | merge |
Определяет режим загрузки данных.
Если значение не указано, используется режим Доступны следующие режимы:
|
Нет |
MATCH_COLUMNS <target_column_name> |
Указывает колонки, которые выступают в роли условий объединения для обновления данных. Для того чтобы произошло обновление данных, значения в целевых колонках должны совпадать с соответствующими значениями колонок исходных данных |
Да, если |
UPDATE_COLUMNS <target_column_name> |
Указывает колонки, данные в которых будут обновлены при совпадении значений строк в колонках, указанных в |
Да, если |
UPDATE_CONDITION '<boolean_condition>' |
Указывает логическое условие (подобное используемым в выражении |
Нет |
MAPPING <source_column_name> | '<expression>' |
Переопределяет принцип сопоставления столбцов источника и целевой таблицы. По умолчанию сопоставление происходит по совпадениям имен столбцов источника, указанных в ключе Выражение указывается в виде пар исходных и целевых столбцов ( |
Нет |
PRELOAD |
Указывает операции, выполняемые перед загрузкой данных.
В настоящее время поддерживается только операция |
Нет |
TRUNCATE true | false |
Если установлено значение |
Нет |
REUSE_TABLES true | false |
Если установлено значение Если ключу |
Нет |
STAGING_TABLE <external_table_name> |
Указывает имя временной внешней таблицы, которая создается при работе По умолчанию Если ключу Если ключ Если целевая таблица использует случайное распределение ( |
Нет |
FAST_MATCH true | false |
Если установлено значение |
Нет |
SQL |
Указывает опциональные произвольные команды SQL, которые запускаются перед ( |
Нет |
BEFORE "<sql_command>" |
SQL-команда, запускаемая перед операцией загрузки. Команды следует заключать в кавычки |
Нет |
AFTER "<sql_command>" |
SQL-команда, запускаемая после операции загрузки. Команды следует заключать в кавычки |
Нет |
Формат лог-файла
Лог-файлы, создаваемые утилитой gpload, имеют следующий формат:
<timestamp>|<level>|<message>
Здесь timestamp имеет вид YYYY-MM-DD HH:MM:SS, <level> — один из уровней DEBUG, LOG, INFO, ERROR, а message — текст сообщения.
Некоторые сообщения уровня INFO могут быть особенно полезны при анализе лог-файлов (где # обозначает фактическое количество секунд, единиц данных или неудачных строк):
INFO|running time: <#.##> seconds INFO|transferred <#.#> kB of <#.#> kB. INFO|gpload succeeded INFO|gpload succeeded with warnings INFO|gpload failed INFO|1 bad row INFO|<#> bad rows
Примечания
Если имена объектов базы данных были созданы с использованием идентификатора в двойных кавычках (идентификатор с разделителем), в управляющем файле gpload такие имена необходимо указывать в одинарных кавычках.
Например, если таблица создана так:
CREATE TABLE "MyTable" ("MyColumn" text);
то в YAML-файле управляющей загрузки gpload нужно ссылаться на эти имена таблицы и столбца следующим образом:
- COLUMNS:
- '"MyColumn"': text
OUTPUT:
- TABLE: public.'"MyTable"'