===========================================
对象名称可以长到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为什么是一个优秀的数据仓库平台的更多相关文章

  1. Vertica系列:Vertica和Hadoop的互操作性

    Vertica 8和 Hadoop 集群的互操作性已经很不错的, 但这块肯定是Vertica研发的重点, 将来可能还有较大的变动. Vertica 集群 和 Hadoop 集群的两种布局方式 集群布局 ...

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

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

  3. JavaScript系列文章:不能不看的数据类型检测

    由于JavaScript是门松散类型语言,定义变量时没有类型标识信息,并且在运行期可以动态更改其类型,所以一个变量的类型在运行期是不可预测的,因此,数据类型检测在开发当中就成为一个必须要了解和掌握的知 ...

  4. 现代前端库开发指南系列(二):使用 webpack 构建一个库

    前言 在前文中,我说过本系列文章的受众是在现代前端体系下能够熟练编写业务代码的同学,因此本文在介绍 webpack 配置时,仅提及构建一个库所特有的配置,其余配置请参考 webpack 官方文档. 输 ...

  5. SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表

    SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 2013-10-09 23:09 by BI Wor ...

  6. 值得一看!2018年最优秀的9个Android Material Design Apps!

    今年4月,谷歌Gmail推出了全新的设计外观,全新的配色方案,更多的空白区域和精致的图标.也带来了Material Design 的一些改变 – Material Theming (材料主题),旨在自 ...

  7. Vertica系列: 自动生成Identity 字段值的方法

    参考 https://thisdataguy.com/2015/01/05/vertica-some-uses-of-sequences/ 在 vertica 中有三种定义 identity 字段的方 ...

  8. Vertica系列:性能优化

    Vertica 性能非常好, 平时基本不会碰到性能问题, 即使碰到, 优化也很容易, 而且效果往往会很好. ======================优化工具==================== ...

  9. vertica系列:数据的导入导出

    本文仅涉及 Vertica 导入导出本地文件, 以及两个 Vertica 集群相互导出, 不涉及 Vertica 和 hdfs/Hive 导入导出和互操作. copy 数据导入工具 copy 命令无疑 ...

随机推荐

  1. 《Hands-On Machine Learning with Scikit-Learn&TensorFlow》mnist数据集错误及解决方案

    最近在看这本书看到Chapter 3.Classification,是关于mnist数据集的分类,里面有个代码是 from sklearn.datasets import fetch_mldata m ...

  2. docker_macvlan

    目录 macvlan macvlan macvlan的原理是在宿主机物理网卡上虚拟出多个子网卡,通过不同的MAC地址在数据链路层(Data Link Layer)进行网络数据转发的,它是比较新的网络虚 ...

  3. 不裸缩点》。。。POJ2186受欢迎的牛

    不裸缩点>...POJ2186受欢迎的牛 :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: ...

  4. 【洛谷P4318】完全平方数

    题目大意:求第 K 个无平方因子数. 题解:第 k 小/大的问题一般采用二分的方式,通过判定从 1 到当前数中满足某一条件的数有多少个来进行对上下边界的转移. 考虑莫比乌斯函数的定义,根据函数值将整数 ...

  5. Linux命令模拟Http的get或post请求

    Http请求指的是客户端向服务器的请求消息,Http请求主要分为get或post两种,在Linux系统下可以用curl和wget命令来模拟Http的请求. get请求: 1.使用curl命令: cur ...

  6. 系统API执行没效果,可以检查一下是否与 360安全卫士 有关?!

    今天在写一个工具软件,使用到一个系统API: mouse_event() 代码如下: mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,  x2, ...

  7. tomcat发布项目,运行不了

    工作中经常出现项目本来运行得好好的,从SVN上面更新代码后就不行了 这个问题有时候是因为编译不成功,处理步骤如下: 1.clean整个项目,重新编译 2.如果还是不行,则把编译中认为是error的设置 ...

  8. 关于shared_ptr与weak_ptr的使用(good)

    shared_ptr是带引用计数的智能指针,可以说大部分的情形选择用shared_ptr不会出问题.那么weak_ptr是什么,应该怎么用呢? weak_ptr也是智能指针,但是比较弱,感觉没什么用. ...

  9. 数据挖掘的标准流程-CRISP-DM

    1.起源 CRISP-DM (cross-industry standard process for data mining), 即为"跨行业数据挖掘过程标准".此KDD(know ...

  10. HTTP常用头部信息

    下面用例子的形式来记录下常用的一些Http头部信息 Request Header: GET /sample.Jsp HTTP/1.1  //请求行 Host: www.uuid.online/  // ...