ITPub博客

首页 > 数据库 > 国内数据库 > Greenplum 从入门到实战:快速搭建 + 基础 SQL 示例

Greenplum 从入门到实战:快速搭建 + 基础 SQL 示例

国内数据库 作者:丸喵喵 时间:2026-09-21 14:40:45 0 删除 编辑

一、前言

Greenplum(简称 GPDB)是一款基于 PostgreSQL 演进的开源 MPP 大规模并行处理分布式数据库,主打 PB 级海量数据离线分析、数据仓库、多维报表、即席查询等 OLAP 场景,在金融、电信、零售、物流等企业级大数据平台中应用十分广泛。

它完全兼容 PostgreSQL 语法,学习门槛低,依托 Shared-Nothing 无共享架构具备线性扩展能力,同时支持行存、列存、数据压缩、高可用、数据镜像等企业级特性,是传统数仓、大数据分析场景的主流选型之一。

架构详解(Master + Segment + Interconnect)

  • Master(主节点)

1全局入口,接收客户端连接(默认 5432 端口)。

2解析 SQL、生成并行执行计划、分发任务、汇总结果。

3不存业务数据,仅存元数据(数据字典)。

4通常部署主备高可用(Primary/Standby)。

  • Segment(数据节点)

1核心数据存储与计算单元,每个 Segment 是独立 PostgreSQL 实例。

2数据按Hash / 随机 / 范围分布,每个 Segment 存分片数据。

3支持Primary+Mirror 镜像,节点故障自动切换,保障高可用。

4单节点可部署多个 Segment 实例,提升资源利用率。

  • Interconnect(互联层)

1节点间高速数据传输通道,负责并行查询的数据洗牌、分发、聚合。

2采用UDP 协议,低延迟高吞吐,支撑大规模数据交换。

环境说明:本文采用Linux单机部署,仅用于学习、测试、开发调试,不适用生产集群。


二、环境准备

本文提供一种主流单机部署方案,VMware+CentOS7.9 RPM 安装贴近生产环境。

VMware +CentOS7.9 RPM 单机部署

2.1 虚拟机硬件配置

CPU:4 核心(最低 2 核)

内存:8GB(最低 6GB,GP 对内存要求较高)

硬盘:系统盘 60GB,额外划分独立磁盘挂载 /data 用于存放数据

网络:桥接模式,方便宿主机图形化工具远程连接

2.2 系统环境初始化(CentOS 7.9)

2.2.1 关闭防火墙与开机自启

# 临时关闭防火墙

systemctl stop firewalld

# 禁止开机自启

systemctl disable firewalld

# 查看状态

systemctl status firewalld


2.2.2 关闭SELinux

SELinux会拦截数据库进程访问,必须关闭:

# 临时关闭

setenforce 0

# 永久关闭(重启生效)

sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 验证状态

getenforce


2.2.3 配置系统内核参数

编辑内核配置文件,适配 GP 内存、网络、信号量要求:

vim /etc/sysctl.conf


文件末尾追加以下内容:

kernel.shmmax = 500000000

kernel.shmall = 4000000000

kernel.sem = 250 512000 100 2048

net.ipv4.tcp_syncookies = 1

vm.overcommit_memory = 2


保存退出,执行命令使配置生效:

sysctl -p


2.2.4 配置系统资源限制

修改文件句柄、进程数限制,避免大数据查询报错:

vim /etc/security/limits.conf


文件末尾添加:

* soft nofile 65535

* hard nofile 65535

* soft nproc 131072

* hard nproc 131072


配置完成后重启虚拟机:

reboot


2.3 创建专用用户与数据目录

Greenplum强制使用gpadmin账户运行,禁止root账户启动服务:

# 创建gpadmin用户

useradd gpadmin

# 设置用户密码

passwd gpadmin

 

# 创建数据目录并授权

mkdir -p /data/master

chown -R gpadmin:gpadmin /data

chmod 700 /data


2.4 下载并安装RPM包

# 切换至安装目录

cd /usr/local

# 在线下载开源版Greenplum 6.14.1

wget https://github.com/greenplum-db/gpdb/releases/download/6.14.1/open-source-greenplum-db-6.14.1-rhel7-x86_64.rpm

 

# 执行安装(自动安装依赖)

yum install -y ./open-source-greenplum-db-6.14.1-rhel7-x86_64.rpm

 

# 授权安装目录

chown -R gpadmin:gpadmin /usr/local/greenplum*


2.5 配置环境变量

切换 至gpadmin用户,配置全局环境变量:

su - gpadmin

vim ~/.bashrc


文件末尾添加配置:

source /usr/local/greenplum-db-6.14.1/greenplum_path.sh

export MASTER_DATA_DIRECTORY=/data/master

AI写代码

bash

加载环境变量:

source ~/.bashrc


执行gpversion可查看版本,代表配置成功。

2.6 初始化并启动数据库

使用官方单节点模板初始化实例:

# 单节点初始化,出现提示输入 Y 确认

gpinitsystem -c /usr/local/greenplum-db-6.14.1/docs/cli_help/gpconfigs/gpinitsystem_singlenode


常用启停命令

# 启动数据库

gpstart -a

# 停止数据库

gpstop -a

# 重启数据库

gpstop -ar

AI写代码

命令行连接数据库

psql


出现postgres=# 即连接成功。

三、Greenplum核心基础概念

在编写 SQL 前,先掌握两个 GP 最核心特性,也是和单机 PostgreSQL 最大的区别:

3.1 数据分布键DISTRIBUTED BY

GP是分布式MPP架构,数据会拆分到多个Segment节点存储,分布键决定数据分片规则,直接影响查询性能:

DISTRIBUTED BY (字段名):哈希分布(生产环境推荐),按字段哈希值分片,数据均匀分布

DISTRIBUTED RANDOMLY:随机分布,数据随机打散,适合小表、维度表

不指定分布键:默认使用表主键作为分布键

最佳实践:大表、事实表优先选择查询、关联高频字段作为分布键。

3.2 存储类型

GP 支持多种存储模式,适配不同业务场景:

行存储(Heap 表,默认):适合小表、频繁增删改、OLTP 轻事务场景

AO 追加优化表:专为批量写入、海量分析设计,支持列存储 + 数据压缩,数仓大表首选,压缩比最高可达 10:1,大幅节省磁盘空间。

四、基础SQL实战示例

下文所有SQL均可直接在psql客户端中执行,覆盖库、用户、表、增删改查、导入导出、元数据查询等日常常用操作。

4.1 数据库与用户管理

4.1.1 创建、切换数据库

-- 创建测试数据库

CREATE DATABASE test_db;

 

-- 切换至目标数据库

\c test_db;


4.1.2 创建用户并授权

-- 创建普通用户,设置密码

CREATE USER test_user WITH PASSWORD '123456';

 

-- 给用户授予数据库全部权限

GRANT ALL PRIVILEGES ON DATABASE test_db TO test_user;


4.2 数据表创建(行存 / 列存两种场景)

4.2.1 普通行存表(小表 / 更新频繁场景)

适用于用户维度表、配置表等小体量数据表:

CREATE TABLE user_info (

    id INT,

    name VARCHAR(50),

    age INT,

    city VARCHAR(50),

    create_time TIMESTAMP

) 

-- 指定分布键:按id哈希分片

DISTRIBUTED BY (id);


4.2.2 列存压缩表(大表 / 分析型场景)

适用于销售流水、日志、行为数据等海量事实表,开启列存 + zlib 压缩:

CREATE TABLE sales_record (

    sale_id INT,

    product_name VARCHAR(100),

    amount DECIMAL(10,2),

    sale_date DATE

)

-- 开启AO表、列存储、zlib压缩,压缩级别5

WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=5)

-- 分布键

DISTRIBUTED BY (sale_id);


4.3 插入数据

支持单条、批量插入,数仓环境优先使用批量插入提升效率:

-- 向用户表批量插入数据

INSERT INTO user_info VALUES 

(1, '张三', 25, '北京', now()),

(2, '李四', 30, '上海', now()),

(3, '王五', 28, '深圳', now()),

(4, '赵六', 35, '广州', now());

 

-- 向销售表批量插入数据

INSERT INTO sales_record VALUES

(1001, '手机', 3999.00, '2025-01-01'),

(1002, '电脑', 5999.00, '2025-01-01'),

(1003, '耳机', 299.00, '2025-01-02');


4.4 数据查询(基础查询 + 聚合 + 联表)

GP 完全兼容标准 SQL 与 PostgreSQL 语法,常规查询写法一致:

-- 1. 全表查询

SELECT * FROM user_info;

 

-- 2. 条件过滤查询

SELECT * FROM user_info WHERE city = '北京';

 

-- 3. 分组聚合统计(数仓高频用法)

SELECT city, COUNT(*) AS user_count

FROM user_info 

GROUP BY city 

ORDER BY user_count DESC;

 

-- 4. 多表关联查询

SELECT u.name, s.product_name, s.amount

FROM user_info u

JOIN sales_record s ON u.id = s.sale_id;


4.5 元数据与集群信息查询

查看表结构、分布键、集群节点等运维常用命令:

-- 查看表结构、分布键、存储属性

\d user_info;

 

-- 查看当前库下所有数据表

\dt;

 

-- 查看Greenplum集群节点配置信息

SELECT * FROM gp_segment_configuration;


4.6 数据导入导出(CSV 文件)

使用\copy命令实现本地文件与数据库数据互导,大数据量场景优先使用该方式:

-- 1. 表数据导出为CSV文件(带表头)

\copy user_info TO '/home/gpadmin/user_info.csv' WITH CSV HEADER;

 

-- 2. 从CSV文件导入数据到表中

\copy user_info FROM '/home/gpadmin/user_info.csv' WITH CSV HEADER;


4.7 表清空与删除

-- 清空表数据,保留表结构(高效清空大表)

TRUNCATE TABLE user_info;

 

-- 彻底删除数据表

DROP TABLE user_info;


五、入门必备优化建议

结合Greenplum架构特性,分享几条新手必记的 性能优化 规则:

合理选择分布键:大表关联字段尽量作为分布键,避免查询时节点间数据重分布,大幅提升效率;

区分存储类型:小表、频繁更新表使用默认行存,千万级以上大分析表统一使用列存 + 压缩;

批量写入优先:避免单条循环INSERT,批量插入、文件导入是GP最优写入方式;

小表使用随机分布:维度表、字典表等小表可使用DISTRIBUTED RANDOMLY。

六、环境关闭与退出

6.1 退出psql客户端

\q


6.2 退出容器

exit


6.3 停止 / 重启容器(可选)

# 停止容器

docker stop greenplum

 

# 重启容器

docker restart greenplum


七、总结

本文基于linux实现Greenplum零门槛单机部署,无需复杂集群配置,适合个人学习与开发调试;

分布键和存储类型是Greenplum区别于传统单机数据库的核心,也是性能优化的关键;

GP高度兼容PostgreSQL SQL语法,有SQL基础的开发者可快速上手;

该环境仅用于学习测试,生产环境需搭建Master主备、Segment镜像的高可用集群。

————————————————

版权声明:本文为CSDN博主「bang冰冰」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/z105908142/article/details/161850148


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29568843/viewspace-3183327/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-03-27

  • 博文量
    215
  • 访问量
    537452