MaxCompute SQL节点

DataWorks提供的MaxCompute SQL节点,可用于周期性调度MaxComputeSQL任务,并支持与其他类型节点集成以及联合调度。MaxCompute SQL任务采用类似SQL的语法,适用于海量数据(TB级)但实时性要求不高的分布式处理场景。本文为您介绍在DataWorks上开发MaxCompute SQL节点任务。

背景信息

MaxCompute SQL用于处理和查询MaxCompute中的数据,支持常见的SQL操作,例如SELECT、INSERT、UPDATE、DELETE等,以及特定的MaxCompute语法和函数。使用ODPS SQL,您可以编写类似于SQL的语句进行查询和处理数据,而无需编写复杂的数据处理逻辑,SQL语法详情请参见SQL概述

前提条件

  • (可选,RAM账号需要)进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发空间管理员(权限较大,谨慎添加)角色权限,添加成员的操作详情请参见为工作空间添加空间成员

    说明

    如果您使用的是主账号,则忽略该添加操作。

  • 已开发创建项目目录,详情请参见项目目录

使用限制

使用MaxCompute SQL节点进行SQL开发的限制如下:

分类

说明

注释使用

不支持在关键字(SET、USE)语句后单独加注释。

不支持在注释中使用英文分号(;)。

不支持在已完结的语句结尾加注释。SQL语句后添加英文分号(;),表示语句已完结。

SQL下发

ODPS SQL不支持单独使用SET、USE语句,必须和具体的SQL语句一起执行。

SQL开发

SQL代码大小不能超过128 KB,SQL命令条数不能超过200条。

查询结果

仅支持SELECTWITH起始的SQL语句输出格式化的结果集,且最多能显示10,000行结果数据,返回结果大小不超过10 MB

注意事项

  • 请确保执行MaxCompute SQL任务的账号具备对应MaxCompute项目的相关权限,详情请参见DataWorks On MaxCompute权限控制MaxCompute权限

  • MaxComputeSQL任务执行依赖Quota资源,如果您的任务执行时间较久,请前往MaxCompute控制台查看Quota资源消耗,确保存在资源来执行任务。详情请参见:计算资源-Quota管理

  • 开发MaxCompute SQL节点任务时,若涉及特殊参数(如OSS地址)必须使用双引号包裹,未添加引号会导致任务解析异常,进而引发任务执行失败。

  • DataWorks上不同环境运行关键字(SET、USE)相关语句时,执行顺序不同。详情请参见附录:不同环境下SQL执行顺序

  • 部分极端情况下(如服务器异常断电、主备切换等),DataWorks可能无法彻底终止MaxCompute的相关任务进程,此时请前往MaxCompute计算资源对应项目中终止作业

新建MaxCompute SQL节点

新建入口参考:创建MaxCompute SQL节点

开发MaxCompute SQL节点

MaxCompute SQL节点编辑页面,执行如下开发操作。

开发SQL代码

DataWorks提供调度参数,可实现调度场景下代码动态入参,您可在MaxCompute SQL节点中通过${变量名}的方式定义代码中的变量,并在调度配置调度参数处,为该变量赋值。调度参数支持的格式,详情请参见调度参数支持格式。MaxCompute 的SQL命令类似于标准SQL语法,支持DDL、DMLDQL语句以及特定的MaxCompute语法。详细语法和示例请参见SQL概述

根据不同的场景需求,为您提供以下三种操作示例:

说明
  • MaxCompute 2.0扩展函数使用到新数据类型时,您需要在该函数的SQL语句前加SET odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。2.0数据类型详情请参见2.0数据类型版本

  • MaxCompute SQL语句在数据开发与运维中心环境的执行次序不同。如需了解,请参见附录:不同环境下SQL执行顺序

创建表

您可使用CREATE TABLE语句创建非分区表、分区表、外部表及聚簇表,详情请参见CREATE TABLE。SQL示例如下:

--创建一张分区表students
CREATE TABLE IF NOT EXISTS students
( id BIGINT,
  name STRING,
  age BIGINT,
  birth DATE)
partitioned BY (gender STRING); 
插入数据

您可使用INSERT INTOINSERT OVERWRITE语句向目标表中插入更新数据,详情请参见插入或覆写数据(INSERT INTO | INSERT OVERWRITE)。SQL示例如下:

--插入数据
INSERT OVERWRITE students PARTITION(gender='boy') VALUES (1,'ZhangSan',15,DATE '2008-05-15') ;
INSERT OVERWRITE students PARTITION(gender='boy') VALUES (2,'LiSi',17,DATE '2006-07-20') ;
INSERT OVERWRITE students PARTITION(gender='girl') VALUES (3,'LiXia',20,DATE '2003-04-20') ;
INSERT OVERWRITE students PARTITION(gender='girl') VALUES (4,'WangLan',21,DATE '2002-01-08') ;
INSERT OVERWRITE students PARTITION(gender='boy') VALUES (5,'WangWu',17,DATE '2006-09-12') ;
说明

请尽量避免使用INSERT INTO语句插入数据,可能会造成不可预料的数据重复。推荐您使用INSERT OVERWRITE的方式,详情请参见插入或覆写数据

查询数据

您可使用SELECT语句实现嵌套查询、分组查询、排序等操作,详情请参考SELECT语法。SQL示例如下:

--开启全表扫描,仅此Session有效
SET odps.sql.allow.fullscan=true; 

--查询所有男生的信息,并按照ID进行升序排序
SELECT * FROM students WHERE gender='boy' ORDER BY id;
说明

RAM用户默认没有生产表查询权限,生产表查询权限请前往安全中心申请,DataWorksMaxCompute数据权限预设以及访问控制,详情请参见MaxCompute数据权限控制详情。MaxCompute命令授权详情请参见通过命令管理用户权限

使用SQL函数

MaxCompute支持使用内建函数和自定义函数进行数据开发及分析,您可根据业务需求创建使用SQL函数。内建函数详情请参见内建函数概述,自定义函数详情请参见MaxCompute UDF概述。下面示例为您介绍如何使用SQL函数。

  • 内建函数

    内建函数为MaxCompute自身预置的函数,您可以直接调用。基于上述创建表、插入数据及查询数据示例,使用dateadd函数对birth列按照指定单位和幅度变化,命令示例如下:

    --开启全表扫描,仅此Session有效
    SET odps.sql.allow.fullscan=true; 
    SELECT id, name, age, birth, dateadd(birth,1,'mm') AS birth_dateadd FROM students;
  • 自定义函数(UDF)

    使用自定义函数时,您需要自行编写函数代码、上传为资源并注册函数,具体操作请参见资源管理

调试MaxCompute SQL节点

  1. 调试配置计算资源中,选择配置计算资源、计算配额DataWorks资源组

    说明

    访问公共网络或VPC网络环境的数据源需要使用与数据源测试连通性成功的调度资源组。详情请参见网络连通方案

  2. 在工具栏的参数对话框中选择已创建的MaxCompute数据源,单击运行SQL任务。

返回结果查看

  • 运行结果会直接以电子表格的形式展示。您可以在DataWorks中执行操作,或者在电子表格中打开,也可以自由复制内容粘贴至本地Excel中。

    说明

    由于国际标准化组织发布的中国时区信息调整,通过DataWorks执行相关SQL时,日期显示某些时间段会存在时间差异:1900~1928年的日期时间差异为552秒,1900年之前的日期时间差异为9秒。

  • 运行日志查看:您可在运行结果的image页签,单击查看LogView链接,详情请参见使用Logview 2.0查看作业运行信息

  • 返回结果排序:您可在运行结果页面对应的字段上单击下拉框,在排序中选择升降序,单击确认即可完成返回结果排序。

后续步骤

  • 节点调度:若项目目录下的节点需要周期性调度执行,您需要在节点右侧的调度配置中设置调度策略,配置相关的调度属性。

  • 节点发布:若任务需要发布至生产环境执行,请单击界面image图标唤起发布流程,通过该流程将任务发布至生产环境。项目目录下的节点只有在发布至生产环境后,才会进行周期性调度。

附录:不同环境下SQL执行顺序

MaxCompute SQL节点在DataWorks上不同环境运行关键字(SET、USE)相关语句时,执行顺序不同。

  • 在数据开发Data Studio中运行:将合并当前任务代码内所有的关键字(SET、USE)语句,作为所有SQL的前置语句。

  • 在调度环境运行:将按照实际编写顺序执行。

假设在节点中定义的代码如下。

SET a=b;
CREATE TABLE name1(id string);
SET c=d;
CREATE TABLE name2(id string);

不同环境执行顺序如下:

执行SQL

数据开发Data Studio

调度运维

第一条SQL语句

SET a=b;
SET c=d;
CREATE TABLE name1(id string);
SET a=b;
CREATE TABLE name1(id string);

第二条SQL语句

SET a=b;
SET c=d;
CREATE TABLE name2(id string);
SET c=d;
CREATE TABLE name2(id string);

相关文档

如果您想了解更多MaxCompute SQL任务示例,可进入如下链接进行了解: