MaxCompute客户端常用命令

MaxCompute客户端命令

最新的MaxCompute服务对常用命令做了调整,新的命令风格更贴近于Hive的使用方式,方便原有的Hadoop和Hive用户。MaxCompute提供了对项目空间、表、资源和实例等对象的一系列操作。您可以通过客户端命令或SDK来操作这些对象。包括:

  • 项目空间操作
  • 表操作
  • 实例操作
  • 资源操作
  • 函数操作
  • SET操作
  • 时区配置操作(暂略,具体见:时区配置操作
  • 其他

对于MaxCompute客户端命令,可以使用odpscmd客户端进行运行,也可以使用IDEA MaxCompute Studio中创建的SQL Script文件中运行。客户端和基本开发环境的构建见:MaxCompute基础开发环境搭建。下面命令在IDEA MaxCompute Studio中创建的SQL Script文件运行。

具体内容参考自:MaxCompute官方文档

项目空间操作命令

1. 进入项目空间(use)

-- 使用项目空间
use YITIAN_BJ_MC;

2. 访问该项目空间下的表

select * from emp;

3. 访问另一项目空间下的对象,需要指定项目空间名:

--在my_project_test空间下访问另一项目空间my_project2下的表test_src。
odps @ my_project_test>select * from my_project2.test_src;

4. 列出所有项目空间(list projects)

-- 列出所有项目空间
list projects;

-- 返回结果
Project Name                                 Comment                       Creation Time                        Last Modified Time                   
yitian_bj_dev                                                              2020-04-15 15:49:07                  2020-04-15 15:49:07                  
yitian_bj_dev_dev                                                          2020-04-15 15:49:15                  2020-04-15 15:49:15                  
yitian_bj_mc                                                               2019-05-29 17:26:39                  2020-02-17 13:57:51                  
yitian_bj_mc_dev                                                           2019-05-29 17:26:51                  2020-02-17 13:57:53                  
yitian_maxcompute                                                          2019-05-29 11:25:24                  2020-02-17 13:57:55                  
yitian_maxcompute_s_dev                                                    2019-05-29 11:32:36                  2020-02-17 13:57:57    

5. 设置项目空间属性(setproject)

-- 命令格式
setproject <KEY>=<VALUE>;

-- 设置允许全表扫描
setproject odps.sql.allow.fullscan=true;

--显示setproject设置的参数。
setproject;

Project属性可设置的选项见:Project属性详细说明

6. 设置IP白名单

-- 设置公网下IP白名单
setproject odps.security.ip.whitelist= IP Address
-- 设置VPC网络下IP白名单
setproject odps.security.vpc.whitelist= RegionID_VPCID[IP address]

白名单中具体IP的配置见:项目空间操作

表操作

1. 创建表(create table)

-- 命令格式
CREATE TABLE [IF NOT EXISTS] table_name
 [(col_name data_type [COMMENT col_comment], ...)]
 [COMMENT table_comment]
 [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
 [LIFECYCLE days]
 [AS select_statement]
 CREATE TABLE [IF NOT EXISTS] table_name
 LIKE existing_table_name

其中需要说明的是:

IF NOT EXISTS: 在创建表时,如果不指定IF NOT EXISTS选项而存在同名表,则返回出错;如果指定此选项,则无论是否存在同名表,即使原表结构与要创建的目标表结构不一致,均返回成功。已存在的同名表的元信息不会被改动。

PARTITIONED BY:指定表的分区字段。MaxCompute 1.0版仅支持STRING类型。MaxCompute 2.0版对分区类型的支持进行了扩充,支持TINYINT、SMALLINT、INT、BIGINT、VARCHAR和STRING分区类型。当利用分区字段对表进行分区时,新增分区、更新分区内数据和读取分区数据均不需要做全表扫描,提高处理效率。

LIFECYCLE:指明此表的生命周期,仅支持正整数。单位:天。

  • 对于非分区表:自最后一次数据被修改开始计算,经过days天后数据仍未被改动,则此表无需您干预,将会被MaxCompute自动回收(类似drop table操作)。
  • 对于分区表:根据各分区的LastDataModifiedTime判断该分区是否该被回收。不同于非分区表,分区表的最后一个分区被回收后,该表不会被删除。生命周期只能设定到表级别,不能在分区级设置生命周期。
--如果没有同名表存在,创建一张分区表sale_deail。
CREATE TABLE IF NOT EXISTS sale_detail(
  shop_name     STRING,
  customer_id   STRING,
  total_price   DOUBLE)
PARTITIONED BY (sale_date STRING,region STRING);

--创建非分区表test1。
create table test1 (key string);

--创建分区表test2。
create table test2 (key bigint) partitioned by (pt string, ds string);

--创建带有生命周期的表test3。
create table test3 (key boolean) partitioned by (pt string, ds string) lifecycle 100;

-- 除生命周期属性外,test4的其他属性(字段类型、分区类型等)均与test3完全一致。
create table test4 like test3;

-- 这个操作会创建test5,但分区生命周期信息不会被拷贝到目标表中。此操作仅会将test2的数据复制到test5中(如果test2有数据,此示例中test2为空表,后续章节会介绍数据导入)。
create table test5 as select * from test2;

2. 修改表的owner(alter table)

-- 命令格式
ALTER TABLE table_name CHANGEOWNER to new_owner;

-- 将表test1的所有人修改为[email protected]。
ALTER TABLE test1 CHANGEOWNER to '[email protected]';

3. 删除表(drop table)

-- 命令格式
DROP TABLE [IF EXISTS] table_name; 

--删除表sale_detail。如果表存在,返回成功。
DROP TABLE sale_detail; 
--删除表sale_detail。无论sale_detail表是否存在,均返回成功。
DROP TABLE IF EXISTS sale_detail; 

如果不指定IF EXISTS选项而表不存在,则返回异常;如果指定此选项,无论表是否存在,均返回成功。

4. 查看表信息(desc) 

-- 查看表或者视图信息
DESC <table_name>; 

-- 查看外部表信息
DESC extended <table_name>; 

具体返回的信息如下:

  • Owner:表的属主。
  • Project:表所属的项目空间。
  • CreateTime:创建时间。
  • LastDDLTime:最后一次DDL操作时间。
  • LastModifiedTime:表中的数据最后一次被改动的时间。
  • InternalTable:表示被描述的对象是表,总是显示YES。
  • Size:表数据所占压缩后的存储容量大小,压缩比一般为5倍,单位Byte。
  • Native Columns:非分区列的信息,包括列名、类型和备注。
  • Partition Columns:分区列信息,包括分区名、类型和备注。
  • Extended Info:外部表StorageHandler 、Location等信息。
DESC sale_detail; 

-- 返回信息
+------------------------------------------------------------------------------------+
| Owner: [email protected] | Project: yitian_bj_mc                                |
| TableComment:                                                                      |
+------------------------------------------------------------------------------------+
| CreateTime:               2019-05-31 10:43:36                                      |
| LastDDLTime:              2019-05-31 10:43:36                                      |
| LastModifiedTime:         2019-05-31 14:59:55                                      |
+------------------------------------------------------------------------------------+
| InternalTable: YES      | Size: 1440                                               |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field           | Type       | Label | Comment                                     |
+------------------------------------------------------------------------------------+
| shop_name       | string     |       |                                             |
| customer_id     | string     |       |                                             |
| total_price     | double     |       |                                             |
+------------------------------------------------------------------------------------+
| Partition Columns:                                                                 |
+------------------------------------------------------------------------------------+
| sale_date       | string     |                                                     |
| region          | string     |                                                     |
+------------------------------------------------------------------------------------+

5. 查看表的分区信息(desc partitions)

-- 命令格式
desc table_name partition(pt_spec);

-- 使用示例
desc meta.m_security_users partition (ds='20151010');
+------------------------------------------------------------------------------------+
| PartitionSize: 2109112                                                             |
+------------------------------------------------------------------------------------+
| CreateTime:               2015-10-10 08:48:48                                      |
| LastDDLTime:              2015-10-10 08:48:48                                      |
| LastModifiedTime:         2015-10-11 01:33:35                                      |
+------------------------------------------------------------------------------------+
OK

6. 查看项目空间的表(show tables)

-- 列出当前项目空间下所有的表
SHOW TABLES;

-- 列出当前项目空间下表名与'chart'匹配上的表,支持正则表达式
SHOW TABLES like 'chart';

7. 查看表的分区信息(show partitions)

-- 命令格式
SHOW PARTITIONS table_name; 

-- 使用示例
SHOW PARTITIONS sale_detail; 
-- 返回信息
sale_date=201312/region=hangzhou
OK

 列出一张表中的所有分区,表不存在或非分区表时报错。

实例操作

在MaxCompute中,部分任务(Task)在执行时会被实例化,以MaxCompute实例(下文简称为实例或Instance)的形式存在。

1. 查看示例信息(Show Instances/Show P)

-- 命令格式
SHOW INSTANCES [FROM startdate TO enddate] [number];
SHOW P [FROM startdate TO enddate] [number];
SHOW INSTANCES [-all];
SHOW P [-all];
SHOW P -p <project name>;

参数说明

  • startdate、enddate:返回指定时间段内提交的实例,即从起始时间startdate到结束时间enddate提交的实例信息,需满足格式:yyyy-mm-dd,精度到天。可选参数,如果不指定,则返回您在三天内提交的实例。
  • number:指定返回实例的数量。依照时间排序,返回提交距离当前时间最近的number个实例信息。如果不指定number,则返回满足要求的所有实例信息。
  • -all:返回当前项目下所有执行过的实例,默认最大返回50条。注意执行该命令的用户需要有项目空间的List权限。如果需要返回更多条记录,请使用-limit number参数,例如show p -all -limit 100表示返回当前项目下100条执行过的实例记录。
  • project name:项目名称,您使用的账号必须已经是项目成员。

返回由当前用户创建的实例信息。查询结果输出项包括:StartTime(时间精确到秒)、RunTime(s)、Status(实例状态)。Instance有以下6种状态:

  • Running:正在运行。
  • Success:成功结束。
  • Waiting:等待中。
  • Failed:作业失败,但是尚未改写目标表数据。
  • Suspended:挂起。
  • Cancelled:被中止。

2. 查看实例状态(Status Instance)

-- 命令格式
status instance_id; 

功能说明:返回指定实例的状态,状态包括Success、Failed、Running和Cancelled。

3. Top Instance

-- 返回当前项目中当前账号所提交的正在执行的作业信息
top instance; 

-- 返回当前项目下所有正在执行的作业,默认最大返回50条。如需返回更多条记录,请使用-limit number参数
top instance -all;

4. 停止实例

-- 停止指定的实例,此实例的状态必须为Running。
kill instance_id; 

5. 查询实例信息

desc instance instance_id; 

6. 查看实例日志信息(Wait Instance)

-- 根据具体的实例ID获得任务运行日志信息,包含Logview链接。再通过查看Logview可以获得任务的详细日志
wait instance_id; 

资源操作

1. 添加资源

-- 命令格式
add file <local_file> [as alias] [comment 'cmt'][-f];
add archive <local_file> [as alias] [comment 'cmt'][-f];
add table <table_name> [partition (spec)] [as alias] [comment 'cmt'][-f];
add <PY | JAR> <localfile[.py |.jar]> [COMMENT 'cmt'][-f];

参数说明

  • file/archive/table/jar/py:表示资源类型。
  • local_file:表示本地文件所在路径。并以此文件名作为该资源名,资源名是资源的唯一标识。
  • table_name:表示MaxCompute中的表名。目前不支持添加外部表为资源。
  • [PARTITION (spec)]:当添加的资源为分区表时,MaxCompute仅支持将某个分区作为资源,不支持将整张分区表作为资源。
  • alias:指定资源名,不加该参数时默认文件名为资源名。Jar及Python类型资源不支持此参数。
  • [comment'cmt']:给资源添加注释。
  • [-f]:当存在同名的资源时,此操作会覆盖原有资源。如果不指定此选项,存在同名资源时,操作将失败。

 2. 查看资源列表

-- 命令格式
LIST RESOURCES;

3. 下载资源

GET RESOURCE <resource_name> <path>;

功能说明:下载MaxCompute中的资源到本地。资源类型必须为File、Jar、Archive或Py,不支持Table类型。

参数说明

  • resource_name:要下载的资源名称。
  • path:资源保存到本地的路径。

4. 删除资源

DROP RESOURCE <resource_name>; 

函数操作

1. 注册函数

-- 命令格式
CREATE FUNCTION <function_name> AS <package_to_class> USING <resource_list>;

参数说明

  • function_name:新建的UDF函数名称。函数名称需要唯一,同名函数只能注册一次。
  • package_to_class:包名,此名称须用引号引起。
    • Java UDF,此名称为从顶层包名一直到实现UDF类的类名。
    • Python UDF,此名称为Python脚本名.类名。
  • resource_list:UDF所用到的资源列表。
    • 此资源列表必须包括UDF代码所在的资源,且资源已经上传至MaxCompute。
    • 如果您的代码通过Distributed Cache接口读取资源文件,此列表中还要包括UDF所读取的资源文件列表。
    • 资源列表由多个资源名组成,资源名之间由逗号分隔,且资源列表必须用引号引起。
    • 如果需要指定资源所在的Project,写法为<project_name>/resources/<resource_name>
-- 创建函数my_lower。假设Java UDF类org.alidata.odps.udf.examples.Lower在my_lower.jar中。
CREATE FUNCTION my_lower AS 'org.alidata.odps.udf.examples.Lower' USING 'my_lower.jar';

-- 创建函数test_udtf。假设Java UDF类com.aliyun.odps.examples.udf.UDTFResource是在udtfexample1.jar中,同时该函数还依赖File资源file_resource.txt、Table资源table_resource1以及Archive资源test_archive.zip。
create function test_udtf as 'com.aliyun.odps.examples.udf.UDTFResource' using 'udtfexample1.jar, file_resource.txt, table_resource1,test_archive.zip';

2. 注销函数

DROP FUNCTION <function_name>;

3. 查看函数清单

-- 查看当前项目空间中的所有自定义函数
LIST FUNCTIONS; 
-- 查看指定项目空间下的所有自定义函数
LIST FUNCTIONS -p project_name;

 Set操作

set命令设置MaxCompute或用户自定义的系统变量,区别与setproject命令:

  • set命令:对当前Session设置MaxCompute系统变量。
  • setproject命令:project级别的系统变量设置

-- 命令格式
set <KEY>=<VALUE>

可用的key和value属性值见:MaxCompute的Set操作。 

其他操作

1. Alias命令

-- 命令格式
alias <alias>=<real>;

功能说明:为资源创建别名。Alias命令可以在不修改代码的前提下,在MapReduce或UDF代码中,通过某个固定的资源名读取不同资源(数据)。

参数说明

  • alias:命名后的资源别名。
  • real:资源的原名。
--新增资源res_20121208和res_20121209。
ADD TABLE sale_detail PARTITION (ds='20121208') AS res_20121208;
ADD TABLE sale_detail PARTITION (ds='20121209') AS res_20121209;

--命名资源res_20121208的别名为resName,并调用它。
ALIAS resName=res_20121208;
jar -resources resName -libjars work.jar  -classpath ./work.jar com.company.MainClass args ...;  // 作业一。
--命名资源res_20121209的别名为resName,并调用它。
ALIAS resName=res_20121209;
jar -resources resName -libjars work.jar  -classpath ./work.jar com.company.MainClass args ...; // 作业二。

2. 计量预估(Cost SQL命令)

cost sql <SQL Sentence>;

功能说明:预估出一条SQL的计量信息,包含输入数据的大小、UDF个数以及SQL复杂等级。但该信息不能作为实际计费标准,仅供参考,实际费用请以账单为准。

cost sql select distinct project_name, user_name from meta.m_security_users distribute by project_name sort by project_name;  

ID = 20150715113033121xxxxxxx
Input:65727592 Bytes
UDF:0
Complexity:1.0
发布了330 篇原创文章 · 获赞 71 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/yitian_z/article/details/105540527