MaxCompute快速入门

一、创建和查看表

1.1 登录客户端或者网页

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

use qvanalyse; --使用分析库

切换成功如下图所示

1.2 创建表。

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

CREATE TABLE IF NOT EXISTS lintt_bank_data_test
(
 age             BIGINT COMMENT '年龄',
 job             STRING COMMENT '工作类型',
 marital         STRING COMMENT '婚否',
 education       STRING COMMENT '教育程度',
 default         STRING COMMENT '是否有信用卡',
 housing         STRING COMMENT '房贷',
 loan            STRING COMMENT '贷款',
 contact         STRING COMMENT '联系途径',
 month           STRING COMMENT '月份',
 day_of_week     STRING COMMENT '星期几',
 duration        STRING COMMENT '持续时间',
 campaign        BIGINT COMMENT '本次活动联系的次数',
 pdays           DOUBLE COMMENT '与上一次联系的时间间隔',
 previous        DOUBLE COMMENT '之前与客户联系的次数',
 poutcome        STRING COMMENT '之前市场活动的结果',
 emp_var_rate    DOUBLE COMMENT '就业变化速率',
 cons_price_idx  DOUBLE COMMENT '消费者物价指数',
 cons_conf_idx   DOUBLE COMMENT '消费者信心指数',
 euribor3m       DOUBLE COMMENT '欧元存款利率',
 nr_employed     DOUBLE COMMENT '职工人数',
 y               BIGINT COMMENT '是否有定期存款'
);

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的数据条数,验证是否完成所有数据上传。

SELECT COUNT(*) FROM lintt_bank_data_test;
SELECT * FROM lintt_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类型,在进行比较关系运算前需首先完成显示类型转换。

select cast('2019-02-16 00:00:01' AS string) > '2019-02-16';
select cast('2019-02-16 00:00:02' AS datetime) > '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。
select age+10, age-10, age%10, -age, age*age, age/10 from user;

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类型参与运算,不支持隐式类型转换。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值