Greenplum
代元培
听风看雨 见贤思齐 抚霜踏雪 青云直上
展开
-
Greenplum广播与重分布原理
Greenplum 的执行计划和 PostgreSQL 基本一致,但是在表关联的时候还是会有区别,因为 greenplum 中数据不同于 pg,greenplum 是将数据分布在多个节点上。所以当两表关联时关联列又不是表的分布键时就会出现表的广播和重分布。本文将详细介绍广播和重分布的区别及场景。原创 2022-09-09 15:55:04 · 1020 阅读 · 1 评论 -
PostgreSQL列存与行存
PostgreSQL列存与行存原创 2022-04-21 15:50:49 · 4741 阅读 · 0 评论 -
Greenplum Vacuum表的作用
vacuum:该选项主要是清理数据库表中的垃圾空间,该动作会消耗系统一定的资源,引起系统的IO上升,对有一定系统瓶颈来说容易造成堵塞,严重会把GP宕掉,造成数据库瞬断。一般不建议vacuum库中全表,通常做法是vacuum指定的表。原创 2022-01-18 14:23:59 · 435 阅读 · 0 评论 -
PostgreSQL除法注意事项
-- 在PG里如果想做除法并想保留小数,用上面的方法却行不通,因为"/" 运算结果为取整,并且会截掉小数部分。select 1/4; -- 0select round(1::numeric/4::numeric,2); -- 0.25select round(cast(1 as numeric )/cast(4 as numeric),2); -- 0.25-- cast函数用法SELECT substr(CAST(1234 AS text),3,1); -- 3...原创 2021-07-09 16:35:52 · 1750 阅读 · 0 评论 -
PostgreSQL变更表Owner
alter table xxx owner to new_owner;原创 2021-07-08 11:19:03 · 2351 阅读 · 0 评论 -
PostgreSQL用户角色权限
在PostgreSQL中,所有内容都是围绕role概念构建的。在macOS上首次安装PostgreSQL时,该脚本使用您的macOS用户名创建了一个角色,并授予了权限列表。PostgreSQL中没有用户,只有role。通过在终端中运行psql postgres,您将使用您的macOS用户名自动登录到PostgreSQL,从而访问创建的角色。就我而言,创建了flaviocopes角色,可以使用\du命令看到它:看到? 默认情况下,我具有以下角色属性: Superuser...原创 2021-07-06 14:29:42 · 624 阅读 · 0 评论 -
Vacuum和Vacuum Full的处理过程
对于数据库系统的并发控制,PostgreSQL采用MVCC(多版本并发控制)进行处理。这种机制有一个缺点,就是随着时间的推移,数据文件中积累的dead tuples会越来越多。怎么去清理这些dead tuples,这个时候就需要vacuum处理。 PostgreSQL系统的vacuum是一个例行性的维护过程,系统也会在启动服务时启动autovacuum守护进程对此进行维护,当然也有vacuum命令可以让用户进行手动执行vacuum操作。除了清理dead tuples,vacuum还有冻结事...原创 2021-07-06 12:03:48 · 2027 阅读 · 1 评论 -
regexp_split_to_table和regexp_split_to_array实例
PostgreSQL数据库提供regexp_split_to_table和regexp_split_to_array两个函数用于分隔字符串成表和数组,在某些场景下使用起来还挺方便的。 举个例子:有这样一张表,维护用户的兴趣,多个兴趣用逗号分隔。-- f_interest 兴趣,多个兴趣逗号分割CREATE TABLE open.t_ttt( f_user_name character varying(20) NOT NULL, f_interest character v原创 2020-10-14 16:14:50 · 1461 阅读 · 0 评论 -
即时分析师认证考试题
-- gp考试,执行角色选择:RCC组,集群选择:etron_exam,数据库选择:postgres-- 如果是测试sql,为了速度,可以使用limit限制返回的数据量。-- --用户表:-- create table public.user_info(-- user_id bigint,--用户编号-- user_name text,--用户名-- user_info jsonb,--用户详细信息-- --参考: {user_id:"用户编号",user_name:"用户名",provi.原创 2021-04-22 17:04:50 · 168 阅读 · 0 评论 -
sql优化策略——不必要的union
不必要的union(分析sql逻辑),相似的子查询重复union,仅仅为了过滤不同的条件。 影响:表重复冗余扫描多次,执行效率低 优化方法:使用case when改写union 举例:select id,score,'type1' from table_b where type=1union select id,score,'type2' from table_b where type=2union select id,score,'type3' fr...原创 2021-04-13 14:44:52 · 866 阅读 · 0 评论 -
row_number最简单用法示例
-- row_number 最简单用法select f_uid, f_create_time, f_typefrom( select f_uid, f_create_time, f_type, row_number() over (PARTITION BY f_uid order by f_create_time desc) as rn from open.t_test) tmpwhere rn.原创 2021-04-09 16:42:54 · 145 阅读 · 0 评论 -
PostgreSQL创建分区表
# 创建分区主表CREATE TABLE core.t_trans_paymode_info( f_id bigint, f_trans_id character varying(32), f_enabled smallint, f_pay_mode smallint, f_amount bigint, f_fee_amount bigint, f_fee_rate bigint, f_fee_count_type smallint, .原创 2020-09-11 11:48:16 · 736 阅读 · 0 评论 -
SQL删除重复记录
-- 删除f_1,f_2,f_3完全一致重复记录 保留重复记录中f_mt最大的一个create table open.t_ttt( f_1 character varying(128), f_2 character varying(128), f_3 smallint, f_ct timestamp without time zone, f_mt timestamp without time zone) WITH (appendonly=true) DISTRI.原创 2021-03-26 17:58:42 · 72 阅读 · 0 评论 -
json和jsonb类型——PostgreSQL
PostgreSQL支持两种json数据类型:json和jsonb,而两者唯一的区别在于效率,json是对输入的完整拷贝,使用时再去解析,所以它会保留输入的空格,重复键以及顺序等。而jsonb是解析输入后保存的二进制,它在解析时会删除不必要的空格和重复的键,顺序和输入可能也不相同。使用时不用再次解析。两者对重复键的处理都是保留最后一个键值对。效率的差别:json类型存储快,使用慢,jsonb类型存储稍慢,使用较快。注意:键值对的键必须使用双引号从PostgreSQL 9.3开始,json就成了pos原创 2021-03-26 11:38:26 · 1719 阅读 · 0 评论 -
count(*)和count(1)和count(字段)的区别
执行效果上看: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略字段值为NULL的列; count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略字段值为NULL的列; count(列名)只包括列名那一列,在统计结果的时候,会忽略字段值为值为NULL的列(这里的空不是指空字符串""或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。 执行效率上看: 列名为主键,count(列名)会比count(...原创 2021-03-12 10:07:42 · 234 阅读 · 0 评论 -
gp判断表是否存在
# 判断表是否存在 存在返回 1SELECT COUNT(1) as cntFROM pg_class c LEFT JOIN pg_namespace n ON (n.oid = c.relnamespace)WHERE n.nspname = 'open'AND c.relname = 't_daily_bank_data';# 检查某个表是否存在SELECT ...原创 2020-04-16 16:58:33 · 747 阅读 · 0 评论 -
psql给账号加表权限schema权限
-- uc为schema pay_user_rd为账号-- 增加读写权限grant select on uc.t_did_2_uid to pay_user_rd;grant insert on uc.t_did_2_uid to pay_user_rd;grant update on uc.t_did_2_uid to pay_user_rd;grant delete on uc.t_did_2_uid to pay_user_rd;grant truncate on uc.t_did_2_.原创 2021-01-21 17:44:55 · 697 阅读 · 0 评论 -
Greenplum性能优化analyze
为什么需要ANALYZE 首先介绍下RBO和CBO,这是数据库引擎在执行SQL语句时的2种不同的优化策略。 RBO(Rule-Based Optimizer) 基于规则的优化器,就是优化器在优化查询计划的时候,是根据预先设置好的规则进行的,这些规则无法灵活改变。举个例子,索引优先于扫描,这是一个规则,优化器在遇到所有可以利用索引的地方,都不会选择扫描。这在多数情况下是正确的,但也不完全如此: 比如一张个人信息表中性别栏目加上索引,由于性别是只有2个值的枚举类,也就是常说的基数非常转载 2020-10-22 14:17:50 · 1846 阅读 · 0 评论 -
Greenplum中的vacuum
vacuum,该选项主要是清理数据库表中的垃圾空间。 对于delete或update操作造成的实际物理空间没有从所对应的表中移除的话,vacuum操作可以将此磁盘释放出来,所以对那些经常性更新的表很有需要来做下vacuum操作。-- 新建表open.t_ttt(20行数据)select count(1) from open.t_ttt;-- 20select pg_relation_size('open.t_ttt');-- 得到大小是1120Bytesdelete from op原创 2020-10-22 13:45:04 · 1573 阅读 · 0 评论 -
Greenplum分布键选取策略
Greenplum由多个postgres组合而成,因此Greenplum属于分布式数据库,所以在创建数据表的时候需要指定分布键,当然在不指定的时候Greenplum数据库会默认使用使用表的第一个字段作为数据库的分布键。 Greenplum分布策略 (1)hash分布:选择一个列后者多个列作为数据表的分布键,通过hash计算,然后将插入的数据路由到特定的segment上;CREATE TABLE open.t_ttt( f_id INT, f_num INT)dis原创 2020-10-21 11:50:22 · 955 阅读 · 3 评论