美文网首页
MaxCompute快速入门

MaxCompute快速入门

作者: 林挺挺 | 来源:发表于2020-10-27 11:08 被阅读0次

一、创建和查看表

1.1 登录客户端或者网页

运行客户端工具bin目录下的MaxCompute客户端(Linux系统下运行./bin/odpscmd,Windows下运行./bin/odpscmd.bat)登录。首先确认进入的项目空间名称是否正确。项目空间可切换。

useqvanalyse;--使用分析库

1.2 创建表。

本文中,需要创建lintt_bank_data_test用于存储业务数据。

CREATETABLEIFNOTEXISTSlintt_bank_data_test(ageBIGINTCOMMENT'年龄',job            STRINGCOMMENT'工作类型',marital        STRINGCOMMENT'婚否',education      STRINGCOMMENT'教育程度',defaultSTRINGCOMMENT'是否有信用卡',housing        STRINGCOMMENT'房贷',loan            STRINGCOMMENT'贷款',contact        STRINGCOMMENT'联系途径',monthSTRINGCOMMENT'月份',day_of_week    STRINGCOMMENT'星期几',duration        STRINGCOMMENT'持续时间',campaignBIGINTCOMMENT'本次活动联系的次数',pdaysDOUBLECOMMENT'与上一次联系的时间间隔',previousDOUBLECOMMENT'之前与客户联系的次数',poutcome        STRINGCOMMENT'之前市场活动的结果',emp_var_rateDOUBLECOMMENT'就业变化速率',cons_price_idxDOUBLECOMMENT'消费者物价指数',cons_conf_idxDOUBLECOMMENT'消费者信心指数',euribor3mDOUBLECOMMENT'欧元存款利率',nr_employedDOUBLECOMMENT'职工人数',yBIGINTCOMMENT'是否有定期存款');

1.3 查看表。

desc<table_name>;

二、导入数据

Tunnel命令导入数据

2.1 准备数据。

将测试数据存放至本地路径为 /Users/lintt/Desktop/小影工作/odpscmd_public/test_data/。使用的测试数据为banking.txt,主要用于记录各人员的年龄、工作、房贷等信息,选取其中前三条数据展示如下。

44,blue-collar,married,basic.4y,unknown,yes,no,cellular,aug,thu,210,1,999,0,nonexistent,1.4,93.444,-36.1,4.963,5228.1,0

53,technician,married,unknown,no,no,no,cellular,nov,fri,138,1,999,0,nonexistent,-0.1,93.2,-42,4.021,5195.8,0

28,management,single,university.degree,no,yes,no,cellular,jun,thu,339,3,6,2,success,-1.7,94.055,-39.8,0.729,4991.6,1

2.2 创建MaxCompute表。

第一部分创建查看表中已说明。

2.3 执行Tunnel命令。

tunnel upload/Users/lintt/Desktop/小影工作/odpscmd_public/test_data/banking.txt lintt_bank_data_test;

其中,/Users/lintt/Desktop/小影工作/odpscmd_public/test_data/banking.txt是需要上传文件的本地路径。 lintt_bank_data_test为将要导入的表名称。

2.4 结果验证。

执行成功后,您可以使用如下语句查看表bank_data的数据条数,验证是否完成所有数据上传。

SELECTCOUNT(*)FROMlintt_bank_data_test;SELECT*FROMlintt_bank_data_test;

当数据导入到MaxCompute后,可以在MaxCompute上运行SQL来处理数据。

三、运行SQL语句和导出数据

3.1 MaxCompute支持的sql语法。

[1] 各类运算符。

[2] 通过DDL语句对表、分区以及视图进行管理。

[3] 通过SELECT语句查询表中的记录,通过WHERE语句过滤表中的记录。

[4] 通过INSERT语句插入数据、更新数据。

[5] 通过等值连接JOIN操作,支持两张表的关联,并支持多张小表的MapJOIN。

[6] 通过内置函数和自定义函数来进行计算。

[7] 正则表达式。

3.2 导出数据。

tunnel download result_table/Users/lintt/Desktop/小影工作/odpscmd_public/test_data/result.txt;

其中,result_table为需要导出的表,/Users/lintt/Desktop/小影工作/odpscmd_public/test_data/result.txt为导出后保存的路径及名称。更多Tunnel命令,请参考Tunnel命令参考。

四、SQL及函数

4.1 sql使用限制。

限制项最大值/限制条件分类说明

表名长度128字节长度限制表名、列名中不能有特殊字符,以字母开头,且只能用英文小写字母(a-z)、英文大写字母(A-Z)、数字和下划线(_)。

注释长度1024字节长度限制长度不超过1024字节的有效字符串。

表的列定义1200个数量限制单表的列定义个数最多为1200个。

单表分区数60000个数量限制单表的分区个数最多为60000个。

表的分区层级6级数量限制在表中创建的分区层次不能超过6级。

屏显10000行数量限制SELECT语句屏显最多输出10000行。

INSERT目标个数256个数量限制MULTI-INSERT场景,目标表的数量限制为256个。

UNION ALL256个数量限制UNION ALL场景,最多允许合并256个表。

MAPJOIN128个数量限制MAPJOIN场景,最多允许连接128个小表。

MAPJOIN内存限制512 MB数量限制MAPJOIN场景,所有小表的内存不能超过512 MB。

窗口函数5个数量限制单个SELECT语句中最多允许存在5个窗口函数。

ptinsubq1000行数量限制子查询中存在分区列时,子查询的返回结果不能超过1000行。

SQL语句长度2 MB长度限制SQL语句的最大长度为2 MB。包括您使用SDK调用SQL的场景。

WHERE子句条件个数256个数量限制WHERE子句中的条件个数最大为256个。

列记录长度8 MB数量限制表中单个单元的最大长度为8 MB。

IN的参数个数1024数量限制IN的最大参数限制,例如in (1,2,3….,1024)。如果in(…)的参数过多,会影响编译性能。1024为建议值,不是限制值。

jobconf.json1 MB长度限制jobconf.json的大小为1 MB。当表包含的分区数量较多时,大小可能超过jobconf.json,超过1 MB。

视图不可写操作限制视图不支持写入,不支持INSERT操作。

列的数据类型不可修改操作限制不允许修改列的数据类型及列位置。

Java UDF函数不允许为ABSTRACT或者STATIC。操作限制Java UDF函数不能为ABSTRACT或STATIC。

最多查询分区个数10000个数量限制最多查询分区个数不能超过10000个。

SQL执行计划长度1 MB长度限制MaxCompute SQL生成的执行计划不能超过1 MB,否则会触发FAILED: ODPS-0010000:System internal error - The Size of Plan is too large报错。

4.2 运算符。

4.2.1 关系运算符。

运算符说明

A=B如果A或B为NULL,返回NULL;如果A等于B,返回TRUE,否则返回FALSE。

A<>B如果A或B为NULL,返回NULL;如果A不等于B,返回TRUE,否则返回FALSE。

A<B如果A或B为NULL,返回NULL;如果A小于B,返回TRUE,否则返回FALSE。

A<=B如果A或B为NULL,返回NULL;如果A小于等于B,返回TRUE,否则返回FALSE。

A>B如果A或B为NULL,返回NULL;如果A大于B,返回TRUE,否则返回FALSE。

A>=B如果A或B为NULL,返回NULL;如果A大于等于B,返回TRUE,否则返FALSE。

A IS NULL如果A为NULL,返回TRUE,否则返回FALSE。

A IS NOT NULL如果A不为NULL,返回TRUE,否则返回FALSE。

A LIKE B如果A或B为NULL,返回NULL,A为字符串,B为要匹配的模式, 如果匹配,返回TRUE,否则返回FALSE。 (%)匹配任意多个字符。 ()匹配单个字符。 要匹配(%)或()要用转义符表示(‘%’)或(‘_’)。 ‘aaa’ like ‘a__’= TRUE ‘aaa’ like ‘a%’ = TRUE ‘aaa’ like ‘aab’= FALSE ‘a%b’ like ‘a\%b’= TRUE ‘axb’ like ‘a\%b’= FALSE

A RLIKE BA是字符串,B是字符串常量或者正则表达式。如果匹配成功,返回TRUE,否则返回FALSE。如果B为空串会报错退出。如果A或B为NULL,返回NULL。

A IN BB为一个集合,如果A在B中则返回TRUE,否则返回FALSE。 如果A为NULL,返回NULL。 如果B仅包含一个NULL元素,即A IN(NULL),则返回NULL。 B必须是常数集合且至少包含一个项,且所有项的数据类型需一致。 说明 如果B集合中包含NULL元素同时也包含其它元素,则将NULL视为与B集合中其它元素的数据类型一致。。

BETWEEN AND表达式为A [NOT] BETWEEN B AND C。如果A、B或C为空,则为空。如果A大于或等于B且小于或等于C,则为TRUE,否则为FALSE。

IS [NOT] DISTINCT FROM表达式A IS DISTINCT FROM B 相当于NOT(A<=>B);A IS NOT DISTINCT FROM B相当于A<=>B 。

在进行部分关系运算之前,您需要首先进行类型转换,否则可能返回NULL。如下举例,'2019-02-16 00:00:01’为DATETIME类型,而’2019-02-16’为STRING类型,在进行比较关系运算前需首先完成显示类型转换。

selectcast('2019-02-16 00:00:01'ASstring)>'2019-02-16';selectcast('2019-02-16 00:00:02'ASdatetime)>'2019-02-16 00:00:01';

4.2.2 算术运算符。

运算符说明

A + B如果A或B为NULL,返回NULL;否则返回A + B的结果。

A – B如果A或B为NULL,返回NULL;否则返回A – B的结果。

A * B如果A或B为NULL,返回NULL;否则返回A * B的结果。

A / B如果A或B为NULL,返回NULL;否则返回A / B的结果。 说明 如果A和B为BIGINT类型,返回结果为DOUBLE类型。

A % B如果A或B为NULL,返回NULL;否则返回A模B的结果。

+A仍然返回A。

-A如果A为NULL,返回NULL,否则返回-A。

selectage+10,age-10,age%10,-age,age*age,age/10fromuser;

4.2.3 位运算符。

运算符说明

A & B返回A与B进行按位与的结果。例如1&2返回0,1&3返回1,NULL与任何值按位与都为NULL。A和B必须为BIGINT类型。

A | B返回A与B进行按位或的结果。例如1 |2返回3,1 |3返回3,NULL与任何值按位或都为NULL。A和B必须为BIGINT类型。

A || B字符串连接操作符。例如a || b || c 相当于concat(a, b, c)。

注:位运算符不支持隐式转换,只允许BIGINT类型。

4.2.4 逻辑运算符。

运算符说明

A and BTRUE and TRUE=TRUE

TRUE and FALSE=FALSE

FALSE and TRUE=FALSE

FALSE and NULL=FALSE

NULL and FALSE=FALSE

TRUE and NULL=NULL

NULL and TRUE=NULL

NULL and NULL=NULL

A or BTRUE or TRUE=TRUE

TRUE or FALSE=TRUE

FALSE or TRUE=TRUE

FALSE or NULL=NULL

NULL or FALSE=NULL

TRUE or NULL=TRUE

NULL or TRUE=TRUE

NULL or NULL=NULL

NOT A如果A是NULL,返回NULL

如果A是TRUE,返回FALSE

如果A是FALSE,返回TRUE

注:逻辑运算符只允许BOOLEAN类型参与运算,不支持隐式类型转换。

相关文章

网友评论

      本文标题:MaxCompute快速入门

      本文链接:https://www.haomeiwen.com/subject/ppntvktx.html