Vertica系列:从一些细节看Vertica为什么是一个优秀的数据仓库平台
===========================================
对象名称可以长到128字符
===========================================
1. Vertica 中字段名/表名/视图名/projection名/schema名, 名称最长达128个字节, 所以我们不用费尽心思缩写表名和字段名.
2. Vertica中的名称在catalog系统表能区分出大小写, 但使用的时候是大小写不铭感的.
在Oracle中, 因为表名不能超过30个字符, 所以单词必须要用缩写, 缩写单词之间用下划线分割, 以便提升辨识度. 但放到数据仓库场景中, 因为数据仓库不像单一业务系统, 它一定会包含很多种业务的数据, 用30个字符起表名其实是很难的, 经常碰到用了下划线名字就超过30个字符, 不用下划线可读性又不好. Vertica没这个问题.
推荐的表名的命名规范为:
产品线_表类型_业务名_[特殊后缀]
产品线: 可以理解为产品线或BU
表类型有: Dim/Fact/Agg/Cfg/Stg/Med
特殊后缀, 一般是Err/Tmp/Bak或Bak_20171231这样, Err是某个表错误数据表, Tmp是临时表, Bak表是备份表(往往需要加上备份日期)
比如: CRM_Fact_UserCall_Tmp
===========================================
字段可设置default值, Default值支持 Sequence和函数
===========================================
1. 每个表都可增加一个 DWH_ID 代理主键字段, 可以使用sequence作为每行的unique字段, 而且是递增的, 这将对于后续的数据清洗非常有帮助. 另外该字段也非常适合作为分段字段.
2. 每个表都可增加一个 DWH_ITime/DWH_UTime 时间字段, 可以使用 sysdate() 作为其缺省值
3. 因为 null 取值的SQL查询写法比较特殊, 不能用等于或不等于比较符, 为了简化后期的分析的难度, 字段如果能设置not null就尽量设置, 配合default约束.
create sequence CRM.CRM_Fact_UserCall_Seq;
create table CRM.CRM_Fact_UserCall(
UserId varchar(50)
,CallType varchar(30) NOT NULL DEFAULT 'OnSite'
,DWH_ID numeric(38,0) DEFAULT nextval('CRM.CRM_Fact_UserCall_Seq')
,DWH_ITime timestamp DEFAULT sysdate()
,DWH_UTime timestamp DEFAULT sysdate()
)
order by UserId
SEGMENTED BY HASH(DWH_ID) ALL NODES
;
===========================================
Vertica 强大的数据清洗能力
===========================================
实际项目中, 会遇到各类数据问题, 简单的问题可以用 like /ilike /case when 处理, 但复杂一些的问题最好是用正则表达式. 下面是常用的几个正则函数:
regexp_substr()
regexp_not_like()
regexp_like()
regexp_replace()
===========================================
简单够用的事务
===========================================
在ETL实现过程中, 经常会使用Delete+Insert的方式来更新数据, 如果维度表用了这种更新方式, 一旦事实表跑批正好是在维度表Delete和Insert动作之间, 就会出现数据质量问题. Vertica 支持事务操作.
不同的客户端工具, 有着不同的缺省的提交模式:
1. vsql 默认是关闭自动事务提交的.
2. 采用vertica jdbc/odbc连接的客户端工具, 默认开启自动事务提交的.
我们可以也可以手工修改事务提交模式:
SET SESSION AUTOCOMMIT TO OFF;
SET SESSION AUTOCOMMIT TO ON;
begin transaction ; --*甚至begin transaction都可以省略
....
end; -- 这里的 end 也可以用 commit 代替; -- 在关闭 AUTOCOMMIT 下, 回滚事务的方法
begin transaction --*甚至begin transaction都可以省略
....
rollback;
===========================================
表和字段支持comment
===========================================
SQL代码加上必要的comment, 对于系统维护帮助很大. 非常推荐为所有的视图级/表级/字段级加上comment, 这对于大型数仓运维意义重大.
COMMENT ON COLUMN customer_dimension_vmart_node01.customer_name IS 'Last name only';
COMMENT ON TABLE promotion_dimension IS '2011 Promotions';
COMMENT ON VIEW curr_month_ship IS 'Shipping data for the current month';
===========================================
临时表
===========================================
在ETL过程中经常会用到临时表, 尤其是Vertica的local 临时表更是经常使用, 可以加上Order by 子句和 segment 子句.
drop table if exists Tmp_Table;
create local temp table Tmp_Table
on commit preserve rows
as /*+direct*/
select * from table_a
order by uid
segmented by hash(uid) all nodes ksafe 1;
===========================================
字段级的 mask 控制机制.
===========================================
数据安全是数仓中重要的一环, 敏感数据在使用的时候往往需要脱敏, Vertica 提供能字段级的mask机制.
CREATE ACCESS POLICY ON customers_table
FOR COLUMN SSN
CASE
WHEN ENABLED_ROLE('manager') THEN SSN
WHEN ENABLED_ROLE('operator') THEN SUBSTR(SSN, 8, 4)
ELSE NULL
END
ENABLE;
===========================================
时间序列语法
===========================================
在很多时候, 我们需要处理时序数据, 比如初始化日期维度表, 比如检查每分钟的数据量, 比如补跑堆积的批次, 可以用时序语句构建一个批次的循环记录集.
SELECT slice_time1 FROM
(select ''::timestamp date_value from dual
union all
select ''::timestamp date_value from dual
) t
TIMESERIES slice_time1 AS '1 days' OVER(ORDER BY date_value)
order by slice_time1 asc
===========================================
和Oracle的兼容性
===========================================
Vertica 在很多时候都尽量和Oracle保持一致, 比如普通的一个Oracle建表语句, 直接可以在Vertica上执行, 再比如dual伪表在Vertica中也可以使用, 还有很多函数都差不多.
Vertica系列:从一些细节看Vertica为什么是一个优秀的数据仓库平台的更多相关文章
- Vertica系列:Vertica和Hadoop的互操作性
Vertica 8和 Hadoop 集群的互操作性已经很不错的, 但这块肯定是Vertica研发的重点, 将来可能还有较大的变动. Vertica 集群 和 Hadoop 集群的两种布局方式 集群布局 ...
- Vertica系列: Vertica DB连接负载均衡
背景 谈到负载均衡, 对于数据库集群需要区分几个概念: 运算的负载均衡, Vertica 本身是 MPP 数据库, SQL 操作自动会利用多台机器来加快处理速度. 数据库连接的负载均衡, Vertic ...
- JavaScript系列文章:不能不看的数据类型检测
由于JavaScript是门松散类型语言,定义变量时没有类型标识信息,并且在运行期可以动态更改其类型,所以一个变量的类型在运行期是不可预测的,因此,数据类型检测在开发当中就成为一个必须要了解和掌握的知 ...
- 现代前端库开发指南系列(二):使用 webpack 构建一个库
前言 在前文中,我说过本系列文章的受众是在现代前端体系下能够熟练编写业务代码的同学,因此本文在介绍 webpack 配置时,仅提及构建一个库所特有的配置,其余配置请参考 webpack 官方文档. 输 ...
- SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表
SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 2013-10-09 23:09 by BI Wor ...
- 值得一看!2018年最优秀的9个Android Material Design Apps!
今年4月,谷歌Gmail推出了全新的设计外观,全新的配色方案,更多的空白区域和精致的图标.也带来了Material Design 的一些改变 – Material Theming (材料主题),旨在自 ...
- Vertica系列: 自动生成Identity 字段值的方法
参考 https://thisdataguy.com/2015/01/05/vertica-some-uses-of-sequences/ 在 vertica 中有三种定义 identity 字段的方 ...
- Vertica系列:性能优化
Vertica 性能非常好, 平时基本不会碰到性能问题, 即使碰到, 优化也很容易, 而且效果往往会很好. ======================优化工具==================== ...
- vertica系列:数据的导入导出
本文仅涉及 Vertica 导入导出本地文件, 以及两个 Vertica 集群相互导出, 不涉及 Vertica 和 hdfs/Hive 导入导出和互操作. copy 数据导入工具 copy 命令无疑 ...
随机推荐
- [JSOI2008]Blue Mary的职员分配
由于Blue Mary呕心沥血的管理,Blue Mary的网络公司蒸蒸日上.现在一共拥有了n名职员,可惜没有任何的金钱和声誉.平均每名每天职员都可以给公司带来x单位金钱或者y单位声誉(名利不能双全). ...
- Permissions 0755 for '/home/lonecloud/.ssh/id_rsa' are too open.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! ...
- CodeForces - 95B(DFS)
题目链接:http://codeforces.com/problemset/problem/95/B 题目大意:给你一个正整数n (1 ≤ n ≤ 10100000),求不大小于它的超级幸运数字(超级 ...
- return break continue的区别 js java
return :结束函数的执行, return后面的所有代码都不再执行 break: 结束循环, 执行循环后面的代码(如果有的话) continue: 结束本次循环, 循环变量继续递增或递减, 开始下 ...
- mui 对话框 点击按钮不关闭对话框的办法
目前版本的 mui.js 点击对话框的按钮只能关闭对话框 做如下修改 点击按钮后return false 即可
- Jupyter Notebook添加Ruby支持
安装步骤 gem install iruby iruby register --force 参考资料:http://devopspy.com/linux/ruby-kernel-jupyter-not ...
- [BJOI2017]开车
[BJOI2017]开车 直接做要用栈 修改?难以直接维护 统计边的贡献! len*abs(pre)pre表示前缀car-stop 修改时候,整个区间的pre+1或者-1 分块,块内对pre排序并打标 ...
- NLog类库使用探索——编程配置
以编程的方式配置,这是我项目中的,我都不知道为什么使用编程.直接配置不很好吗,估计他也没有研究.直接上步骤和代码: 创建一个LoggingConfiguration对象,用来保存配置信息 至少创建一个 ...
- qrcode.js 动态生成二维码
用qrcode.js动态生成二维码图片非常简单,只需要引入qrcode.js即可使用,而且可以自定义图片大小.背景色等信息. 1.jsp代码---页面头部引入qrcode.js,jquery文件可选 ...
- vue,elementUI,less,axios,qs的安装及打包
目前一直使用vue去搭建项目,我个人习惯用Visual Studio Code编辑工具,所以下面的所有操作都是在这个编辑器中 在安装的时候,为了避免安装过程中出错,你最好安装了淘宝镜像(官网:http ...