===========================================
对象名称可以长到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_tableFOR COLUMN SSNCASEWHEN ENABLED_ROLE('manager') THEN SSNWHEN ENABLED_ROLE('operator') THEN SUBSTR(SSN, 8, 4)ELSE NULLEND
ENABLE;

===========================================
时间序列语法
===========================================
在很多时候, 我们需要处理时序数据, 比如初始化日期维度表, 比如检查每分钟的数据量, 比如补跑堆积的批次, 可以用时序语句构建一个批次的循环记录集.

SELECT slice_time1 FROM
(select '20171110'::timestamp date_value from dual  union all select '20171120'::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中也可以使用, 还有很多函数都差不多.

转载于:https://www.cnblogs.com/harrychinese/p/vertica_dw_building.html

Vertica系列:从一些细节看Vertica为什么是一个优秀的数据仓库平台相关推荐

  1. Vertica系列: Vertica DB连接负载均衡

    背景 谈到负载均衡, 对于数据库集群需要区分几个概念: 运算的负载均衡, Vertica 本身是 MPP 数据库, SQL 操作自动会利用多台机器来加快处理速度. 数据库连接的负载均衡, Vertic ...

  2. 一个计算机专业学生几年的编程经验汇总 (该系列一共 11 篇,看完之后,java 基础绝对有不小的提升!)

    Java 杂谈(一) 想来学习 Java 也有两个年头了,永远不敢说多么精通,但也想谈谈自己的感受,写给 软件学院的同仁们,帮助大家在技术的道路上少一点弯路.说得伟大一点是希望大家为软件 学院争气,其 ...

  3. C++两个函数可以相互递归吗_[算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进

    [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...

  4. [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进

    [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...

  5. 作为90后迈向成为一个优秀的男人系列之二

    八.时刻保持你的微笑,让礼貌成为你的名片 男人到了二十几岁后,要时刻保持你的微笑.笑脸迎人,说明你是一个善良的人,所有的人都愿意与善良的人打交道.不要把苦闷写在 你的脸上,这样只会使别人远离你.你是什 ...

  6. YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(中)

    YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(上) YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(中) YOLO系列(v1~v3)的学习及Y ...

  7. YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(上)

    YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(上) YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(中) YOLO系列(v1~v3)的学习及Y ...

  8. 万字报告!一文看懂全球车厂的技术家底模块化平台

    来源:智东西 摘要:介绍模块化平台以及该平台对车企的重要意义,详解车企模块化平台布局. 汽车的研发制造方式经历了手工作坊式到标准化流水线再到平台化,目前主流车企纷纷采取模块化平台方式.汽车模块化平台研 ...

  9. [转载]什么叫资源整合? 看懂了多赚一个亿!

    [转载]什么叫资源整合? 看懂了多赚一个亿! 蛮学习一下 原文地址:什么叫资源整合? 看懂了多赚一个亿!作者:餐饮军师 如果你现在只有1家店,或2家,或3家店,而且做得还不怎么样,你是断然不会去想如何 ...

最新文章

  1. 如何将一个彩色图像转换成黑白图像
  2. Can't connect to local MySQL Server throught socket '/var/run/mysqld/mysqld.sock'(2)
  3. 防火墙工作原理—Vecloud微云
  4. java设计模式之设计原则②依赖倒置原则
  5. python处理excel的方法有哪些_python简单处理excel方法
  6. DNS递归查询与迭代查询
  7. thinkPHP的Excel插件
  8. 祝每位读者在新的一年里虎虎有生气·事事皆如意!
  9. nginx websocket 代理
  10. mysql中表结构是什么_查询MySQL数据库中表结构
  11. 请别相信她成本多少?个人参与有什么优势?安全可靠吗?
  12. 【JAVA】Map和Set
  13. frechet distance用来衡量两个曲线相似度
  14. 【论文笔记1】von Mises-Fisher Mixture Model-based Deep learning: Application to Face Verification
  15. Web Components使用(一)
  16. 纽约的雪-我的西行漫记
  17. 文末送书!看懂这本书,程序员可以自信地说“我要打十个”!
  18. 求助Fatal error: Class 'think\App' not found in C:\``thinkphp\start.php on line 19Fatal error: Class '
  19. XPS测试原理及样品要求
  20. 超级lrc播放器——全平台上的lrc歌词播放器

热门文章

  1. 学习Python要多久 要如何学习
  2. 【TensorFlow】TensorFlow函数精讲之value()
  3. 超棒!纯Rust编写的机器学习框架,速度堪比PyTorch
  4. 论文绘图神器来了:哈佛博士后开源一行代码绘制不同期刊格式图表
  5. CVPR2020 | 虚拟举办,这29个教程Tutorial 不容错过!
  6. 深度学习(三十九)可视化理解卷积神经网络(2.0)
  7. mysql集群参数讲解_Mysql集群讲解(一)
  8. as3 与 java_每天学一点Flash(48) As3.0 与 java 通信(1)
  9. SPP-net论文笔记
  10. 2016年系统集成项目管理工程师最新考试说明