全部產品
Search
文件中心

MaxCompute:建立表

更新時間:Jun 19, 2024

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

後續步驟

建立表並確認後,即可將資料檔案中的資料匯入表中,請參見匯入資料