Greenplum MPP 分析数据库
FreeGuideOnline
最新
2026-07-09
sql -- 哈希分布表 CREATE TABLE sales ( sale_id int, product_id int, amount decimal ) DISTRIBUTED BY (sale_id);
-- 复制表 CREATE TABLE products ( product_id int, name text ) DISTRIBUTED REPLICATED;
## 快速部署 Greenplum 环境
初学者可通过 Docker 快速搭建单节点 Greenplum,体验完整功能。
### 使用 Docker 启动
```bash
docker run -d --name gpdb \
-p 5432:5432 \
-e POSTGRES_PASSWORD=changeme \
greenplumdb/gpdb:latest
国内镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/greenplum/gpdb:7.0.0
连接数据库:
docker exec -it gpdb psql -U gpadmin postgres
本地安装(CentOS 示例)
官方提供 RPM 包,安装后需初始化集群:
sudo yum install -y greenplum-db-7.0.0-*.rpm
source /usr/local/greenplum-db/greenplum_path.sh
gpssh-exkeys -f hostfile_exkeys # 配置节点互信
gpinitsystem -c gpinitsystem_config # 初始化集群
核心数据库操作
所有标准 SQL 在 Greenplum 中均可直接使用,同时提供大量扩展函数。
表分区与存储优化
分区表将数据按范围或列表划分,可结合分布键进一步提升查询效率。
CREATE TABLE sales_part (
sale_id int,
sale_date date,
amount decimal
) DISTRIBUTED BY (sale_id)
PARTITION BY RANGE (sale_date)
(
PARTITION jan2024 START ('2024-01-01') END ('2024-02-01'),
PARTITION feb2024 START ('2024-02-01') END ('2024-03-01')
);
常用存储模型:
- 堆表(Heap):默认存储,适合更新和删除操作。
- AO 表(Append-Optimized):适合批量追加写入,支持列存压缩。
-- 列存 AO 表
CREATE TABLE fact_sales (
...
) WITH (appendonly=true, orientation=column, compresstype=zstd);
数据加载最佳方式
Greenplum 推荐使用 gpfdist 或 COPY 命令批量导入数据,避免逐行 INSERT 带来的性能问题。
外部表方式(基于 gpfdist):
CREATE EXTERNAL TABLE ext_sales (
sale_id int, amount decimal
) LOCATION ('gpfdist://datahost:8080/sales.csv')
FORMAT 'CSV' (HEADER);
INSERT INTO sales SELECT * FROM ext_sales;
简单快速加载:
COPY sales FROM '/data/sales.csv' WITH CSV HEADER;
查询性能调优
正确编写 SQL 和合理设计表结构是发挥 MPP 性能的关键。
查看执行计划
EXPLAIN SELECT ...;
EXPLAIN ANALYZE SELECT ...; -- 实际执行并显示统计
关注计划中的 Motion 节点,它代表数据在 Segment 间的重分布,开销较大。通过调整分布键减少 Motion 可大幅优化连接性能。
连接优化技巧
- 将大表的连接键设为分布键,使同键值数据落在同一 Segment,避免重分布 Motion。
- 小表使用复制表,连接时无需网络传输。
- 对聚合查询指定
GROUP BY分布键,可实现本地聚合。
-- 两表 distribution key 同为 user_id
SELECT ... FROM users JOIN orders ON users.user_id = orders.user_id;
资源队列管理
避免并发查询抢占资源,通过资源队列控制内存和并发度。
CREATE RESOURCE QUEUE adhoc WITH (ACTIVE_STATEMENTS=5);
ALTER ROLE analyst RESOURCE QUEUE adhoc;
常用工具与生态
- gpcc(Command Center):官方 Web 监控工具,可查看查询概要、节点状态。
- gpfdist:并行数据加载服务。
- gpload:基于 YAML 的批量加载调度工具。
- Apache Madlib:库内机器学习库,支持 SQL 接口。
- PXF(Platform Extension Framework):无缝访问 Hadoop、S3 等外部数据源。
日常运维命令速查
gpstate -s # 显示集群状态
gpconfig -c max_connections -v 100 # 修改参数
gpstop -u # 重新加载配置(不停机)
vacuumdb --all --analyze # 全库统计信息更新