创建表

表是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

您可以识别到数据列数、每列数据的数据类型,同时可以了解各列数据对应的含义,为每列数据定义一个列名称。假设基于示例数据,识别到的信息如下。

类型

说明

表的列数

从示例数据中识别表列数信息如下:

  • 创建非分区表的示例数据包含21列,新创建表的列数可设定为21列。

    说明

    如果表的列数超过示例数据的列数,不足的列将填充NULL。如果表的列数少于示例数据的列数,多余的数据将被丢弃。

  • 创建分区表的示例数据包含20列,新创建表的列数可设定为21列,其中一列为分区列,您需要在创建表时定义分区。

表的列字段

从示例数据中识别表列字段信息如下:

  • 非分区表的列字段包含:

    • age:年龄

    • job:工作类型

    • marital:婚否

    • education:教育程度

    • credit:是否有信用卡

    • housing:是否有房贷

    • loan:是否有贷款

    • contact:联系方式

    • month:月份

    • day_of_week:星期几

    • duration:持续时间

    • campaign:本次活动联系的次数

    • pdays:与上一次联系的时间间隔

    • previous:之前与客户联系的次数

    • poutcome:之前市场活动的结果

    • emp_var_rate:就业变化速率

    • cons_price_idx:消费者物价指数

    • cons_conf_idx:消费者信心指数

    • euribor3m:欧元存款利率

    • nr_employed:职工人数

    • fixed_deposit:是否有定期存款

  • 分区表的列字段包含:

    • age:年龄

    • job:工作类型

    • marital:婚否

    • education:教育程度

    • housing:是否有房贷

    • loan:是否有贷款

    • contact:联系方式

    • month:月份

    • day_of_week:星期几

    • duration:持续时间

    • campaign:本次活动联系的次数

    • pdays:与上一次联系的时间间隔

    • previous:之前与客户联系的次数

    • poutcome:之前市场活动的结果

    • emp_var_rate:就业变化速率

    • cons_price_idx:消费者物价指数

    • cons_conf_idx:消费者信心指数

    • euribor3m:欧元存款利率

    • nr_employed:职工人数

    • fixed_deposit:是否有定期存款

    • credit:是否有信用卡。该列为分区列。

数据类型

从示例数据中识别表列字段的数据类型信息如下:

  • age:BIGINT

  • job:STRING

  • marital:STRING

  • education:STRING

  • credit: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

步骤二:创建表

基于示例数据,创建非分区表bank_data和分区表bank_data_pt,用于存储业务数据;创建非分区表result_table1和result_table2,用于存储结果数据。更多表及分区的操作信息,请参见表操作分区和列操作。创建表的操作流程如下:

  1. 可选:在MaxCompute客户端,执行如下命令切换至目标MaxCompute项目。

    如果您启动MaxCompute客户端后已在目标MaxCmpute项目中,请忽略该步骤。

    use doc_test_dev;

    切换成功显示如下。

    doc_test_dev.default>
  2. 在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 '是否有信用卡'
      );

步骤三:确认创建结果

创建表后,您需要确认表是否已创建成功,以及表的结构是否正确无误。操作流程如下:

  1. 在MaxCompute客户端,执行如下命令确认表已在MaxCompute项目中。

    show tables;

    创建成功的表会显示在命令返回结果中,返回结果示例如下。

    ALIYUN$****:bank_data
    ALIYUN$****:bank_data_pt
    ALIYUN$****:result_table1
    ALIYUN$****:result_table2
  2. 在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

后续步骤

创建表并确认后,即可将数据文件中的数据导入表中,请参见导入数据