2016-12-13 8 views
0

Я изучаю gpdb. И меня путают по внешним таблицам. Следующее - это мое понимание.Как GreenPlum реализует внешнюю таблицу?

Для таблицы только для чтения gpdb создает только метаданные таблицы. Все данные хранятся на удаленном сервере, таком как hdf. При запросе данные передаются с удаленного сервера на сегмент. Данные не будут сохранены в сегментах, когда запрос заканчивается.

Для таблицы только для записи gpdb загрузит данные с удаленного устройства. Все данные будут сохранены на сегментах. Вставка действия будет изменять данные локального сегмента, а не удаленные.

Мое понимание правильно?

ответ

2

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

Читаемая внешняя таблица содержит метаданные, хранящиеся в базе данных, и, как вы сказали, все данные хранятся в другом месте, например HDFS. Он также может быть локальной файловой системой для Greenplum. Наиболее распространенная внешняя таблица использует gpfdist для «подачи» файла (ов). gpfdist - это в основном веб-сервер, который могут считывать сразу несколько сегментов одновременно.

Пример:

Во-первых, начну gpfdist на четырех различных хостов. Эти хосты также должны быть доступны всем хостам сегмента.

[[email protected]] gpfdist -p 8999 -d /landing/ & 
[[email protected]] gpfdist -p 8999 -d /landing/ & 
[[email protected]] gpfdist -p 8999 -d /landing/ & 
[[email protected]] gpfdist -p 8999 -d /landing/ & 

А теперь положить файл примера в каждом:

[[email protected]] hostname > /landing/hostname.txt 
[[email protected]] hostname > /landing/hostname.txt 
[[email protected]] hostname > /landing/hostname.txt 
[[email protected]] hostname > /landing/hostname.txt 

Создать внешнюю таблицу, чтобы прочитать его:

[[email protected]] psql 
gpadmin=# create external table public.ext_hostnames 
(hostname text) 
location (
'gpfdist://host1:8999/hostname.txt', 
'gpfdist://host2:8999/hostname.txt', 
'gpfdist://host3:8999/hostname.txt', 
'gpfdist://host4:8999/hostname.txt') 
format 'text' (delimiter '|' null as ''); 

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

Writable External Table изменяет это значение и позволяет записывать данные во внешнюю систему, такую ​​как HDFS или файловая система posix.

[[email protected]] gpfdist -p 8999 -d /home/gpadmin/ & 
[[email protected]] psql 
gpadmin=# create writable external table public.wrt_example 
(foo text) 
location ('gpfdist://master:8999/foo.txt') 
format 'text' (delimiter '|' null as ''); 
insert into public.wrt_example values ('jon'); 

gpadmin=# insert into public.wrt_example select 'jon'; 
gpadmin=# \q 

[[email protected]] cat /home/gpadmin/foot.txt 
jon 

Вариант использования для Writable External Table заключается в том, чтобы принимать данные в Greenplum и помещать их в другое место.

Общим примером является использование HDFS для Data Lake и Greenplum для Analytics. Вы можете считывать данные из HDFS с помощью внешней таблицы и вставлять их в таблицы Greenplum. Затем вы анализируете эти данные, используете аналитические функции из пакета Madlib и находите новые сведения о своих данных. Теперь вы хотите вывести эти новые данные из Greenplum обратно в HDFS, чтобы другие пользователи могли извлечь выгоду из понимания. Затем вы используете Writable External Table для INSERT данных из Greenplum в HDFS.

Наиболее распространенный прецедент для читаемой внешней таблицы - это загрузка файлов из внешних источников в Greenplum.