• 阿里云大数据实战记录1:不同模式建表及同步


    一、标准模式建表

    1.1 标准模式:代码建表

    在对应的业务流程里新建ODPS SQL文件
    image.png
    填写相关配置
    image.png
    然后敲代码,比如我这里建立一个名叫dm_users_test.sql的文件做测试,敲完代码,运行。

    -- dm_users_test.sql
    
    -- 代码建表
    create table if not exists dm_users_test
    (
        id   bigint comment'用户id'
        ,sex string comment '用户性别'
    )comment '测试表_by xin';
    
    -- 插入数据SQL
    INSERT OVERWRITE TABLE  dm_users_test
    SELECT id,sex
    FROM for_ods.users
    limit 100;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    运行完,如果没有报错,则表示已经通过代码建完表。这时通过表管理找到对应的表单,打开加上中文名,然后分别提交到开发环境和生成环境。
    在这里插入图片描述

    接下来是开发程序插入数据,也可以建表时完成,像我上面展示的代码,已经把建表和插入数据的代码放一起运行,建完表就插入了数据。
    接下来就是给代码文件配置调度,并提交。将代码文件提交时注意把建表语句注释掉,减少一次执行,省资源。
    在这里插入图片描述

    提交时,或有一些审核和测试,根据自己的流程走。
    image.png
    我这里直接提交,然后到了发布步骤。提交后点击右上角蓝色的发布,点击跳转到发布界面。
    image.png
    在发布界面点击发布即可。
    image.png

    如果有多个待发布,也可以多选,底部会出现发布选中项选项,可以批量发布。
    在这里插入图片描述

    发布后点击右上角蓝色的运维,点击跳转到运维界面。
    image.png
    周期实例中可以搜索节点名称,注意使用提交的文件的文件名搜索,而不是表的名字,如果二者名称一致,则无所谓。在没有多个SQL文件操作同一个表(如:一个SQL文件增量刷新,一个SQL文件定期全量刷新的场景)的情况下,一般建议SQL文件名和表名保持一致,方便查找维护。
    实例开始执行之后便可在生产环境表中插入数据。
    image.png

    1.2 标准模式:可视化建表

    可视化建表和代码建表,在建表前会有一些差异,建表之后的操作是一致的,都要发布到开发环境和生产环境,然后开发代码以插入数据,设置调度、提交、发布。

    下面主要讲讲可视化讲标的方法,其实很简单。
    【表管理】界面,新建表,选择引擎和输入表名,新建。
    在这里插入图片描述

    填写相关建表信息,然后提交到开发和生产环境。(由于我已经发布开发环境,所以开发环境是灰色的)
    在这里插入图片描述

    提交开发开发和生产环境之后,就可以建SQL文件,开发代码,并设置调度、提交、发布。(同代码建表,略)

    除了【表管理】,在【数据开发】界面也可以,如下图,选择新建>新建表>根据自己的需要选择引擎。
    image.png
    然后弹出一个窗口,选择对应的业务流程和表名称,然后新建。接下来就和表管理的第二步类似了,填写相关建表信息,然后提交到开发和生产环境。
    image.png

    二、简单模式建表

    学会了标准模式建表之后,简单模式就很简单了。
    简单模式不分开发环境和生产环境,在标准化建表的流程上,改同步两个环境为一个环境,砍掉发布环节,设置调度提交之后直接生成周期实例。

    ⚠️注意点

    注意!!!不同实例生成方式对自动调度的周期实例会有一些影响:

    • T+1次日生成:
      • 23:30之前提交发布的任务,第二天周期实例生效,并自动调度运行。
      • 23:30之后提交发布的任务,第三天周期实例生效,并自动调度运行。
    • 发布后即时生成:
      • 23:30之前提交发布的任务,当天生成周期实例并自动调度。
        • 任务的定时运行时间在提交发布时间点**10分钟后**,DataWorks才会正常生成实例,该实例会真实跑数据。
        • 任务的定时运行时间距离提交发布时间不足10分钟时,DataWorks会生成一个已完成的实例,实例状态为实时生成的过期实例,过期实例不会真实跑数据。
      • 23:30之后提交发布的任务,实时转实例功能不生效。需要等到提交发布后的第三天实例才生效。

    已有的实例从T+1次日生成变更为发布后即时生成,对当天实例的影响:已运行的实例会保留,未运行的实例将会被替换为实时转出的实例。

    三、表单数据同步🔁

    3.1 数据集成

    当数据需要同步到其他的平台时,可以通过数据集成,新建离线或实时同步文件,配置好数据来源和数据去向。
    image.png
    如果数据去向没有相关数据源,需要先在工作空间管理新增数据源。
    image.png
    image.png

    3.2 外部表

    外部表有多种形式,还没有研究完,感兴趣可以自行阅读官方文档:数据导入导出和。
    下面主要讲讲将maxcomputer数据导出到ADB MySQL的场景:
    注:建外表时,建议在源表基础上加上_external_table后缀,方便搜索维护。

    大概两点:
    1、建外表时加上TABLE_PROPERTIES配置,大致如下:
    假设

    • maxcomputer的源表(生产环境使用)是odps_project1.odps_nopart_import_test
    • ADB MySQL外部表(用于同步数据)是:adb_test.odps_nopart_import_test_external_table
    • ADB MySQL同步表(生产环境使用)是:adb_test.odps_nopart_import_test
    CREATE TABLE IF NOT EXISTS odps_nopart_import_test_external_table  -- 在ADB MySQL建表,该表称外部表
    (
      id int,
      name string,
      age int,
      dt string
    )
    ENGINE='ODPS'
    TABLE_PROPERTIES='{
    "endpoint":"http://service.cn.maxcompute.aliyun-inc.com/api", -- 阿里云的域名节点,参考https://help.aliyun.com/document_detail/34951.htm?spm=a2c4g.11186623.0.0.296d1fae4ZDeR0#section-oit-45y-23z
    "accessid":"***********",        -- 账号的AK信息,参考:https://help.aliyun.com/document_detail/142101.htm?spm=a2c4g.11186623.0.0.296d3d16iaC04k#multiTask302
    "accesskey":"****************",  -- 账号的AK信息,同上
    "partition_column":"dt",         -- 分区信息,没有分区则不加
    "project_name":"odps_project1",  -- MaxCompute中的工作空间名称,就是调用生产环境表单的前缀,如odps_project1.odps_nopart_import_test
    "table_name":"odps_nopart_import_test" -- MaxCompute中的数据源表名。
    }';       
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2、在ADB MySQL对应的工作流程创建一个文件进行数据同步,需要定时更新的话,需要上调度。
    注:需要在ADB MySQL先创建adb_test.odps_nopart_import_test 表,才可以执行以下代码。建表方式参考第一、二点。

    -- 插入
    INSERT INTO adb_test.odps_nopart_import_test 
    SELECT * FROM adb_test.odps_nopart_import_test_external_table;
    -- 覆盖导入
    INSERT OVERWRITE INTO adb_test.odps_nopart_import_test 
    SELECT * FROM adb_test.odps_nopart_import_test_external_table;
    -- 异步覆盖写入
    submit job insert overwrite into adb_test.odps_nopart_import_test 
    select * from adb_test.odps_nopart_import_test_external_table;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    MVC医院信息管理系统源码 BS架构
    Java客户端Http请求工具Okhttp和RestTemplate的详细介绍
    离散型制造企业MES管理系统解决方案
    c++入门(1)
    【leetcode面试经典150题】71. 对称二叉树(C++)
    深度学习——Bounding Box预测
    上传文件报错:The temporary upload location [/tmp/tomcat/xxx] is not valid
    【附源码】Python计算机毕业设计双笙映画
    Three.js之顶点UV坐标、纹理贴图
    【jvm】《尚硅谷宋红康JVM全套教程(详解java虚拟机)》上篇 笔记
  • 原文地址:https://blog.csdn.net/qq_45476428/article/details/127439139