前言:之前一直都是用hive处理数据,因为项目变动要改为oracle+kettle
之前写的SQL在oracle上会有很多报错比如oracle 没有split 函数等
需求1:计算某个表每个月多少条占用多少空间
直接运行一下语句,该语句会算出每个表占用多少存储空间
select table_name,blocks*8192/1024/1024 size_m from user_tables
这里的blocks大小为8byte所以乘以8192
https://blog.csdn.net/haiross/article/details/39026433
计算行数
select table_name,num_rows from user_tables
这样计算的行数并不是精确值只是大概
2.oracle实现 split的用法
‘[^_]+’ 这里只用替换下划线为分隔符就可以了,后面两位参数,1表示从字符串的第一位开始截取,后面的x.n表示截取第几个分割符之间的数据
3.oracle 实现行列转换
主要函数 unpivot,pivot
举例列转行
select
b
,a
from t
unpivot(a for b in(c,e,d))
a,b (自定义字段名),cde 为 原列名
4.oracle 拼接字符串用 双竖线 || 就可以
第二种方式 用 concat(‘abc’,‘123’) 跟hive不同的是只支持两个参数,所以当需要加分割符的时候 concat(‘abc’,’_123’) 把分隔符和其中一个字符串相连接
5.因为业务需要,不同的层不同源的数据采用不同的库名,oracle只有一个库,但是可以创建多个实例,每个实例一个账号,然后给需要互通的层之间授权即可 例如ods层的表只用dw层可以访问即可
授权语句:GRANT SELECT ON ODS.TABLE TO DW;
6.DML语言,比如update,delete,insert等修改表中数据的需要commit;
7.ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
这条语句表示统计从第一条记录开始到当前行的所有记录,在计算累计值时很方便 详细用法可以看看这个博客http://blog.itpub.net/22207394/viewspace-1154123/