使用 MaxCompute 客户端体验数据分析

更新时间:
复制 MD 格式

本文是为刚接触 MaxCompute 的个人开发者准备的入门教程。教程以 MaxCompute 客户端为连接 MaxCompute 的开发工具,结合模拟的示例数据来演示产品的各项功能。教程覆盖了使用 MaxCompute 的基础流程,包括:创建项目、连接 MaxCompute、创建数据表、上传数据、查询分析数据和下载数据。如果您需要在本地环境进行 PoC 或处理轻量级数据,建议跟随本教程体验 MaxCompute 客户端的使用。

说明

MaxCompute支持多种连接方式。如果希望通过可视化界面完成产品PoC,或者将来有一站式数据同步、业务流程设计、数据开发、管理和运维的诉求,建议参考通过DataWorks快速体验MaxCompute教程,体验通过DataWorks连接MaxCompute并分析数据。

您将学到什么

教程涉及的主要操作包括:

  1. 创建MaxCompute项目:了解如何创建MaxCompute项目,作为您数据处理工作的独立环境

  2. 配置并启动MaxCompute客户端:掌握MaxCompute客户端的安装与基本配置,建立本地环境与云端MaxCompute的连接

  3. 创建数据表:学习如何在MaxCompute中定义和创建各种类型的数据表结构,用于存储和组织数据

  4. 导入数据:使用Tunnel工具高效地将本地数据上传至MaxCompute

  5. SQL查询与分析:运用标准SQLMaxCompute中执行数据查询、转换和聚合操作,获取业务洞察

  6. 导出结果数据:将处理结果下载到本地

设定场景

假设某金融机构提供了一些原始数据,其中包含单身人士的教育背景、信贷信息、购房信息等。您将扮演一名数据分析师,通过分析单身人士的购房贷款行为,为该金融机构提供数据洞察,用于优化其信贷产品设计或实施精准营销。

步骤一:准备账号

1.1 注册阿里云账号

如果您已经注册了阿里云账号,可以略过该步骤。

  1. 打开阿里云官网在阿里云官网右上角,单击登录/注册

  2. 账号注册页面,按照操作提示完成账号注册。

1.2 创建AccessKey

  1. 进入AccessKey页面,单击创建 AccessKey

  2. 勾选我确认知晓云账号 AccessKey 安全风险,然后单击继续使用云账号 AccessKey

  3. 按照操作提示完成AccessKey创建,单击下载 CSV 文件复制保存AccessKey IDAccessKey Secret到本地。

重要
  • AccessKey Secret只在创建时显示一次,请妥善保管

  • 建议将AccessKey保存在安全的位置,不要泄露给他人

  • 如果AccessKey泄露,请立即删除并重新创建

步骤二:创建MaxCompute项目

2.1 开通MaxCompute服务

  1. 登录并进入阿里云MaxCompute产品首页,根据购买页面指引开通MaxCompute服务。

    • 商品类型:按量付费。

    • 区域:新加坡(本教程以新加坡地域为例)。

  2. 按照页面提示完成服务开通。

2.2 创建项目

  1. 登录MaxCompute控制台,在左上角选择地域。

    本文示例选择新加坡地域。

  2. 在左侧导航栏,选择管理配置 > 项目管理

  3. 内部项目页签,单击新建项目

  4. 新增项目对话框,根据页面提示信息配置项目信息后,

    • 项目名称(全网唯一):输入项目名称(例如: mc_dev)

    • 其他配置:根据实际需求配置其他选项

  5. 单击确定完成项目创建。

步骤三:配置并启动MaxCompute客户端

3.1 下载并解压MaxCompute客户端安装包

  1. 下载最新版本MaxCompute客户端安装包(Github)

  2. 解压下载的安装包文件,得到以下文件夹:

    • bin:可执行文件目录

    • conf:配置文件目录

    • lib:库文件目录

    • plugins:插件目录

  3. 记录安装包的解压路径,后续操作需要用到。

3.2 配置客户端

  1. 进入conf文件夹,找到odps_config.ini配置文件。

  2. 使用文本编辑器打开odps_config.ini文件,配置以下字段:

    project_name=<your_project_name>
    access_id=<your_access_key_id>
    access_key=<your_access_key_secret>
    end_point=https://service.ap-southeast-1.maxcompute.aliyun.com/api

    配置说明

    • project_name:填写步骤二中创建的MaxCompute项目名称

    • access_id:填写步骤1.2中创建的AccessKey ID

    • access_key:填写步骤1.2中创建的AccessKey Secret

    • end_point:MaxCompute服务的连接地址。本教程使用新加坡地域的Endpoint

    重要

    如果您在步骤一中选择的地域不是新加坡,需要自行查找您所选地域对应的公网 Endpoint

3.3 启动MaxCompute客户端

您可以通过以下两种方式启动MaxCompute客户端:

方式一:使用安装包的脚本文件

  • Windows系统

    MaxCompute客户端安装路径下的bin文件夹中,双击odpscmd.bat文件。

  • macOS系统

    MaxCompute客户端安装路径下的bin文件夹中,双击odpscmd文件。

方式二:使用系统的命令行执行窗口

  1. 打开系统的命令行执行窗口(Windows:命令提示符或PowerShell;macOS/Linux:终端)。

  2. 进入MaxCompute客户端安装路径下的bin目录:

    # Windows系统
    cd <安装路径>\bin
    
    # macOS/Linux系统
    cd <安装路径>/bin
  3. 执行启动命令:

    # Windows系统
    odpscmd
    
    # Linux系统或macOS系统
    sh odpscmd
    
    # Ubuntu系统(特殊说明)
    ./odpscmd
说明

Ubuntu执行sh odpscmd会提示报错,请您使用./odpscmd命令尝试启动。

预期结果:客户端启动成功,返回如下信息,表明已成功连接MaxCompute项目:

          __                         __
 ___  ___/ /___   ___ ____ __ _  ___/ /
/ _ \/ _  // _ \ (_-</ __//  ' \/ _  / 
\___/\_,_// .__//___/\__//_/_/_/\_,_/  
         /_/                           
Aliyun ODPS Command Line Tool
Version x.xx.x-public
@Copyright 2026 Alibaba Cloud Computing Co., Ltd. All rights reserved.
Connecting to https://service.ap-**.maxcompute.aliyun.com/api, project: <your_project_name>
Endpoint: https://service.ap-**.maxcompute.aliyun.com/api
Project: <your_project_name>
Quota: default in region N/A
Timezone: **
Connected!
<your_project_name> >

步骤四:准备示例数据

4.1 下载示例数据

本教程使用4个示例数据文件,请按以下步骤下载:

  1. banking.txt(原始全集数据,共41188条)

  2. banking_yescreditcard.csv(持有信用卡客户,共3条)

  3. banking_nocreditcard.csv(无信用卡客户,共32588条)

  4. banking_yescreditcard.csv(未知/待确认状态客户,共8597条)

4.2 理解数据结构

这四个数据集的逻辑关系如下所示:

banking.txt(原始全集,共41188条数据)
├─ banking_yescreditcard.csv(持有信用卡客户,共3条数据)  
├─ banking_nocreditcard.csv(无信用卡客户,共32588条数据)  
└─ banking_uncreditcard.csv(未知/待确认状态客户,共8597条数据)

4.3 预览数据格式

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

数据格式说明

  • 分隔符:逗号(,

  • 表头:无表头行

  • 字段数量:21个字段

4.4 放置数据文件

将下载的数据文件放置到MaxCompute客户端的bin目录下,或者记录数据文件的完整路径。如果下载的示例数据不在MaxCompute客户端文件夹的bin目录下,后续导入数据时请根据命令格式填写正确的文件路径。

步骤五:创建数据表

5.1 设计表结构

  1. 基于示例数据及数据集之间的逻辑关系,我们设计如下表结构:

    • 非分区表bank_data:用于存储banking.txt原始全集数据(41188条)

    • 分区表bank_data_pt:基于分区字段credit(是否持有信用卡),存储三个CSV数据集

      • credit='yes':持有信用卡客户(3条)

      • credit='no':无信用卡客户(32588条)

      • credit='unknown':未知/待确认状态客户(8597条)

    • 非分区表result_table1:用于存储查询结果(教育程度统计)

    • 非分区表result_table2:用于存储查询结果(教育程度和信用卡状态统计)

    说明

    分区可以理解为分类,通过分类把不同类型的数据放到不同的目录下。分区表的意义在于优化查询。查询表时通过WHERE子句查询指定所需查询的分区,避免全表扫描,提高处理效率,降低计算费用。

5.2 创建非分区表bank_data

MaxCompute客户端中执行以下SQL语句:

-- 创建非分区表bank_data,用于存储原始全集数据
CREATE TABLE IF NOT EXISTS bank_data
(
 age             BIGINT comment '年龄',
 job             STRING comment '工作类型',
 marital         STRING comment '婚姻状态',
 education       STRING comment '教育程度',
 credit          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 '职工人数',
 fixed_deposit   BIGINT comment '是否有定期存款'
);

5.3 创建分区表bank_data_pt

MaxCompute客户端中执行以下SQL语句:

-- 创建分区表bank_data_pt,分区字段为credit(是否有信用卡)
CREATE TABLE IF NOT EXISTS bank_data_pt
(
 age             BIGINT comment '年龄',
 job             STRING comment '工作类型',
 marital         STRING comment '婚姻状态',
 education       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 '职工人数',
 fixed_deposit   BIGINT comment '是否有定期存款'
)partitioned by (credit STRING comment '是否有信用卡');

-- 添加三个分区:yes、no、unknown
alter table bank_data_pt add if not exists partition (credit='yes') partition (credit='no') partition (credit='unknown');

5.4 创建结果表result_table1

MaxCompute客户端中执行以下SQL语句:

-- 创建结果表result_table1,用于存储教育程度统计结果
CREATE TABLE IF NOT EXISTS result_table1
(
 education   STRING comment '教育程度',
 num         BIGINT comment '人数'
);

5.5 创建结果表result_table2

MaxCompute客户端中执行以下SQL语句:

-- 创建结果表result_table2,用于存储教育程度和信用卡状态统计结果
CREATE TABLE IF NOT EXISTS result_table2
(
 education   STRING comment '教育程度',
 num         BIGINT comment '人数',
 credit      STRING comment '是否有信用卡'
);

5.6 验证表创建

5.6.1 查看已创建的表

执行以下命令查看已创建的表:

SHOW tables;

预期输出

ALIYUN$****:bank_data
ALIYUN$****:bank_data_pt
ALIYUN$****:result_table1
ALIYUN$****:result_table2

OK

5.6.2 查看表结构

执行以下命令查看表结构:

-- 查看bank_data表结构
DESC bank_data;

-- 查看bank_data_pt表结构
DESC bank_data_pt;

-- 查看result_table1表结构
DESC result_table1;

-- 查看result_table2表结构
DESC result_table2;

预期输出(以bank_data_pt为例):

+------------------------------------------------------------------------------------+
| Owner: ALIYUN$****          | Project: doc_test_dev                                |
| TableComment:                                                                      |
+------------------------------------------------------------------------------------+
| CreateTime:               2026-05-17 14:02:21                                      |
| LastDDLTime:              2026-05-17 14:02:21                                      |
| LastModifiedTime:         2026-05-17 14:02:21                                      |
+------------------------------------------------------------------------------------+
| InternalTable: YES      | Size: 0                                                  |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field           | Type       | Label | Comment                                     |
+------------------------------------------------------------------------------------+
| age             | bigint     |       | 年龄                                        |
| job             | string     |       | 工作类型                                    |
| marital         | string     |       | 婚姻状态                                    |
| education       | string     |       | 教育程度                                    |
| housing         | string     |       | 是否有房贷                                  |
| loan            | string     |       | 是否有贷款                                  |
| contact         | string     |       | 联系方式                                    |
| month           | string     |       | 月份                                        |
| day_of_week     | string     |       | 星期几                                      |
| duration        | string     |       | 持续时间                                    |
| campaign        | bigint     |       | 本次活动联系的次数                          |
| pdays           | double     |       | 与上一次联系的时间间隔                      |
| previous        | double     |       | 之前与客户联系的次数                        |
| poutcome        | string     |       | 之前市场活动的结果                          |
| emp_var_rate    | double     |       | 就业变化速率                                |
| cons_price_idx  | double     |       | 消费者物价指数                              |
| cons_conf_idx   | double     |       | 消费者信心指数                              |
| euribor3m       | double     |       | 欧元存款利率                                |
| nr_employed     | double     |       | 职工人数                                    |
| fixed_deposit   | bigint     |       | 是否有定期存款                              |
+------------------------------------------------------------------------------------+
| Partition Columns:                                                                 |
+------------------------------------------------------------------------------------+
| credit          | string     | 是否有信用卡                                        |
+------------------------------------------------------------------------------------+

OK

执行以下命令查看分区:

SHOW partitions bank_data_pt;

预期输出

credit=no
credit=unknown
credit=yes

OK

步骤六:导入数据

6.1 Tunnel工具

Tunnel(数据通道)是MaxCompute的数据导入导出工具。可以通过TunnelMaxCompute中上传或者下载数据。

6.2 导入数据到bank_data

执行以下命令将banking.txt导入到bank_data表:

tunnel upload banking.txt bank_data;

命令格式说明

tunnel upload <待导入的数据文件路径> <导入数据的目标表>

预期输出

Upload session: 20260202192653092c3b1a0d8ed099
Start upload:banking.txt
Using \n to split records
Upload in strict schema mode: true
Total bytes:4841548	 Split input to 1 blocks
2026-05-02 19:26:53	scan block: '1'
2026-05-02 19:26:53	scan block complete, block id: 1
2026-05-02 19:26:53	upload block: '1'
2026-05-02 19:26:55	Block info: 1:0:4841548:banking.txt, progress: 100%, bs: 4.6 MB, speed: 2.3 MB/s
2026-05-02 19:26:55	upload block complete, block id: 1
upload complete, average speed is 1.5 MB/s
OK

6.3 导入数据到bank_data_pt分区表

执行以下命令将三个CSV文件分别导入到bank_data_pt表的对应分区:

-- 导入持有信用卡客户数据到credit='yes'分区
tunnel upload banking_yescreditcard.csv bank_data_pt/credit="yes";

-- 导入未知状态客户数据到credit='unknown'分区
tunnel upload banking_uncreditcard.csv bank_data_pt/credit="unknown";

-- 导入无信用卡客户数据到credit='no'分区
tunnel upload banking_nocreditcard.csv bank_data_pt/credit="no";

命令格式说明(分区表):

tunnel upload <待导入的数据文件路径> <导入数据的目标表>/<分区字段>="<分区值>"

预期输出(以第一个命令为例):

Upload session: 20260202192822042e3b1a0d8f28f6
Start upload:banking_yescreditcard.csv
Using \r\n to split records
Upload in strict schema mode: true
Total bytes:351	 Split input to 1 blocks
2026-05-02 19:28:22	scan block: '1'
2026-05-02 19:28:22	scan block complete, block id: 1
2026-05-02 19:28:22	upload block: '1'
2026-05-02 19:28:22	upload block complete, block id: 1
upload complete, average speed is 351 bytes/s
OK

当回显信息出现OK字样,说明导入数据成功。

6.4 验证数据导入

执行以下命令,查看数据表中的数据条数是否正确:

-- 查看bank_data表中的数据条数(应为41188条)
select count(*) as num1 from bank_data;

-- 查看bank_data_pt表中credit='yes'分区的数据条数(应为3条)
select count(*) as num2 from bank_data_pt where credit="yes";

-- 查看bank_data_pt表中credit='unknown'分区的数据条数(应为8597条)
select count(*) as num3 from bank_data_pt where credit="unknown";

-- 查看bank_data_pt表中credit='no'分区的数据条数(应为32588条)
select count(*) as num4 from bank_data_pt where credit="no";

预期输出

-- bank_data中的数据条数
+------------+
| num1       | 
+------------+
| 41188      | 
+------------+
A total of 1 records fetched by instance tunnel. Max record number: 10000

-- bank_data_pt中credit值为yes的数据条数
+------------+
| num2       | 
+------------+
| 3          | 
+------------+
A total of 1 records fetched by instance tunnel. Max record number: 10000

-- bank_data_pt中credit值为unknown的数据条数
+------------+
| num3       | 
+------------+
| 8597       | 
+------------+
A total of 1 records fetched by instance tunnel. Max record number: 10000

-- bank_data_pt中credit值为no的数据条数
+------------+
| num4       | 
+------------+
| 32588      | 
+------------+
A total of 1 records fetched by instance tunnel. Max record number: 10000

验证结果

  • bank_data表:41188条数据(与banking.txt一致)

  • bank_data_ptcredit='yes'分区:3条数据(与banking_yescreditcard.csv一致)

  • bank_data_ptcredit='unknown'分区:8597条数据(与banking_uncreditcard.csv一致)

  • bank_data_ptcredit='no'分区:32588条数据(与banking_nocreditcard.csv一致)

如果数据条数不一致,请检查:

  1. 数据文件是否完整下载

  2. 导入命令是否正确执行

  3. 数据文件格式是否正确

步骤七:SQL查询与分析

7.1 执行简单查询(可选)

在开始复杂查询之前,您可以先执行一个简单的查询,验证数据是否正确导入:

-- 查看bank_data表的前10条数据
select * from bank_data limit 10;

预期输出:返回10条数据记录,包含所有21个字段的值。

7.2 查询非分区表数据

运行以下SQL命令,基于非分区表bank_data,查询各个学历下的贷款买房的单身人士数量,并将结果保存到result_table1

-- 查询非分区表bank_data中各个学历下的贷款买房的单身人士数量
-- 并将查询结果写入result_table1
INSERT OVERWRITE TABLE result_table1
 SELECT education, COUNT(marital) AS num
 FROM bank_data
 WHERE housing = 'yes' AND marital = 'single'
 GROUP BY education;

SQL说明

  • insert overwrite table:将查询结果覆盖写入目标表

  • where housing = 'yes' and marital = 'single':筛选条件(有房贷且单身)

  • group by education:按教育程度分组统计

  • count(marital):统计每个教育程度下的人数

预期输出

Job Queueing...

OK

7.3 查询分区表数据

运行以下SQL命令,基于分区表bank_data_pt,查询各个学历下的贷款买房的单身人士数量(按信用卡状态分组),并将结果保存到result_table2

-- 设置允许全表扫描(查询分区表时,如果未指定分区条件,需要此设置)
set odps.sql.allow.fullscan=true;

-- 查询分区表bank_data_pt中各个学历下的贷款买房的单身人士数量
-- 并将查询结果写入result_table2(按教育程度和信用卡状态分组)
insert overwrite table result_table2 
select education, count(marital) as num, credit 
from bank_data_pt 
where housing = 'yes' and marital = 'single'
group by education, credit;

SQL说明

  • set odps.sql.allow.fullscan=true;:允许全表扫描(查询分区表时必需)

  • group by education, credit:按教育程度和信用卡状态分组统计

预期输出

Job Queueing...

OK

7.4 查看查询结果

执行以下命令查看查询结果:

-- 查看result_table1的查询结果
select * from result_table1;

-- 查看result_table2的查询结果
select * from result_table2;

预期输出

-- result_table1中的数据
+------------+------------+
| education  | num        | 
+------------+------------+
| university.degree | 2399       | 
| basic.4y   | 227        | 
| basic.9y   | 709        | 
| unknown    | 257        | 
| professional.course | 785        | 
| high.school | 1641       | 
| basic.6y   | 172        | 
| illiterate | 1          | 
+------------+------------+
A total of 8 records fetched by instance tunnel. Max record number: 10000

-- result_table2中的数据
+------------+------------+------------+
| education  | num        | credit     | 
+------------+------------+------------+
| unknown    | 51         | unknown    | 
| high.school | 172        | unknown    | 
| basic.4y   | 63         | unknown    | 
| university.degree | 196        | unknown    | 
| professional.course | 64         | unknown    | 
| basic.9y   | 162        | unknown    | 
| basic.6y   | 68         | unknown    | 
| illiterate | 1          | unknown    | 
| university.degree | 2203       | no         | 
| basic.4y   | 164        | no         | 
| basic.9y   | 547        | no         | 
| professional.course | 721        | no         | 
| high.school | 1469       | no         | 
| unknown    | 206        | no         | 
| basic.6y   | 104        | no         | 
+------------+------------+------------+
A total of 15 records fetched by instance tunnel. Max record number: 10000

7.5 数据分析洞察

基于查询结果,我们可以得出以下数据洞察:

用户类型

特征描述

数据洞察

建议

大学学历人群

占比最高(29.3%)、无信用卡比例低

收入稳定、信用意识强、还款能力强

推出高额度房贷+信用卡联动产品,结合学历标签精准营销

高中学历人群

占比第二(20.1%)、部分无信用卡

群体基数大,有一定购房需求

提供标准住房贷款产品,推广至社区、企业园区等场景

基础教育人群(basic.4y~basic.9y)

人数占比约13.5%,信用卡缺失严重

信用空白人群,但存在购房需求

构建多维信用评估模型,试点"白名单"预授信机制

教育信息缺失人群

占比3.1%,信用数据不完整

影响模型效果与营销效率

完善前端采集逻辑,定期回访补全数据

这些洞察将有助于金融机构优化信贷产品设计、提升风控能力,并实现更高效的客户触达与转化。

步骤八:导出结果数据

8.1 导出result_table1数据

执行以下Tunnel Download命令导出result_table1的数据:

tunnel download result_table1 result_table1.txt;

命令格式说明

tunnel download <待导出的数据表> <导出文件路径>

预期输出

2026-05-02 19:34:40  -  new session: 20260202193440d909371a0d8e908c	total lines: 8
2026-05-02 19:34:40  -  file [0]: [0, 8), result_table1.txt
downloading 8 records into 1 file
2026-05-02 19:34:40  -  file [0] start
2026-05-02 19:34:41  -  file [0] OK. total: 128 bytes
total: 128 bytes, time: 442 ms, average speed: 0 bytes/s
download OK
说明

如果未指定导出文件的路径,导出的数据文件将默认在MaxCompute客户端的bin路径下。

当回显信息出现OK字样,说明导出数据成功。

8.2 导出result_table2数据

执行以下命令导出result_table2的数据:

tunnel download result_table2 result_table2.csv;

预期输出

2026-05-02 19:35:26  -  new session: 20260202193526dce7301a0d8ef026	total lines: 15
2026-05-02 19:35:26  -  file [0]: [0, 15), result_table2.csv
downloading 15 records into 1 file
2026-05-02 19:35:26  -  file [0] start
2026-05-02 19:35:26  -  file [0] OK. total: 322 bytes
total: 322 bytes, time: 441 ms, average speed: 0 bytes/s
download OK

8.3 验证导出结果

  1. 在导出路径下(默认为MaxCompute客户端的bin目录)确认数据文件的存在性。

  2. 打开导出的文件,验证数据完整性:

    • result_table1.txt:应包含8条记录(8种教育程度)

    • result_table2.csv:应包含15条记录(按教育程度和信用卡状态分组)

预期结果

  • 文件已成功导出到指定路径

  • 文件中的数据与查询结果一致

  • 文件格式正确(TXTCSV)

步骤九:清理资源

完成本教程后,建议及时清理创建的资源,避免继续产生费用。

9.1 删除数据表

MaxCompute客户端执行以下命令删除创建的表:

-- 删除result_table2
drop table result_table2;

-- 删除result_table1
drop table result_table1;

-- 删除bank_data_pt分区表
drop table bank_data_pt;

-- 删除bank_data非分区表
drop table bank_data;

命令格式

drop table <table_name>;

9.2 验证表删除

执行以下命令确认表的删除结果:

show tables;

预期输出

OK

返回结果中无表信息,表明已删除成功。

9.3 删除MaxCompute项目

重要警告

删除项目将导致以下后果:

  • 项目中的所有资源将被删除:包括所有表、函数、资源等

  • 操作不可恢复:删除后无法恢复项目及其中的数据

  • 如果使用现有项目:删除项目将同时删除项目中的其他工作

删除步骤

  1. 登录MaxCompute控制台

  2. 在左侧导航栏,选择管理配置 > 项目管理

  3. 项目管理页面,单击目标项目操作列的删除

  4. 按照页面提示确认删除操作。

说明
  • 如果您使用的是专门为本教程创建的新项目,可以直接删除整个项目

  • 如果您使用的是现有项目,建议仅删除本教程创建的表,保留项目和其他资源

9.4 验证资源清理

完成资源清理后,请确认:

  • 所有数据表已删除

  • 项目已删除(如果适用)

  • 不再产生费用

常见问题

Q1:客户端连接失败怎么办?

可能原因

  • 项目名称配置错误

  • AccessKey IDSecret配置错误

  • Endpoint配置错误

  • 网络连接问题

解决方法

  1. 检查odps_config.ini配置文件中的各项配置是否正确

  2. 确认AccessKey是否有效(未过期、未删除)

  3. 确认Endpoint是否与项目地域匹配

  4. 检查网络连接是否正常

Q2:数据导入失败怎么办?

可能原因

  • 数据文件路径错误

  • 数据格式不匹配(字段数量、数据类型)

  • 文件编码问题

解决方法

  1. 检查数据文件路径是否正确(使用绝对路径)

  2. 验证数据文件格式是否与表结构匹配

  3. 查看错误信息,根据提示调整

Q3:查询分区表时报错怎么办?

错误信息ODPS-0130071: Partition exception

解决方法

  • 如果查询分区表时未指定分区条件,需要先执行:set odps.sql.allow.fullscan=true;

  • 或者,在WHERE子句中指定具体的分区条件,例如:where credit='yes'

总结

通过本教程,您已经完成了:

  1. 创建MaxCompute项目

  2. 配置并启动MaxCompute客户端

  3. 创建数据表(非分区表和分区表)

  4. 导入数据到MaxCompute

  5. 执行SQL查询和分析

  6. 导出查询结果

  7. 清理资源

掌握了使用MaxCompute客户端进行数据分析的基础流程。接下来,您可以继续深入学习 MaxCompute 的高级功能,将所学知识应用到实际项目中。