暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

梧桐数据如何使用gpfdist 外部表导入数据

Rhein 2025-06-02
212

使用 gpfdist 进行数据加载有四个步骤。

• 启动 gpfdist 文件服务器

• 把需要加载的数据文件放到 gpfdist 数据目录

• 定义外部表

• 加载数据

1、启动 gpfdist 文件服务器

在本例中,我们在一个节点上启动了两个 gpfdist 实例,分别使用/data1/ load-files 和/data2/load-files 目录来存放源文件。两个 gpfdist 实例分别监听 8081 和 8082 端口。日志分别存放在/home/hawq/log1 和/home/hawq/log2 中。gpfdist 就像是一个文件服务器。其中-d 选项指定的是目录是该文件服务器的根目录。

gpfdist-d /data1/load-files-p 8081-l /data1/log1

gpfdist-d /data2/load-files-p 8082-l /data2/log2

2、把需要加载的数据文件放到gpfdist数据目录

创建两个文本文件 expense1 和 expense2。

在 expense1 中添加如下数据:

john|2017-01-20|100.00|travel|nothing

tom|2016-12-01|300|taxi|nothing

在 expense2 中添加如下数据:

marry|2017-01-21|1000.00|travel|nothing

kurt|2016-12-02|800|taxi|nothing

3、定义外部表

创建外部表时需要把 etlhost-1 替换为 gpfdist 所在机器的主机名。本机的可以使用 localhost。

CREATE EXTERNAL TABLE ext_expenses

             ( name text, date date, amount float4, category text, desc1 text )

 LOCATION ('gpfdist://etlhost-1:8081/*', 'gpfdist://etlhost-1:8082/*')

 FORMAT 'TEXT' (DELIMITER '|');

可以直接查询该外部表:

etl=# select * from ext_expenses;

name | date | amount | category |desc1 

------+------+--------+----------+--------

john | 2017-01-20 | 100 | travel | nothing

tom | 2016-12-01 | 300 | taxi | nothing

marry | 2017-01-21 | 1000 | travel | nothing

 kurt | 2016-12-02 | 800 | taxi | nothing

(4 rows)

有些时候,输入的 text/csv 文件有一些格式错误,默认情况下,出现错误时,整个加载会失败。如果数据量很大的话,修正错误再重新加载会浪费很多时间。可以通过定义 error table 的方法隔离错误的行,把错误的行放到一个单独的 error table 中,而正常加载所有的正确行。例如:

CREATE EXTERNAL TABLE ext_expenses ( name text, date date, amount float4,category text, desc1 text )

 LOCATION ('gpfdist://etlhost-1:8081/*', 'gpfdist://etlhost-2:8082/*')

 FORMAT 'TEXT' (DELIMITER '|')

 LOG ERRORS INTO expense_errortable SEGMENT REJECT LIMIT 10 ROWS;

上面语句指定了error table为expense_errortable,系统会自动创建该表。SEGMENT REJECT LIMIT 指的是如果有超过 10 行的错误,加载将报错退出。

 如果一个 CSV 文件包含错误的格式,error table 的 rawdata 列可能包含几个合并的错误行。例如,如果一个 text 列的值少了一个结束的引号,后面的行(包含换行符)将会被当作那个列的值处理。当这种情况发生时,并且该值超过 64K 大小时,WuTongDB会把64K 大小的值放入 error table 中做为一个单独的行,继续处理后面的行。如果这种情况发生多次,加载会失败,WuTongDB会报“rejected N or more rows”错退出。

4、加载数据

加载 ext_expenses 表中的数据到 expenses 表中。

CREATE TABLE expenses AS SELECT * FROM ext_expenses;

用户也可以通过把建表语句以及加载数据分开:

CREATE TABLE expenses(name text, date date, amount float4, category text,desc1 text);

INSERT INTO expenses SELECT * FROM ext_expenses

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论