010-88888888

首页 > 成功案例

乐鱼体育 Greenplum外部表数据加载——gpfdist

发布时间 : 2021-03-27 11:06:03 浏览: 120次 来源:G.E.M.整理 作者:G.E.M.

Greenplum在数据加载中具有明显的优势,即它支持并发加载数据。 gpfdist是用于并发加载的工具,它对应于数据库中的外部表。

外部表表示表的数据存储在数据库外部的数据文件中。外部表直接在段上导入数据。与其他ETL工具相比,由于它需要通过GP的单点主控(效率较低),因此该方法将非常快。

创建外部表语法:

CREATE EXTERNAL TABLE
Defines a new external table.
Synopsis
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]')
     [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=)
    [ ENCODING 'encoding' ]
      [ [LOG ERRORS [PERSISTENTLY]] SEGMENT REJECT LIMIT count
      [ROWS | PERCENT] ]

由CREATE EXTERNAL TABLE或CREATE EXTERNAL WEB TABLE创建的外部表是可读的外部表;并且由CREATE WRITABLE EXTERNAL TABLE或CREATE WRITABLE EXTERNAL WEB TABLE创建的外部表是可写外部表。

普通外部表和可写外部表之间的区别:

1、只能选择普通外部表乐鱼体育,并且只能插入可写外部表;

2、可写外部表没有错误表;

3、可写的外部表可以分配一个分配键乐鱼体育,如果未指定,默认为随机分配;普通的外部表只能随机分配。

外部表也支持本地文件,但是效率很低,因此不建议这样做。

使用gpfdist和外部表的示例:

1、启动gpfdist

首先,在文件服务器上启动gpfdist服务

[gpadmin @ test180〜] $ gpfdist -d / home / gpadmin -p 8081 -l /tmp/gpfdist.log&

[1] 2232

参数说明:

-d放置数据文件的目录。我的路径是/ home / gpadmin。

-p设置对gpfdist端口的访问乐鱼体育,可以根据实际情况编写。

-l设置放置日志文件的目录。此参数也可以省略。

2、准备数据文件并创建一个外部表

postgres=# CREATE external table t1_ext(id int,info text)
location('gpfdist://192.168.7.180:8081/t1.txt')
format 'text' (delimiter as ' ' null as '' escape 'OFF');
CREATE EXTERNAL TABLE

Gpfdist://服务器地址:端口/文件名填写在位置

服务器地址:这是安装Linux系统的IP。

端口:用于访问上述附件的gpfdist的端口。

文件名:是准备好的数据文件的名称。

format:设置已加载数据文件的格式greenplum 外部表,定界符(用于定义数据之间的定界符,此处使用空格),null(用于定义将null替换为null值)。

3、外部表查询

postgres=# select * from t1_ext ;
 id | info 
----+------
  1 | a
  2 | b
  3 | c
  4 | d
  5 | e
(5 rows)

我们可以直接编辑数据文件以添加或删除数据,这些数据将同时显示在外部表中。

此外greenplum 外部表乐鱼体育,我们还可以使用外部表将数据库中的表中的数据导出到文件中。

首先乐鱼体育,您还需要启动gpfdist,然后创建可写的外部表:

postgres=# CREATE writable external table t2_ext(like t2)
postgres-# location('gpfdist://192.168.7.180:8081/t2.txt')
postgres-# format 'text' (delimiter ',')
postgres-# distributed by(id);
CREATE EXTERNAL TABLE

writable指定该表是可写的外部表。

然后greenplum 外部表,将数据库中表t2的数据插入到外部表t2_ext中,然后可以将数据导出到文件中:

postgres=# insert into t2_ext  select * from t2 limit 5;  
INSERT 0 5

查看生成的文件:

[gpadmin @ test180〜]少$ 2. txt

500001,8de385b4bc273c3dd5057daad2bec6d2
500003,8de385b4bc273c3dd5057daad2bec6d2
500005,8de385b4bc273c3dd5057daad2bec6d2
500007,8de385b4bc273c3dd5057daad2bec6d2
500009,8de385b4bc273c3dd5057daad2bec6d2

在线客服

>>
在线客服