Oracle存储过程迁移ODPS-01(专有云):支持DML(delete/update/merge)SQL

简介: 关系型数据库支持的DML(delete/update/merge)SQL ,在maxcompute(ODPS)该如何写? 总有人问,现写了一个例子,应该可以说明了。 有问题,欢迎大家指正。
--关系型数据库支持的 delete/update/merge SQL ,在ODPS该如何写

-- 上日全量表
table1(key1 string,key2 string,col1 string,col2 string);
-- 今日增量表
table2(key1 string,key2 string,col1 string,col2 string);
-- 今日增量表(删除)
table3(key1 string,key2 string,col1 string,col2 string);

--1.update(table2 表中的记录的值,更新到table1表中)
insert overwrite table table1
select t1.key1
      ,t1.key2
      ,case when t2.key1 is not null then t2.col1 else t1.col1 end as col1
      ,case when t2.key1 is not null then t2.col2 else t1.col2 end as col2
  from table1 t1
  left outer join table2 t2 on t1.key1=t2.key1 and t1.key2 = t2.key2
;

--2.delete(table2 表中的记录,从table1表中删除)
insert overwrite table table1
select t1.key1
      ,t1.key2
      ,t1.col1
      ,t1.col2
  from table1 t1
  left outer join table2 t2 on t1.key1=t2.key1 and t1.key2 = t2.key2
 where t2.key1 is null
;
--3.merge(没有del)
insert overwrite table table1
select 
  from(
-- 先把上日存在,今日也存在的记录从上日表中排除。剩下的就是今日没有更新的记录
select t1.key1
      ,t1.key2
      ,t1.col1
      ,t1.col2
  from table1 t1
  left outer join table2 t2 on t1.key1=t2.key1 and t1.key2 = t2.key2
 where t2.key1 is null
 union all
-- 再合并上今日增量,就是今天的全量
select t2.key1
      ,t2.key2
      ,t2.col1
      ,t2.col2
  from table2 t2)tt
;

--2.merge(有del)
insert overwrite table table1
select 
  from(
-- 先把上日存在,今日也存在的记录从上日表中排除,再把今日删除的记录排除。剩下的就是今日没有更新的记录
select t1.key1
      ,t1.key2
      ,t1.col1
      ,t1.col2
  from table1 t1
  left outer join table2 t2 on t1.key1=t2.key1
 where t2.key1 is null
 union all
-- 再合并上今日增量,就是今天的全量
select t2.key1
      ,t2.key2
      ,t2.col1
      ,t2.col2
  from table2 t2
 where t2.udi_type not in ('D'))tt
;

-- 暮角 update at 20181203 
相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
9月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
627 8
简单练习Microsoft SQL Server MERGE同步两个表
【10月更文挑战第13天】本文介绍了在Microsoft SQL Server中使用`MERGE`语句同步两个表的步骤。首先创建源表`SourceTable`和目标表`TargetTable`并分别插入数据,然后通过`MERGE`语句根据ID匹配行,实现更新、插入和删除操作,最后验证同步结果。此方法可根据需求调整以适应不同场景。
603 1
|
11月前
|
SQL
SQL如何使用Merge将一个上传的表与另一个表对比并更新
本文介绍了如何使用SQL Merge语句对比并更新两个表的数据,结合示例代码展示插入与更新操作,并说明如何通过Join查询实现复杂场景下的数据同步。
|
SQL Oracle 关系型数据库
解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
在Oracle数据库开发中,双引号的使用是一个重要但易被忽视的细节。本文全面解析了双引号在SQL中的特殊应用场景,包括解决标识符与保留字冲突、强制保留大小写、支持特殊字符和数字开头标识符等。同时提供了最佳实践建议,帮助开发者规避常见错误,提高代码可维护性和效率。
648 6
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
SQL Oracle 关系型数据库
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
1862 6
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
761 3

相关产品

  • 云原生大数据计算服务 MaxCompute
  • 推荐镜像

    更多