马克斯Compute基于ODPS2.0新一代的SQL引擎,显然升级了SQL语言编写翻译进度的易用性与语言的表明能力。我们在此推出马克斯Compute(ODPS2.0)重装上阵连串文章

例如:

上边首先大家将介绍环境准备,那是有所后边的操作的底蕴。然后会介绍使用
OdpsCmd
访问表格存储。在第一节我们介绍使用 OdpsStudio
访问表格存储。最终介绍怎么样写 UDF、陈设 UDF 以及在查询中使用 UDF。

其三弹 – 复杂类型

_需求写一个复现的SQL,
从多个表中读取数据,有些之间做Join,有个别之间做Union,生成人中学间数据又要Join,
最终索要输出多张表,最后写成了n层嵌套的子查询,自个儿都看不懂了。而且同样的询问,在分歧的子查询中有再一次。为了保养方便,把纷纭的说话拆成多个语句,然则发现各种语句都亟待单独提交,排队,并且要将中等结果写到本来不需求的权且表,在前面包车型大巴口舌中再读出来,慢了千千万万。。。

先是,准备好二个 MaxCompute 的工程,工程成立指点文书档案,准备好AccessId和AccessKey备用,为了差距其余产品的AccessId和AccessKey,前面大家称之为ODPS-AccessId,ODPS-AccessKey。并在RAM中授权
马克斯Compute 访问 TableStore 的权限,授权情势请参考MaxCompute访问TableStore数据——授权

图片 1

SELECT*FROMsrcUNIONALLSELECT*FROMsrc;

distance double
,

UDTF的优势:

支撑新的SELECT语序

 

上边的语句造出一份有50行的数据表,值是从1到50;
测试时候的多寡就能够方便造出来了。作用相近不难,但之前是odps的二个痛点,没有便宜的不二法门造数据,就不便于测试以及初学者的上学和探讨。当然那也得以经过udtf来落到实处,但是急需复杂的流水生产线:进入ide->写udtf->打包->add
jar/python->create function->执行->drop function->drop
resource。

IN SUBQUERY与LEFT SEMI JOIN类似。

马克斯Compute 与 TableStore
是四个独立的大数额测算以及大数据存款和储蓄服务,所以两者之间的互连网必须保障连通性。
对于 MaxCompute 公共云服务走访 TableStore 存款和储蓄,推荐应用 TableStore
私网
地址,例如

图片 2

等效于

万一互连网堵塞,能够动用公网地址,TableStore原生援救 VPC
互连网决定,也亟需将互联网项目设置为 “允许私行互连网访问”

此文中使用马克斯Compute Studio作呈现,首先,安装MaxCompute
Studio,导入测试马克斯Compute项目,创制工程,建立1个新的马克斯Compute脚本文件, 如下

搬迁七个原先在Oracle上边的ETL系统,发现用了 WHERE EXISTS( SELECT
…) 和 WHERE IN (SELECT
…) 那类的言辞,可是发现ODPS在那上边协助不完整,还要手工业将这个半连连的讲话转换为常见JOIN,再过滤。。。

1.下载并设置大数量测算服务客户端

  • 注一,USING
    后边的字符串,在后台是直接起的子进程来调起命令,没有起shell,所以shell的少数语法,如输入输出重定向,管道等是不帮衬的。如若用户供给能够以
    shell 作为命令,真正的吩咐作为数据输入,参考“无理取闹造数据”的事例;
  • 注二,JAVA 和 PYTHON 的骨子里路径,能够从JAVA_HOME 和 PYTHON_HOME
    环境变量中拿走作业;

图片 3

2.下载解压,将conf/odps_config.ini
的始末改动为:

此时此刻odps select transform完全匹配了hive的语法、功用和作为,包涵input/output row format 以及
reader/writer。Hive上的脚本,超越1/2足以一向拿来运营,部分脚本只需求通过容易改动即可运行。其它大家很多功能都用比hive更高执行效能的言语
(C++) 重构,用以优化品质。

须要先写好FROM,再回头写SELECT列表,才能提示。如下

5.开立一张 马克斯Compute 的数据表关联到 TableStore
的某一张表。

性能

只会重临mytable第11中学的数据,只要mytable1的id在mytable2的id中冒出过

  1. FAILED: ODPS-00一千0:System internal error – fuxi
    job failed, WorkerPackageNotExist:需求设置set
    odps.task.major.version=unstructured_data
  2. FAILED: ODPS-0010000:System internal error –
    std::exception:Message: a timeout was
    reached:一般景观下是OTS的endpoint填写错误,导致ODPS没办法访问,能够咨询ots_support旺旺账号
  3. logview invalid
    end_point:在履行进程中,会回到三个logview
    UENCOREL地址,若是运用浏览器访问该地址再次来到错误,只怕是布局不对,请检查
    马克斯Compute 配置,并发问 odps_support 旺旺账号
  1. Using
    子句内定的是要举办的命令,而非能源列表,那或多或少和大部分的马克斯Compute
    SQL语法分化,这么做是为着和hive的语法保持包容。

  2. 输入从stdin传入,输出从stdout传出;

  3. 能够配备分隔符,默许使用 \t 分隔列,用换行分隔行;

  4. 能够自定义reader/writer,但用内置的reader/writer会快很多

  5. 应用自定义的能源(脚本文件,数据文件等),能够利用 set
    odps.sql.session.resources=foo.sh,bar.txt;
    来钦点。能够内定四个resource文件,用逗号隔开分离(因而不一样意resource名字中包罗逗号和分行)。此外大家还提供了resources子句,能够在using
    子句前边内定 resources ‘foo.sh’, ‘bar.txt’
    来钦赐财富,三种方式是等价的(参考“用odps跑测试”的事例);

SELECT*frommytable1whereidin(selectidfrommytable2);

//
我们选出来1行数据,并将name/name传入UDF,再次来到多个string的增加

图片 4

别的改良

set
odps.sql.preparse.odps2=lot;

上述效能能够利用SELECT TRANSFO猎豹CS6M来促成

图片 5

 

马克斯Compute(原ODPS)是Ali云自主研究开发的享有产业界超越水平的分布式大数目处理平台,
尤其在公司内部获得广泛应用,支撑了三个BU的主导业务。
马克斯Compute除了不停优化质量外,也从事于进步SQL语言的用户体验和表达能力,进步大面积ODPS开发者的生产力。

SELECT*FROMtable1JOINtable2ONtable1.id = table2.id;

4.在bin/odpscmd 下输入环境变量,显式开启 ODPS 2.0
的非结构化功用( 仅在 ODPS 2.0 总结框架完全上线为必须),单独实施
xx.sql 文件时也亟需将上面设置写在 SQL 文件的早先处。

  1. 兴妖作怪造数据

当中的ds假使是分区列,则select dt from
sales_date 会单独运营作业执行子查询,而不会转化为SEMIJOIN,执行后的结果会挨个与ds相比,sales_detail中ds值不在重临结果中的分区不会读取,保障分区裁剪还是有效。

TableStore数据类型

MaxCompute数据类型

string

string

binary

blob

int

bigint

double

double

第1弹 – 善用MaxCompute编写翻译器的错误和警示

想测试三个新写的UDF,只写SELECT
myudf(‘123’);会报错,还必须创设一个dual表,里面加一行数据,好艰辛。如若测试UDAF,还要在测试表里面准备多行数据,每便测试不一致的输入都要修改表内容如故创造新表,倘若有个艺术不用创设表也能例外的多寡整合测试自身的UDF就好了。。。

‘tablestore.columns.mapping’=’:vid, :gt, longitude, latitude, distance, speed,
oil_consumption’, —
(3)

第①弹 – 新的中坚数据类型与内建函数

创设一个新的公文,如下:

)

  1. 用odps跑测试

SELECT*frommytable1whereidin(selectidfrommytable2)ORvalue>0;

摘要: 大数据测算服务 马克斯Compute
能够提供强有力的分析能力,而分布式 NoSQL
数据库表格存款和储蓄在行级别上的实时更新和可覆盖性写入等风味,相对于
马克斯Compute 内置表 append-only 批量操作,提供了3个很好的补给。

6.
财富文件会被下载到执行钦点命令的办事目录,可以动用文件接口打开./bar.txt文件。

例如:

access_id=ODPS-AccessId

图片 6

场景2

set odps.sql.type.system.odps2=true; –是永葆表格存款和储蓄的binary类型

理论上select transform能落到实处的成效udtf都能落到实处,然而select
transform比udtf要灵活得多。且select
transform不仅帮衬java和python,还辅助shell,perl等别的脚本和工具。
且编写的进度要简单,特别适合adhoc功能的落到实处。举多少个例证:

0

什么是大数据测算服务 马克斯Compute?

Select
transform允许sql用户钦点在服务器上推行一句shell命令,将上游数据各字段用tab分隔,每条记下一行,逐行输入shell命令的stdin,并从stdout读取数据作为出口,送到下游。Shell命令的实质是调用Unix的一部分utility,因而得以运转其他的脚本解释器。包蕴python,java,php,awk,ruby等。

则等效于

longitude double,

  1. 能够串联着用,使用 distribute by和 sort by对输入数据做预处理

ODPS1.0不帮忙顶层UNION。ODPS2.0方可支撑,例如

latitude double,

图片 7

上次向你介绍了复杂类型,从本篇初阶,向你介绍MaxCompute在SQL语言DML方面的千锤百炼

怎么着是表格存款和储蓄 TableStore?

该命令包容Hive的Transform成效,能够参见Hive的文书档案。一些必要注意的点如下:

SELECT*FROMsrc1UNIONSELECT*FROMsrc2;

# confirm threshold for query input size(unit:
GB)

图片 8

MaxCompute支持UNION [DISTINCT] – 其中DISTINCT为忽略

眼下ODPS-SQL访问 TaleStore
还在对执行逻辑实行深度的优化,要是有须要请联系ots_support,大家将本着工作场景来开始展览优化。

  1. awk 用户会很欣赏这些成效

SELECT*frommytable1 aLEFTSEMIJOINmytable2 bona.id=b.id;

3.行bin/odpscmd,输入show
tables,正常实施则代表上边配置不错。

SELECT TRANSFORM 的优势:

SELECT*frommytable1 aLEFTANTIJOINmytable2 bona.id=b.id;

‘tablestore.table.name’=’vehicle_track’ —
(4)

抑或用map,reduce的严重性字会让逻辑显得清楚部分

而是,假如mytable2中有其余为NULL的列,则 not
in表明式会为NULL,导致where条件不创立,无数据再次来到,此时与LEFT ANTI
JOIN差别。

关周到据库已经存在半个世纪,有拾壹分广泛的施用情形,可是在全速迭代的网络世界其扩充性和
schema 灵活性被诟病颇多,因而类似 TableStore/BigTable/HBase
等强调扩充性和灵活性的NoSQL数据库稳步流行起来,那几个 NoSQL 数据库只提供
API 接口,不提供 SQL 访问,那就招致众多熟识 SQL
然则不欣赏写代码的用户没办法很舒畅(Jennifer)的选择此类NoSQL数据库。基于此,表格存储开发公司一同
马克斯Compute(下文中 ODPS 与 马克斯Compute 同义)团队发掘了 ODPS-SQL
访问表格存款和储蓄的门径,这样3个只懂 SQL
的用户也足以愉悦的拜会表格存款和储蓄在那之中的雅量数量了。

属性上,SELECT TRANSFO奥德赛M 与UDTF
各有千秋。经过各个场景比较测试,数据量较小时,超越四分之二景色下select
transform有优势,而数据量大时UDTF有优势。由于transform的开支越发方便人民群众,所以select
transform11分适合做adhoc的数码解析。

LEFT SEMI JOIN

  • 实例名称:vehicle-test
  • 数量表名称:vehicle_track
  • 主键音信:vid(int); gt (int)
  • 做客域名:https://vehicle-test.cn-shanghai.ots-internal.aliyuncs.com

或者

只要采用上述以FROM先导的法门书写,则能够大势所趋的依据上下文进行提示。如下

)

地方的语句仅仅是把value原样输出,然而了然awk的用户,从此过上了写awk脚本不写sql的光阴

事实上的逻辑执行顺序是 FROM->WHERE->GROUY
BY->HAVING->SELECT->OEnclaveDER
BY->LIMIT,前七个是后2个的输入,与正统的书写语序实际并差异。很多便于模糊的标题,都以通过引起的。例如order
by中不得不引用select列表中生成的列,而不是访问FROM的源表中的列。HAVING能够访问的是
group by key和聚合函数。SELECT的时候,倘使有GROUP BY,就不得不访问group
key和聚合函数,而不是FROM中源表中的列。

接下来,准备好1个表格存款和储蓄的实例以及一张数据表,报表存款和储蓄实例管理,准备好实例名、EndPoint,为了不相同别的产品的AccessId和AccessKey,后边我们称之为TableStore-InstanceName,TableStore-EndPoint。

  1. 子进度和父进程是三个经过,而UDTF是单线程的,就算总括占比比较高,数据吞吐量相比较小,能够行使服务器的多核本性
  2. 数码的传输通过更底层的系统调用来读写,效能比java高
  3. SELECT
    TRANSFOPRADOM援救的一些工具,如awk,是natvie代码达成的,和java相比较理论上大概会有总体性优势。

对于NOT IN SUBQUEPAJEROY,类似于LEFT ANTI JOIN,不过有少数字显示著分化

 

SELECT TRANSFORM 介绍

小节

 

  1. 支撑任何脚本语言

标注

 

本条例子是为了注明,很多java的utility可以直接拿来运维。java和python即便有现成的udtf框架,不过用select
transform编写更简便,并且不须要万分重视,也未尝格式需要,甚至能够完结离线脚本拿来一向就用。

SELECTkey,max(value)FROMsrc tWHEREvalue>0GROUPBYkeyHAVINGsum(value)
>100ORDERBYkeyLIMIT100;

vid bigint,

主编:

马克斯Compute协助以履行顺序书写查询语句,例如地方的话语能够写为

data_size_confirm=100.0

照旧应用python

例如:

使用客户端 ODPS-CMD

标注

FROMsrc tWHEREvalue >0GROUPBYkeyHAVING sum(value) >100SELECTkey,
max(value)ORDERBYkeyLIMIT100;

https_check=true

力排众议上OpenM翼虎的模子都得以映射到地点的盘算进度。注意,使用map,reduce,select
transform那多少个语法其实语义是一律的,用哪个关键字,哪类写法,不影响一向进程和结果。

SELECTDISTINCT*FROM(SELECT*FROMsrc1UNIONALLSELECT*FROMsrc2) t;

行使 UDF(User Defined Function)处理多少

图片 9

只会回来mytable第11中学的数据,只要mytable1的id在mytable2的id没有出现过

access_key= ODPS-AccessKey

select transform (key, value) using “perl -e ‘while($input =
<STDIN>){print $input;}'” from src;

注1

小提示:由于 马克斯Compute 在 2.0
版本的总括框架才能帮忙直接待上访问 TableStore
数据,该版本还在灰度上线中,最近还必要 申请MaxCompute
2.0试用
,具体开通使用办法请参见 怎样申请试用马克斯Compute
2.0。

作者:隐林

原有ODPS也支持[NOT] IN
SUBQUE冠道Y不作为JOIN条件,例如出现在非WHERE语句中,大概尽管在WHERE语句中,但无能为力转换为JOIN条件。MaxCompute仍旧支撑那种用法,但是此时因为不可能变换为SEMI
JOIN而必须兑现运维一个独立的学业来运作SUBQUE普拉多Y,所以不协助correlated条件。

6.执行ODPS-SQL

应用场景举例

例如:

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图