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

本文涉及的产品
云数据库 PolarDB MySQL 版,列存表分析加速 8核16GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS Agent(兼容OpenClaw),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)


目录
相关文章
|
关系型数据库 Java 数据库连接
PostgreSQL从小白到高手教程 - 第47讲:JMETER工具使用
PostgreSQL从小白到高手教程 - 第47讲:JMETER工具使用
731 3
|
Java 关系型数据库 MySQL
DataGrip连接人大金仓数据库(kingbase)详细教程【超详细】
DataGrip连接人大金仓数据库(kingbase)详细教程【超详细】
DataGrip连接人大金仓数据库(kingbase)详细教程【超详细】
|
机器学习/深度学习 运维 监控
智能化运维:从被动响应到主动预防的转型之路####
本文深入探讨了智能化运维(AIOps)如何引领信息技术管理从传统的被动响应模式向主动预防机制转变,强调了大数据、人工智能算法与机器学习技术在提升系统稳定性和效率中的关键作用。通过分析智能化运维的核心价值、实施策略及面临的挑战,本文为读者揭示了一个更加智能、高效且灵活的IT运维未来蓝图。 ####
|
机器学习/深度学习 分布式计算 安全
联邦学习的简要概述
联邦学习(Federated Learning, FL)是一种分布式机器学习方法,旨在保护数据隐私的同时,利用多方数据进行模型训练。
1797 5
|
Java Apache Spring
整合Spring Boot和Apache Solr进行全文搜索
整合Spring Boot和Apache Solr进行全文搜索
|
机器学习/深度学习 人工智能 弹性计算
快速使用 Elasticsearch+PAI 部署 AI 大模型知识库对话
本文为您介绍如何通过Elasticsearch和PAI-EAS部署企业级AI知识库对话,利用Elasticsearch进行企业专属知识库的检索,利用PAI-EAS来进行AI语言大模型推理,并通过开源框架LangChain将二者有机结合,从而集成到您的业务服务当中。
53273 6
快速使用 Elasticsearch+PAI 部署 AI 大模型知识库对话
|
关系型数据库 MySQL 数据库
windows上同时安装两个不同版本的mysql
windows上同时安装两个不同版本的mysql
561 1
windows上同时安装两个不同版本的mysql
|
缓存 Kubernetes 网络协议
Spring Boot 2.3.0配置Graceful-Shutdown,Readiness和Liveness
Spring Boot 2.3.0配置Graceful-Shutdown,Readiness和Liveness
Spring Boot 2.3.0配置Graceful-Shutdown,Readiness和Liveness
|
存储 缓存 Java
阿里二面:Flink内存管理是如何实现的?
阿里二面:Flink内存管理是如何实现的?
902 0
阿里二面:Flink内存管理是如何实现的?