摘要: 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)