表是MaxCompute的数据存储单元。您需要基于表进行数据处理。本文为您介绍如何创建表。
前提条件
请确认您已满足如下条件:
已登录MaxCompute客户端。
更多登录MaxCompute客户端操作,请参见安装并登录MaxCompute本地客户端。
已准备好保存了待导入数据的CSV或TXT文件。
本文提供的数据文件样例如下:
创建非分区表的数据文件:banking.txt。
创建分区表的数据文件:banking_nocreditcard.csv、banking_uncreditcard.csv和banking_yescreditcard.csv。
如果是RAM用户创建表,请确认阿里云账号已经授予RAM用户创建表的权限(CreateTable)。
更多查看权限操作,请参见通过MaxCompute SQL查询权限信息。
更多授权操作,请参见MaxCompute权限。
注意事项
新创建表的列数据类型务必与数据文件的各列数据类型保持一致,如果二者不一致,会导致后续导入数据操作执行失败。
步骤一:设计表
您需要根据待导入的数据内容和最终需要生成的结果数据,确定需要创建的表类型、结构及各列的数据类型。
本文中提供的示例数据内容如下,展示的是银行贷款购房人员的数据。
--待创建非分区表的数据。
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
--待创建分区表的数据。
53,technician,married,unknown,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,yes,no,cellular,jun,thu,339,3,6,2,success,-1.7,94.055,-39.8,0.729,4991.6,1
39,services,married,high.school,no,no,cellular,apr,fri,185,2,999,0,nonexistent,-1.8,93.075,-47.1,1.405,5099.1,0
您可以识别到数据列数、每列数据的数据类型,同时可以了解各列数据对应的含义,为每列数据定义一个列名称。假设基于示例数据,识别到的信息如下。
类型 | 说明 |
表的列数 | 从示例数据中识别表列数信息如下:
|
表的列字段 | 从示例数据中识别表列字段信息如下:
|
数据类型 | 从示例数据中识别表列字段的数据类型信息如下:
|
步骤二:创建表
基于示例数据,创建非分区表bank_data和分区表bank_data_pt,用于存储业务数据;创建非分区表result_table1和result_table2,用于存储结果数据。更多表及分区的操作信息,请参见表操作和分区和列操作。创建表的操作流程如下:
可选:在MaxCompute客户端,执行如下命令切换至目标MaxCompute项目。
如果您启动MaxCompute客户端后已在目标MaxCmpute项目中,请忽略该步骤。
use doc_test_dev;
切换成功显示如下。
doc_test_dev.default>
在MaxCompute客户端,创建表bank_data、bank_data_pt、result_table1和result_table2。
更多创建表语法,请参见创建表。
创建非分区表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 '是否有定期存款' );
创建分区表bank_data_pt,并添加分区,命令示例如下。
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 '是否有信用卡'); alter table bank_data_pt add if not exists partition (credit='yes') partition (credit='no') partition (credit='unknown');
创建非分区表result_table1,命令示例如下。
create table if not exists result_table1 ( education STRING comment '教育程度', num BIGINT comment '人数' );
创建非分区表result_table2,命令示例如下。
create table if not exists result_table2 ( education STRING comment '教育程度', num BIGINT comment '人数', credit STRING comment '是否有信用卡' );
步骤三:确认创建结果
创建表后,您需要确认表是否已创建成功,以及表的结构是否正确无误。操作流程如下:
在MaxCompute客户端,执行如下命令确认表已在MaxCompute项目中。
show tables;
创建成功的表会显示在命令返回结果中,返回结果示例如下。
ALIYUN$****:bank_data ALIYUN$****:bank_data_pt ALIYUN$****:result_table1 ALIYUN$****:result_table2
在MaxCompute客户端,执行如下命令确认表的结构正确无误。
--查看bank_data表结构。 desc bank_data; --查看bank_data_pt表结构。 desc bank_data_pt; --查看bank_data_pt的分区。 show partitions bank_data_pt; --查看result_table1表结构。 desc result_table1; --查看result_table2表结构。 desc result_table2;
以bank_data_pt为例,返回结果如下。
desc bank_data_pt; --返回结果。 +------------------------------------------------------------------------------------+ | Owner: ALIYUN$**** | Project: doc_test_dev | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2021-05-17 14:02:21 | | LastDDLTime: 2021-05-17 14:02:21 | | LastModifiedTime: 2021-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 | 是否有信用卡 | +------------------------------------------------------------------------------------+
show partitions bank_data_pt; --返回结果。 credit=no credit=unknown credit=yes
后续步骤
创建表并确认后,即可将数据文件中的数据导入表中,请参见导入数据。