Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

CREATE EXTERNAL TABLE

Определяет новую внешнюю таблицу.

Синтаксис

CREATE [READABLE] EXTERNAL [TEMPORARY | TEMP] TABLE <table_name>
    ( <column_name> <data_type> [, ...] | LIKE <other_table>)
     LOCATION ('file://<seghost>[:<port>]/<path>/<file>' [, ...])
       | ('gpfdist://<filehost>[:<port>]/<file_pattern>[#transform=<trans_name>]'
           [, ...])
       | ('gpfdists://<filehost>[:<port>]/<file_pattern>[#transform=<trans_name>]'
           [, ...])
       | ('pxf://<path-to-data>?PROFILE=<profile_name>[&SERVER=<server_name>][&<custom-option>=<value>[...]]')
       | ('s3://<S3_endpoint>[:<port>]/<bucket_name>/[<S3_prefix>] [region=<S3-region>] [config=<config_file> | config_server=<url>]')
     [ON MASTER]
     FORMAT 'TEXT'
           [( [HEADER]
              [DELIMITER [AS] '<delimiter>' | 'OFF']
              [NULL [AS] '<null string>']
              [ESCAPE [AS] '<escape>' | 'OFF']
              [NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
              [FILL MISSING FIELDS] )]
          | 'CSV'
           [( [HEADER]
              [QUOTE [AS] '<quote>']
              [DELIMITER [AS] '<delimiter>']
              [NULL [AS] '<null string>']
              [FORCE NOT NULL <column> [, ...]]
              [ESCAPE [AS] '<escape>']
              [NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
              [FILL MISSING FIELDS] )]
          | 'CUSTOM' (Formatter=<formatter_specification>)
    [ ENCODING '<encoding>' ]
    [ [LOG ERRORS [PERSISTENTLY]] SEGMENT REJECT LIMIT <count>
      [ROWS | PERCENT] ]

CREATE [READABLE] EXTERNAL WEB [TEMPORARY | TEMP] TABLE <table_name>
   ( <column_name> <data_type> [, ...] | LIKE <other_table>)
      LOCATION ('http://<webhost>[:<port>]/<path>/<file>' [, ...])
    | EXECUTE '<command>' [ON ALL
                          | MASTER
                          | <number_of_segments>
                          | HOST ['<segment_hostname>']
                          | SEGMENT <segment_id> ]
      FORMAT 'TEXT'
            [( [HEADER]
               [DELIMITER [AS] '<delimiter>' | 'OFF']
               [NULL [AS] '<null string>']
               [ESCAPE [AS] '<escape>' | 'OFF']
               [NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
               [FILL MISSING FIELDS] )]
           | 'CSV'
            [( [HEADER]
               [QUOTE [AS] '<quote>']
               [DELIMITER [AS] '<delimiter>']
               [NULL [AS] '<null string>']
               [FORCE NOT NULL <column> [, ...]]
               [ESCAPE [AS] '<escape>']
               [NEWLINE [ AS ] 'LF' | 'CR' | 'CRLF']
               [FILL MISSING FIELDS] )]
           | 'CUSTOM' (Formatter=<formatter_specification>)
     [ ENCODING '<encoding>' ]
    [ [LOG ERRORS [PERSISTENTLY]] SEGMENT REJECT LIMIT <count>
       [ROWS | PERCENT] ]

CREATE WRITABLE EXTERNAL [TEMPORARY | TEMP] TABLE <table_name>
    ( <column_name> <data_type> [, ...] | LIKE <other_table>)
     LOCATION('gpfdist://<outputhost>[:<port>]/<filename>[#transform=<trans_name>]'
          [, ...])
      | ('gpfdists://<outputhost>[:<port>]/<file_pattern>[#transform=<trans_name>]'
          [, ...])
      FORMAT 'TEXT'
               [( [DELIMITER [AS] '<delimiter>']
               [NULL [AS] '<null string>']
               [ESCAPE [AS] '<escape>' | 'OFF'] )]
          | 'CSV'
               [([QUOTE [AS] '<quote>']
               [DELIMITER [AS] '<delimiter>']
               [NULL [AS] '<null string>']
               [FORCE QUOTE <column> [, ...] | * ]
               [ESCAPE [AS] '<escape>'] )]

           | 'CUSTOM' (Formatter=<formatter_specification>)
    [ ENCODING '<write_encoding>' ]
    [ DISTRIBUTED BY ({<column> [<opclass>]}, [ ... ] ) | DISTRIBUTED RANDOMLY ]

CREATE WRITABLE EXTERNAL [TEMPORARY | TEMP] TABLE <table_name>
    ( <column_name> <data_type> [, ...] | LIKE <other_table>)
     LOCATION('s3://<S3_endpoint>[:<port>]/<bucket_name>/[<S3_prefix>] [region=<S3-region>] [config=<config_file> | config_server=<url>]')
      [ON MASTER]
      FORMAT 'TEXT'
               [( [DELIMITER [AS] '<delimiter>']
               [NULL [AS] '<null string>']
               [ESCAPE [AS] '<escape>' | 'OFF'] )]
          | 'CSV'
               [([QUOTE [AS] '<quote>']
               [DELIMITER [AS] '<delimiter>']
               [NULL [AS] '<null string>']
               [FORCE QUOTE <column> [, ...] | * ]
               [ESCAPE [AS] '<escape>'] )]

CREATE WRITABLE EXTERNAL WEB [TEMPORARY | TEMP] TABLE <table_name>
    ( <column_name> <data_type> [, ...] | LIKE <other_table> )
    EXECUTE '<command>'
    FORMAT 'TEXT'
               [( [DELIMITER [AS] '<delimiter>']
               [NULL [AS] '<null string>']
               [ESCAPE [AS] '<escape>' | 'OFF'] )]
          | 'CSV'
               [([QUOTE [AS] '<quote>']
               [DELIMITER [AS] '<delimiter>']
               [NULL [AS] '<null string>']
               [FORCE QUOTE <column> [, ...] | * ]
               [ESCAPE [AS] '<escape>'] )]
           | 'CUSTOM' (Formatter=<formatter_specification>)
    [ ENCODING '<write_encoding>' ]
    [ DISTRIBUTED BY ({<column> [<opclass>]}, [ ... ] ) | DISTRIBUTED RANDOMLY ]

Описание

CREATE EXTERNAL TABLE или CREATE EXTERNAL WEB TABLE создает определение новой читающей внешней таблицы в Greengage DB. Читающие внешние таблицы обычно используются для быстрой параллельной загрузки данных. После определения внешней таблицы можно запрашивать ее данные напрямую (и параллельно), используя команды SQL. Например, можно выбирать, объединять или сортировать данные внешней таблицы. Также можно создавать представления (view) для внешних таблиц. Операции DML (UPDATE, INSERT, DELETE или TRUNCATE) не допускаются для читающих внешних таблиц; для них также нельзя создавать индексы.

CREATE WRITABLE EXTERNAL TABLE или CREATE WRITABLE EXTERNAL WEB TABLE создает определение новой пишущей (writable) внешней таблицы в базе данных Greengage DB. Пишущие внешние таблицы обычно используются для выгрузки данных из базы данных в файлы или именованные каналы. Пишущие внешние веб-таблицы также могут использоваться для вывода данных в исполняемую программу. Кроме того, пишущие внешние таблицы могут использоваться в качестве целей вывода для параллельных вычислений MapReduce в Greengage DB. После определения пишущей внешней таблицы данные могут быть выбраны из таблиц базы данных и вставлены во внешнюю таблицу. Пишущие внешние таблицы допускают только операции INSERT. Операции SELECT, UPDATE, DELETE или TRUNCATE не разрешены.

Основное различие между обычными внешними таблицами и внешними веб-таблицами заключается в источниках данных. Обычные читающие внешние таблицы обращаются к статическим плоским файлам, тогда как внешние веб-таблицы обращаются к динамическим источникам данных — либо на веб-сервере, либо путем выполнения команд операционной системы или скриптов.

Подробную информацию о работе с внешними таблицами см. в разделе Обзор внешних таблиц.

Параметры

Параметр Описание

READABLE | WRITABLE

Указывает тип внешней таблицы (по умолчанию — читающая, READABLE). Читающие внешние таблицы используются для загрузки данных в Greengage DB. Пишущие внешние таблицы используются для выгрузки данных

WEB

Создает определение читающей или пишущей внешней веб-таблицы в Greengage DB. Существует две формы читающих внешних веб-таблиц — те, которые обращаются к файлам по HTTP-протоколу, и те, которые получают данные путем выполнения команд ОС. Пишущие внешние веб-таблицы выводят данные в исполняемую программу, которая может принимать входной поток данных. Внешние веб-таблицы не могут быть повторно сканированы во время выполнения запроса.

Протокол s3 не поддерживает внешние веб-таблицы. Однако можно создать внешнюю веб-таблицу, которая запускает сторонний инструмент для чтения данных из S3 или записи данных в S3 напрямую

TEMPORARY | TEMP

Создает временную читающую или пишущую внешнюю таблицу в Greengage DB. Временные внешние таблицы существуют в специальной схеме — при создании такой таблицы нельзя указывать имя схемы. Временные внешние таблицы автоматически удаляются в конце сеанса.

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

table_name

Имя новой внешней таблицы

column_name

Имя столбца, создаваемого во внешней таблице. В отличие от обычных таблиц, внешние таблицы не имеют ограничений столбцов или значений по умолчанию, поэтому не указывайте их

LIKE <other_table>

Выражение LIKE указывает таблицу, из которой новая внешняя таблица автоматически копирует все имена столбцов, типы данных и политику распределения Greengage DB. Если исходная таблица содержит какие-либо ограничения столбцов или значения по умолчанию, они не будут скопированы в определение новой внешней таблицы

data_type

Тип данных столбца

LOCATION ('<protocol>://[<host>[:<port>]]/<path>/<file>' [, …​])

Если вы используете протокол pxf для доступа к внешнему источнику данных, обратитесь к документации PXF для более подробной информации о создании внешних таблиц с использованием протокола PXF.

Если вы используете протокол s3 для чтения или записи в S3, см. дополнительную информацию о синтаксисе выражения LOCATION для протокола s3 в разделе S3.

Для читающих внешних таблиц параметр указывает URI внешнего источника данных, используемого для наполнения внешней таблицы или веб-таблицы. Обычные читающие внешние таблицы поддерживают протоколы gpfdist или file. Внешние веб-таблицы поддерживают протокол http. Если порт (port) не указан, предполагается порт 8080 для протоколов http и gpfdist. При использовании протокола gpfdist путь (path) указывается относительно каталога, из которого gpfdist раздает файлы (каталог, указанный при запуске программы gpfdist). Кроме того, gpfdist может использовать символы подстановки или другие сопоставления шаблонов в стиле C (например, пробельный символ — [[:space:]]) для обозначения нескольких файлов в каталоге. Например:

'gpfdist://filehost:8081/*'
'gpfdist://masterhost/my_load_file'
'file://seghost1/dbfast1/external/myfile.txt'
'http://intranet.example.com/finance/expenses.csv'

Для пишущих внешних таблиц параметр LOCATION указывает URI местоположения процесса gpfdist или объектного хранилища S3, который будет собирать выходные данные из сегментов Greengage DB и записывать их в один или несколько именованных файлов. Для gpfdist путь (path) указывается относительно каталога, из которого gpfdist обслуживает файлы (каталог, указанный при запуске программы gpfdist). Если перечислено несколько местоположений gpfdist, сегменты, отправляющие данные, будут равномерно распределены между доступными местоположениями вывода. Например:

'gpfdist://outputhost:8081/data1.out',
'gpfdist://outputhost:8081/data2.out'

При двух местоположениях gpfdist, перечисленных в примере выше, половина сегментов будет отправлять свои выходные данные в файл data1.out, а другая половина — в файл data2.out.

С помощью опции #transform=<trans_name> можно указать трансформацию, применяемую при загрузке или извлечении данных. <trans_name> — это имя трансформации в файле конфигурации YAML, который вы указываете при запуске утилиты gpfdist. Информация о траснформациях приводится в разделе Трансформация внешних данных

ON MASTER

Ограничивает все операции, связанные с таблицей, только мастер-сегментом Greengage DB. Разрешено только для читающих и пишущих внешних таблиц, созданных с использованием протокола s3 или кастомных протоколов. Протоколы gpfdist, gpfdists, pxf и file не поддерживают ON MASTER.

ПРИМЕЧАНИЕ

Важно помнить о возможном влиянии на ресурсы при чтении или записи во внешние таблицы, созданные с выражением ON MASTER. Вы можете столкнуться с проблемами производительности, если ограничите операции с таблицей исключительно мастером Greengage DB.

EXECUTE '<command>' [ON …​]

Разрешено только для читающих внешних веб-таблиц или пишущих внешних таблиц. Для читающих внешних веб-таблиц указывает команду ОС, которая должна быть выполнена экземплярами сегментов. Команда может быть одиночной командой ОС или скриптом. Выражение ON используется для указания того, какие экземпляры сегментов будут выполнять данную команду.

  • ON ALL используется по умолчанию. Команда будет выполнена каждым активным (primary) экземпляром сегмента на всех хостах сегментов в системе Greengage DB. Если команда запускает скрипт, этот скрипт должен находиться в одном и том же месте на всех хостах сегментов и быть исполняемым для суперпользователя Greengage DB (gpadmin).

  • ON MASTER запускает команду только на хосте мастера.

    ПРИМЕЧАНИЕ

    Журналирование не поддерживается для внешних веб-таблиц, если указано выражение ON MASTER.

  • ON <number> означает, что команда будет выполнена указанным количеством сегментов. Конкретные сегменты выбираются системой Greengage DB случайным образом во время выполнения. Если команда запускает скрипт, этот скрипт должен находиться в одном и том же месте на всех хостах сегментов и быть исполняемым для суперпользователя Greengage DB (gpadmin).

  • HOST означает, что команда будет выполнена одним сегментом на каждом хосте сегментов (один раз на хост), независимо от количества активных экземпляров сегментов на хосте.

  • HOST <segment_hostname> означает, что команда будет выполнена всеми активными (первичными) экземплярами сегментов на указанном хосте сегментов.

  • SEGMENT <segment_id> означает, что команда будет выполнена только один раз указанным сегментом. Вы можете определить ID экземпляра сегмента, посмотрев его номер в столбце content в системной таблице gp_segment_configuration. Content ID мастера Greengage DB всегда равен -1.

Для пишущих внешних таблиц команда, указанная в выражении EXECUTE, должна быть готова принимать данные через конвейер (pipe). Команда выполняется на всех сегментных экземплярах, которые формируют данные. Такое поведение эквивалентно использованию ON ALL для читающих внешних web-таблиц. Однако выражение ON не поддерживается для пишущих внешних таблиц

FORMAT 'TEXT | CSV' (<options>)

Когда выражение FORMAT определяет формат текста с разделителями (TEXT) или значений, разделенных запятыми (CSV), параметры форматирования аналогичны тем, что доступны в команде PostgreSQL COPY. Если данные в файле не используют дефолтный разделитель столбцов, символ экранирования, строку null и т.д., необходимо указать дополнительные параметры форматирования, чтобы данные во внешнем файле были прочитаны Greengage DB корректно.

Более подробная информация о форматировании внешних данных приводится в статье Форматирование внешних данных.

Если вы используете протокол pxf для доступа к внешнему источнику данных, обратитесь к документации PXF для более подробной информации о создании внешних таблиц с использованием протокола PXF

FORMAT 'CUSTOM' (formatter=<formatter_specification>)

Указывает кастомный формат данных. <formatter_specification> указывает функцию, используемую для форматирования данных, за которой следуют параметры функции форматирования, разделенные запятыми. Длина спецификации форматировщика (строка, включающая Formatter=) может составлять примерно до 50 килобайт.

Более подробная информация о кастомных форматах данных приводится в статье Использование кастомных форматов и протоколов для внешних таблиц.

Если вы используете протокол pxf для доступа к внешнему источнику данных, обратитесь к документации PXF для более подробной информации о создании внешних таблиц с использованием протокола PXF

DELIMITER

Задает один символ ASCII, который разделяет столбцы внутри каждой строки данных. По умолчанию это символ табуляции в режиме TEXT и запятая в режиме CSV. В режиме TEXT для читающих внешних таблиц разделитель может быть установлен в OFF для особых случаев, когда неструктурированные данные загружаются в таблицу с одним столбцом.

Для протокола s3 разделитель не может быть символом новой строки (\n) или возврата каретки (\r)

NULL

Указывает строку, представляющую значение NULL. По умолчанию это \N (обратная косая черта-N) в режиме TEXT и пустое значение без кавычек в режиме CSV. Вы можете предпочесть пустую строку даже в режиме TEXT для случаев, когда не требуется отличать значения NULL от пустых строк. При использовании внешних и веб-таблиц любой элемент данных, совпадающий с этой строкой, будет считаться значением NULL.

В качестве примера для формата text выражение FORMAT может использоваться для указания того, что строка из двух одинарных кавычек ('') является значением NULL:

FORMAT 'text' (delimiter ',' null '\'\'\'\'' )

ESCAPE

Указывает одиночный символ, который используется для последовательностей экранирования в языке C (таких как \n, \t, \100 и т.д.) и для экранирования символов данных, которые в противном случае могли бы быть приняты за разделители строк или столбцов. Убедитесь, что вы выбрали символ экранирования, который не используется нигде в ваших фактических данных столбцов. Символ экранирования по умолчанию — \ (обратная косая черта) для файлов в текстовом формате и " (двойная кавычка) для файлов в формате CSV, однако можно указать другой символ для экранирования. Также возможно отключить экранирование в текстовых файлах, указав 'OFF' в качестве значения ESCAPE. Это очень полезно для данных, таких как логи веб-сервера в текстовом формате, которые содержат много встроенных обратных косых черт, не предназначенных для экранирования

NEWLINE

Указывает символ новой строки, используемый в ваших файлах данных — LF (Line feed, 0x0A), CR (Carriage return, 0x0D) или CRLF (Carriage return plus line feed, 0x0D 0x0A). Если не указано, сегмент Greengage DB определит тип новой строки, просмотрев первую полученную строку данных и используя первый встреченный тип новой строки

HEADER

Для читающих внешних таблиц указывает, что первая строка в файле данных является строкой заголовка (содержит имена столбцов таблицы) и не должна включаться в данные таблицы. При использовании нескольких исходных файлов данных все файлы должны иметь строку заголовка.

Для протокола s3 имена столбцов в строке заголовка не могут содержать символ новой строки (\n) или возврата каретки (\r).

Протокол pxf не поддерживает опцию форматирования HEADER

QUOTE

Указывает символ кавычки для режима CSV. По умолчанию это двойная кавычка (")

FORCE NOT NULL

В режиме CSV обрабатывает каждый указанный столбец так, как если бы он был заключен в кавычки, и, следовательно, не является значением NULL. Для строки null по умолчанию в режиме CSV (ничего между двумя разделителями) это приводит к тому, что отсутствующие значения оцениваются как строки нулевой длины

FORCE QUOTE

В режиме CSV для пишущих внешних таблиц принудительно заключает в кавычки все значения, не являющиеся NULL, в каждом указанном столбце. Если указано *, то значения, не являющиеся NULL, будут заключены в кавычки во всех столбцах. Вывод NULL никогда не заключается в кавычки

FILL MISSING FIELDS

В режимах TEXT и CSV для читающих внешних таблиц указание FILL MISSING FIELDS установит отсутствующие значения замыкающих полей в NULL (вместо сообщения об ошибке), когда строка данных имеет отсутствующие поля данных в конце строки. Пустые строки, поля с ограничением NOT NULL и замыкающие разделители в строке все равно вызовут ошибку

ENCODING '<encoding>'

Кодировка символов для использования во внешней таблице. Укажите строковую константу (например, 'SQL_ASCII'), целочисленный номер кодировки или DEFAULT для использования кодировки сервера по умолчанию

LOG ERRORS [PERSISTENTLY]

Необязательное выражение, которое может предшествовать выражению SEGMENT REJECT LIMIT для журналирования информации о строках с ошибками форматирования. Данные журнала ошибок хранятся внутри системы. Если данные журнала ошибок существуют для указанной внешней таблицы, новые данные добавляются к существующим данным журнала ошибок. Данные журнала ошибок не реплицируются на зеркальные сегменты.

Данные удаляются при удалении внешней таблицы, если не указано ключевое слово PERSISTENTLY. Если ключевое слово указано, данные журнала сохраняются после удаления внешней таблицы.

Доступ к данным журнала ошибок осуществляется с помощью встроенной SQL-функции Greengage DB gp_read_error_log(), или с помощью SQL-функции gp_read_persistent_error_log(), если указано ключевое слово PERSISTENTLY.

Если вы используете ключевое слово PERSISTENTLY, необходимо установить функции, управляющие информацией постоянного журнала ошибок.

См. Примечания для получения информации о журнале ошибок и встроенных функциях для просмотра и управления информацией журнала ошибок

SEGMENT REJECT LIMIT <count> [ROWS | PERCENT]

Запускает операцию COPY FROM в режиме изоляции ошибок одной строки. Если входные строки имеют ошибки формата, они будут отброшены при условии, что лимит отклонений не достигнут ни на одном экземпляре сегмента Greengage DB во время операции загрузки. Лимит отклонений может быть указан как количество строк (по умолчанию) или процент от общего количества строк (1-100). Если используется PERCENT, каждый сегмент начинает вычислять процент "плохих" строк только после того, как будет обработано количество строк, указанное параметром gp_reject_percent_threshold. Значение по умолчанию для gp_reject_percent_threshold составляет 300 строк. Ошибки ограничений, такие как нарушение ограничений NOT NULL, CHECK или UNIQUE, по-прежнему будут обрабатываться в режиме ввода "все или ничего". Если лимит не достигнут, все корректные строки будут загружены, а ошибочные строки отброшены.

Лимит начального количества отклоненных строк можно изменить с помощью параметра конфигурации сервера Greengage DB gp_initial_bad_row_limit

DISTRIBUTED BY ({<column> [<opclass>]}, [ …​ ] )
DISTRIBUTED RANDOMLY

Используется для объявления политики распределения Greengage DB для пишущей внешней таблицы. По умолчанию пишущие внешние таблицы распределяются случайным образом (RANDOMLY). Если исходная таблица, из которой вы экспортируете данные, имеет политику хеш-распределения, определение тех же столбцов ключа распределения и классов операторов (opclass) для пишущей внешней таблицы улучшит производительность выгрузки за счет устранения необходимости перемещения строк через интерконнект. Когда вы выполняете команду выгрузки, такую как INSERT INTO wex_table SELECT * FROM source_table, выгружаемые строки могут быть отправлены напрямую с сегментов в место назначения вывода, если обе таблицы имеют одинаковую политику хеш-распределения

Примеры

Запустите утилиту файлового сервера gpfdist в фоновом режиме на порте 8081 для раздачи файлов из каталога /var/data/staging:

$ gpfdist -p 8081 -d /var/data/staging -l /home/<gpadmin>/log &

Ниже показано создание читающей внешней таблицы с именем ext_customer с использованием протокола gpfdist и любых текстовых файлов (*.txt), найденных в каталоге gpfdist. Файлы отформатированы с использованием вертикальной черты (|) в качестве разделителя столбцов и пробела в качестве NULL. Доступ к внешней таблице осуществляется в режиме изоляции ошибок одной строки:

CREATE EXTERNAL TABLE ext_customer
(
    id      int,
    name    text,
    sponsor text
)
    LOCATION ( 'gpfdist://filehost:8081/*.txt' )
    FORMAT 'TEXT' ( DELIMITER '|' NULL ' ')
    LOG ERRORS SEGMENT REJECT LIMIT 5;

Создание такой же читающей внешней таблицы, как указано выше, но с файлами в формате CSV:

CREATE EXTERNAL TABLE ext_customer
(
    id      int,
    name    text,
    sponsor text
)
    LOCATION ( 'gpfdist://filehost:8081/*.csv' )
    FORMAT 'CSV' ( DELIMITER ',' );

Создание читающей внешней таблицы с именем ext_expenses с использованием протокола file и нескольких файлов в формате CSV, имеющих строку заголовка:

CREATE EXTERNAL TABLE ext_expenses
(
    name        text,
    date        date,
    amount      float4,
    category    text,
    description text
)
    LOCATION (
        'file://seghost1/dbfast/external/expenses1.csv',
        'file://seghost1/dbfast/external/expenses2.csv',
        'file://seghost2/dbfast/external/expenses3.csv',
        'file://seghost2/dbfast/external/expenses4.csv',
        'file://seghost3/dbfast/external/expenses5.csv',
        'file://seghost3/dbfast/external/expenses6.csv'
        )
    FORMAT 'CSV' ( HEADER );

Создание читающей внешней веб-таблицы, которая запускает скрипт один раз на каждом хосте сегментов:

CREATE EXTERNAL WEB TABLE log_output
(
    linenum int,
    message text
)
    EXECUTE '/var/load_scripts/get_log_data.sh' ON HOST
    FORMAT 'TEXT' (DELIMITER '|');

Создание пишущей внешней таблицы с именем sales_out, которая использует gpfdist для записи выходных данных в файл с именем sales.out. Файлы отформатированы с использованием вертикальной черты (|) в качестве разделителя столбцов и пробела в качестве NULL.

CREATE WRITABLE EXTERNAL TABLE sales_out
(
    LIKE sales
)
    LOCATION ('gpfdist://etl1:8081/sales.out')
    FORMAT 'TEXT' ( DELIMITER '|' NULL ' ')
    DISTRIBUTED BY (txn_id);

Создание пишущей внешней веб-таблицы, которая передает выходные данные, полученные сегментами, в исполняемый скрипт с именем to_adreport_etl.sh:

CREATE WRITABLE EXTERNAL WEB TABLE campaign_out
(
    LIKE campaign
)
    EXECUTE '/var/unload_scripts/to_adreport_etl.sh'
    FORMAT 'TEXT' (DELIMITER '|');

Использование созданной выше пишущей внешней таблицы для выгрузки выбранных данных:

INSERT INTO campaign_out
SELECT *
FROM campaign
WHERE customer_id = 123;

Примечания

При указании выражения LOG ERRORS Greengage DB фиксирует ошибки, возникающие при чтении данных внешней таблицы.

Вы можете просматривать и управлять зафиксированными данными журнала ошибок. Функции для управления данными журнала зависят от того, являются ли данные постоянными (используется ли ключевое слово PERSISTENTLY с выражением LOG ERRORS).

  • Функции, управляющие непостоянными данными журнала ошибок внешних таблиц, которые были определены без ключевого слова PERSISTENTLY.

    • Встроенная SQL-функция gp_read_error_log('table_name') отображает информацию журнала ошибок для внешней таблицы. Этот пример отображает данные журнала ошибок для внешней таблицы ext_expenses:

      SELECT * from gp_read_error_log('ext_expenses');

      Функция не возвращает данные, если внешняя таблица была создана с выражением LOG ERRORS PERSISTENTLY или если внешняя таблица не существует.

    • Встроенная SQL-функция gp_truncate_error_log('table_name') удаляет данные журнала ошибок для table_name. Этот пример удаляет данные журнала ошибок, зафиксированные для внешней таблицы ext_expenses:

      SELECT gp_truncate_error_log('ext_expenses');

      Удаление таблицы также удаляет данные журнала этой таблицы. Функция не очищает данные журнала, если внешняя таблица определена с выражением LOG ERRORS PERSISTENTLY. Функция возвращает FALSE, если таблица не существует.

  • Функции, управляющие постоянными данными журнала ошибок внешних таблиц, которые были определены с ключевым словом PERSISTENTLY.

    ПРИМЕЧАНИЕ

    Функции, управляющие постоянными данными журнала ошибок внешних таблиц, определены в файле $GPHOME/share/postgresql/contrib/gpexterrorhandle.sql. Функции должны быть установлены в базы данных, использующие постоянные данные журнала ошибок внешней таблицы. Эта команда psql устанавливает функции в базу данных testdb.

    $ psql -d test -U gpadmin -f $GPHOME/share/postgresql/contrib/gpexterrorhandle.sql
    • SQL-функция gp_read_persistent_error_log('table_name') отображает постоянные данные журнала для внешней таблицы. Функция не возвращает данные, если внешняя таблица была создана без ключевого слова PERSISTENTLY. Функция возвращает постоянные данные журнала для внешней таблицы даже после того, как таблица была удалена.

    • SQL-функция gp_truncate_persistent_error_log('table_name') очищает постоянные данные журнала для таблицы. Постоянные данные журнала необходимо удалять вручную. Удаление внешней таблицы (DROP) не удаляет постоянные данные журнала.

  • Следующие пункты относятся как к непостоянным, так и к постоянным данным журнала ошибок и соответствующим функциям:

    • Функции gp_read_* требуют привилегии SELECT на таблицу.

    • Функции gp_truncate_* требуют привилегии владельца таблицы.

    • Можно использовать символ подстановки * для удаления информации журнала ошибок для существующих таблиц в текущей базе данных. Укажите строку *.* для удаления информации журнала ошибок всей базы данных, включая информацию, которая не была удалена из-за предыдущих проблем с базой данных. Если указано *, требуются права владельца базы данных. Если указано *.*, требуются права суперпользователя операционной системы. Непостоянные и постоянные данные журнала ошибок должны удаляться с помощью соответствующих функций gp_truncate_*.

Когда несколько внешних таблиц Greengage DB определены с протоколом gpfdist, gpfdists или file и обращаются к одному и тому же именованному каналу (pipe) в системе Linux, Greengage DB ограничивает доступ к именованному каналу одним читающим процессом. Если второй читающий процесс попытается получить доступ к именованному каналу, будет возвращена ошибка.

Совместимость

CREATE EXTERNAL TABLE является расширением Greengage DB. Стандарт SQL не предусматривает внешних таблиц.

См. также