猪猪吧博客2 技术 正文

MaxCompute表数据更新与删除操作

关系型数据库支持的 delete/update/merge SQL ,在MaxCompute上的实现方式示例如下:
表准备


  1. -- 上日全量表

  2. table1(key1 string,key2 string,col1 string,col2 string);

  3. -- 今日增量表

  4. table2(key1 string,key2 string,col1 string,col2 string);

  5. -- 今日增量表(删除)

  6. table3(key1 string,key2 string,col1 string,col2 string);


update(table2 表中的记录的值,更新到table1表中)


  1. insert overwrite table table1 select t1.key1

  2. ,t1.key2

  3. ,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

  4. from table1 t1

  5. left outer join table2 t2 on t1.key1=t2.key1 and t1.key2 = t2.key2 ;


delete(table2 表中的记录,从table1表中删除)


  1. insert overwrite table table1 select t1.key1

  2. ,t1.key2 ,t1.col1 ,t1.col2

  3. from table1 t1

  4. left outer join table2 t2 on t1.key1=t2.key1 and t1.key2 = t2.key2 where t2.key1 is null

  5. ;


merge(没有del)


  1. insert overwrite table table1 select

  2. from (

  3. -- 先把上日存在,今日也存在的记录从上日表中排除。剩下的就是今日没有更新的记录 select t1.key1

  4. ,t1.key2 ,t1.col1 ,t1.col2

  5. from table1 t1

  6. left outer join table2 t2 on t1.key1=t2.key1 and t1.key2 = t2.key2 where t2.key1 is null

  7. union all

  8. -- 再合并上今日增量,就是今天的全量 select t2.key1

  9. select t2.key1

  10. ,t2.key2

  11. ,t2.col1

  12. ,t2.col2

  13. from table2 t2)tt

  14. ;


merge(有del)

insert overwrite table table1 select
from (
-- 先把上日存在,今日也存在的记录从上日表中排除,再把今日删除的记录排除。剩下的就是今日没有更 新的记录


  1. insert overwrite table table1 select

  2. from (

  3. -- 先把上日存在,今日也存在的记录从上日表中排除,再把今日删除的记录排除。剩下的就是今日没有更 新的记录

  4. select t1.key1

  5. ,t1.key2 ,t1.col1 ,t1.col2

  6. from table1 t1

  7. left outer join table2 t2 on t1.key1=t2.key1 and t1.key2 = t2.key2 left outer join table3 t3 on t1.key1=t3.key1 and t1.key2 = t3.key2

  8. where t2.key1 is null or t2.key1 is null

  9. union all

  10. -- 再合并上今日增量,就是今天的全量 select t2.key1

  11. ,t2.key2 ,t2.col1 ,t2.col2

  12. from table2 t2)tt ;


表创建设计示例

场景:天气情况信息采集。

  • 基本信息: 数据信息包括地名,关于此地的属性数如面积,基本人口数量等信息,天气信息。

  • 属性数据变化较小,天气信息数采用多个终端采集,且数据量较大

  • 天气信息变化较大,终端数量稳定的情况下流量基本稳定。
    表设计指南:

  • 建议对数据信息划分为基本属性表,和天气日志表,区分变化小和变化大的数据。

  • 因为数据量巨大,对天气日志表按照地域进行分区,也可以按照时间如天进行二级分区,此种分区方 式避免因某一地或某一个时间的天气变化而造成其他无关数据变化。

  • 采集终端上使用datahub进行数据汇聚,依据稳定的流量值选择合适的shard通道数量,批量数据方式 写入到天气日志表中,不使用Insert into。


本文转载自互联网,版权归原作者所有,转载目的在于传递更多的信息,并不代表本网站的观点和立场。 如发现本站文章存在内容、版权或其它问题,烦请联系,我们将及时删除。

评论列表

    快捷回复: