Копирование данных между файлами и таблицами.
COPY table_name [(column_name [, ...])]
FROM {'filename' | PROGRAM 'command' | STDIN}
[ [ WITH ] ( option [, ...] ) ]
[ ON SEGMENT ]
COPY { table_name [(column_name [, ...])] | (query)}
TO {'filename' | PROGRAM 'command' | STDOUT}
[ [ WITH ] ( option [, ...] ) ]
[ ON SEGMENT ]
где параметр option может быть одним из следующих:
FORMAT format_name
OIDS [ boolean ]
FREEZE [ boolean ]
DELIMITER 'delimiter_character'
NULL 'null string'
HEADER [ boolean ]
QUOTE 'quote_character'
ESCAPE 'escape_character'
FORCE_QUOTE { ( column_name [, ...] ) | * }
FORCE_NOT_NULL ( column_name [, ...] )
FORCE_NULL ( column_name [, ...] )
ENCODING 'encoding_name'
FILL MISSING FIELDS
LOG ERRORS [ SEGMENT REJECT LIMIT count [ ROWS | PERCENT ] ]
IGNORE EXTERNAL PARTITIONS
COPY перемещает данные между таблицами базы данных YMatrix и файлами в стандартной файловой системе. COPY TO копирует содержимое таблицы в файл (если операция выполняется на ON SEGMENT, данные будут скопированы в несколько файлов в зависимости от идентификатора сегмента), а COPY FROM копирует данные из файла в таблицу (добавляя их к уже существующим данным в таблице). COPY TO также может копировать результаты запросов SELECT.
Если указан список столбцов, COPY копирует в файл или из файла только данные указанных столбцов. Для столбцов, не включённых в список, COPY FROM вставляет значения по умолчанию.
При указании имени файла COPY инструктирует хост Master базы данных YMatrix напрямую читать или записывать файлы. Файл должен быть доступен хосту Master, а его имя должно быть задано с точки зрения этого хоста.
Когда COPY используется вместе с предложением ON SEGMENT, ON SEGMENT заставляет сегмент создавать отдельные файлы, привязанные к конкретному сегменту, которые сохраняются на хосте сегмента. Параметр filename в ON SEGMENT принимает строковый литерал <SEGID> (обязательно) и использует абсолютный путь или строковый литерал <SEG_DATA_DIR>. При выполнении операции COPY пути к идентификатору сегмента и каталогу данных сегмента заменяются соответствующими строковыми литералами.
Использование COPY TO с таблицей-копией (DISTRIBUTED REPLICATED) в качестве источника создаёт файл со строками из одного сегмента, чтобы целевой файл не содержал дублирующихся строк. Использование COPY TO с предложением ON SEGMENT и таблицы-копии в качестве источника создаёт целевой файл на хосте сегмента, содержащий все строки таблицы.
Предложение ON SEGMENT позволяет копировать данные таблицы в файлы на хостах сегментов для таких операций, как миграция данных между кластерами или резервное копирование. Такие инструменты, как gpfdist, могут использоваться для восстановления сегментированных данных, созданных с помощью предложения ON SEGMENT, что особенно полезно при высокоскоростной загрузке данных.
Примечание: рекомендуется использовать предложение ON SEGMENT только опытным пользователям.
Когда указано PROGRAM, сервер выполняет указанную команду и считывает или записывает данные через стандартный ввод/вывод программы. Эта команда должна быть указана с точки зрения сервера и может выполняться пользователем gpadmin.
Когда указано STDIN или STDOUT, данные передаются через соединение между клиентом и Master. STDIN и STDOUT нельзя использовать с предложением ON SEGMENT.
Если используется SEGMENT REJECT LIMIT, операция COPY FROM будет выполняться в режиме изоляции ошибок построчно. В этой версии режим одиночной ошибки применим только к неправильно сформированным строкам во входном файле — например, избыточным или отсутствующим атрибутам, атрибутам неверного типа данных или недопустимым последовательностям кодировки клиента. Ошибки ограничений (например, нарушение ограничений NOT NULL, CHECK или UNIQUE) по-прежнему обрабатываются в режиме «всё или ничего». Пользователь может указать допустимое количество строк с ошибками (на каждый сегмент), после достижения которого вся операция COPY FROM завершается, и ни одна строка не загружается. Подсчёт строк с ошибками ведётся по каждому сегменту отдельно, а не по всей операции загрузки. Если лимит ошибок по каждому сегменту не достигнут, все строки без ошибок загружаются, а строки с ошибками отбрасываются. Чтобы сохранить строки с ошибками для дальнейшего анализа, укажите предложение LOG ERRORS для записи информации об ошибках. Сообщение об ошибке и сама строка сохраняются во внутренней базе данных YMatrix.
После успешного завершения команда COPY возвращает следующую метку команды, где count — количество скопированных строк:
COPY count
Если команда COPY FROM выполняется в режиме изоляции ошибок построчно, и ни одна строка не была загружена из-за некорректного формата, возвращается следующее уведомление, где count — количество отклонённых строк:
NOTICE: Rejected count badly formatted rows.
table_name
column_name
query
SELECT или VALUES, результаты которой будут скопированы. Обратите внимание, что запрос должен быть заключён в круглые скобки.filename
PROGRAM 'command'
COPY FROM входные данные считываются из стандартного вывода команды, а в режиме COPY TO выходные данные записываются в стандартный ввод команды. Команда должна быть указана с точки зрения хост-системы мастера базы данных YMatrix и должна быть исполняемой пользователем-администратором базы данных YMatrix (gpadmin).ON SEGMENT, команда должна быть исполняемой пользователем-администратором базы данных YMatrix (gpadmin) на всех первичных хостах сегментов базы данных YMatrix. Команда выполняется каждым экземпляром сегмента YMatrix. В команде обязательно должен присутствовать <SEGID>.ON SEGMENT.STDIN
STDIN не поддерживает предложение ON SEGMENT.STDOUT
STDOUT не поддерживает предложение ON SEGMENT.boolean
TRUE, ON или 1, а для отключения — FALSE, OFF или 0. Логическое значение можно опустить, в этом случае предполагается TRUE.FORMAT
text, csv (значения, разделённые запятыми), или binary. По умолчанию используется text.OIDS
FREEZE
VACUUM FREEZE. Это предназначено для использования в качестве оптимизации производительности при начальной загрузке данных. Строки будут заморожены только в том случае, если таблица была создана или очищена в текущей подтранзакции, нет открытых курсоров и транзакция не имеет более старых снимков.DELIMITER
NULL
\N для текстового формата (обратная косая черта -N) и пустая строка без кавычек для CSV-формата. В случаях, когда вы не хотите различать значения NULL и пустые строки, можно даже использовать пустую строку в текстовом формате. Этот параметр недопустим при использовании двоичного формата.COPY FROM любой элемент данных, совпадающий с этой строкой, будет сохранён как значение NULL, поэтому убедитесь, что используется та же самая строка, что и в COPY TO.HEADER
QUOTE
ESCAPE
FORCE_QUOTE
*, ненулевые значения во всех столбцах заключаются в кавычки. Этот параметр разрешён только в COPY TO и при использовании CSV-формата.FORCE_NOT_NULL
COPY FROM и при использовании CSV-формата.FORCE_NULL
COPY FROM и при использовании CSV-формата.ENCODING
encoding_name. Если параметр опущен, используется текущая кодировка клиента.ON SEGMENT
COPY TO...ON SEGMENT для копирования данных из таблицы в файл команда создаёт отдельный файл для каждого экземпляра сегмента на хосте сегмента. Каждый файл содержит данные таблицы, управляемые этим экземпляром сегмента.COPY не копирует данные между зеркальными экземплярами и файлами данных сегментов.ON SEGMENT не поддерживает ключевые слова STDIN и STDOUT.<SEG_DATA_DIR> и <SEGID> со следующим синтаксисом:COPY table [TO|FROM] '<SEG_DATA_DIR>/gpdumpname<SEGID>_suffix' ON SEGMENT;<SEG_DATA_DIR>ON SEGMENT. Угловые скобки (< и >) являются частью строкового литерала, используемого для указания пути. Когда выполняется команда COPY, строковый литерал заменяется путём к сегменту. Вместо строкового литерала <SEG_DATA_DIR> можно использовать абсолютный путь.<SEGID>ON SEGMENT. При указании ON SEGMENT строковой литерал <SEGID> является обязательной частью имени файла. Угловые скобки являются частью строкового литерала, используемого для указания имени файла.COPY TO строковый литерал заменяется идентификатором контента экземпляра сегмента при выполнении команды COPY.COPY FROM укажите идентификатор контента экземпляра сегмента в имени файла и поместите файл на хост экземпляра сегмента. На хосте должен быть файл для каждого первичного экземпляра сегмента. При выполнении команды COPY FROM данные копируются из файла в экземпляр сегмента.NEWLINE
LF (перевод строки, 0x0A), CR (возврат каретки, 0x0D) или CRLF (возврат каретки и перевод строки, 0x0D 0x0A). Если не указано, сегмент YMatrix определит тип новой строки, анализируя первую строку полученных данных, и использует первый встретившийся тип новой строки.CSV
FILL MISSING FIELDS
COPY FROM и FILL MISSING FIELDS отсутствующие в конце строки поля данных будут установлены в NULL (вместо генерации ошибки). Пустые строки, поля с ограничениями NOT NULL и разделители в конце строки всё равно вызовут ошибку.LOG ERRORS
gp_read_error_log() базы данных YMatrix.SEGMENT REJECT LIMIT count [ROWS | PERCENT]
COPY FROM в режиме изоляции ошибок по одной строке. Если входные строки имеют неправильный формат, они будут отброшены, пока количество отклонённых строк не достигнет заданного предела на любом экземпляре сегмента YMatrix во время операции загрузки. Предельное количество можно указать как число строк (по умолчанию) или процент от общего числа строк (1–100). При использовании PERCENT каждый сегмент начинает рассчитывать процент неверных строк только после обработки количества строк, указанного параметром gp_reject_percent_threshold. Значение по умолчанию для gp_reject_percent_threshold составляет 300 строк. Ошибки ограничений (например, нарушение ограничений NOT NULL, CHECK или UNIQUE) по-прежнему обрабатываются в режиме «всё или ничего». Если предел не достигнут, все корректные строки загружаются, а все некорректные — отбрасываются.SEGMENT REJECT LIMIT не активировано или не указано, база данных YMatrix ограничивает количество начальных строк, которые могут содержать неправильно сформированные данные. Если первые 1000 строк будут отклонены, операция COPY прекратится и будет откатываться.gp_initial_bad_row_limit.IGNORE EXTERNAL PARTITIONS
COPY можно использовать только с таблицами, но не с внешними таблицами или представлениями. Однако вы можете выполнить COPY (SELECT * FROM viewname) TO ...
При указании предложения ON SEGMENT команда COPY не поддерживает указание оператора SELECT в команде COPY TO. Например, следующая команда не поддерживается:
COPY (SELECT * FROM testtbl) TO '/tmp/mytst<SEGID>' ON SEGMENT
COPY работает только с конкретными именованными таблицами; она не копирует данные между дочерними таблицами. Таким образом, например, COPY table TO показывает те же данные, что и SELECT * FROM ONLY table. Однако COPY (SELECT * FROM table) TO ... можно использовать для дампа всех данных в иерархии наследования.
Аналогично, чтобы скопировать данные из секционированной таблицы, имеющей листовые секции в виде внешних таблиц, используйте SQL-запрос для копирования данных. Например, если таблица my_sales содержит листовые секции в виде внешних таблиц, то команда COPY my_sales TO stdout вернёт ошибку. Эта команда отправляет данные в stdout:
Ключевое слово BINARY заставляет все данные храниться/считываться в двоичном формате вместо текстового. Он немного быстрее обычного текстового режима, но двоичные файлы менее переносимы между различными архитектурами компьютеров и версиями базы данных YMatrix. Кроме того, COPY FROM не может работать в режиме изоляции ошибок по одной строке, если данные находятся в двоичном формате.
Вы должны иметь привилегию SELECT на таблицу, из которой читаете через COPY TO, и привилегию INSERT на таблицу, в которую вставляете через COPY FROM. Достаточно наличия привилегий на столбцы, указанные в команде.
Файлы, указанные в команде COPY, читаются или записываются непосредственно сервером базы данных, а не клиентским приложением. Поэтому они должны находиться на хосте мастера базы данных YMatrix или быть доступны ему (а не клиенту). Доступ к ним и права на чтение или запись должны иметь пользователь системы YMatrix (учётная запись, от имени которой работает сервер), а не клиент. Команда COPY разрешена только суперпользователям базы данных, поскольку позволяет читать или записывать любой файл, к которому имеет доступ сервер.
COPY FROM вызывает все триггеры и проверяет ограничения целостности целевой таблицы. Однако он не вызывает правила перезаписи. Обратите внимание, что в данной версии нарушения ограничений не оцениваются в режиме изоляции ошибок по одной строке.
Ввод и вывод COPY зависят от DateStyle. Чтобы обеспечить переносимость на другие установки YMatrix, которые могут использовать нестандартные настройки DateStyle, установите DateStyle в ISO перед использованием COPY TO. Также рекомендуется избегать дампа данных с установленным IntervalStyle в sql_standard, так как серверы с другими настройками IntervalStyle могут неправильно интерпретировать отрицательные значения интервалов.
Входные данные интерпретируются в соответствии с параметром ENCODING или текущей клиентской кодировкой, а выходные данные кодируются в ENCODING или текущей клиентской кодировке, даже если данные не проходят через клиент, а считываются или записываются сервером непосредственно в файлы.
При копировании XML-данных из файла в текстовом режиме параметр конфигурации сервера xmloption влияет на проверку копируемых XML-данных. Если значение content (по умолчанию), XML-данные проверяются как фрагмент содержимого XML. Если значение параметра document, XML-данные проверяются как документ XML. Если XML-данные недействительны, COPY возвращает ошибку.
По умолчанию COPY останавливает операцию при первой ошибке. Если это происходит в COPY TO, проблем не должно быть, но целевая таблица в COPY FROM уже получила предыдущие строки. Эти строки будут невидимыми или недоступными, но они по-прежнему занимают место на диске. Если сбой произойдёт при большой операции COPY FROM, может быть потрачено значительное количество дискового пространства. Возможно, вам потребуется вызвать VACUUM, чтобы восстановить потерянное пространство. Другой вариант — использовать режим изоляции ошибок по одной строке, чтобы отфильтровать ошибочные строки, продолжая загружать правильные.
При выполнении команды COPY FROM...ON SEGMENT параметр конфигурации сервера gp_enable_segment_copy_checking определяет, проверяется ли политика распределения таблицы (из предложения DISTRIBUTED таблицы) при копировании данных в таблицу. По умолчанию политика распределения проверяется. Если строка данных нарушает политику распределения экземпляра сегмента, возвращается ошибка.
Команды COPY TO...ON SEGMENT создают данные таблицы, которые можно использовать для восстановления данных таблицы с помощью COPY FROM...ON SEGMENT. Однако при создании файлов командой COPY TO данные, восстанавливаемые в сегмент, распределяются в соответствии с политикой распределения таблицы. Если вы попытаетесь восстановить данные таблицы, а политика распределения таблицы была изменена после выполнения COPY FROM...ON SEGMENT, команда COPY может вернуть ошибку политики распределения таблицы.
Примечание: Если вы выполнили COPY FROM...ON SEGMENT, а параметр конфигурации сервера gp_enable_segment_copy_checking равен false, вам может потребоваться вручную перераспределить данные таблицы. См. предложение ALTER TABLE WITH REORGANIZE.
При указании предложения LOG ERRORS база данных YMatrix фиксирует ошибки, возникающие при чтении данных внешней таблицы. Вы можете просматривать и управлять зафиксированными данными журнала ошибок.
gp_read_error_log('table_name'). Требуется привилегия SELECT на table_name. В этом примере используется команда COPY для отображения информации журнала ошибок при загрузке данных в таблицу ext_expenses:SELECT * from gp_read_error_log('ext_expenses');gp_truncate_error_log('table_name') для удаления данных журнала ошибок для table_name. Требуются привилегии владельца таблицы. В этом примере удаляется информация журнала ошибок, зафиксированная при перемещении данных в таблицу ext_expenses:SELECT gp_truncate_error_log('ext_expenses');table_name не существует, функция возвращает FALSE.*, чтобы удалить данные журнала ошибок для всех таблиц в текущей базе данных. Укажите строку *.*, чтобы удалить все данные журнала ошибок базы данных, включая данные, которые не были удалены из-за предыдущих проблем с базой данных. Если вы указываете *, вам нужны привилегии владельца базы данных. Если вы указываете *.*, вам нужны привилегии суперпользователя операционной системы.Когда пользователь базы данных YMatrix, не являющийся суперпользователем, выполняет команду COPY, выполнение команды может контролироваться очередью ресурсов. Очередь ресурсов должна быть настроена с параметром ACTIVE_STATEMENTS, который указывает максимальное количество запросов, которые роли, назначенные очереди, могут выполнять. База данных YMatrix не применяет стоимостные или объёмные значения к командам COPY, поэтому очереди ресурсов, имеющие только стоимостные или объёмные ограничения, не влияют на работу команд COPY.
Несуперпользователи могут выполнять только следующие типы команд COPY:
COPY FROM с источником STDINCOPY TO с целью STDOUTФорматы файлов, поддерживаемые COPY.
При использовании текстового формата данные, считываемые или записываемые, представляют собой текстовый файл, в котором одна строка соответствует одной строке таблицы. Столбцы в строке разделяются символом delimiter_character (по умолчанию — табуляция). Значения столбцов представляют собой строки, генерируемые функцией вывода типа данных каждого атрибута, либо строки, допустимые для функции ввода. Пустая строка используется для обозначения значения NULL в столбце. Если в любом ряду входного файла будет больше или меньше столбцов, чем ожидается, COPY FROM выдаст ошибку. Если указан параметр OIDS, OID считывается или записывается как первый столбец перед столбцами пользовательских данных.
Файлы данных содержат два зарезервированных символа, имеющих особое значение для COPY:
\n или 0x0a), используемая для обозначения конца строки в файле данных. Приложениям, генерирующим данные COPY, настоятельно рекомендуется преобразовывать символы новой строки в формат UNIX, а не использовать символы возврата каретки в стиле Microsoft Windows (\r\n или 0x0a 0x0d).Если один из этих символов встречается в данных, он должен быть экранирован, чтобы COPY интерпретировал его как данные, а не как разделитель поля или конец строки.
По умолчанию символ экранирования для текстовых файлов — \ (обратная косая черта), а для CSV-файлов — " (двойные кавычки). Если вы хотите использовать другой символ экранирования, вы можете указать его с помощью предложения ESCAPE AS. Убедитесь, что выбранный вами символ экранирования нигде не встречается в файле данных как обычное значение. Вы также можете отключить экранирование в текстовых файлах, используя ESCAPE 'OFF'.
Например, предположим, что у вас есть таблица с тремя столбцами, и вы хотите использовать COPY для загрузки следующих трех значений:
Вы указываете delimiter_character как | (символ вертикальной черты), а символ экранирования — как * (звездочка). Отформатированная строка в файле данных будет выглядеть так:
percentage sign = % | vertical bar = *| | backslash = \
Обратите внимание, как символ вертикальной черты в данных экранирован звездочкой. Также обратите внимание, что поскольку мы используем альтернативный символ экранирования, нам не нужно экранировать обратную косую черту.
Если любой из следующих символов встречается в значении столбца, за ним должен следовать символ экранирования: сам символ экранирования, символ новой строки, возврат каретки и текущий разделитель. Вы можете указать другой символ экранирования с помощью предложения ESCAPE AS.
Этот параметр формата используется для импорта и экспорта файлов с разделителями-запятыми (CSV), формата, применяемого во многих других программах (например, электронных таблицах). Он генерирует и распознаёт распространённые механизмы экранирования CSV, а не правила экранирования, используемые стандартным текстовым форматом базы данных YMatrix.
Значения в каждой записи разделяются символом DELIMITER. Если значение содержит разделитель, символ QUOTE, символ ESCAPE (по умолчанию — двойные кавычки), строку NULL, возврат каретки или символ новой строки, всё значение заключается в кавычки с помощью символа QUOTE. При выводе непустых значений в определённом столбце можно также использовать FORCE_QUOTE для принудительного заключения в кавычки.
В формате CSV нет стандартного способа различать значения NULL и пустые строки. База данных YMatrix COPY решает эту проблему с помощью кавычек. Значения NULL выводятся как строка параметра NULL без кавычек, тогда как непустые значения, совпадающие со строкой NULL, заключаются в кавычки. Например, при использовании настроек по умолчанию NULL записывается как пустая строка без кавычек, а пустые строковые значения записываются как двойные кавычки (""). Чтение значений следует аналогичным правилам. Вы можете использовать FORCE_NOT_NULL, чтобы избежать сравнения входных данных с NULL для конкретных столбцов.
Так как обратная косая черта не является специальным символом в формате CSV, маркер окончания данных \. также может встречаться как значение данных. Чтобы избежать неоднозначности, значения данных, совпадающие с \. в строке, автоматически заключаются в кавычки при выводе и не интерпретируются как маркер окончания данных при вводе, если они заключены в кавычки. Если вам нужно загрузить файл, созданный другим приложением, содержащий одностолбцовые строки без кавычек и потенциально имеющий значения \., возможно, вам придётся использовать это значение во входном файле.
Примечание: В формате CSV все символы являются допустимыми. Пробелы и любые другие символы внутри кавычек, кроме DELIMITER, включаются. Если вы импортируете данные из системы, которая заполняет строки CSV до фиксированной ширины пробелами в конце, это может привести к ошибкам. В этом случае может потребоваться предварительная обработка CSV-файла для удаления завершающих пробелов перед импортом данных в базу данных YMatrix.
Формат CSV распознаёт и генерирует CSV-файлы со значениями в кавычках, содержащими встроенные возвраты каретки и символы новой строки. Таким образом, в отличие от текстовых файлов, файлы не ограничиваются строго одной строкой на строку таблицы.
Примечание: Многие программы генерируют нестандартные (иногда некорректные) CSV-файлы, поэтому формат скорее является де-факто стандартом. Поэтому вы можете столкнуться с файлами, которые невозможно импортировать с помощью этого механизма, а COPY может создавать файлы, которые другие программы не смогут обработать.
Опция двоичного формата заставляет все данные храниться/считываться в двоичном формате вместо текстового. Он немного быстрее текстового и CSV-форматов, но двоичные файлы менее переносимы между различными архитектурами компьютеров и версиями базы данных YMatrix. Аналогично, двоичный формат очень специфичен для типов данных. Например, хотя это работает в текстовом формате, вывод двоичных данных из столбца smallint и их чтение в столбец integer работать не будет.
Двоичный формат файла состоит из заголовка файла, нуля или более кортежей, содержащих данные строк, и конца файла. Заголовок и данные находятся в сетевом порядке байтов.
PGCOPY\n\377\r\n\0 — Обратите внимание, что нулевой байт является обязательной частью подписи. (Подпись предназначена для облегчения обнаружения файлов, повреждённых при передаче через не-8-бит-чистые каналы. Эта подпись проходит через фильтры преобразования окончаний строк, не теряет нулевые байты, не теряет старшие биты и не изменяет чётность.)Копирование таблицы на клиент с использованием вертикальной черты (|) в качестве разделителя полей:
COPY country TO STDOUT (DELIMITER '|');
Копирование данных из файла в таблицу country:
COPY country FROM '/home/usr1/sql/country_data';
Копирование только тех стран, название которых начинается с 'A', в файл:
COPY (SELECT * FROM country WHERE country_name LIKE 'A%') TO
'/home/usr1/sql/a_list_countries.copy';
Копирование данных из файла в таблицу sales с логированием ошибок в режиме одиночной строки изоляции ошибок:
COPY sales FROM '/home/usr1/sql/sales_data' LOG ERRORS
SEGMENT REJECT LIMIT 10 ROWS;
Чтобы скопировать данные сегментов для последующего использования, используйте предложение ON SEGMENT. Команда COPY TO ON SEGMENT используется следующим образом:
COPY table TO '<SEG_DATA_DIR>/gpdumpname<SEGID>_suffix' ON SEGMENT;
<SEGID> обязателен. Однако вы можете заменить строковый литерал <SEG_DATA_DIR> в пути абсолютным путём.
При передаче строковых литералов <SEG_DATA_DIR> и <SEGID> в COPY значение COPY будет автоматически заполнено при выполнении операции.
Например, если ваш mytable содержит следующие сегменты и зеркала:
contentid | dbid | file segment location
0 | 1 | /home/usr1/data1/gpsegdir0
0 | 3 | /home/usr1/data_mirror1/gpsegdir0
1 | 4 | /home/usr1/data2/gpsegdir1
1 | 2 | /home/usr1/data_mirror2/gpsegdir1
Выполните команду:
COPY mytable TO '<SEG_DATA_DIR>/gpbackup<SEGID>.txt' ON SEGMENT;
Будет сгенерирована следующая строка:
/home/usr1/data1/gpsegdir0/gpbackup0.txt
/home/usr1/data2/gpsegdir1/gpbackup1.txt
Идентификатор контента в первом столбце — это идентификатор, вставляемый в путь к файлу (например, gpsegdir0/gpbackup0.txt выше). Файлы создаются на сегменте, а не на мастере, точно так же, как и при стандартных операциях COPY. При копировании с ON SEGMENT файлы данных для зеркал не создаются.
Если указан абсолютный путь вместо <SEG_DATA_DIR>, например в выражении
COPY mytable TO '/tmp/gpdir/gpbackup_<SEGID>.txt' ON SEGMENT;
Файл будет помещён в директорию /tmp/gpdir каждого сегмента. Если требуется перераспределение, инструмент gpfdist также может использоваться для восстановления файлов данных, созданных COPY TO, с помощью опции ON SEGMENT.
Примечание: Вы можете использовать такие инструменты, как gpfdist, для восстановления данных. Инструмент резервного копирования/восстановления не подходит для файлов, созданных вручную с помощью COPY TO ON SEGMENT.
В этом примере данные копируются из таблицы lineitem с использованием предложения PROGRAM для добавления данных в файл /tmp/lineitem_program.csv с помощью утилиты cat. Этот файл размещается на мастер-узле базы данных YMatrix.
COPY LINEITEM TO PROGRAM 'cat > /tmp/lineitem.csv' CSV;
В этом примере используются предложения PROGRAM и ON SEGMENT для копирования данных в файл на хосте сегмента. На хосте сегмента команда COPY заменяет <SEGID> на идентификатор контента сегмента, создавая файл для каждого экземпляра сегмента на хосте сегмента.
COPY LINEITEM TO PROGRAM 'cat > /tmp/lineitem_program<SEGID>.csv' ON SEGMENT CSV;
В этом примере используются предложения PROGRAM и ON SEGMENT для копирования данных из файлов на хосте сегмента. При копировании данных из файла команда COPY заменяет <SEGID> на идентификатор контента сегмента. На хосте сегмента каждый экземпляр сегмента должен иметь файл с именем, содержащим идентификатор контента сегмента.
COPY LINEITEM_4 FROM PROGRAM 'cat /tmp/lineitem_program<SEGID>.csv' ON SEGMENT CSV;
В стандарте SQL нет оператора COPY.
Следующий синтаксис использовался в более ранних версиях баз данных YMatrix и по-прежнему поддерживается:
COPY table_name [(column_name [, ...])] FROM
{'filename' | PROGRAM 'command' | STDIN}
[ [WITH]
[ON SEGMENT]
[BINARY]
[OIDS]
[HEADER]
[DELIMITER [ AS ] 'delimiter_character']
[NULL [ AS ] 'null string']
[ESCAPE [ AS ] 'escape' | 'OFF']
[NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
[CSV [QUOTE [ AS ] 'quote']
[FORCE NOT NULL column_name [, ...]]
[FILL MISSING FIELDS]
[[LOG ERRORS]
SEGMENT REJECT LIMIT count [ROWS | PERCENT] ]
COPY { table_name [(column_name [, ...])] | (query)} TO {'filename' | PROGRAM 'command' | STDOUT}
[ [WITH]
[ON SEGMENT]
[BINARY]
[OIDS]
[HEADER]
[DELIMITER [ AS ] 'delimiter_character']
[NULL [ AS ] 'null string']
[ESCAPE [ AS ] 'escape' | 'OFF']
[CSV [QUOTE [ AS ] 'quote']
[FORCE QUOTE column_name [, ...]] | * ]
[IGNORE EXTERNAL PARTITIONS ]
Обратите внимание, что в этом синтаксисе BINARY и CSV считаются независимыми ключевыми словами, а не параметрами опции FORMAT.