精华内容
下载资源
问答
  • 阿里云Dataworks
    2021-11-16 17:20:03

    Dataworks

    介绍
    Dataworks是阿里云数据工厂是阿里云重要的产品,主要提供:数据集成、数据开发、数据地图、数据质量,数据服务等全方位的产品服务,一站式开发管理的界面,支持多种计算和存储引擎服务
    一、建表并上传数据

    一、创建表
    首先我们要在工作空间中配置MaxCompute
    1、进入数据开发页面
    登录控制台
    在左侧导航栏,单击工作空间列表
    选择工作空间所在地域,单击相应工作空间后进行数据开发
    2、在数据开发界面,点击新建MaxCompute,表
    3、在新建表对话中,输入表名字,提交,
    表明命名规范:(表名不能超过64个字符,且必须以字母开头,不能包含中文或特殊字符。)
    4、在表的编辑页面,单击DDL,模式,输入建表语句,单击生成表结构,点击确认
    5、根据dataworks购买的区分为简易版本(便宜),标准版本(贵)
    简易版本直接提交生产环境
    标准版分别提交到开发环境和生产环境
    6、查询吧表在左侧导航栏,双击表名,查看信息

    二、本地数据上传至表
    上传本地的文本文件至工作空间的表中。
    通过数据集成模块,从多个不同的数据源导入业务数据至工作空间。
    (说明 本地文本文件上传的限制如下:
    文件类型:仅支持.txt.csv .log 类型的文件。
    文件大小:不能超过30 MB。
    操作对象:支持分区表导入和非分区表导入,但不支持分区值为中文、and(&)、星号(*)等特殊字符。)
    1、点击导入按钮,
    2、搜索需要导入数据的表
    (说明 如果您创建表后无法在此处搜索到该表,您可以先在数据地图进行手工同步表操作后,再在此处尝试搜索该表,手工同步详情可参考文档:
    手工同步表。)
    3,、选择数据导入方式为上传本地数据,单击选择文件后的浏览,。选择本地数据文件,配置导入信息
    参数描述选择数据导入方式默认上传本地文件。选择文件单击浏览…,选择本地需要上传的文件。选择分隔符包括逗号、Tab、分号、空格、|、#和&等分隔符,此处选择逗号。原始字符集包括GBK、UTF-8、CP936和ISO-8859,此处选择GBK。导入起始行选择导入的起始行,此处选择1。首行为标题根据自身需求,设置首行是否为标题。本示例无需选中首行为标题。数据预览您可以在此处进行数据预览。说明 如果数据量过大,仅展示前100行和前50列的数据。
    4、点击下一步
    5、选择目标表字段与原字段匹配方式
    6、点击导入数据

    二、创建业务流程

    一、创建业务流程
    登录DataWorks控制台。
    在左侧导航栏,单击工作空间列表。
    选择工作空间所在地域后,单击相应工作空间后的进入数据开发。
    在数据开发页面,鼠标悬停至新建图标,单击业务流程。
    在新建业务流程对话框中,输入业务名称和描述。
    (注意 业务名称必须是大小写字母、中文、数字、下划线(_)以及小数点(.),且不能超过128个字符。)
    6.单击新建。

    二、创建节点并配置依赖关系
    在业务流程中创建一个虚拟节点(start)和ODPS SQL节点(insert_data),并配置依赖关系为insert_data依赖于start。
    (注意
    虚拟节点属于控制类型节点,在业务流程运行过程中,不会对数据产生任何影响,仅用于实现对下游节点的运维控制。
    虚拟节点在被其它节点依赖的情况下,如果被运维人员手动设置为运行失败,则下游未运行的节点将因此无法被触发运行。在运维过程中,可以防止上游的错误数据进一步扩展。
    业务流程中,虚拟节点的上游节点通常会被设置为工作空间根节点。工作空间根节点的格式为工作空间名称_root。
    DataWorks会为节点自动添加一个节点名的输出,结构为工作空间名称.节点名称。如果一个工作空间下有两个同名的节点,请修改其中一个节点的节点输出。)
    双击业务流程名称进入开发面板,鼠标单击虚拟节点并拖拽至右侧的开发面板。
    在新建节点对话框中,输入节点名称为start,单击提交。
    (注意 节点名称必须是大小写字母、中文、数字、下划线(_)以及小数点(.),且不能超过128个字符。)
    以同样的操作新建ODPS_SQL节点,命名为insert_data。
    通过拖拽连线,设置start节点为insert_data节点的上游节点。

    三、配置虚拟节点的上游依赖
    在业务流程中,虚拟节点通常作为整个业务流程的控制器,是业务流程中所有节点的上游节点。
    通常使用工作空间根节点作为虚拟节点依赖的上游节点:
    双击虚拟节点名称,进入节点的编辑页面。
    单击节点编辑页面右侧的调度配置。
    在调度依赖区域,单击使用工作空间根节点,设置虚拟节点的上游节点为工作空间根节点。
    单击工具栏中的保存图标。

    四、编辑和运行ODPS SQL节点
    1.打开ODPS SQL节点的编辑页面,输入下述代码。
    2.右键单击代码中的字段,选中删除输入。
    (说明 由于DataWorks的调度依赖主要保障的是调度节点定时更新的表数据,通过节点调度依赖保障下游取数没有问题,所以不是DataWorks平台上调度更新的表,平台无法监控。当存在非周期性调度生产数据的表,有节点select这类表数据时,您需要手动删除通过select自动生成的依赖的上游节点配置。)
    3.点击保存后,点击运行,运行结束后,即可在页面下方查看运行日志和结果。
    运行要钱!!

    五、提交业务流程
    1.运行调试后,返回业务流程页面。
    2.点击上传图标
    3.在提交对话框中,选择需要提交的节点,输入备注,并选中忽略输入输出不一致的告警。
    4.单击提交。
    业务流程提交后,即可在业务流程下的节点列表查看节点提交状态。如果节点名称左侧存在图标,表示该节点已提交;如果不存在图标,表示该节点未提交。

    三、创建同步任务
    首先通过RDS创建MySQL实例,获取RDS实例ID,并在RDS控制台添加白名单。如果是通过自定义资源组调度RDS的数据同步任务,必须把自定义资源组的机器IP也加入RDS的白名单中。
    在DataWorks中,通常通过数据集成功能,定期导入系统中产生的业务数据至工作区。SQL任务进行计算后,再定期导出计算结果至您指定的数据源中,以便进一步展示或运行使用。

    目前数据集成功能支持从RDS、MySQL、SQL Server、PostgreSQL、MaxCompute、OCS、DRDS、OSS、Oracle、FTP、DM、HDFS和MongoDB等数据源中,导入数据至工作空间或从工作空间导出数据。

    一、新增数据源,
    仅项目管理员角色可以新建数据源,其它角色的成员仅支持查看数据源。
    进入数据源管理页面。
    登录DataWorks控制台。
    在左侧导航栏,单击工作空间列表。
    选择工作空间所在地域后,单击相应工作空间后的进入数据集成。
    在左侧导航栏,单击数据源,进入工作空间管理 > 数据源管理页面。
    在数据源管理页面,单击右上角的新增数据源。
    在新增数据源对话框中,选择数据源类型为MySQL。
    在新增MySQL数据源对话框,配置各项参数。
    参数描述数据源类型当前选择的数据源类型为阿里云实例模式。数据源名称数据源名称必须以字母、数字、下划线()组合,且不能以数字和下划线()开头。数据源描述对数据源进行简单描述,不得超过80个字符。适用环境可以选择开发或生产环境。说明 仅标准模式工作空间会显示该配置。地区选择相应的地域。RDS实例ID您可以进入RDS控制台,查看RDS实例ID。RDS实例主账号ID实例购买者登录DataWorks控制台,鼠标悬停至右上角的用户头像,单击安全设置,查看账号ID。数据库名该数据源对应的数据库名称。用户名数据库对应的用户名。密码数据库对应的密码。
    5、在数据集成页签下,单击相应资源组后的测试连通性。
    数据同步时,一个任务只能使用一种资源组。您需要测试每种资源组的连通性,以保证同步任务使用的数据集成资源组能够与数据源连通,否则将无法正常执行数据同步任务。如果您需要同时测试多种资源组,请选中相应资源组后,单击批量测试连通性。
    6、测试连通性通过后,单击完成。

    二、新建并配置同步节点
    切换至数据开发面板,新建一个离线同步节点write_result。
    设置write_result节点的上游节点为insert_data节点。
    选择数据源(ODPS > odps_first)、表(result_table)为数据来源。
    选择您新建的MySQL数据源中的表(odps_result)为数据去向。
    选择字段的映射关系,左侧的源头表字段和右侧的目标表字段为一一对应关系。
    在通道控制区域,配置作业速率上限和脏数据检查规则。
    参数描述任务期望最大并发数数据同步任务内,可以从源并行读取或并行写入数据存储端的最大线程数。向导模式通过界面化配置并发数,指定任务所使用的并行度。同步速率设置同步速率可以保护读取端数据库,以避免抽取速度过大,给源库造成太大的压力。同步速率建议限流,结合源库的配置,请合理配置抽取速率。错误记录数错误记录数,表示脏数据的最大容忍条数。
    预览保存。
    完成上述配置后,上下滚动鼠标即可查看任务配置。确认无误后,单击工具栏中的保存图标。

    三、提交数据同步任务
    同步任务保存后,返回业务流程。单击工具栏中的上传,提交同步任务至调度系统中。调度系统会根据配置的属性,从第二天开始自动定时执行。

    四、配置调度和依赖属性

    一、配置调度属性
    进入数据开发页面。
    登录DataWorks控制台。
    在左侧导航栏,单击工作空间列表。
    选择工作空间所在地域后,单击相应工作空间后的进入数据开发。
    在相应的业务流程下,双击打开离线同步节点write_result的编辑页面。
    单击编辑页面右侧的调度配置。
    说明 手动业务流程中创建的节点需要手动触发,无法通过调度执行。
    在时间属性区域,配置节点的调度属性。
    参数描述生成实例方式包括T+1次日生成和发布后即时生成。时间属性根据自身需求,选择正常调度或空跑调度。重跑属性包括运行成功或失败后皆可重跑、运行成功后不可重跑,运行失败后可以重跑和运行成功或失败后皆不可重跑。出错自动重跑如果重跑属性设置为运行成功或失败后皆可重跑和运行成功后不可重跑,运行失败后可以重跑时,会显示该属性,可以配置任务出错自动重跑。如果设置为运行成功或失败后皆不可重跑,则不会显示该属性,即任务出错不会自动重跑。生效日期节点的有效日期,请根据自身需求进行设置。暂停调度勾选后即为暂停状态。调度周期节点的运行周期(月、周、天、小时和分钟),此处设置为周调度。定时调度默认选中。指定时间/具体时间指定节点运行的具体时间。例如,配置节点在每周二的凌晨2点开始运行。cron表达式此处根据您配置定时时间默认显示,不可以更改。依赖上一周期根据自身需求,选择是否依赖上一周期。

    二、配置依赖属性
    配置离线同步节点的调度属性后,继续配置离线同步节点的依赖属性。
    依赖属性中可以配置节点的上游依赖,表示即使当前节点的实例已经到定时时间,也必须等待上游节点的实例运行完毕,才会触发运行。
    例如,当前节点的实例将在上游insert_data节点的实例运行完毕后,才会触发执行。
    在调度系统中,每一个工作空间中默认会创建一个工作空间名称_root节点作为根节点。如果本节点没有上游节点,可以直接依赖根节点。

    三、提交节点
    配置离线同步节点的调度属性后,继续配置离线同步节点的依赖属性。
    依赖属性中可以配置节点的上游依赖,表示即使当前节点的实例已经到定时时间,也必须等待上游节点的实例运行完毕,才会触发运行。
    例如,当前节点的实例将在上游insert_data节点的实例运行完毕后,才会触发执行。
    在调度系统中,每一个工作空间中默认会创建一个工作空间名称_root节点作为根节点。如果本节点没有上游节点,可以直接依赖根节点。

    五、运行及排错

    1测试运行
    2补数据运行
    3周期自动运行

    六、使用临时查询快速查询SQL

    进入临时查询
    登录DataWorks控制台。
    在左侧导航栏,单击工作空间列表。
    选择工作空间所在地域后,单击相应工作空间后的进入数据开发。
    在左侧导航栏,单击临时查询。
    在临时查询面板,右键单击临时查询,选择新建节点 > ODPS SQL。
    在新建节点对话框中,输入节点名称,并选择目标文件夹。
    说明 节点名称的长度不能超过128个字符。
    单击提交。
    运行SQL
    在新建的临时查询节点中运行MaxCompute支持的SQL语句

    学习总结,仅供参考

    更多相关内容
  • DataWorks —— DataStudio(数据开发) 1.简介 传统或者开源的数据处理工具,要满足复杂的业务需求,往往需要各种组合使用:流程繁琐 专业性强 维护困难 DataStudio优势:智能sql编辑器,可视化配置,扩展功能 ...
  • 资源分类:Python库 所属语言:Python 资源全名:aliyun-python-sdk-dataworks-public-3.3.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
  • nodejs-dataworks是用于IBM Bluemix Data Connect API的模块库。 目前,此库仅涵盖数据加载API,但随着时间的推移,还将涵盖更多的Data Conect API,包括“地址清理”和“数据分析” API。 作为参考, 正在使用...
  • 阿里巴巴高级技术专家涵康在2017云栖大会·北京峰会中做了题为《DataWorks核心技术讲解》的分享,就Dataworks简介、架构概述、租户、元数据、调度、数据集成等方面的内容做了深入的分析。
  • 阿里云DataWorks最佳实践
  • dataworks-github-config 管理GitHub团队和DataWorks的存储库配置 如何为DataWorks项目创建新的GitHub存储库 当前,此过程旨在用于公共而非私有存储库。 现在有根据类型创建新存储库的标准: Terraform信息库:将...
  • DataWorks常见问题与难点分析
  • dataworks使用分享,注意事项
  • AnalyticDB+Dataworks 一站式实时数仓开发方案架构 数据类型全面 • 支持图像数据索引检索 • 支持声纹数据索引检索 • 支持 JsonB 类型索引检索 • 支持文本类型索引检索 • 支持GIS类型索引检索
  • DataWorks大数据平台介绍.pptx
  • 语言:中文 (简体) DataWorks 插件代理工具 DataWorks 插件代理工具,适用于在真实 Runtime 调试本地插件代码
  • DataWorks数据分析技术介绍.pptx
  • DataWorks调度任务迁移概述.pdf
  • 阿里云DataWorks数据集成(DataX)架构&实践分享 分享嘉宾:罗海伟阿里云 编辑整理:约理中国科学院大学 目录 阿里云DataWorks数据集成(DataX)架构&实践分享 ▌为什么需要数据集成 数据集成的应用...

    阿里云DataWorks数据集成(DataX)架构&实践分享

    分享嘉宾:罗海伟 阿里云

    编辑整理:约理 中国科学院大学

    目录

    ▌为什么需要数据集成

    数据集成的应用场景

    数据集成的角色和地位

    ▌阿里云数据集成大事记

    ▌阿里云数据集成产品定位和业务支撑情况

    阿里云数据集成产品定位

    阿里云数据集成业务支撑情况

    ▌阿里云数据集成DataX设计核心思路

    离线数据同步原理

    实时数据同步原理

    ▌阿里云数据集成DataX架构

    DataX架构模式

    Standalone模式

    Distribute模式

    On Hadoop模式

    实时同步CheckPoint机制

    ▌阿里云数据集成数据同步-核心亮点

    阿里云数据集成离线同步-核心亮点

    阿里云数据集成实时同步-核心亮点

    ▌阿里云数据集成解决方案系统

    离线数仓-整库迁移方案

    实时数仓-全增量解决方案

    ▌阿里云DataWorks和数据集成的关系

    ▌智能实时数仓解决方案示例


    导读: 阿里云DataWorks数据集成是DataX团队在阿里云上的商业化产品,致力于提供复杂网络环境下、丰富的异构数据源之间高速稳定的数据移动能力,以及繁杂业务背景下的数据同步解决方案。目前已经支持云上近3000家客户,单日同步数据超过3万亿条。DataWorks数据集成目前支持离线50+种数据源,可以进行整库迁移、批量上云、增量同步、分库分表等各类同步解决方案。2020年更新实时同步能力,支持10+种数据源的读写任意组合。提供MySQL,Oracle等多种数据源到阿里云MaxCompute,Hologres等大数据引擎的一键全增量同步解决方案。今天跟大家交流内容是数据集成DataX的架构和在使用数据集成这款产品过程中遇到的一些问题和经验分享。

    今天的介绍会围绕下面几点展开:

    • 为什么需要数据集成
    • 阿里云数据集成大事记
    • 阿里云数据集成产品定位和业务支撑情况
    • 阿里云数据集成DataX设计核心思路
    • 阿里云数据集成DataX架构
    • 阿里云数据集成数据同步-核心亮点
    • 阿里云数据集成解决方案系统
    • 阿里云 DataWorks & 数据集成关系
    • 智能实时数仓解决方案示例

    ▌为什么需要数据集成

    数据集成的应用场景

    首先为什么需要数据集成,在大数据场景下,数据集成主要是解决哪些核心问题,我将其分为以下四个场景:

    第一个场景就是搬站上云。搬站上云主要用来对接业务数据库,完成初始化数仓,比如用户需要把自己的云下数据库快速安全地迁移到云上存储并做进一步的业务分析,如线下Mysql、Oracle到云上MaxCompute或者是Hadoop中Hive上,这既包含了一次性全量数据迁移,还包含持续增量数据迁移。

    第二个场景是构建实时数仓,做流式的数据汇聚。主要包含应用产生的日志数据,应用产生的消息数据,和应用对接数据库产生的日志数据(数据库的Binlog或者归档日志)。

    第三个场景是平台融合,完成云上各个产品之间的数据同步和交换。既包含跨云平台之间的数据同步,比如从AWS、GCP到阿里云;还包含云平台内部之间的数据交换,比如阿里云内部RDS、MaxCompute、OSS、PolarDB、AnalyticDB、Datahub等之间的数据同步。

    第四个场景是容灾备份。当数据分为冷热数据时,需要把冷数据放到归档数据中,极大节约成本。在数仓场景中,也可以把云上计算好的一些结果数据回流到数据库中,服务于在线数据应用。

    以上是数据集成主要支撑的四个典型的大数据场景。

    数据集成的角色和地位

    数据集成在整个大数据数仓建设中的角色和地位是什么?简单概括为6个模块,第一个是数据源,里面包含了各种关系型数据库、文件存储、大数据存储、消息队列等。这些异构的数据源可以通过统一的数据集成平台来将异构网络的异构数据源统一抽取到数据仓库平台,在数据仓库平台中完成数据汇聚,进行统一的数据分析。分析后的结果数据仍可以通过数据集成回流到在线数据库,为在线业务、在线应用提供数据查询。除此之外,还可以利用一个承上启下的产品-数据服务,对接数据应用,制作相关报表、大屏、应用等。

    综上所述,我们知道数据集成在整个数据仓库开发建设过程中起到了非常关键的作用,只有通过数据集成将异构数据源统一汇总到数据仓库中,才有后序的数据分析、数据服务、数据应用等。

    ▌阿里云数据集成大事记

    阿里云数据集成是为了解决数据仓库中这些经典问题而出现的。阿里云数据集成是一款有历史渊源的产品。2011年伴随着阿里巴巴数据平台事业部成立,当即推出了DataX的1.0和2.0版本,但当时大家对于这款产品还没有太多了解。在2014年数据集成能力登陆阿里云(公有云、专有云),开始正式对外提供服务,相应着DataX 3.0版本发布。并且于2016年,阿里巴巴将数据同步引擎DataX开源到社区,助力大数据ETL生态建设。2018年DataX有了一个比较大的架构升级,将公有云、专有云、阿里内部功能统一建立Data Integration服务,进一步优化了开发效率,节约了运维成本。2019年在公有云将数据集成能力商业化,2020年发布数据集成的实时同步能力,可以支持数据实时传输,并且提供了一些实时同步场景解决方案。

    总之,阿里云数据集成是大数据平台上下云的核心枢纽,可以将不同业务系统中数据相互打通,实现数据自由离线或实时的流动。其致力于提供复杂网络环境下,丰富的异构数据源之间高速稳定的数据移动能力,以及繁杂业务背景下,提供数据同步解决方案。

    ▌阿里云数据集成产品定位和业务支撑情况

    阿里云数据集成产品定位

    图中是阿里云数据集成产品的核心功能特性列表,大家在自己制作或选用数据集成产品的时候,可以着重了解这些点,做选型参考。

    首先是离线和实时全覆盖,这款产品既支持传统的离线同步,也支持及时高效的实时同步;第二点针对各种复杂网络均做了相应的解决方案和产品化能力,无论数据源在公网、IDC还是VPC等,数据集成都具备成熟的办法,可以提供连接到数据源的网络解决方案;第三点,因为DataX是一个云上产品,同时需要具备一些安全的管控策略,我们将开发和生产环境隔离,进行数据源权限安全控制,可分享独享资源组保障高可用;第四点,得益于这种可扩展性架构,DataX可以支持繁多的异构数据源,离线支持50+种数据源,实时支持10+种数据源读写任意组合,其中涵盖了关系型数据库、MPP、NoSQL、文件储存、消息流等各大种类;第五点,在大数据场景中往往存在特定场景的通用需求,比如整库迁移、批量上云、增量同步、分库分表、一键实时全增量,我们将这些通用需求抽象为数据集成的解决方案,进一步降低用户使用数据集成门槛;最后我们拥有一个非常完备的运维监控体系,能够进行流量控制、脏数据控制,能够对资源组进行监控,另外还可以设置任务告警,支持电话、短信、邮件、钉钉。

    阿里云数据集成业务支撑情况

    首先该产品现在拥有数千用户、数万名开发者,每天同步的数据量在PB级别,这些数据是由数千万个任务调度完成,而且该产品已经做到了全球地域部署覆盖,目前已经涵盖了政府、金融、保险、能源、电力、制造、互联网、零售等多个行业,几乎每一个行业都有典型的客户和场景。

    ▌阿里云数据集成DataX设计核心思路

    首先左侧图是传统的数据ETL工具制作的方法,是一种网状模型,每种储存之间如果交换数据,需分别设计一套数据传输软件。比如在Mysql和FTP之间交换数据,需要实现一个Mysql到FTP的数据同步工具,在Mysql和Hdfs之间交换数据,还要实现另一个同步工具,这种方法扩展性非常差。

    针对这种场景,DataX做了一个非常核心的抽象,就是右侧图中蓝色的线性模型,每一种数据源统一通过DataX框架做数据交换,当增加一种新的数据源类型,便天然的具备和DataX进行数据交换的能力。

    下面着重介绍一下具体的实现思路,首先每一种数据存储,比如Mysql,会有一个Mysql的Reader插件和一个Writer插件,Reader插件主要是用来读取Mysql中的数据,读取的模式可以是离线的同步,也可以是实时的Binlog同步,Writer插件主要是用来写入数据。DataX做了两个核心抽象,第一个是接口抽象,不论Reader还是Writer插件均有一套接口规范,只要符合接口规范,就可以纳入平台调度体系,被平台调度和使用。另外一个抽象是数据类型规范,每增加一种新的数据源,只要符合数据交换规范,就可以和平台中已经支持的其他数据源进行交换,以上就是DataX极具扩展性的原因。我们在2016年将数据同步核心同步引擎的一部分DataX开源到了社区,地址为:GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。。DataX是数据集成的一个核心同步引擎,是我们同步能力的一部分,今天除了要介绍一些开源的架构之外,还会介绍一些商业版,没有完全开源的部分功能的核心架构。

    离线数据同步原理

    首先是离线数据的同步原理,每一个数据同步作业都是DataX上的一个程序进程,DataX可以连接数据源头读取数据,读取到数据以后写入到目标端。数据源头的数据读取可以基于数据库的JDBC协议,这些在一些关系型数据库或者一些MPP数据库中已经非常常见了;如果源数据系统是Kafka,MQ消息队列等储存形式的话,可以使用数据源对应的SDK进行读写。一个任务在读取的过程中,会发生切片、并发、执行,Reader在读取数据以后会通过生产者消费者模型,将数据传递给Writer端,由Writer写入到目标储存里面。

    实时数据同步原理

    其次,介绍一下DataX实时数据同步原理。数据来源主要分为两类,关系型数据库和实时消息流。关系型数据库可以有对应日志,比如Mysql对应的Binlog日志,Oracle的归档日志,或者数据变更捕获cdc。这些日志会被日志抽取捕获到,捕获方式有API和SDK两种方式,然后框架会将捕获到的内容做消息分解处理,分解为insert、update、delete、alter等事件,然后并行地将其存放。我们支持关系型数据库、大数据、实时消息流等多种目标存储方式,如果数据源就是实时消息流的话,我们可以使用消息订阅模式订阅消息,并且将消息同样做分解,最终重放到目标端。其中第一类关系型数据库复杂度还是比较高的,因为包含了数据的增删改和DDL操作,实时消息流主要是一些追加数据。

    ▌阿里云数据集成DataX架构

    DataX架构模式

    • Standalone模式

    在了解基础原理之后,向大家介绍一下阿里云数据集成DataX的架构设计,其中最经典的是大家比较熟悉的Standalone模式,Github上开源的即为这种模式。Standalone模式将整个过程抽象为3个部分,第一部分是framework框架,框架主要用来提供一些核心的、共性的功能,比如数据的数率控制、脏数据、任务执行指标的收集、汇总和上报,除此之外,框架还具有一定的调度能力;第二部分是Reader插件部分,Reader插件主要是用来对接数据源头,将源头数据读入其中;第三部分是Writer写插件部分,每一个目标存储类型都对应一个Writer插件,可以将源头投递过来的数据,写入到不同的目标储存里面。上面就是一个非常简单的模型,我们将一个数据同步作业称之为一个job,为了最大化的提高任务执行速度和效率,我们会将一个job拆分成多个task任务,每一个task都是一个完整数据同步作业的一个工作子任务,用来完成对应工作期间数据传输和投递,task任务可以被我们调度框架进行调度执行。task是分组的,一个task group可以有多个task子任务,task group会在worker节点中执行和处理,worker也是单机版本的,这也是Github中开源的经典模式。

    • Distribute模式

    除了Standalone模式以外,我们在商业版本里面还有一些更强大的能力,首先是分布式模式,刚我们看到一个数据传输作业可以被分为多个task子任务,task又可以分组成task group,这些task会被并发执行。我们将前面讲的调度部分换成分布式调度模型,我们可以将不同的TaskGroup分发到不同的worker节点上面,就可以突破系统的单机瓶颈,在面对海量数据同步的时候,极大地提升数据传输效率。分布式执行集群也可以做到线性扩展,只要数据系统吞吐可以保障,数据同步作业可以随着worker节点的增加而线性增加,并且我们还做了一些异常节点的隔离等对应的一些分布式机制。

    • On Hadoop模式

    第三个模式是On Hadoop模式,也是商业化版本的一个能力。当用户已经拥有一个Hadoop执行集群,我们可以将DataX数据传输作业部署在已有的Hadoop集群里面,Hadoop中常见的编程模型是MapReduce,我们可以将DataX拆分的task寄宿在mapper节点和reducer节点中,通过Yarn进行统一调度和管理,通过这种方式我们可以复用已有的Hadoop计算和执行能力。这种模式和开源的Sqoop框架是有一点类似的。

    实时同步CheckPoint机制

    下面介绍阿里云数据集成DataX关于实时同步的checkpoint机制,checkpoint机制可以保证实时数据传输的稳定和断点续传的能力。如果你对Flink特别了解的话,这张图会非常熟悉。Flink是阿里团队开源出去的另外一个非常重要的实时计算引擎,DataX框架也借助了Flink的checkpoint机制,比如Flink会定期发送一些barrier事件和消息。我们的Reader Task其实是source,收到barrier以后,会产生snapShotState,并且barrier会传递到Transformer Task,Transformer Task可以用来做数据的转换,Transformer Task收到barrier以后,barrier进一步传递到Writer Task,这个时候的Writer Task其实就是sink,收到barrier之后,会再做一次snapShotState,Writer Task会将我们的数据flush到目标储存。接下来我们会trace跟踪barrier进度情况,并且根据barrier进度情况,把数据流消费的点位cache缓存下来,并且可以进行持久化存储。当任务出现异常或者进程退出的时候,我们可以继续从上一个cache点继续消费数据,可以保证数据不会被丢弃,但是可能会有短暂的数据重复,一般后序数据引擎可以处理这种情况。

    ▌阿里云数据集成数据同步-核心亮点

    • 阿里云数据集成离线同步-核心亮点

    概况一下阿里云数据集成离线同步的核心亮点。主要分为以下四个部分,第一部分是支持多种类的数据源,DataX支持50+常见数据源,涵盖各种关系型数据库、文件系统、大数据系统、消息系统;第二部分是解决方案,我们为一些数据传输经典问题准备了对应的解决方案,比如支持全量和增量的数据同步,支持整库、批量数据同步、支持分库分表,我们将这些琐碎的功能整合成了产品化的解决方案,直接通过界面操作即可完整复杂的数据传输过程;第三部分是精细化权限管控能力,可以对数据源权限进行安全控制,并且隔离开发和生产环境;第四部分DataX支持复杂调度,数据集成与dataWorks深度融合,利用dataWorks强大的调度能力调度我们的数据传输任务。

    • 阿里云数据集成实时同步-核心亮点

    再概况下阿里云数据集成实时同步的核心亮点。DataX是借助插件化机制,对新的数据源支持扩展能力强。DataX支持丰富多样的数据源,支持星型链路组合,任何一种输入源都可以和任何一种输出源搭配组成同步链路。 DataX支持断点续传,可以实时读取MySQL、Oracle、SQLSever、OceanBase、Kafka、LogHub、DataHub、PolarDB等,可以将数据实时写入到MaxCompute、Hologres、Datahub、Kafka、ElasticSearch等储存系统。另外DataX天然具有云原生基因,和阿里云产品融合度非常高。DataX可以轻松监控运维告警,提供运维大盘、监控报警、FailOver等运维能力,可以监控业务延迟、FailOver、脏数据、心跳检查、失败信息,并且支持邮件、电话、钉钉通知。DataX支持一站式解决方案,支持常见数据源整库全增量到MaxCompute、Hologres、ElasticSearch、DataHub等,同时支持分库分表,单表、整库多表、DDL消息。

    阿里云数据集成解决方案系统

    • 离线数仓-整库迁移方案

    下面将详细介绍一下阿里云数据集成解决方案,首先是离线数仓的整库迁移的解决方案,我们将数据集成中的一些典型场景,抽象为数据产品解决方案,可以帮助提升用户效率,降低用户使用成本。右侧图片可以展示出源头数据库中所有的表列表,直接选中需要的表,选择对应的同步方式,比如每日增量或者每日全量,选择分批上传或者整批上传的同步并发配置,就可以上传到MaxCompute中,这种可视化操作可以满足大多离线数据迁移场景。

    • 实时数仓-全增量解决方案

    下面是实时数仓的全增量解决方案,可以非常方便的将现有数据库通过简单的配置后,完成存量的全量迁移,以及后续增量的实时同步。支持在目标库中建表、自动建立离线同步任务、自动建立实时任务、自动启动离线任务、自动启动实时任务、自动建立和启动增量和全量的融合任务、全流程分布监控和展示,支持分步重试。通过这种方案,可以让用户不用原子化的关注每个全量任务和实时任务的配置细节。通过这一套解决方案,可以完成整个数据的全量、增量实时数据的加工。

    阿里云DataWorks和数据集成的关系

    前面介绍了阿里云数据集成开源和商业架构和能力,接下来重点介绍阿里云DataWorks和数据集成的关系。DataWorks是阿里云提供的一站式开发、数据治理的平台,融合了阿里云、阿里集团12年之久的数据中台、数据治理的实践经验。数据集成是阿里云DataWorks核心的一部分,DataWorks向下支持各种不同的计算和存储引擎,比如阿里大数据计算服务MaxCompute、开源大数据计算平台E-MapReduce、实时计算Realtime Compute、图计算引擎GraphCompute、交互式分析引擎MC-Hologres等,支持OSS、HDFS、DB等各种存储引擎。这些不同的计算存储引擎可以被阿里云DataWorks统一管理使用,后面可以基于这些引擎去做整个数据仓库。

    DataWorks内部划分为7个模块,最下面是数据集成,可以完成各种该模式的数据同步,数据集成之上,是元数据中心,提供统一的元数据服务,任务调度中心可以执行任务调度服务,数据开发方面,不同的存储引擎,比如实时计算和离线计算,其有着不同的开发模式,DataWorks支持离线开发和实时开发。同时DataWorks拥有一套综合数据治理的解决方案,会有一个数据服务模块,统一向上提供数据服务,对接各种数据应用。最后将DataWorks各种能力统一通过OpenAPI对外提供服务。

    数据集成模块是可以单独对用户提供服务,单独使用的,并不需要了解和掌握所有DataWorks模块就可以将数据同步作业配置运行起来。

    智能实时数仓解决方案示例

    下面介绍一套智能实时数仓解决方案,可以应用在电商、游戏、社交等大数据实时场景中。数据源有结构化数据和非结构化数据,非结构化数据可以通过DataHub数据总线做实时数据采集,之后由数据集成DataWorks完成,数据集成可以实时写到Hologres中做交互式分析,也可以将实时数据写入到MaxCompute中,进行归档和离线数据计算,另外Flink也可以消费订阅数据,做实时数据计算。Flink计算结果同时又可以写入Hologres中,也可以将实时计算结果做实时大屏和实时预警。Hologres数据可以进行OLAP分析。结构化数据可以通过实时数据抽取或者批量数据采集方式,统一采集到DataWorks,实时数据可以写入到Hologres或者定期归档到MaxCompute,离线数据可以通过批量数据加工到MaxCompute中来,另外MaxCompute和Hologres可以结合使用,进行实时联邦查询。

    上面这套解决方案可以将阿里云实时数仓全套链路与离线数据无缝衔接,满足一套存储、两种计算(实时计算和离线计算)的高性价比组合。

    展开全文
  • DataWorks调度最佳实践.pdf
  • datawork开发指南
  • 8月14日MaxCompute直播课件下载。 了解更多MaxCompute产品和技术相关内容,可扫描二维码加入“MaxCompute开发者交流”钉钉群。
  • dataworks函数

    千次阅读 2021-09-08 10:26:22
    dataworks作为阿里现在主打的大数据产品,一些操作看一下用户手册即可,我这里只是将里面的带有的函数,整理了一下,用的时候比较方便。 聚合函数: avg 命令格式: avg(value) 用途: 计算平均值 参数说明: ● ...

    dataworks作为阿里现在主打的大数据产品,一些操作看一下用户手册即可,我这里只是将里面的带有的函数,整理了一下,用的时候比较方便。
    聚合函数:
    avg
    命令格式:
    avg(value)

    用途:
    计算平均值

    参数说明:
    ● Value: double类型,若输入为string或bigint会隐式转换到double类型后参与运算,其它类型抛异常。当value值为NULL时,该行不参与计算。Bool类型不允许参与计算。

    返回值:
    DOUBLE类型
    如表TBLA有一列VALUE,类型为BIGINT
    VALUE
    1

    count
    命令格式:
    count([distinct] expr) over(partition by col_list1 [order by col_list2] [windowing_clause])
    用途:
    计数值
    参数说明:
    ● distinct: 当指定distinct关键字时表示取唯一值的计数值。
    ● expr: 任意类型,当value值为NULL时,该行不参与计算。
    ● col_list1: 指定开窗口的列
    ● col_list2: 不指定order by时,返回当前窗口内expr的计数值,指定order by 时返回结果以col_list2指定的顺序排序,并且值为当前窗口内从开始行到当前行的累计计数值。
    返回值:
    BIGINT类型
    注:
    当指定distinct关键字时不能写order by。dfgfdsg

    max
    命令格式:

    max( expr) over(partition by col_list1 [order by col_list2] [windowing_clause])

    用途:
    计算最大值

    参数说明:

    ● expr: 除bool以外的任意类型,当value值为NULL时,该行不参与计算。

    ● col_list1:指定开窗口的列

    ● col_list2:不指定order by时,返回当前窗口内的最大值。指定order by时,返回结果以col_list2指定的方式排序,并且值为当前窗口内从开始行到当前行的最大值。

    medien
    命令格式:
    double median(double number)
    用途:
    中位数。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。当输入值为NULL时忽略。
    返回值:
    double类型。
    注:
    目前限制在一个组内不超过100万行数据

    min
    命令格式:
    min(value)
    用途:
    计算最小值
    参数说明:
    ● value:可以为任意类型,当列中的值为NULL时,该行不参与计算。Bool类型不允许参与计算。

    如表TBLA有一列VALUE,类型为BIGINT
    VALUE
    1
    2
    NULL
    SELECT MIN(VALUE) FROM TBLA, 返回值为

    atddey
    命令格式:
    double stddev(double number)
    用途:
    总体标准差。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。当输入值为NULL时忽略。
    返回值:
    double类型。

    atddey_stamp
    命令格式:
    double stddev_samp(double number)
    用途:
    样本标准差。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。当输入值为NULL时忽略。
    返回值:
    double类型。

    sum
    命令格式:
    sum(value)
    用途:
    计算汇总值
    参数说明:
    ● value:double类型,若输入为string或bigint会隐式转换到double类型后参与运算,当列中的值为NULL时,该行不参与计算。Bool类型不允许参与计算。

    如表TBLA有一列VALUE,类型为BIGINT
    VALUE
    1
    2
    NULL
    SELECT SUM(VALUE) FROM TBLA, 返回值为3

    窗口函数
    avg
    命令格式:
    avg(value)

    用途:
    计算平均值

    参数说明:
    ● Value: double类型,若输入为string或bigint会隐式转换到double类型后参与运算,其它类型抛异常。当value值为NULL时,该行不参与计算。Bool类型不允许参与计算。

    返回值:
    DOUBLE类型
    如表TBLA有一列VALUE,类型为BIGINT
    VALUE

    count
    命令格式:
    count([distinct] expr) over(partition by col_list1 [order by col_list2] [windowing_clause])
    用途:
    计数值
    参数说明:
    ● distinct: 当指定distinct关键字时表示取唯一值的计数值。
    ● expr: 任意类型,当value值为NULL时,该行不参与计算。
    ● col_list1: 指定开窗口的列
    ● col_list2: 不指定order by时,返回当前窗口内expr的计数值,指定order by 时返回结果以col_list2指定的顺序排序,并且值为当前窗口内从开始行到当前行的累计计数值。
    返回值:
    BIGINT类型
    注:
    当指定distinct关键字时不能写order by。dfgfdsg

    Max
    命令格式:

    max( expr) over(partition by col_list1 [order by col_list2] [windowing_clause])

    用途:
    计算最大值

    参数说明:

    ● expr: 除bool以外的任意类型,当value值为NULL时,该行不参与计算。

    ● col_list1:指定开窗口的列

    ● col_list2:不指定order by时,返回当前窗口内的最大值。指定order by时,返回结果以col_list2指定的方式排序,并且值为当前窗口内从开始行到当前行的最大值。

    medin
    命令格式:
    double median(double number) over(partition by col_list)
    用途:
    中位数。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。当输入值为NULL时忽略。
    返回值:
    double类型。
    注:
    目前限制在一个窗口内不超过10000行数据。

    Min
    命令格式:
    min(value)
    用途:
    计算最小值
    参数说明:
    ● value:可以为任意类型,当列中的值为NULL时,该行不参与计算。Bool类型不允许参与计算。

    如表TBLA有一列VALUE,类型为BIGINT
    VALUE
    1
    2
    NULL
    SELECT MIN(VALUE) FROM TBLA, 返回值为

    stddev
    命令格式:
    double stddev(double number [windowing_clause])
    用途:
    总体标准差。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。当输入值为NULL时忽略该行。
    返回值:
    double类型。

    stddev_samp
    命令格式:
    double stddev_samp(double number [windowing_clause])
    用途:
    样本标准差。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。当输入值为NULL时忽略该行。
    返回值:
    double类型。

    sum
    命令格式:
    sum( [distinct] expr) over(partition by col_list1 [order by col_list2] [windowing_clause])
    用途:
    计算汇总值
    参数说明:
    ● distinct:指定distinct关键字时表示计算唯一值的汇总值
    ● expr: double类型,当输入为string, bigint时隐式转换为double参与运算,其它类型报异常。当value值为NULL时,该行不参与计算。
    ● col_list1: 指定开窗口的列
    ● col_list2: 不指定order by时,返回当前窗口内expr的汇总值。指定order by时,返回结果以col_list2指定的方式排序,并且返回当前窗口从首行至当前行的累计汇总值。
    返回值:double类型
    注:
    当指定distinct时不能用order by。

    dense_rank

    命令格式:
    dense_rank() over(partition by col_list1 order by col_list2)
    用途:
    连续排名
    参数说明:
    ● col_list1: 指定开窗口的列
    ● col_list2: 指定排名依据的值
    返回值:
    BIGINT类型

    lag
    命令格式:
    lag( expr, offset, default) over(partition by col_list1 order by col_list2)
    用途:
    按偏移量取当前行之前第几行的值,如当前行号为rn,则取行号为rn-offset的值
    参数说明:
    ● expr: 任意类型。
    ● offset: bigint类型常量, 输入为string, double到bigint的隐式转换, offset>0。
    ● default: 当offset指定的范围越界时的缺省值,常量。
    ● col_list1: 指定开窗口的列
    ● col_list2: 指定返回结果的排序方式
    返回值:
    同expr类型

    lead
    命令格式:
    lead( expr, offset, default) over(partition by col_list1 order by col_list2)
    用途:
    按偏移量取当前行之后第几行的值, 如当前行号为rn则取行号为rn+offset的值
    参数说明:
    ● expr: 任意类型。
    ● offset: bigint类型常量, 输入为string, double到bigint的隐式转换, offset>0。
    ● default: 当offset指一的范围越界时的缺省值,常量。
    ● col_list1: 指定开窗口的列
    ● col_list2: 指定返回结果的排序方式
    返回值:
    同expr类型

    rank
    命令格式:
    rank() over(partition by col_list1 order by col_list2)
    用途:
    计算排名
    参数说明:
    ● col_list1: 指定开窗口的列
    ● col_list2: 指定排名依据的值
    返回值:
    BIGINT类型

    row_number
    命令格式:
    row_number() over(partition by col_list1 order by col_list2)
    用途:
    返回行号,从1开始
    参数说明:
    ● col_list1: 指定开窗口的列
    ● col_list2: 指定结果返回时的排序的值
    返回值:
    BIGINT类型

    日期函数:

    DE
    日期字符串格式:
    yyyy-mm-dd hh:mi:ss
    说明:
    部分 字符串
    年 yyyy
    月 mm(01 ~ 12)
    日 dd(01 ~ 31)
    时 hh(00 ~ 23)
    分 mi(00 ~ 59)
    秒 ss(00 ~ 59)

    dateadd
    命令格式:
    dateadd(datetime, delta, datepart)
    用途:
    按照指定的单位和幅度修改datetime的值
    参数说明:
    ● datetime:datetime类型,日期值。若输入为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。。
    ● delta:bigint类型,修改幅度。若输入为string类型或double型会隐式转换到biging类型后参与运算,其他类型会引发异常。若delta大于0,加;否则减。
    ● datepart: string类型常量, 修改单位,,支持格式对天的修改 “dd” , 对月的修改 “mm”,对年的修改 “yyyy” ,对小时修改"hh",对分钟修改"mi",对秒修改"ss" ,此外也支持扩展的日期格式, 年-“year”, 月-“month”或”mon”, 日-“day”, 小时-“hour”。 非常量、不支持的格式会或其它类型抛异常。
    返回值:
    返回修改后的结果,datetime类型。若任一输入参数为NULL,返回NULL。
    备注:
    按照指定的单位增减delta时导致的对更高单位的进位或退位,年、月、时、分、秒分别按照10进制、12进制、24进制、60进制、60进制计算。当delta的单位是月时,计算规则如下:若datetime的月部分在增加delta值之后不造成day溢出,则保持day值不变,否则把day值设置为结果月份的最后一天。
    示例:
    ● 加一天:dateadd(trans_date, 1, ‘dd’)
    ● 减一天:dateadd(trans_date, -1, ‘dd’)
    ● 加二十个月:dateadd(trans_date, 20, ‘mm’)
    若trans_date = ‘2005-02-28 00:00:00’, dateadd(transdate, 1, ‘mm’) = ‘2005-03-28 00:00:00’

    datediff
    命令格式:
    datediff(datetime1, datetime2, datepart)
    用途:
    计算两个时间的差值,并转换成指定的单位,如:秒。
    参数说明:
    ● datetime1 , datetime2: datetime类型,被减数和减数,若输入为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。
    ● datepart: string类型常量,修改单位,yyyy、mm、dd、hh、mi、ss中的一个,指定时间差值的单位,也支持扩展的日期格式, 年-“year”, 月-“month”或”mon”, 日-“day”, 小时-“hour”。。若datepart不符合指定的几种pattern或者其它类型则会发生异常。
    返回值:
    返回时间差值,int类型。任一输入参数是NULL,返回NULL。
    备注:
    计算时会按照datepart切掉低单位部分,然后再计算结果。
    示例:
    若start = ‘2005-12-31 23:59:59’, end = ‘2006-01-01 00:00:00’:
    datediff(end, start, ‘dd’) = 1
    datediff(end, start, ‘mm’) = 1
    datediff(end, start, ‘yyyy’) = 1
    datediff(end, start, ‘hh’) = 1

    datepart
    命令格式:
    datepart(datetime, part)
    用途:
    提取日期中part指定的部分
    参数说明:
    ● datetime: datetime类型,日期值,若输入为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。
    ● part:string类型常量。支持的pattern包括yyyy、mm、dd、hh、mi、ss,此外也支持扩展的日期格式, 年-“year”, 月-“month”或”mon”, 日-“day”, 小时-“hour”。。不支持的pattern或其它类型会抛异常。
    返回值:
    返回值类型为bigint.若任一输入参数为NULL,返回NULL

    datetrunc
    命令格式:
    datetrunc (datetime,format)
    用途:
    返回截取后的日期值。
    参数说明:
    ● datetime: datetime类型,日期值,若输入为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。
    ● format: string类型常量,候选值为:yyyy - 年, mm - 月, dd – 日,hh – 小时, mi – 分钟, ss – 秒,也支持扩展的日期格式, 年-“year”, 月-“month”或”mon”, 日-“day”, 小时-“hour”。 非常量、其它类型或不支持的格式会引发异常。
    返回值:
    返回datetime.
    备注:
    任意一个参数为NULL的时候返回NULL。
    示例:
    ● datetrunc(“2011-12-07 16:28:46”, “yyyy”)返回 “2011-01-01 00:00:00”

    from_unixtime
    命令格式:
    from_unixtime(unixtime)
    用途:
    将数字型的unix 时间日期值转为DE日期值
    参数说明:
    ● unixtime: bigint类型,秒数,unix格式的日期时间值,若输入为string,double类型会隐式转换为bigint后参与运算。
    返回值:
    DATETIME类型的日期值, unixtime为NULL时返回NULL。

    getdate
    命令格式:
    getdate()
    用途:
    获取当前系统时间
    返回值:
    返回当前日期和时间,datetime类型。
    备注:
    在一个任务中,即使有多个INSTANCE,getdate总是返回一个固定的值。

    命令格式: isdate(datetime, format)
    用途: 判断一个日期字符串能否根据对应的格式串转换为一个日期值,如果转换成功返回TRUE,否则返回FALSE。
    参数说明:
    ● datetime: string格式的日期值,若输入为bigint, double, datetime类型会隐式转换为string类型后参与运算, 其它类型报异常。
    ● format: string类型常量,指定日期格式,可选值见上表10-1 。其它类型或不支持的格式会抛异常。如果format string中出现多余的格式串,则只取第一个格式串对应的日期数值,其余的会被视为分隔符。如isdate('1234-yyyy ', 'yyyy-yyyy '),会返回TRUE,如果用to_date('1234-yyyy ', 'yyyy-yyyy ')则会返回1234-01-01 00:00:00。
    返回值: 返回BOOLEAN,如dt或fmt为NULL,返回NULL.

    lastday
    命令格式:
    lastday(datetime)
    用途:
    取一个月的最后一天, 截取到天,时分秒部分为00:00:00。
    参数说明:
    ● datetime: datetime格式的日期值,若输入为string类型会隐式转换为datetime类型后参与运算, 其它类型报异常。
    返回值:
    返回datetime,如输入为NULL,返回NULL
    to_date
    命令格式:
    to_date(datetime, format)
    用途:
    将一个字符串按照format指定的格式转成日期值。
    参数说明:
    ● datetime: string类型,要转换的字符串格式的日期值,若输入为bigint, double, datetime类型会隐式转换为string类型后参与运算,为其它类型抛异常,为空串时抛异常。
    ● format: string类型常量,日期格式。非常量或其他类型会引发异常。format参数中标识的间类型的元素(如年、月、日等),可选值见上表10-1,其他字符作为无用字符在parse时忽略。format参数至少包含’yyyy’,否则引发异常,如果format string中出现多余的格式串,则只取第一个格式串对应的日期数值,其余的会被视为分隔符。如to_date('1234-2234 ', 'yyyy-yyyy ')会返回1234-01-01 00:00:00
    返回值:
    返回datetime类型。若任一输入为NULL,返回NULL值。
    备注:
    format参数在parse时,出于效率考虑,会要求yyyy对应的部分是四个字符,mm、dd、hh、mi、ss对应的部分是分别是两个字符,否则会引发异常。详见示例。
    示例:
    ● to_date(‘阿里金融2010-1203’, '阿里金融yyyy-mmdd’)返回‘2010-12-03 00:00:00’
    ● to_date('阿里金融2010-123’, ‘阿里金融yyyy-mmdd’)会引发异常
    ● to_date('2010-24-01’, ‘yyyy’)会引发异常

    to_char
    命令格式:
    to_char(datetime, format)
    用途:
    将日期类型按照format指定的格式转成字符串
    参数类型:
    ● datetime: datetime类型,要转换的日期值,若输入为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。
    ● format: string类型常量。非常量或其他类型会引发异常。Format中的日期格式部分会被替换成相应的数据,其它字符直接输出。详情见示例
    返回值:
    返回值为字符串类型。任一输入参数为NULL,返回NULL。
    示例:
    ● to_char(trade_date, ‘阿里金融yyyyddmm’)返回’阿里金融20102308’
    ● to_char(trade_date, ‘从前有座山’)返回’从前有座山’
    ● to_char(trade_date, ‘yyyyyy’)返回’2010yy’

    unix_timestamp
    命令格式:
    unix_timestamp(datetime)
    用途:
    将日期转化为整型的unix格式的日期时间值
    参数说明:
    ● datetime: datetime类型日期值,若输入为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。
    返回值:
    整型unix格式日期值, datetime为NULL时返回NULL

    weekday
    命令格式:
    weekday (datetime)
    用途:
    返回一个日期值是星期几,
    参数说明:
    ● datetime: datetime类型,日期值,若输入为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。
    返回值:
    返回BIGINT,若输入参数为NULL,返回NULL.
    星期一:0
    星期二:1
    星期三:2
    星期四:3
    星期五:4

    weekofyear
    命令格式:
    weekofyear (datetime)
    用途:
    返回一个日期位于那一年的第几周。周一作为一周的第一天。
    参数说明:
    ● datetime:datetime类型日期值,若输入为string类型会隐式转换为datetime类型后参与运算,其它类型抛异常。
    返回值:
    Bigint类型, 属于一年的第几周,数字。 若输入为NULL,返回NULL

    数学运算函数:
    abs
    命令格式:
    double abs(double number)
    bigint abs(bigint number)
    用途:
    返回绝对值,若输入为NULL,返回NULL
    参数说明:
    ● number: double或bigint类型,输入为bigint时返回bigint,输入为double时返回double类型。若输入为string类型会隐式转换到double类型后参与运算,其它类型抛异常。
    注:当输入bigint类型的值超过bigint的最大表示范围时,会返回double类型,这种情况下可能会损失精度。

    acos
    命令格式:
    double acos(double number)
    用途:
    反余弦函数。
    参数说明:
    ● number: double类型, -1≤number≤1。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    double类型,值域在0 ~ π之间。若number为NULL,返回NULL。

    Asin
    命令格式:
    double asin(double number)
    用途:
    反正弦函数。
    参数说明:
    ● number: double类型, -1≤number≤1。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    double类型,值域在-π/2 ~π/2之间。若number为NULL,返回NULL。
    Atan
    命令格式:
    double atan(double number)
    用 途:
    反正切函数。
    参数说明:
    ● number: double类型,若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    double类型,值域在-π/2 ~π/2之间。若number为NULL,返回NULL。
    conv
    命令格式:
    string conv(string input, bigint from_base, bigint to_base)
    用途:
    进制转换函数
    参数说明:
    ● input: 以string表示的要转换的整数值,接受bigint, double的隐式转换。
    ● from_base,to_base,以十进制表示的进制的值,可接受的的值为2,8,10,16。接受string,double的隐式转换。
    ● 转换过程以64位精度工作,溢出时报异常。
    ● 输入如果是负值,即以’-‘开头,报异常。
    返回值:
    string类型。任一输入为NULL,返回NULL。
    注:如果输入的是小数,则会转为整数值后进行进制转换,小数部分会被舍弃。

    cos
    命令格式:
    double cos(double number)
    用途:
    余弦函数,输入为弧度值。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    double类型。若number为NULL,返回NULL。

    cosh
    命令格式:
    double cosh(double number)
    用途:
    双曲余弦函数。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    double类型。若number为NULL,返回NULL。

    cot
    命令格式:
    double cot(double number)
    用途:
    余弦函数,输入为弧度值。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    double类型。若number为NULL,返回NULL。

    exp
    命令格式:
    double exp(double number)
    用途:
    指数函数。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    double类型。若number为NULL,返回NULL。

    rand
    命令格式:
    double rand(seed)
    用途:
    返回double类型的随机数,返回值区间是的0~1.
    参数说明:
    ● seed:bigint类型, 随机数种子, 决定随机数序列的起始值。

    round
    命令格式:
    round(number, [decimal_places])
    用途:
    四舍五入到指定小数点位置。
    参数说明:
    ● number: double类型,若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    ● decimal_place: bigint类型常量,四舍五入计算到小数点后的位置,其他类型参数会引发异常. 如果省略表示四舍五入到个位数。
    返回值:
    返回四舍五入的结果, double类型。若number或decimal_places为NULL,返回NULL。
    备注:
    ● decimal_places可以是负数。负数会从小数点往左开始round,并且不保留小数部分;如果decimal_places超过了整数部分长度,返回0.
    示例:
    ● round(125.315) 返回 125
    ● round(125.315, 0) 返回125
    ● round(125.315, 1) 返回 125.3
    ● round(125.315, 2) 返回 125.

    floor
    命令格式:
    bigint floor(double number)
    用途:
    向下取整,返回比number小的整数值。
    参数说明:
    ● number: double类型,若输入为string类型或bigint型会隐式转换到double类型后参与运算,其他类型抛异常
    返回值:
    返回向下取整的结果, bigint类型。若number为NULL,返回NULL。
    示例:
    ● floor(1.2)=1
    ● floor(1.9)=1
    ● floor(0.1)=0
    ● floor(-1.2)=-2

    sin
    命令格式:
    double sin(double number)
    用途:
    正弦函数,输入为弧度值。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    double类型。若number为NULL,返回NULL。
    sinh
    命令格式:
    double sinh(double number)
    用途:
    双曲正弦函数。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    double类型。若number为NULL,返回NULL。

    sqrt
    命令格式:
    double sqrt(double number)
    用途:
    计算平方根。
    参数说明:
    ● number: double类型,必须大于0。小于0时引发异常。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    平方根,double类型。若number为NULL,返回NULL。

    tan
    命令格式:
    double tan(double number)
    用途:
    正切函数,输入为弧度值。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    double类型。若number为NULL,返回NULL。

    tanh
    命令格式:
    double tanh(double number)
    用途:
    双曲正切函数。
    参数说明:
    ● number: double类型。若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    返回值:
    double类型。若number为NULL,返回NULL。

    trunc
    命令格式:
    trunc(number[, decimal_places])
    用途:
    将输入值截取到指定小数点位置。
    参数说明:
    ● number:double类型,若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    ● decimal_places: bigint类型常量,要截取到的小数点位置,其他类型参数会引发异常,省略此参数时默认到截取到个位数。
    返回值:
    返回值类型为double。若number或decimal_places为NULL,返回NULL。
    备注:
    ● truncate掉的部分补0。
    ● decimal_places可以是负数,负数会从小数点往左开始truncate,并且不保留小数部分;如果decimal_places超过了整数部分长度,返回0.
    示例:
    ● trunc(125.815) 返回 125
    ● trunc(125.815, 0) 返回125
    ● trunc(125.815, 1) 返回 125.8
    ● trunc(125.815, 2) 返回 125.81
    ● trunc(125.815, 3) 返回 125.815
    ● trunc(-125.815, 2) 返回 -125.8

    ln
    命令格式:
    double ln(double number)
    用途:
    返回number的自然对数。
    参数说明:
    ● number: double类型,若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    说明:
    若number为NULL返回NULL, 若number为负数或零,则抛异常。

    log
    命令格式:
    double log(double base, double x)
    用途:
    返回以base为底的x的对数。
    参数说明:
    ● base: double类型, 若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    ● x: double类型,若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    说明:
    若base和x中存在NULL,则返回NULL;若base和x中某一个值为负数或0,会引发异常;若base为1(会引发一个除零行为)也会引发异常。

    pow
    命令格式:
    double pow(double x, double y)
    用途:
    返回x的y次方,即x^y。
    参数说明:
    ● X: double类型, 若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    ● Y: double类型, 若输入为string类型或bigint类型会隐式转换到double类型后参与运算,其他类型抛异常。
    说明:
    若x或y为NULL,则返回NULL

    字符串处理函数
    chr
    命令格式:
    chr(ascii)
    参数说明:
    ● ascii: bigint类型ascii值,若输入为string类型或double类型会隐式转换到bigint类型后参与运算,其它类型抛异常。
    返回值:
    string
    用途:
    将给定ASCII转换成字符,参数范围是0~255,超过此范围会引发异常。输入值为NULL返回NULL。

    concat
    命令格式:
    concat(string A, string B…)
    参数说明:
    ● A,B等为string类型,若输入为bigint, double, datetime类型会隐式转换为string后参与运算,其它类型报异常。
    返回值:
    string
    用途:
    返回值是将参数中的所有字符串连接在一起的结果。
    备注:
    如果没有参数或者某个参数为NULL,结果均返回NULL
    concat(), concat(null, ‘a’), concat(‘a’, null, ‘b’)返回值都是NULL。

    In
    命令格式:
    key in (value1[, value2, value3, …])
    用途:
    查看key是否在给定列表中出现
    参数说明:
    ● key是待判断值,为任意类型。
    ● value1, value2, …是指定的列表,必须为常量,至少有一项,所有value的类型要一致,否则抛异常。关于in的隐式类型转换参考类型转换一节。
    返回值:
    key在列表中出现返回TRUE,否则为FALSE
    备注:
    ● 如果key为NULL,结果返回NULL
    示例:
    ● ‘net’ IN (‘Tech on the net’, ‘e’) would return FALSE

    ip2region
    命令格式:
    ip2region(ip, region_level)
    用途:
    根据ip地址取相应的城市地址.
    参数说明:
    ● ip:string类型,其它类型报异常,ip格式如192.168.0.1,每段的值在0-255之间,非法的ip返回NULL。
    region_level: string类型,指定返回地址的级别
    country – 国家
    province – 省
    city – 市
    district – 县/区
    school – 学校,如果是教育网的IP,则返回学校
    返回值:

    instr
    命令格式:
    instr(string1, string2[, start_position[, nth_appearance]])
    用途:
    计算一个子串在字符串中的位置.
    参数说明:
    ● string1:string类型,搜索的字符串,若输入为bigint, double, datetime类型会隐式转换为string后参与运算,其它类型报异常。
    ● string2:string类型, 要搜索的子串,若输入为bigint, double, datetime类型会隐式转换为string后参与运算, 其它类型报异常。
    ● start_position:bigint类型,其它类型会抛异常,表示从string1的第几个字符开始搜索,默认起始位置是第一个字符位置1。开始位置如果小于等于0会引发异常。
    ● nth_appearance:bigint类型,大于0,表示子串在字符串中的第n次匹配的位置,如果nth_appearance为其它类型或小于等于0会抛异常。
    返回值:
    string2在string1中的出现的位置。
    备注:
    ● 如果在string1中未找到string2,返回0.
    ● 任一输入参数为NULL返回NULL
    ● 如果string2为空串时总是能匹配成功, 因此instr(‘abc’,’’) 会返回1
    示例:
    ● INSTR (‘Tech on the net’, ‘e’) 返回

    keyvalue
    命令格式
    keyvalue(string srcStr,string split1,string split2, string key)
    keyvalue(string srcStr, string key) //split1 = “;”,split2 = “:”
    keyvalue的功能:
    ● 将srcStr按split1分成key-value对,按split2将key-value对分开,返回key所对应的value
    ● 只有两个参数时,split1 = ’ ;’, split2 = ’ :’
    ● Split1或split2 为NULL时,返回NULL.
    ● srcStr,key为NULL或者没有匹配的key时,返回NULL
    ● 如果有多个key-value匹配,返回第一个匹配上的key对应的value
    示例:
    keyvalue(";decreaseStore:1;xcard:1;isB2C:1;tf:21910;cart:1;shipping:2;pf:0;market:shoes;instPayAmount:0;", “;”,":",“tf”) 返回 “21910”
    注:
    如果从declient console输入时字符串中有分号,应该用;转义。该函数行为是实现成与taobao hive里的UDF一致,如果在taobao hive里的UDF行为有改动,请联系产品经理。

    length
    命令格式:
    length(string)
    参数说明:
    ● string: string类型,若输入为bigint, double, datetime类型会隐式转换为string后参与运算,其它类型报异常。
    用途:
    返回一个字符串的长度。返回值为整型。若string是NULL返回NULL。如果string非UTF-8编码格式,返回-1。

    lengthb
    命令格式:
    lengthb(string)
    参数说明:
    ● string: string类型,若输入为bigint, double, datetime类型会隐式转换为string后参与运算,其它类型报异常。
    用途:
    返回一个字符串的以字节为单位的长度。返回值为整型。若string是NULL返回NULL。

    md5
    命令格式:
    md5(value)
    返回值:
    输入字符串的md5值
    参数说明:
    ● value: string类型,如果输入类型是bigint或double会隐式转换成string类型参与运算,其它类型报异常。输入为NULL,返回NULL。

    regexp_instr
    命令格式:
    regexp_instr(source, pattern[, start_position[,nth_occurrence[,return_option]])
    返回值:
    视return_option指定的类型返回匹配的子串在source中的开始或结束位置。
    参数说明:
    ● source: string类型,待搜索的字符串。
    ● pattern: string类型常量,pattern为空串时抛异常。
    ● start_position:bigint类型常量,搜索的开始位置。不指定时默认值为1,其它类型或小于等于0的值会抛异常。
    ● nth_occurrence: bigint类型常量,不指定时默认值为1, 表示搜索第一次出现的位置。小于等于0或者其它类型抛异常。
    ● return_option: bigint类型常量,值为0或1, 其它类型或不允许的值会抛异常。0表示返回匹配的开始位置,1表示返回匹配的结束位置。
    用途:
    返回字符串source从start_position开始, 和pattern第n次(nth_occurrence)匹配的子串的 起始/结束 位置。 任一输入参数为NULL时返回NULL。
    示例:

    regexp_replace
    命令格式:
    regexp_replace(source, pattern, replace_string, occurrence)
    返回值:
    将source字符串中匹配pattern的子串替换成指定字符串后返回,当输入source, pattern, occurrence参数为NULL时返回NULL,若replace_string为NULL且pattern有匹配,返回NULL,replace_string为NULL但pattern不匹配,则返回原串。
    参数说明:
    ● source: string类型,要替换的字符串。
    ● pattern: string类型常量,要匹配的模式,pattern为空串时抛异常。
    ● replace_string:string,将匹配的pattern替换成的字符串。
    ● occurrence: bigint类型常量,必须大于等于0,表示将第几次匹配替换成replace_string,为0时表示替换掉所有的匹配子串。其它类型或小于0抛异常。
    ● 当引用不存在的组时,不进行替换。

    例如:
    regexp_replace(“123.456.7890”,"([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})","(\1)\2-\3",0) 结果为(123)456-7890

    regexp_replace(“abcd”,"(.)","\1 ",0) 结果为"a b c d "

    regexp_replace(“abcd”,"(.)","\1 “,1) 结果为"a bcd”

    regexp_replace(“abcd”,"(.)","\2",1) 结果为"abcd",因为pattern中只定义了一个组,引用的第二个组不存在。

    regexp_replace(“abcd”,"(.*)(.)$","\2",0) 结果为"d"

    regexp_substr
    命令格式:

    regexp_substr(source, pattern[,start_position[,nth_occurrence]])

    返回值:
    source中匹配pattern指定模式的子串,任一输入参数为NULL返回NULL。

    参数说明:

    ● source: string类型,搜索的字符串。

    ● pattern: string类型常量,要匹配的模型,pattern为空串时抛异常。

    ● start_position: 整型常量,必须大于0。其它类型或小于等于0时抛异常,不指定时默认为1, 表示从source的第一个字符开始匹配。

    ● nth_occurrence:整型常量,必须大于0,其它类型或小于等于0时抛异常。不指定时默认为1,表示返回第一次匹配的子串。

    用途:
    返回字符串source从start_position开始, 和pattern第n次(nth_occurrence)匹配的子串,没有匹配时返回NULL。

    示例:
    regexp_substr (“I love aliyun very much”,“a[[:alpha:]]{5}”),返回 “aliyun”

    sample
    命令格式:
    sample_function (sample_parameter, column_name)
    用途:
    对所有读入的column_name的值,sample_function根据sample_parameter的要求做sample,并过滤掉不满足sample条件的行。
    参数说明:
    ● sample_parameter为x, y,代表哈希为x份,取第y份。y可省略,省略时取第一份。x,y为整型常量,大于0,其它类型或小于等于0时抛异常,若y>x也抛异常。x,y任一输入为NULL时返回NULL。
    ● column_name是采样的目标列。column_name可以省略,省略时根据x, y的值随机采样。任意类型,列的值可以为null。不做隐式类型转换。如果column_name为常量null会报异常。
    备注:
    ? 为了避免null值带来的数据倾斜,因此对于column_name中为null的值,会在y个bullet中进行均匀哈希。
    示例:
    SELECT * FROM TBLA where sample (4, 1 , COLA) = TRUE;
    表示数值会根据COLA hash为4份,取第1份。

    split_part
    命令格式:

    split_part(string, separator, start[, end])

    用途:
    拆分字符串,返回指定的部分

    参数说明:

    ● String:string类型,要拆分的字符串。如果是bigint, double. datetime类型会隐式转换到string类型后参加运算,其它类型报异常。

    ● Separator:string类型常量,拆分用的分隔符,可以是一个字符,也可以是一个字符串,其它类型会引发异常。
    ● start:bigint类型常量,必须大于0。非常量或其它类型抛异常。返回段的开始编号(从1开始),如果没有指定end,则返回start指定的段。

    ● end:bigint类型常量,大于等于start。返回段的截止编号,非常量或其他类型会引发异常。(start 必须大于 0, end 必须大于或等于 start, 否则抛异常,结果为start到end的闭区间)
    返回值:
    separator连接的字符串片断.若任意参数为NULL,返回NULL;若separator为空串,返回string.

    备注:

    ● 如果separator不存在于string中,且start指定为1,返回整个string。 若输入为空串,输出为空串。

    ● 如果start越区,比如字符串拆分完有6个片段,但start大于6,返回空串(’’)。

    to_char
    命令格式:
    to_char(boolean)
    to_char(bigint)
    to_char(double)
    用途:
    将布尔型、整型或者浮点型数值转为对应的字符串表示
    参数类型:
    ● 单参数的to_char可以接受布尔型,整型或者浮点型输入,其它类型抛异常。对datetime类型的格式化输出请参考10.4节。
    返回值:
    对应值的字符串表示,如果输入为NULL,返回NULL。
    示例:
    ● to_char(123)返回’123’
    ● to_char(true)返回’TRUE’

    substr
    命令格式:
    substr(string1, start_position[, length])
    用途:
    返回字符串string1从start_position开始长度为length的子串。
    参数说明:
    ● string1: string类型,若输入为bigint, double, datetime类型会隐式转换为string后参与运算,其它类型报异常。
    ● start_position: bigint类型,当start_position为负数时表示开始位置是从字符串的结尾往前倒数,最后一个字符是-1。其它类型抛异常。
    ● length: bigint类型,大于0,其它类型或小于等于0抛异常。子串的长度。
    返回值:
    在string1中的子串,若任一输入为NULL,返回NULL.
    备注:
    当length被省略时,返回到string1结尾的子串。
    示例:

    tolower
    命令格式:
    tolower(source)
    用途:
    输入字符串对应的小写字符串。
    参数说明:
    ● source: string类型,若输入为bigint, double, datetime类型会隐式转换为string后参与运算,其它类型报异常。
    返回值:
    小写字符串,输入为NULL时返回NULL.
    示例:
    ● tolower(“aBcd”) 结果”abcd”
    ● tolower(“哈哈Cd”) 结果”哈哈cd”

    toupper
    命令格式:
    toupper(source)
    用途:
    输入字符串对应的大写字符串。
    参数说明:
    ● source: string类型,若输入为bigint, double, datetime类型会隐式转换为string后参与运算,其它类型报异常。
    返回值:
    大写字符串,输入为NULL时返回NULL.
    示例:
    ● toupper(“aBcd”) 结果”ABCD”
    ● toupper(“哈哈Cd”) 结果”哈哈CD”

    Trim
    命令格式:
    trim(string )
    用途:
    将输入字符串去除左右空格。
    参数说明:
    ● string:string类型,若输入为bigint, double, datetime类型会隐式转换为string后参与运算,其它类型报异常。
    返回值:
    string类型,输入为NULL时返回NULL。

    wm_concat
    命令格式:
    wm_concat(separator, string)
    用途:
    用指定的spearator做分隔符,做字符串类型的SUM操作。
    参数说明:
    ● separator,string类型常量,分隔符。其他类型或非常量将引发异常。
    ● string,string类型,若输入为bigint, double, datetime类型会隐式转换为string后参与运算,其它类型报异常。
    返回值:
    以separator分隔的字符串。
    备注:
    对语句SELECT wm_concat(‘,’,name) from table;若table为空集合,这条语句返回{NULL}。
    示例:
    SELECT deptno, wm_concat(‘阿里巴巴’,ename) AS employees
    FROM emp
    GROUP BY deptno;

    DEPTNO EMPLOYEES
    

        10 CLARK阿里巴巴KING阿里巴巴MILLER
        20 SMITH阿里巴巴FORD阿里巴巴ADAMS阿里巴巴SCOTT阿里巴巴JONES
    

    其它函数
    cast
    命令格式:
    cast(expr as )
    用途:
    将表达式的结果转换成目标类型,如cast(‘1’ as BIGINT)将字符串’1’转为整数类型的1,如果转换不成功或不支持的类型转换会引发异常。
    参数说明:
    ● cast(double as bigint),将double值trunc成bigint
    ● cast(string as bigint) 在将字符串转为BIGINT时,如果字符串中是以整型表达的数字,会直接转为BIGINT类型。如果字符串中是以浮点数或指数形式表达的数字,则会先转为DOUBLE类型,再转为BIGINT类型。
    ● cast(string as datetime) 或 cast(datetime as string)时,会采用默认的日期格式yyyy-mm-dd hh:mi:ss。

    Coalesce
    命令格式:
    coalesce(expr1, expr2,…)
    用途:
    返回列表中第一个非null的值,如果列表中所有的值都是null则返回null。
    参数说明:
    ● expri是要测试的值。所有这些值类型必须相同或为NULL,否则会引发异常。
    返回值:
    返回值类型和参数类型相同。
    备注:
    参数至少要有一个,否则引发异常。

    Decode
    命令格式:
    decode(expression, search, result[, search, result]…[, default])
    用途:
    实现IF-THEN-ELSE分支选择的功能。
    参数说明:
    ● Expression: 要比较的表达式.
    ● Search: 和expression进行比较的搜索项。.
    ● Result:search和expression的值匹配时的返回值.
    ● Default:可先项,如果所有的搜索项都不匹配,则返回此default值,如果未指定,则会返回null。
    返回值:
    返回匹配的search;如果没有匹配,返回default;如果没有指定default,返回NULL。
    备注:
    ● 至少要指定三个参数。
    ● 所有的result类型必须一致,或为NULL。不一致的数据类型会引发异常。所有的search和expression类型必须一致,否则报异常。
    ● 如果decode中的search选项有重复时且匹配时,会返回第一个值。
    示例:
    SELECT supplier_name, decode(supplier_id, 10000, ‘IBM’, 10001, ‘Microsoft’, 10002, ‘Hewlett ackard’, ‘Gateway’) result FROM suppliers;
    上面的decode函数实现了下面IF-THEN-ELSE语句中的功能
    IF supplier_id = 10000 THEN
    result := ‘IBM’;
    ELSIF supplier_id = 10001 THEN
    result := ‘Microsoft’;
    ELSIF supplier_id = 10002 THEN
    result := ‘Hewlett Packard’;

    greatest
    命令格式:
    greatest(var1,var2…)
    用途:
    返回输入参数中最大的一个
    参数说明:
    ● var1,var2可以为bigint,double,datetime,string。
    ● null为最小
    ● 当输入参数类型不同时,double,bigint,string之间的比较转为double; string,datetime的比较转为datetime。
    不允许其它的隐式转换。
    返回值:
    输入参数中的最大值,当不存在隐式转换时返回同输入参数类型。
    有隐式转换时,double,bigint,string之间的转换返回double。
    string,datetime之间的转换返回datetime

    Ordinal
    命令格式:
    ordinal(bigint nth, var1,var2…)
    用途:
    将输入变量按从小到大排序后,返回nth指定的位置的值
    参数说明
    ● nth: bigint类型, 指定要返回的位置
    ● var1,var2,类型可以为bigint,double,datetime,string。
    ● null为最小
    ● 当输入参数类型不同时,double,bigint,string之间的比较转为double; string,datetime的比较转为datetime
    不允许其它的隐式转换
    返回值:
    排在第nth位的值,当不存在隐式转换时返回同输入参数类型。
    有隐式转换时,double,bigint,string之间的转换返回double。

    option_bit
    使用命令:
    option_bit(value, path)
    参数类型:
    Value: string。如果value为NULL,返回“0”
    Path: string
    返回类型:
    string
    功能描述:
    返回一个string类型的“数字”,假设该数字为returnvalue,returnvalue由下列原则确定:

    1. 如果value含有字符串”vip”, returnvalue = 1;
    2. 在原则1的基础上,如果value含有字符串“ppay”:
      a) 如果returnvalue!= 0, returnvalue按位或 64,此结果作为returnvalue新的值;
      b) 否则returnvalue=64;
    3. 在原则2的基础上,如果value含有字符串“suitSeller”:
      a) 如果returnvalue!= 0, returnvalue按位或16384,此结果作为returnvalue新的值;
      b) 否则returnvalue=16384;
    4. 在原则3的基础上,如果value含有字符串“suitBuyer”:
      a) 如果returnvalue!= 0, returnvalue按位或32768,此结果作为returnvalue新的值;
      b) 否则returnvalue=32768;
    5. 在原则4的基础上,如果value含有字符串“wap”:
      a) 如果returnvalue!= 0, returnvalue按位或262144,此结果作为returnvalue新的值;
      b) 否则returnvalue=262144;
    6. 在原则5的基础上,如果value含有字符串“fbuy:1”:
      a) 如果returnvalue!= 0, returnvalue按位或524288,此结果作为returnvalue新的值;
      b) 否则returnvalue=524288;
    7. 在原则6的基础上,如果 path不为NULL并且不是空串:
      a) 如果returnvalue!= 0, returnvalue按位或131072,此结果作为returnvalue新的值;

    least
    命令格式:
    least(var1,var2…)
    用途:
    返回输入参数中最小的一个
    参数说明:
    ● var1,var2可以为bigint,double,datetime,string。
    ● null为最小
    ● 当输入参数类型不同时,double,bigint,string之间的比较转为double, string,datetime的比较转为datetime
    不允许其它的隐式转换
    返回值:
    输入参数中的最小值,当不存在隐式转换时返回同输入参数类型。
    有隐式转换时,double,bigint,string之间的转换返回double。
    string,datetime之间的转换返回datetime

    trans_cols
    命令格式:
    trans_cols (num_keys, key1,key2,…,col1, col2,col3) as (idx, key1,key2,…,col1, col2)
    用途:
    用于将一行数据转为多行的UDTF,将不同的列转为行。
    参数说明:
    num_keys: bigint类型常量,必须>=0。在转为多行时作为转置key的列的个数。
    Key是指在将一行转为多行时,在多行中重复的列,如要将A,B,C,D转为
    A,B,C
    A,B,D
    则A,B列为key
    keys: 转置时作为key的列,由num_keys决定哪些列作为key。
    cols: 要转为行的列,类型必须相同。
    返回:
    转置后新的列名由as指定。输出的第一列是转置的下标,下标从1开始。
    作为key的列类型保持不变,其余所有的列与原来类型一致。如果num_keys指定所有的列都作为key(即num_keys等于所有列的个数),则只返回一行。
    注:
    UDTF使用上有一些限制
    ● 所有作为key的列必须处在前面,而要转置的列必须放在后面。
    ● 在一个select中只能有一个udtf,不可以再出现其它的列,如不可以写成
    Select login_id, trans_cols(1, login_id, login_ip1, login_ip2) as(idx, login_id, login_ip)
    ● 不可以与roup by/cluster by/distribute by/sort by一起使用。
    例,表中的数据如
    Login_id Login_ip1 Login_ip2
    wangwangA 192.168.0.1 192.168.0.2
    则 trans_cols(1, login_id, login_ip1, login_ip2) as (idx, login_id, login_ip)的输出为:

    trans_array
    命令格式:
    trans_array (num_keys, separator, key1,key2,…,col1, col2,col3) as (key1,key2,…,col1, col2)
    用途:
    用于将一行数据转为多行的UDTF,将列中存储的以固定分隔符格式分隔的数组转为多行。
    参数说明:
    ● num_keys: bigint类型常量,必须>=0。在转为多行时作为转置key的列的个数。
    Key是指在将一行转为多行时,在多行中重复的列。
    ● separator:string类型常量,用于将字符串拆分成多个元素的分隔符。为空时报异常。
    ● keys:转置时作为key的列, 个数由num_keys指定。如果num_keys指定所有的列都作为key(即num_keys等于所有列的个数),则只返回一行。
    ● cols: 要转为行的数组,keys之后的所有列视为要转置的数组,必须为string类型,存储的内容是字符串格式的数组,如“Hangzhou;Beijing;shanghai”,是以”;”分隔的数组。
    返回:
    转置后的行,新的列名由as指定。作为key的列类型保持不变,其余所有的列是string类型。拆分成的行数以个数多的数组为准,不足的补NULL。
    注:
    UDTF使用上有一些限制
    ● 所有作为key的列必须处在前面,而要转置的列必须放在后面。
    ● 在一个select中只能有一个udtf,不可以再出现其它的列
    ● 不可以与group by/cluster by/distribute by/sort by一起使用。
    例,表中的数据如
    Login_id LOGIN_IP LOGIN_TIME
    wangwangA 192.168.0.1,192.168.0.2 20120101010000,20120102010000

    则trans_array(1, “,”, login_id, login_ip, login_time) as (login_id,login_ip,login_time)
    产生的数据是
    Login_id Login_ip Login_time
    wangwangA 192.168.0.1 20120101010000
    wangwangA 192.168.0.2 20120102010000

    如果表中的数据是
    Login_id LOGIN_IP LOGIN_TIME
    wangwangA 192.168.0.1,192.168.0.2 20120101010000

    则对数组中不足的数据补NULL
    Login_id Login_ip Login_time

    unique_id
    uuid命令格式:
    string unique_id()
    用途:
    返回一个随机的唯一id,形式示例:“29347a88-1e57-41ae-bb68-a9edbdd94212_1”,相对于uuid运行效率比较高。

    Uuid
    命令格式:
    string uuid()
    用途:
    返回一个随机的唯一id,形式示例:“29347a88-1e57-41ae-bb68-a9edbdd94212”。

    展开全文
  • 阿里云DataWorks介绍

    千次阅读 2022-01-28 11:23:11
    前几篇博客中,我们讲到阿里云的MaxComputer,今天我们继续学习阿里云的DataWorks,对DataWorks的学习计划是写2章。对外往期内容感兴趣的小伙伴可以参考下面的内容????: hadoop专题: hadoop系列文章. spark专题: ...

    🍓前几篇博客中,我们讲到阿里云的MaxComputer,今天我们继续学习阿里云的DataWorks,对DataWorks的学习计划是写2章。对外往期内容感兴趣的小伙伴可以参考下面的内容👇:

    🍑本文是DataWorks系列的第一章,关于DataWorks的简介部分,主要介绍大数据开发与治理平台DataWorks的功能概念。

    关于DataWorks的实战部分,也在同一天完成了,一起发出来:

    1. DataWorks简介

    DataWorks(数据工场)是阿里云重要的PaaS平台产品,它提供全面托管的工作流服务,一站式开发管理的界面,帮助企业专注于数据价值的挖掘和探索。主要包括下面几个部分:

    • 全面任务托管:具有强大的调度能力,提供完全的托管服务。
    • 多种任务类型:数据同步、OPDS SQL 、MR、SHELL、机器学习。
    • 可视化开发:提供可视化的代开发、工作流设计界面。
    • 监控报警:可视化的任务监控,任务监控短信报警。

    1.1 DataWorks在大数据架构中的位置

    如图:DataWorks集成了数据开发、任务调度、数据管理的功能。
    在这里插入图片描述

    1.2 DataWorks功能架构

    如图:DataWorks将大数据处理的一套流程都集成起来,方便开发业务的流畅运行。
    在这里插入图片描述

    1.3 DataWorks的核心功能

    1. 数据集成:主要用于离线/实时数据同步。提供复杂网络下、丰富的异构数据源之间高速稳定的数据移动及同步能力。
    2. 数据开发:对MaxComputer中的数据进行加工、分析与挖掘等处理,发现其价值。
    3. 数据应用:MaxComputer 中的数据进行加工处理后,应用各种场景,如数据提取、数据交换、数据报表、数据分析。
    4. 数据服务:提供为企业搭建统一的数据服务总线,帮助企业统一管理对外对内的API服务。提供快速将数据表生成API的能力,同时支持快速注册现有API至数据服务平台,进行统一的管理和发布。
    5. 数据治理:多种数据处理视角下的数据治理流程与工具引导,满足数据生产、数据使用、数据管理场景下的主要数据治理需求,如数据质量、数据地图、安全中心、数据保护伞。
    6. 任务运维:各种数据处理任务的发布、监管、运维。

    2. DataWorks的应用

    2.1 数据处理部分

    2.1.1 数据输入(数据同步)

    数据同步是数据流程处理的第一步:如图

    数据集成有以下几个特点:

    • 仅支持结构化的数据
    • 支持单地域内及部分跨地域的相互同步、交换
    • 完成数据同步,本身不提供数据流的消费方式

    通常来说,数据同步都是将业务系统中产生的业务数据定期导入到工作区,通过工作流任务的加工处理后,再将计算结果定期导入到指定的数据源中,供进一步展示或者使用。

    2.1.2 数据开发

    数据开发是在数据集成之后的工作,在大数据处理中的位置如下:
    在这里插入图片描述
    数据开发模式采用项目>解决方案>业务流程三级结构,按照业务种类将相关的不同类型的节点任务组织在一起。

    • 项目:权限组织的基本单位,用来控制用户的开发、运维等权限。
    • 解决方案:可以定义组合一些业务流程为一个解决方案。一个方案可以包含多个流程;解决方案之间可以复用相同的流程;组织完成的解决方案可以沉浸式开发。
    • 业务流程:对业务的抽象实体,以业务的角度来组织数据代码开发,业务流程可以被多个解决方案复用。

    开发流程如下:这里展示的是odps sql的开发流程,其他的开发流程大同小异。
    在这里插入图片描述

    2.1.3 任务运维

    数据开发完成的任务部署到生产调度,调度系统每天运行着大量的数据处理任务,任务之间依赖复杂,保证任务按时正常运行。任务运维在大数据处理的部分如下:
    在这里插入图片描述
    DataWorks的任务运维是在运维中心模块进行,主要包括的功能:
    在这里插入图片描述
    智能监控模块是DataWorks任务运行的监控及分析系统,根据监控规则和任务运行的情况,智能监控决策是否报警、何时报警、如何报警、以及报警给给谁,智能监控会自动选择最合理的报警时间,报警方式以及报警对象。

    2.2 数据管理

    DataWorks的数据管理通过数据地图功能实现对数据的统一管理和血缘的跟踪。数据地铁以数据搜索为基础,提供表使用说明、数据类目、数据血缘、字段血缘等工具,帮助数据表的使用者和拥有者更好地管理数据、协作开发。
    在这里插入图片描述

    数据地图

    3. 总结

    这一部分DataWorks的介绍主要偏向于理论,大家只要记得DataWorks是一个集成各种大数据处理功能的平台即可。

    4. 参考资料

    《阿里云全球培训中心》
    《阿里云DataWorks使用手册》

    展开全文
  • dataworks 下载表数据

    2022-04-19 10:35:57
    背景:dataworks 下载只能下载10000条数据,如果表大小超出大小,需要limit 几次,或者导出到数据库,再从数据库中进行下载。 pyodps 可以通过python代码的方式操作表,这样就可以将表数据下载到文件,之后将文件...
  • 简介:DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率!通过往期的介绍,您已经了解到在DataWorks上进行任务运行的最关键的几个知识点,其中上期参数透传中为您介绍了可以将上游节点...
  • dataworks

    2022-04-10 19:14:40
    dataworks也有该功能 api接口一般是,一行数据,一个json 如果你不用呢? 我们离线数仓还是将数据写到mysql,但是是接口端的mysql hive->mysql(接口库) ->接口->mysql(业务库) 5.同步时间,多久同步一次 crontab 2...
  • 德鲁伊 介绍 git clone cd druid && mvn安装 玩得开心。 相关阿里云产品 文献资料 中文 英文 Druid Spring Boot Starter
  • DataWorks配置调度参数

    2022-03-02 20:16:34
    DataWorks调度配置中心配置调度参数。
  • DataWorks功能实践速览

    2021-08-18 13:58:38
    简介:DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率!往期回顾:DataWorks 功能实践速览01期——数据同步解决方案功能推荐:独享数据集成资源组如上期数据同步解决方案介绍,数据...
  • 简介:DataWorks迁移助手提供任务搬站功能,支持将开源调度引擎Oozie、Azkaban、Airflow的任务快速迁移至DataWorks。本文主要介绍如何将开源Azkaban工作流调度引擎中的作业迁移至DataWorks上。DataWorks迁移助手提供...
  • DataWorks 功能实践速览

    2021-08-18 13:50:09
    简介:DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率! 功能推荐:独享数据集成资源组 如上期数据同步解决方案介绍,数据集成的批数据同步任务运行时,需要占用一定的计算资源,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,570
精华内容 1,428
关键字:

dataworks

友情链接: 机器人充电.rar