资讯专栏INFORMATION COLUMN

PG上云之现代化圣旨背景

IT那活儿 / 1848人阅读
PG上云之现代化圣旨背景





背 景 




所谓圣旨:奉天承运,皇帝诏曰,不可不从之,今昔一现代化圣旨驾到——此次上云与以往不同的是:源库(Oracle库)中存在ogg同步9表数据到其他Oracle库中。故而在Oracle库迁移到PG库之后,还要把这9张表从PG库同步到其他的Oracle库中。并且要求要实时同步。


经前期的查询,这9张表包括分区表,并且源端(PG端)表的字段数量比目标端(Oracle端)的表字段数量多。目前我们使用的跨IDC数据同步工具支持pg迁移到Oracle,但是它不支持分区表,也不支持表结构不一致的表。所以这个方法肯定是抗旨的。采用DATAX工具也不可以接旨,因为datax不支持增量同步。


经协商不要求实时同步,而是每天定时同步了。故datax接下了圣旨。Datax的原理之前有介绍过,在这就不重复介绍了,下面就直接看看datax是如何接旨的。




 
 基于datax-web的部署 
 




一、新建项目





二、添加任务

任务管理-->添加


这里所属项目写刚刚新建的项目tdwh,这里的cron分别指的是秒,分,时,日,月,周,年,这里是每天9点52分整调度该任务。每一张表都要为其配置一个json文件

{
  "job": {
    "content": [
      {
        "writer": {
          "parameter": {
            "username": "$username",
            "column": [
              "account_id",
              "seat_id",
              "create_time",
              "state",
              "channel_cd",
              "exten_type",
              "ring_time",
              "end_time",
              "variable",
              "local_id",
              "bz",
              "seat_prop"
            ],
            "batchSize": 512,
            "connection": [
              {
                "table": [
                  "outcall.channel_call_seat"
                ],
                "jdbcUrl": "jdbc:oracle:thin:@$host:$port/$servicesname"
              }
            ],
            "preSql": [
              "truncate table outcall.channel_call_seat"
            ],
            "password": "$password"
          },
          "name": "oraclewriter"
        },
        "reader": {
          "parameter": {
            "username": "$username",
            "connection": [
              {
                "querySql": [
                  "select * from outcall.channel_call_seat"
                ],
                "jdbcUrl": [
                  "jdbc:postgresql://$host:$port/$databasename"
                ]
              }
            ],
            "password": "$password",
            "where": ""
          },
          "name": "postgresqlreader"
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 8
      }
    }
  }
}


这里表源端与目标端结构一致,如果不一致,那么就要注意了,需要把这个*写成源端表的具体属性列名
"querySql": [
                  "select * from outcall.channel_call_seat"
                ],


column这个要成目标端表的属性列名
"column": [
              "account_id",
              "seat_id",
              "create_time",
              "state",
              "channel_cd",
              "exten_type",
              "ring_time",
              "end_time",
              "variable",
              "local_id",
              "bz",
              "seat_prop"
            ],


部署好后还要点击启动,然后才能自动调度任务,也可以在操作里点击执行一次就立即调度任务



、查看日志

执行完之后可以查看日志

可以到数据已经同步完成,耗时24s,读写失败总数为0,证明已经全部同步了,没有数据丢失。






基于crontab调用python脚本的部署





1、编辑json文件


cd  /pg_data1/datax/bin/tdwh_test
vi  call_sheet_info.json

写入

{
    "job": {
        "content": [
            {
                "writer": {
                    "parameter": {
                        "username": "$username",
                        "column": [
                            "id",
                            "call_sheet_id",
                            "call_id",
                            "call_type",
                            "call_no",
                            "called_no",
                            "ring_time",
                            "ringing_time",
                            "begin_time",
                            "end_time",
                            "calltime_length",
                            "queue_time",
                            "queue",
                            "agent",
                            "exten",
                            "state",
                            "monitor_file_name",
                            "pbx",
                            "agent_name",
                            "call_state",
                            "province",
                            "district",
                            "ivrkey",
                            "hanguper",
                            "investigate",
                            "update_time",
                            "contact_order_id",
                            "lan_id",
                            "mechine_id",
                            "staff_id",
                            "tele_phone",
                            "area_id",
                            "channel_cd",
                            "quality_state",
                            "quality_time",
                            "quality_staff",
                            "quality_desc",
                            "sheet_cloud",
                            "acc_nbr_type"
                        ],
                        "batchSize": 512,
                        "connection": [
                            {
                                "table": [
                                    "outcall.call_sheet_info"
                                ],
                                "jdbcUrl": "jdbc:oracle:thin:@$host:$port/$servicename"
                            }
                        ],
                        "preSql": [
                            "truncate table outcall.call_sheet_info"
                        ],
                        "password": "$password"
                    },
                    "name": "oraclewriter"
                },
                "reader": {
                    "parameter": {
                        "username": "$username",
                        "connection": [
                            {
                                "querySql": [
                                    "select * from outcall.call_sheet_info"
                                ],
                                "jdbcUrl": [
                                  "jdbc:postgresql://$host:$port/$databasename"
                                ]
                            }
                        ],
                        "password": "$password",
                        "where": ""
                    },
                    "name": "postgresqlreader"
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": 8
            }
        }
    }
}
注意:要给这个json文件可执行权限



2、编辑crontab定时任务


crontab -e

0 9 * * * python /pg_data1/datax/bin/datax.py /pg_data1/datax/bin/tdwh_test/call_sheet_info.json > /pg_data1/datax/bin/tdwh_test/call_sheet_info.log
每天9点整调度该任务实现数据全量同步。




 总 结 
 



  1. datax支持分区表,支持表结构不一致,但是不支持增量同步。

  2. 每一张表都需要为其配置一个json文件。

  3. 在添加完任务之后,要记得点击启动,否则不会自动调度任务。

  4. 个人更倾向于基于datax-web的部署,可以随时控制任务的启停。


END


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129946.html

相关文章

  • 当企业咨询遇上云服务:传统企业的云之

    摘要:谈到德勤与亚马逊达成战略合作之后的进展情况,德勤中国云服务主管合伙人刘俊龙向趣味科技透露,截至目前为止,德勤已经携手,共同为二三十家大型企业提供了各种各样的数字化转型和云服务的落地,并且已经初见成效。蜀道之难,难于上青天!唐代大诗人李白这句脍炙人口的诗词,相信也是不少传统企业上云时的心情写照。不过在德勤与亚马逊AWS的携手合作之下,传统企业在上云与数字化转型时遭遇的诸多痛点,正在被逐一解决。...

    figofuture 评论0 收藏0
  • 阿里云如何打破Oracle迁移上云的壁垒

    摘要:摘要第九届中国数据库技术大会,阿里云数据库产品专家萧少聪带来以阿里云如何打破迁移上云的壁垒为题的演讲。于是,阿里云给出了上面的解决方案。 摘要: 2018第九届中国数据库技术大会,阿里云数据库产品专家萧少聪带来以阿里云如何打破Oracle迁移上云的壁垒为题的演讲。Oracle是指数据库管理系统,面对Oracle迁移上云的壁垒,阿里云如何能够打破它呢?本文提出了Oracle 到云数据库P...

    chavesgu 评论0 收藏0
  • 公有云发展趋势:与国产操作系统的结合

    摘要:另一方面,公有云规模较大,可以发挥规模经济效益。机构预计,未来几年全球公有云市场规模将保持的复合增长率。云计算的发展----上云成为共识从2006年8月AWS对外提供亚马逊弹性云至今,全球云计算市场已经走过十一个年头。国内市场,如果从2010年阿里云对外公测算起,已经发展到第八年。历经近十年发展,云计算市场已经度过早期教育客户阶段。上云成为绝大多数企业的共识。随着国内云计算需求开始涌现,云计...

    用户83 评论0 收藏0
  • 健康云之战:谁将脱颖而出?

    摘要:但是,目前人们可能还没有完全搞清楚健康云的价值主张。我更倾向于称其为健康云之战。微软亚马逊和谷歌脱颖而出,也同样鹤立鸡群。与此同时,健康云提供商也不能闲着。为此,健康云争夺权力的游戏才刚刚开始。为了利用蓬勃发展的数字健康生态系统,几家大型科技公司都推出了健康云。但是,目前人们可能还没有完全搞清楚健康云的价值主张。在最近的一次活动中,我目睹了一场小组讨论,顶尖科技公司的高级管理人员就医疗计划展...

    Amio 评论0 收藏0
  • 云网融合,扩展运营商B2B商业边界

    摘要:华为云网融合解决方案使能运营商增长运营商基础网络设施优势明显,网络覆盖广接入媒介全机房光缆丰富。目前,在中国欧洲及东南亚等全球多个国家与地区,华为已与多家运营商在云网融合领域开展商业合作,支撑运营商产品升级,提升运营商竞争力。企业ICT需求4大变化Gartner调研显示,企业上云不是一蹴而就,而是根据应用复杂性和上云后的业务风险,由低至高逐步将企业应用迁移至云上。随着企业上云的不断深入,业务...

    Lemon_95 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<