[轉]Greenplum 經過gpfdist + EXTERNAL TABLE 並行導入數據

摘要: Greenplum 提供了快速導入數據的方法,下面經過一個例子演示給你們.服務器

Greenplum 提供了快速導入數據的方法,下面經過一個例子演示給你們.網絡

 

咱們用TPCH測試中最大的表作導入測試測試

 

首先簡單介紹下原理.blog

1) Greenplum 經過外部表的方式讓全部 segment 同時鏈接到一組外部服務 gpfdist, 同時拉取數據資源

2) gpfdist 隨機分發數據給全部 segment.it

3) segment拿到數據後先解析它,根據表的分發規則收下屬於本身的數據,把不屬於本身的數據再分發給所屬的segment.io

 

整個過程充分利用了網絡和各 segment 的硬件資源,效率極高.ast

 

demo:class

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)

 

(原文地址:https://yq.aliyun.com/articles/7457)

相關文章
相關標籤/搜索