greenplum交互分区用于数据增量和数据压缩变更
2014-11-13 23:37
176 查看
greenplum属于MPP数据库的一种,也是建立数据仓库的常用MPP database。greenplum
对于分区表的数据是采用单个表,即分区表是独立的一个逻辑表和物理表,则每个分区有单独的自己的索引等信息,非常适合大数据增量流程的构建。
分区表:
支持rang和list以及两者混合的分区选项,无限制子分区层级数量;rang分区键只能有一个,适用于时间、数字范围的分区,list可以有多个分区键,适用于字符值的分区。使用时间分区的时候建议采用最细粒度的平面分区而不是多层级的分区,平面分区有更佳的查询速度,多级分区有更好的查询计划分析时间。
分区表使用限制,分区键必须包含主键或者唯一键;
RAND范围分区:
partiton by range(date) (start (date '2014-01-01') inclusive end (date '2015-01-01') exclusive,every(interval '1 month'))
LIST列表分区:
partiton by list(region) (partition prtusa values('usa'),partition prtchina values('china'),default prtother other)
分区的选择性,查询计划只能对稳定的比较运算符执行选择性扫描:= < <= > >= <>,不能选择不稳定的函数,比如时间,但是可以对日期选择比较
1、交互分区方式可以替换分区表中的某个分区,典型地,当前分区为非压缩表,可以构建相同数据的压缩表替换掉这个分区。
-1.创建分区转换临时表CREATE TABLE my_schema.for_exchange
with (APPENDONLY=true, COMPRESSLEVEL=9)
as (select * from my_schema.current_partition)
DISTRIBUTED BY (day_id, fst_agc_offc_cd, carr_cd, flt_nbr);
--3.比较数据内容
select 'org',count(*) from my_schema.current_partition group by 1
union
select 'new',count(*) from my_schema.for_exchange group by 1
===============================================================
"new";35375423
"org";35375423
===========================================================
--4.交换分区
alter table my_schema.schl_pnrd_daily exchange partition month201303 with table my_schema.for_exchange
--5.检验交换无问题
select 'org',count(*) from my_schema.current_partition group by 1
union
select 'new',count(*) from my_schema.for_exchange group by 1
"new";35375423
"org";35375423
-- 6.删除交换出去的分区
drop table my_schema.for_exchange
2、增量数据更新
CREATE TABLE dw1.t_m_user_ugc_playvideo_details(
f_platform INTEGER,
f_uid CHARACTER VARYING,
f_day INTEGER,
f_hour INTEGER,
f_vid BIGINT,
f_catecode INTEGER,
f_userid CHARACTER VARYING,
f_videolength BIGINT,
f_site SMALLINT,
f_speed INTEGER,
f_suspend INTEGER,
f_backward INTEGER,
f_slide INTEGER,
f_playtime INTEGER
)
DISTRIBUTED BY (f_uid) PARTITION BY LIST (f_day)(
PARTITION p20141109 VALUES (20141109),
PARTITION p20141110 VALUES (20141110)
);
CREATE TABLE tempschema.t_m_user_ugc_playvideo_details
(
f_platform INTEGER,
f_uid CHARACTER VARYING,
f_day INTEGER,
f_hour INTEGER,
f_vid BIGINT,
f_catecode INTEGER,
f_userid CHARACTER VARYING,
f_videolength BIGINT,
f_site SMALLINT,
f_speed INTEGER,
f_suspend INTEGER,
f_backward INTEGER,
f_slide INTEGER,
f_playtime INTEGER
)
DISTRIBUTED BY (f_uid);
alter table dw1.t_m_user_ugc_playvideo_details
add partition p20141109 VALUES(20141109);
alter table dw1.t_m_user_ugc_playvideo_details drop partition if exists 20141109;
增量数据放到一个临时表里面:tempschema.t_m_user_ugc_playvideo_details,用该表的数据提供目的表:dw1.t_m_user_ugc_playvideo_detailsde 的分区如p20141109
alter table dw1.t_m_user_ugc_playvideo_details exchange partition p20141109
with table tempschema.t_m_user_ugc_playvideo_details ;
相关文章推荐
- Greenplum 清理垃圾、修改存储模式(行列变换) 平滑方法 - 交换数据、交互分区
- linux下自动化格式分区方法(非交互,可以用于shell脚本)
- jquery收集页面参数生成xml,用于与server做数据交互
- 中心服务器和分区服务器的数据交互
- 练习 2015-08-15 管道流 用于线程之间交互数据
- Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件。一般来讲, view负责把数据展示给用户,也处理用户的输入。为了获得更多的灵性性,交互通过d
- Cytoscape.js – 用于数据分析和可视化的交互图形库
- 在.net中轻松掌握Windows窗体间的数据交互
- 在.net中轻松掌握Windows窗体间的数据交互
- 将 SqlDataReader 类用于快速只进数据游标
- 用于弹出ModalDialog进行数据选择的控件
- 在.net中轻松掌握Windows窗体间的数据交互
- VFP与Flash之间的相互控制--数据交互
- 用.NET完成Lotus与异质系统的数据交互
- 将 SqlDataReader 类用于快速只进数据游标
- 用于显示分层数据的嵌套网格(from msdn)
- Jsp中使用xmlhttp进行数据交互~
- 客户机与服务器的数据交互
- 在.net中轻松掌握Windows窗体间的数据交互(二)
- 用于弹出ModalDialog进行数据选择的控件