 Greenplum数据仓库UDW - UCloud中立云计算服务商2、数据库管理 3、模式管理 4、表格设计 5、加载数据 6、分区表 7、序列 8、索引 9、 ANALYZE/VACUUM 10、常⽤SQL⼤全 12、常⽤SQL命令 13、⽤⼾⾃定义函数 ⽬录 Greenplum数据仓库 UDW Copyright © 2012-2021 UCloud 优刻得 3/206 128 132 132 132 139 139 139 141 191 192 udw优化指南 表膨胀 表膨胀 表膨胀的原因 如何避免表膨胀 UDW中 中Json类型 类型 Json相关操作 Json操作举例 Json相关函数 Json创建函数 Json处理函数 接⼊第三⽅ 接⼊第三⽅ BI ⼯具 ⼯具 ⼀、 UDW 接⼊ Zeppelin ⼆、 UDW 接⼊ SuperSet UDW 使⽤案例 使⽤案例 案例⼀ 利⽤ logstash+Kafka+UDW template1 (切换到template1数据库) DROP DATABASE product; 3、模式管理 、模式管理 数据库模式(schema)是包含了⼀系列数据库对象(表,数据类型,⾃定义函数)集合的命名容器。⼀个数据库可以有多个模式。不同模式不共享命名空间。public 模式是在创建数据库之后就 会默认创建的,每个⽤⼾都有权限在这个 schema 创建对象,如果不指定 schema 那么就会默认创建到这⾥。0 码力 | 206 页 | 5.35 MB | 1 年前3 Greenplum数据仓库UDW - UCloud中立云计算服务商2、数据库管理 3、模式管理 4、表格设计 5、加载数据 6、分区表 7、序列 8、索引 9、 ANALYZE/VACUUM 10、常⽤SQL⼤全 12、常⽤SQL命令 13、⽤⼾⾃定义函数 ⽬录 Greenplum数据仓库 UDW Copyright © 2012-2021 UCloud 优刻得 3/206 128 132 132 132 139 139 139 141 191 192 udw优化指南 表膨胀 表膨胀 表膨胀的原因 如何避免表膨胀 UDW中 中Json类型 类型 Json相关操作 Json操作举例 Json相关函数 Json创建函数 Json处理函数 接⼊第三⽅ 接⼊第三⽅ BI ⼯具 ⼯具 ⼀、 UDW 接⼊ Zeppelin ⼆、 UDW 接⼊ SuperSet UDW 使⽤案例 使⽤案例 案例⼀ 利⽤ logstash+Kafka+UDW template1 (切换到template1数据库) DROP DATABASE product; 3、模式管理 、模式管理 数据库模式(schema)是包含了⼀系列数据库对象(表,数据类型,⾃定义函数)集合的命名容器。⼀个数据库可以有多个模式。不同模式不共享命名空间。public 模式是在创建数据库之后就 会默认创建的,每个⽤⼾都有权限在这个 schema 创建对象,如果不指定 schema 那么就会默认创建到这⾥。0 码力 | 206 页 | 5.35 MB | 1 年前3
 Greenplum 分布式数据库内核揭秘种数据分布策略: l 哈希分布 (Hash Distribution) l 随机分布 (Randomly Distribution) l 复制分布 (Replicated Distribution) 数据分布策略 Confidential │ ©2021 VMware, Inc. 10 哈希分布是分布式数据库最为常用的数据分布方式。根据用户自定义的分布键计算哈希值,然后将 哈希结果映射到某个 Segment Segment 上。在 Greenplum 6 中,默认采用一致性哈希(Jump Consistent Hash)分布策略。 哈希分布 当增加一个新的节点时,需要对原有数据进行重新映射。一致性哈希则保证了在重新映射的过程追 中,tuple 要么保留在原有节点中,要么迁移至新的节点中,从而实现最小数据迁移。 Confidential │ ©2021 VMware, Inc. 11 随机分布则 随机分布则采用随机的方式将数据存储到不同的节点。当不确定一张表的哈希分布键,或者是不存 在合理的避免数据倾斜的分布键时,即可采用随机分布的方式。 随机分布与复制分布 复制分布则表示整张表在每个节点上都有一份完整的拷贝,假设我们有 100 个节点,复制表则会将 数据保存 100 份。复制表可避免生成分布式查询计划,而是生成本地计划,从而避免数据在集群的 不同节点间移动。 Confidential │ ©20210 码力 | 31 页 | 3.95 MB | 1 年前3 Greenplum 分布式数据库内核揭秘种数据分布策略: l 哈希分布 (Hash Distribution) l 随机分布 (Randomly Distribution) l 复制分布 (Replicated Distribution) 数据分布策略 Confidential │ ©2021 VMware, Inc. 10 哈希分布是分布式数据库最为常用的数据分布方式。根据用户自定义的分布键计算哈希值,然后将 哈希结果映射到某个 Segment Segment 上。在 Greenplum 6 中,默认采用一致性哈希(Jump Consistent Hash)分布策略。 哈希分布 当增加一个新的节点时,需要对原有数据进行重新映射。一致性哈希则保证了在重新映射的过程追 中,tuple 要么保留在原有节点中,要么迁移至新的节点中,从而实现最小数据迁移。 Confidential │ ©2021 VMware, Inc. 11 随机分布则 随机分布则采用随机的方式将数据存储到不同的节点。当不确定一张表的哈希分布键,或者是不存 在合理的避免数据倾斜的分布键时,即可采用随机分布的方式。 随机分布与复制分布 复制分布则表示整张表在每个节点上都有一份完整的拷贝,假设我们有 100 个节点,复制表则会将 数据保存 100 份。复制表可避免生成分布式查询计划,而是生成本地计划,从而避免数据在集群的 不同节点间移动。 Confidential │ ©20210 码力 | 31 页 | 3.95 MB | 1 年前3
 Greenplum 排序算法第一阶段初始化TupleSort,通过调用函数tuplesort_begin_common,生成 Tuplesortstate。Tuplesortstate用于描述排序所需的信息 ● 第二阶段插入元组,每次调用函数puttuple_common,会根据当前TupleSort的 状态,选择将元组插入到不同的位置。 ● 第三阶段负责实际的排序逻辑,通过调用函数tuplesort_performsort,实现对已 经存储好的输入元组进行排序。根据当前TupleSort的不同状态,输入元组可能 存储在内存或者文件中,TupleSort会选择使用不同的算法进行排序。 ● 第四阶段负责输出排序后元组,在排序完成之后,每次调用函数 tuplesort_gettuple_common,即可获取排序后的元组。同样,根据当前 TupleSort的不同状态,算法选择不同的方式返回有序元组。 TupleSort 38 TupleSort ● Greenplum的聚集节点使用两种聚集方式:哈希聚集和分组聚集。 ● 分组聚集应用了排序的思想,如果数据基于分组键有序,那么聚集可以拆解为 若干个朴素聚集的组合。 ● SELECT avg(score) FROM student GROUP BY grade; 分组聚集 44 ● Greenplum连接算法包括:嵌套循环连接,哈希连接和归并连接。 ● 归并连接同样应用了排序的思想0 码力 | 52 页 | 2.05 MB | 1 年前3 Greenplum 排序算法第一阶段初始化TupleSort,通过调用函数tuplesort_begin_common,生成 Tuplesortstate。Tuplesortstate用于描述排序所需的信息 ● 第二阶段插入元组,每次调用函数puttuple_common,会根据当前TupleSort的 状态,选择将元组插入到不同的位置。 ● 第三阶段负责实际的排序逻辑,通过调用函数tuplesort_performsort,实现对已 经存储好的输入元组进行排序。根据当前TupleSort的不同状态,输入元组可能 存储在内存或者文件中,TupleSort会选择使用不同的算法进行排序。 ● 第四阶段负责输出排序后元组,在排序完成之后,每次调用函数 tuplesort_gettuple_common,即可获取排序后的元组。同样,根据当前 TupleSort的不同状态,算法选择不同的方式返回有序元组。 TupleSort 38 TupleSort ● Greenplum的聚集节点使用两种聚集方式:哈希聚集和分组聚集。 ● 分组聚集应用了排序的思想,如果数据基于分组键有序,那么聚集可以拆解为 若干个朴素聚集的组合。 ● SELECT avg(score) FROM student GROUP BY grade; 分组聚集 44 ● Greenplum连接算法包括:嵌套循环连接,哈希连接和归并连接。 ● 归并连接同样应用了排序的思想0 码力 | 52 页 | 2.05 MB | 1 年前3
 完全兼容欧拉开源操作系统的 HTAP 数据平台 Greenplum两阶段提交(2PC)。 集群在线扩容 Greenplum 6 实现了不停库在线增加新节点, 期间不会中断正在运行的所有查询;另外采用了 Jump Consistent Hash 的一致性哈希算法, 在数据重分布期间,每个旧节点仅移动出需要移动的数据到新节点上, 得益于创新的分布式死锁检测, 对于大量小表做并行重分布性能提升非常明显。 Greenplum VACUUM 提升 选择自己擅长的工具及利用遗留的知识和技能,特别适合拥有多种技能的团队。 利用容器实现安全分析 PL/Container 扩展是一个接口,允许 Greenplum 数据库与 Docker 容器交互,以在容器中执行用户定义函数 (UDF),这样方便数据科学家可以在不需要 DBA 帮助的情况自由使用数据分析,同时大大提高了安全性,Docker 容器确保用户代码无法访问源主机的文件系统。此外,容器启动时网络访问受限,无法连接回 IS 程序包是 PostgreSQL 的空间数据库扩展,可让地 理信息系统 (GIS) 对象存储在数据库中。Greenplum PostGIS 扩展包括支持使用基于 GiST 的 R 树空间索引和函数分 析和处理 GIS 对象。 完全兼容欧拉开源操作系统的 HTAP 数据平台 Greenplum0 码力 | 17 页 | 2.04 MB | 1 年前3 完全兼容欧拉开源操作系统的 HTAP 数据平台 Greenplum两阶段提交(2PC)。 集群在线扩容 Greenplum 6 实现了不停库在线增加新节点, 期间不会中断正在运行的所有查询;另外采用了 Jump Consistent Hash 的一致性哈希算法, 在数据重分布期间,每个旧节点仅移动出需要移动的数据到新节点上, 得益于创新的分布式死锁检测, 对于大量小表做并行重分布性能提升非常明显。 Greenplum VACUUM 提升 选择自己擅长的工具及利用遗留的知识和技能,特别适合拥有多种技能的团队。 利用容器实现安全分析 PL/Container 扩展是一个接口,允许 Greenplum 数据库与 Docker 容器交互,以在容器中执行用户定义函数 (UDF),这样方便数据科学家可以在不需要 DBA 帮助的情况自由使用数据分析,同时大大提高了安全性,Docker 容器确保用户代码无法访问源主机的文件系统。此外,容器启动时网络访问受限,无法连接回 IS 程序包是 PostgreSQL 的空间数据库扩展,可让地 理信息系统 (GIS) 对象存储在数据库中。Greenplum PostGIS 扩展包括支持使用基于 GiST 的 R 树空间索引和函数分 析和处理 GIS 对象。 完全兼容欧拉开源操作系统的 HTAP 数据平台 Greenplum0 码力 | 17 页 | 2.04 MB | 1 年前3
 Greenplum 6新特性:
在线扩容工具GPexpand剖析6中因为全局死锁检测的引入可以对heap表做并行更新 改进与实现 • 扩容期间对查询的影响 – 新增节点阶段无法修改catalog – 对于正在重分布的表的读写访问均会被阻塞 – 对于分布状态不相同的哈希分布表的Join无法做优化 Q&A Thank you0 码力 | 37 页 | 1.12 MB | 1 年前3 Greenplum 6新特性:
在线扩容工具GPexpand剖析6中因为全局死锁检测的引入可以对heap表做并行更新 改进与实现 • 扩容期间对查询的影响 – 新增节点阶段无法修改catalog – 对于正在重分布的表的读写访问均会被阻塞 – 对于分布状态不相同的哈希分布表的Join无法做优化 Q&A Thank you0 码力 | 37 页 | 1.12 MB | 1 年前3
 Greenplum数据库架构分析及5.x新功能分享Segment 3A Segment 3B Segment 3C Segment 3D 10 Pivotal Confidential–Inter nal Use Only 多级分区存储 • 哈希Distribution:数据均 匀的分布到各个数据节点 • 范围分区: 数据节点内部, 根据多种规则分区,降低扫 描量 数据集 Segment 1A Segment 1C Segment 1D0 码力 | 44 页 | 8.35 MB | 1 年前3 Greenplum数据库架构分析及5.x新功能分享Segment 3A Segment 3B Segment 3C Segment 3D 10 Pivotal Confidential–Inter nal Use Only 多级分区存储 • 哈希Distribution:数据均 匀的分布到各个数据节点 • 范围分区: 数据节点内部, 根据多种规则分区,降低扫 描量 数据集 Segment 1A Segment 1C Segment 1D0 码力 | 44 页 | 8.35 MB | 1 年前3
 Greenplum Database 管理员指南 6.2.1..................... - 221 - 使用函数和运算符 .......................................................................................................... - 223 - 在 GP 中使用函数 ................................. ....................... - 223 - 自定义函数 .............................................................................................................. - 225 - 内置函数和运算符 ................................ ..................... - 226 - 开窗函数 .................................................................................................................. - 228 - 高级聚合函数 .................................0 码力 | 416 页 | 6.08 MB | 1 年前3 Greenplum Database 管理员指南 6.2.1..................... - 221 - 使用函数和运算符 .......................................................................................................... - 223 - 在 GP 中使用函数 ................................. ....................... - 223 - 自定义函数 .............................................................................................................. - 225 - 内置函数和运算符 ................................ ..................... - 226 - 开窗函数 .................................................................................................................. - 228 - 高级聚合函数 .................................0 码力 | 416 页 | 6.08 MB | 1 年前3
 Greenplum 精粹文集4 16-11-22 下午3:38 Greenplum 精粹文集 5 1) PG 有非常强大 SQL 支持能力和非常丰富的统计函数和统计语法 支持,除对 ANSI SQL 完全支持外,还支持比如分析函数(SQL2003 OLAP window 函数),还可以用多种语言来写存储过程,对于 Madlib、R 的支持也很好。这一点上 MYSQL 就差的很远,很多分 析功能都不支持,而 Greenplum 下的代码与 Greenplum 的 include 头文件编译后,将动态 so 库文件部署到所有节点就可进行测 试使用了。有些模块还是非常好用的,例如:oraface,基本上集成了 Oracle 常用的函数到 Greenplum 中,曾经在一次 PoC 测试中,用户 提供的 22 条 Oracle SQL 语句,不做任何改动就能运行在 Greenplum 上。 最 后, 需 要 Postgresql 的良好扩展性(这里是 extension,不 是 scalability),Greenplum 可以采用各种开发语言来扩展用户自定 义函数(UDF)(我个人是 Python 和 C 的 fans,后续章节与大家分享)。 这些自定义函数部署到 Greenplum 后可用充分享受到实例级别的并行 性能优势,我们强烈建议用户将库外的处理逻辑,部署到用 MPP 数 据库的 UDF 这种 In-Database0 码力 | 64 页 | 2.73 MB | 1 年前3 Greenplum 精粹文集4 16-11-22 下午3:38 Greenplum 精粹文集 5 1) PG 有非常强大 SQL 支持能力和非常丰富的统计函数和统计语法 支持,除对 ANSI SQL 完全支持外,还支持比如分析函数(SQL2003 OLAP window 函数),还可以用多种语言来写存储过程,对于 Madlib、R 的支持也很好。这一点上 MYSQL 就差的很远,很多分 析功能都不支持,而 Greenplum 下的代码与 Greenplum 的 include 头文件编译后,将动态 so 库文件部署到所有节点就可进行测 试使用了。有些模块还是非常好用的,例如:oraface,基本上集成了 Oracle 常用的函数到 Greenplum 中,曾经在一次 PoC 测试中,用户 提供的 22 条 Oracle SQL 语句,不做任何改动就能运行在 Greenplum 上。 最 后, 需 要 Postgresql 的良好扩展性(这里是 extension,不 是 scalability),Greenplum 可以采用各种开发语言来扩展用户自定 义函数(UDF)(我个人是 Python 和 C 的 fans,后续章节与大家分享)。 这些自定义函数部署到 Greenplum 后可用充分享受到实例级别的并行 性能优势,我们强烈建议用户将库外的处理逻辑,部署到用 MPP 数 据库的 UDF 这种 In-Database0 码力 | 64 页 | 2.73 MB | 1 年前3
 Greenplum 6: 混合负载的理想数据平台are well-showcased 12 Pivotal Confidential–Internal Use Only 卓越的OLAP特性 列式存储 分区、压缩 高级特性 递归查询、窗口函数 集成分析 多格式、多语言 Madlib: 机器学习 数据库内并行模型训练和预测、分类 ORCA 复杂查询优化器 成熟稳定 完备生态、支撑核心生产系统 13 Pivotal Confidential–Internal total_quantity FROM included_parts GROUP BY sub_part 16 Pivotal Confidential–Internal Use Only 窗口函数 表‘SALES’ 表‘SALES’ ■ 计算移动平均值或各种时间 间隔的总和 ■ 分组内重置聚合和排序 SELECT last_name, salary, department data table ENDWHILE 模型存储过程 … 广播 Segment 2 Segment n … Transition 函数 操作一小批数据并更新 模型状态 1 Merge 函数 2 Final函数 3 Segment 1 19 Madlib: PageRank性能 Greenplum集群: ● 1 master ● 4*6 segment0 码力 | 52 页 | 4.48 MB | 1 年前3 Greenplum 6: 混合负载的理想数据平台are well-showcased 12 Pivotal Confidential–Internal Use Only 卓越的OLAP特性 列式存储 分区、压缩 高级特性 递归查询、窗口函数 集成分析 多格式、多语言 Madlib: 机器学习 数据库内并行模型训练和预测、分类 ORCA 复杂查询优化器 成熟稳定 完备生态、支撑核心生产系统 13 Pivotal Confidential–Internal total_quantity FROM included_parts GROUP BY sub_part 16 Pivotal Confidential–Internal Use Only 窗口函数 表‘SALES’ 表‘SALES’ ■ 计算移动平均值或各种时间 间隔的总和 ■ 分组内重置聚合和排序 SELECT last_name, salary, department data table ENDWHILE 模型存储过程 … 广播 Segment 2 Segment n … Transition 函数 操作一小批数据并更新 模型状态 1 Merge 函数 2 Final函数 3 Segment 1 19 Madlib: PageRank性能 Greenplum集群: ● 1 master ● 4*6 segment0 码力 | 52 页 | 4.48 MB | 1 年前3
 Greenplum 编译安装和调试gpinitsystem 是Bash脚本工具,有些时候它的报错信息很不清楚。这个 时候可以 ○ 使用 -D 选项 ○ gp_bash_functions.sh 是内部一个被频繁调用执行系统命令的函数,可以通过 set -x 可以打印出所有执行的命令的详细信息。对调试 hang 问题很有效。 ● 在合适的代码处启用 Python 调试器,如果不知道什么地方合适,则在入口处。 3. Greenplum ExecutorStart (lldb) b ExecutorRun (lldb) b ExecProcNode (lldb) c (lldb) c (lldb) c (进入 ExecProcNode 函数) * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 4.1 7.1 frame #0: 0x000000010ca50d9c 0x0000000000000000 可见 master 上的 QD在执行聚集操作,对应的函数是 result = ExecAgg((AggState *) node); (lldb) c Greenplum 会再次断点在 ExecProcNode, 这次的 node 类型是 T_MotionState, 执行 ExecMotion() 函数为 ExecAgg 获得下一个 tuple。 ExecMotion()0 码力 | 15 页 | 2.07 MB | 1 年前3 Greenplum 编译安装和调试gpinitsystem 是Bash脚本工具,有些时候它的报错信息很不清楚。这个 时候可以 ○ 使用 -D 选项 ○ gp_bash_functions.sh 是内部一个被频繁调用执行系统命令的函数,可以通过 set -x 可以打印出所有执行的命令的详细信息。对调试 hang 问题很有效。 ● 在合适的代码处启用 Python 调试器,如果不知道什么地方合适,则在入口处。 3. Greenplum ExecutorStart (lldb) b ExecutorRun (lldb) b ExecProcNode (lldb) c (lldb) c (lldb) c (进入 ExecProcNode 函数) * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 4.1 7.1 frame #0: 0x000000010ca50d9c 0x0000000000000000 可见 master 上的 QD在执行聚集操作,对应的函数是 result = ExecAgg((AggState *) node); (lldb) c Greenplum 会再次断点在 ExecProcNode, 这次的 node 类型是 T_MotionState, 执行 ExecMotion() 函数为 ExecAgg 获得下一个 tuple。 ExecMotion()0 码力 | 15 页 | 2.07 MB | 1 年前3
共 16 条
- 1
- 2













