Greenplum 通过gpfdist + EXTERNAL TABLE 并行导入数据

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云数据库 RDS SQL Server,基础系列 2核4GB
简介: Greenplum 提供了快速导入数据的方法,下面通过一个例子演示给大家.

Greenplum 提供了快速导入数据的方法,下面通过一个例子演示给大家.


我们用TPCH测试中最大的表做导入测试


首先简单介绍下原理.

1) Greenplum 通过外部表的方式让所有 segment 同时连接到一组外部服务 gpfdist, 同时拉取数据

2) gpfdist 随机分发数据给所有 segment.

3) segment拿到数据后先解析它,根据表的分发规则收下属于自己的数据,把不属于自己的数据再分发给所属的segment.


整个过程充分利用了网络和各 segment 的硬件资源,效率极高.


demo:

1) 在文件服务器上启动gpfdist服务,端口号8080,指定文本文件所在目录


 ./gpfdist -d /u01/gp001/dss-data/ -p 8080 -l /u01/gp001/loadlog.log



2) 连接Greenplum master节点,创建外部表


CREATE EXTERNAL TABLE LINEITEM_LOAD (

    L_ORDERKEY      INTEGER , 

    L_PARTKEY       INTEGER , 

    L_SUPPKEY       INTEGER , 

    L_LINENUMBER    INTEGER,

    L_QUANTITY      DECIMAL,

    L_EXTENDEDPRICE DECIMAL,

    L_DISCOUNT      DECIMAL,

    L_TAX           DECIMAL,

    L_RETURNFLAG    CHAR(1),

    L_LINESTATUS    CHAR(1),

    L_SHIPDATE      DATE,

    L_COMMITDATE    DATE,

    L_RECEIPTDATE   DATE,

    L_SHIPINSTRUCT  CHAR(25),

    L_SHIPMODE      CHAR(10),

    L_COMMENT       VARCHAR(44)

) LOCATION ('gpfdist://1192.168.1.1:8080/lineitem.csv')

FORMAT 'CSV' (DELIMITER '|');



关键信息: 

1. 指定了外部数据源是刚才启动的gpfdist服务,并指定了需要导入的文本文件名

2 文本的根式是CSV,列之间用 | 分隔.


3) 按照需求创建表,数据会导入到这个表中


        CREATE TABLE LINEITEM (

                L_ORDERKEY ,    

                L_PARTKEY ,  

                L_SUPPKEY ,  

                L_LINENUMBER    INTEGER,

                L_QUANTITY              DECIMAL,

                L_EXTENDEDPRICE DECIMAL,

                L_DISCOUNT              DECIMAL,

                L_TAX                   DECIMAL,

                L_RETURNFLAG    CHAR(1),

                L_LINESTATUS    CHAR(1),

                L_SHIPDATE              DATE,

                L_COMMITDATE    DATE,

                L_RECEIPTDATE   DATE,

                L_SHIPINSTRUCT  CHAR(25),

                L_SHIPMODE              CHAR(10),

                L_COMMENT               VARCHAR(44)

        )  with (OIDS=false) DISTRIBUTED BY (l_orderkey, l_linenumber);



4) 通过外部数据源把数据导入到 Greenplum 中


insert into lineitem select * from lineitem_load;



5) 通过执行计划,可以理解他是工作原理, 整个过程 master 节点不会处理数据,都由 segment完成.


explain insert into lineitem select * from lineitem_load;

                                             QUERY PLAN                                              

-----------------------------------------------------------------------------------------------------

 Insert (slice0; segments: 16)  (rows=62500 width=426)

   ->  Redistribute Motion 16:16  (slice1; segments: 16)  (cost=0.00..18500.00 rows=62500 width=426)

         Hash Key: l_orderkey, lineitem_load.l_linenumber

         ->  External Scan on lineitem_load  (cost=0.00..18500.00 rows=62500 width=426)

 Settings:  effective_cache_size=1GB

(5 rows)


目录
相关文章
|
6月前
|
存储 关系型数据库 MySQL
在阿里云的AnalyticDB MySQL版中使用CREATE TABLE语句来创建内表
在阿里云的AnalyticDB MySQL版中使用CREATE TABLE语句来创建内表【1月更文挑战第16天】【1月更文挑战第78篇】
362 3
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 内存表可选项 - unlogged table
标签 PostgreSQL , 内存表 , unlogged table 背景 内存表,通常被用于不需要持久化,变更频繁,访问RT低的场景。 目前社区版本PostgreSQL没有内存表的功能,postgrespro提供了两个插件可以实现类似内存表的功能。
3399 0
|
6月前
|
SQL 存储 关系型数据库
云数据仓库ADB上如何在AnalyticDBMySQL使用CREATE TABLE创建内表?
云数据仓库ADB上如何在AnalyticDBMySQL使用CREATE TABLE创建内表?
179 1
OushuDB-通过gpfdist外部表导出数据
OushuDB-通过gpfdist外部表导出数据
86 0
|
SQL Linux 数据库
Hive 表 DML 操作——Hive 表 DML 操作——第1关:将文件中的数据导入(Load)到 Hive 表中
Hive 表 DML 操作——Hive 表 DML 操作——第1关:将文件中的数据导入(Load)到 Hive 表中
1011 0
|
Oracle Java 关系型数据库
GreenPlum - Schema 如何连接?
GreenPlum - Schema 如何连接?
431 0
|
索引
PolarDB-X 1.0-SQL 手册-DDL-RENAME TABLE
您可以使用RENAME TABLE语句对表名进行重命名,具体语法如下: RENAME TABLE tbl_name TO new_tbl_name
237 0
|
SQL 分布式计算 并行计算
PostgreSQL 并行计算解说 之25 - parallel FDW scan (并行访问多个外部表) with parallel append (FDW must with IsForeignScanParallelSafe)
标签 PostgreSQL , cpu 并行 , smp 并行 , 并行计算 , gpu 并行 , 并行过程支持 背景 PostgreSQL 11 优化器已经支持了非常多场合的并行。简单估计,已支持27余种场景的并行计算。 parallel seq scan
346 0
|
弹性计算 安全 关系型数据库
阿里云RDS PG 10 HA版 - 使用postgres_fdw外部表插件 - 实例内跨库访问其他库的表
标签 PostgreSQL , postgres_fdw , 阿里云 , 内核安全限制 背景 阿里云rds pg内核安全上做了限制,只能访问当前实例的其他库,所以使用dblink, postgres_fdw时,虽然PG功能上是可以访问其他远程实例的,但是阿里云RDS PG限制了只能访问当前实例。 另一方面,当前实例是HA版本,并且是云化版本,所以IP,PORT都可能在发生迁移、切换后发
645 0