OracleSQL 对原本的table更新,如何让VIEW也随之更新?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OracleSQL 对原本的table更新,如何让VIEW也随之更新?相关的知识,希望对你有一定的参考价值。

OracleSQL 对原本的table更新,如何让VIEW也随之更新?
或是,view会随着原有table的更新而更新吗?

会,视图view是根据table建立的,当更新table是,如果涉及视图所在字段,那么视图也会随之更新。
当然如果你说的修改是修改字段名称或者字段长度一类的,改变基表的一些性质的操作,那么视图会失效,需要重新编译一下视图才可以。
参考技术A 历史大学堂 品读书史,历史堂原创出品

oracleSQL 转 SPARKSQL(hiveSql) 及常用优化

背景

数据处理平台从oracle迁移到hadoop平台后,原有的数据处理过程需要改写为sparkSql。由于sparkSql执行环境和数据的不确定,经常有资源竞争导致处理过程意外停止,数据倾斜导致任务执行失败。 为减少出错概率,需要对sparkSql进行规范与优化。

转换

  1. exist 转换 为 left sime join,left sime join不会因为右表有重复而数据增加。
  2. from table1, table2,table3 转为 inner join ,使用join 会更清晰的分辨表连接是否充分,以免笛卡尔积引起集群资源浪费。
  3. decode()转为 case when
  4. 在使用union all 时 ,sql编译出错, 需要指定数据类型如: cast(abe001 as double)
  5. 分清count(columnName)意义 ,尽量使用sum替换count
  6. oracle form前的子查询必须放在join 之后
  7. 时间格式请使用"yyyy-MM-dd HH:mm:ss",YYYY表示当天所在的周的年份可能结果不是想要的,hh是12小时制,在对时间做计算是会出错。
  8. 在对字符串的数字做比较是请转为 int或 double型,如果数据中与非数字字符或导致按字符串的方式比较大小。
  9. sql对 大数 经行字符处理时,注意可以会被转成科学计数法。
    x. 在对字符或时间做处理时,请先使用select 查看处理结果,以免出现不想要的结果。

数据倾斜

数据倾斜报错

通常数据倾斜有以下几种现象:

  1. java.util.concurrent.TimeoutException: Futures timed out after [300 seconds]
  2. spark监控有一个或几个task始终执行不完
  3. 有execute 报 内存溢出
  4. 表连接不足,产生笛卡尔积

优化SQl点

1.检查group by 字段是否全为一个值或空, 从group中移除只用一个值得字段
2. sql使用大表反复关联小表如:

) a
left join (select m.aaa102,m.aaa103 from database.aa11 m where m.aaa100 = ‘AAC004‘) c
on a.AAC004 = c.aaa102
left join (select m.aaa102,m.aaa103 from database.aa11 m where m.aaa100 = ‘AAC011‘) d
on a.aac011 = d.aaa102
left join (select m.aaa102,m.aaa103 from database.aa11 m where m.aaa100 = ‘YAB019‘) e
on a.yab019 = e.aaa102
left join (select m.aaa102,m.aaa103 from database.aa11 m where m.aaa100 = ‘AAB019‘) f
on a.aab019 = f.aaa102
left join (select m.aaa102,m.aaa103 from database.aa11 m where m.aaa100 = ‘YAB003‘) g
on a.aab301 = g.aaa102
left join (select m.aaa102,m.aaa103 from database.aa11 m where m.aaa100 = ‘AAB301‘) h
on a.yac145 = h.aaa102

默认小于150M的表会广播(broacast),如上处理后将不能被广播, 修改为:

) a
left join  database.aa11  c
on a.AAC004 = c.aaa102 and c.aaa100 = ‘AAC004‘
left join database.aa11  d
on a.aac011 = d.aaa102 and d.aaa100 = ‘AAC011‘
left join database.aa11  e
on a.yab019 = e.aaa102 and  e.aaa100 = ‘YAB019‘
left join database.aa11  f
on a.aab019 = f.aaa102 and f.aaa100 = ‘AAB019‘
left join database.aa11 g
on a.aab301 = g.aaa102 and  g.aaa100 = ‘YAB003‘
left join database.aa11 h
on a.yac145 = h.aaa102 and h.aaa100 = ‘AAB301‘
  1. Or 复制条件语句 最好拆分成 union
  2. 使用 join 单表连接 排查连接条件


以上是关于OracleSQL 对原本的table更新,如何让VIEW也随之更新?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL - 在 PIVOT 之前更新值

oracleSQL 转 SPARKSQL(hiveSql) 及常用优化

oracleSQL 转 SPARKSQL(hiveSql) 及常用优化

如何在 Oracle SQL 中列出模式中的所有表?

oraclesql developer 删除某用户下所有的表

(Oracle SQL) 如何在插入后使用唯一键更新表?