すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:テーブルの作成

最終更新日:Mar 27, 2026

テーブルは、MaxCompute におけるデータ格納の基本単位です。本チュートリアルでは、サンプルの銀行業界データを用いて、非パーティション化テーブルおよびパーティションテーブルの設計と作成手順を説明し、その後、作成結果を検証します。

学習内容:

  • データファイルを分析して適切なテーブル構造を決定する方法

  • MaxCompute クライアントを用いた非パーティション化テーブルおよびパーティションテーブルの作成方法

  • パーティションテーブルへのパーティション追加方法

  • テーブルが正しいスキーマで作成されたことを確認する方法

操作の概要: ステップ 1:テーブルの設計 → ステップ 2:テーブルの作成 → ステップ 3:テーブルの検証

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • MaxCompute クライアントがインストールされ、実行中であること。詳細については、「MaxCompute クライアントのインストールと起動」をご参照ください。

  • インポート対象の CSV または TXT データファイルが用意されていること。本チュートリアルでは、以下のサンプルファイルを使用します。

  • ご利用の MaxCompute プロジェクトに対して CREATE TABLE 権限が付与されていること。RAM ユーザーの場合、この権限の付与が必要です。Alibaba Cloud アカウント (root ユーザー) をお持ちの方は、デフォルトでこの権限が付与されています。

注意事項

テーブルの列のデータの型は、ソースファイル内のデータの型と一致させる必要があります。型が不一致の場合、データのインポートは失敗します。

ステップ 1:テーブルの設計

SQL 文の記述を開始する前に、ソースデータを確認し、列数、フィールド名、および各列のデータの型を特定します。

本チュートリアルのサンプルファイルには、住宅ローン借入者に関するデータが含まれています。フィールドはカンマ区切りです。以下に、各ファイルから抽出した数行のプレビューを示します。

-- 非パーティション化テーブルのデータ(21 列)
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

-- パーティションテーブルのデータ(各ファイル 20 列;credit 列をパーティションキーとして使用)
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

列数を数え、各フィールドのデータの型を特定し、意味のある列名を選択してください。以下の表に、サンプルファイルの分析結果をまとめます。

<table> <thead> <tr> <td><p><b>項目</b></p></td> <td><p><b>説明</b></p></td> </tr> </thead> <colgroup></colgroup> <colgroup></colgroup> <tbody> <tr> <td><p>列数</p></td> <td><p>各サンプルファイルの列数を数え、作成するテーブルの列数を決定します。</p> <ul> <li><p>非パーティション化テーブルを作成するために使用されるサンプルファイルには 21 列が含まれています。このサンプルファイルに基づき、21 列の非パーティション化テーブルを作成できます。</p> <div> <div> <i></i> </div> <div> <strong>注 </strong> <p>テーブルの列数がサンプルファイルの列数を超える場合、余分な列には NULL が挿入されます。逆に、テーブルの列数がサンプルファイルの列数より少ない場合、サンプルファイルの余分なデータは破棄されます。</p> </div> </div></li> <li><p>パーティションテーブルを作成するために使用される各サンプルファイルには 20 列が含まれています。これらのサンプルファイルに基づき、21 列(うち 1 列をパーティションキーとする)のパーティションテーブルを作成できます。テーブル作成時にパーティションを定義する必要があります。</p></li> </ul></td> </tr> <tr> <td><p>テーブルのフィールド</p></td> <td><p>各サンプルファイルのフィールドを特定し、作成するテーブルのフィールドを決定します。</p> <ul> <li><p>非パーティション化テーブルのフィールド:</p> <ul> <li><p>age:年齢</p></li> <li><p>job:職種</p></li> <li><p>marital:婚姻状況</p></li> <li><p>education:教育レベル</p></li> <li><p>credit:クレジットカードの有無</p></li> <li><p>housing:住宅ローン借入者の有無</p></li> <li><p>loan:ローンの有無</p></li> <li><p>contact:連絡先情報</p></li> <li><p>month:月</p></li> <li><p>day_of_week:曜日</p></li> <li><p>duration:継続期間</p></li> <li><p>campaign:現在のキャンペーンにおける連絡回数</p></li> <li><p>pdays:前回連絡からの経過時間</p></li> <li><p>previous:前回までの連絡回数</p></li> <li><p>poutcome:過去のマーケティング活動の結果</p></li> <li><p>emp_var_rate:雇用変動率</p></li> <li><p>cons_price_idx:消費者物価指数</p></li> <li><p>cons_conf_idx:消費者信頼感指数</p></li> <li><p>euribor 3m:3 ヶ月ユーロインターバンクオファードレート(Euribor)</p></li> <li><p>nr_employed:従業員数</p></li> <li><p>fixed_deposit:定期預金の有無</p></li> </ul></li> <li><p>パーティションテーブルのフィールド:</p> <ul> <li><p>age:年齢</p></li> <li><p>job:職種</p></li> <li><p>marital:婚姻状況</p></li> <li><p>education:教育レベル</p></li> <li><p>housing:住宅ローン借入者の有無</p></li> <li><p>loan:ローンの有無</p></li> <li><p>contact:連絡先情報</p></li> <li><p>month:月</p></li> <li><p>day_of_week:曜日</p></li> <li><p>duration:継続期間</p></li> <li><p>campaign:現在のキャンペーンにおける連絡回数</p></li> <li><p>pdays:前回連絡からの経過時間</p></li> <li><p>previous:前回までの連絡回数</p></li> <li><p>poutcome:過去のマーケティング活動の結果</p></li> <li><p>emp_var_rate:雇用変動率</p></li> <li><p>cons_price_idx:消費者物価指数</p></li> <li><p>cons_conf_idx:消費者信頼感指数</p></li> <li><p>euribor 3m:3 ヶ月 Euribor</p></li> <li><p>nr_employed:従業員数</p></li> <li><p>fixed_deposit:定期預金の有無</p></li> <li><p>credit:クレジットカードの有無(パーティションキー)</p></li> </ul></li> </ul></td> </tr> <tr> <td><p>データの型</p></td> <td><p>サンプルファイル内の各列のデータの型を特定します。</p> <ul> <li><p>age:BIGINT</p></li> <li><p>job:STRING</p></li> <li><p>marital:STRING</p></li> <li><p>education:STRING</p></li> <li><p>credit:STRING</p></li> <li><p>housing:STRING</p></li> <li><p>loan:STRING</p></li> <li><p>contact:STRING</p></li> <li><p>month:STRING</p></li> <li><p>day_of_week:STRING</p></li> <li><p>duration:STRING</p></li> <li><p>campaign:BIGINT</p></li> <li><p>pdays:DOUBLE</p></li> <li><p>previous:DOUBLE</p></li> <li><p>poutcome:STRING</p></li> <li><p>emp_var_rate:DOUBLE</p></li> <li><p>cons_price_idx:DOUBLE</p></li> <li><p>cons_conf_idx:DOUBLE</p></li> <li><p>euribor3m:DOUBLE</p></li> <li><p>nr_employed:DOUBLE</p></li> <li><p>fixed_deposit:BIGINT</p></li> </ul></td> </tr> </tbody> </table>

ステップ 2:テーブルの作成

本チュートリアルでは、合計 4 つのテーブルを作成します。

  • bank_data:完全データセットをインポートするための非パーティション化テーブル

  • bank_data_pt:パーティションキーとして credit を使用するパーティションテーブル

  • result_table1:クエリ結果を格納するための非パーティション化テーブル

  • result_table2:クエリ結果を格納するための非パーティション化テーブル

CREATE TABLE 構文の詳細については、「テーブルの作成」をご参照ください。テーブルおよびパーティションの管理に関する詳細については、「テーブル操作」および「パーティション操作」をご参照ください。

  1. (任意): 対象の MaxCompute プロジェクトに切り替えます。クライアント起動時にプロジェクトが既に選択済みの場合は、このステップをスキップできます。

    use doc_test_dev;

    プロンプトが更新され、切り替えが確認されます。

    doc_test_dev.default>
  2. 4 つのテーブルを作成します。各 CREATE TABLE 文の列順序およびデータの型は、ステップ 1 で特定したフィールドと直接対応しています。

    • 非パーティション化テーブル 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 '3 ヶ月 Euribor',
       nr_employed     DOUBLE comment '従業員数',
       fixed_deposit   BIGINT comment '定期預金の有無'
      );
    • パーティションテーブル bank_data_pt を作成し、パーティションを追加します。credit 列は通常のデータ列ではなくパーティションキーとして使用されるため、テーブルには 20 個のデータ列に加えて 1 個のパーティションキーが存在します。

      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 '3 ヶ月 Euribor',
       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 'クレジットカードの有無'
      );

ステップ 3:テーブルの検証

すべてのテーブルが正しく作成され、スキーマが適切であることを確認します。

  1. プロジェクト内のすべてのテーブルを一覧表示します。

    show tables;

    出力には、4 つのテーブルがすべて表示されます。

    ALIYUN$****:bank_data
    ALIYUN$****:bank_data_pt
    ALIYUN$****:result_table1
    ALIYUN$****:result_table2
  2. 各テーブルのスキーマおよびパーティションを確認します。

    Size: 0 は正常な出力です。テーブルにはまだデータが格納されていないためです。データをインポートすると、サイズは増加します。
    -- 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;

    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     |       | 3 ヶ月 Euribor                                |
    | nr_employed     | double     |       | 従業員数                                    |
    | fixed_deposit   | bigint     |       | 定期預金の有無                              |
    +------------------------------------------------------------------------------------+
    | Partition Columns:                                                                 |
    +------------------------------------------------------------------------------------+
    | credit          | string     | クレジットカードの有無                                        |
    +------------------------------------------------------------------------------------+

    show partitions bank_data_pt; の出力により、3 つのパーティションが正しく作成されたことが確認できます。

    credit=no
    credit=unknown
    credit=yes

次のステップ

4 つのテーブルの作成およびスキーマの検証が完了したので、サンプルファイルからデータをインポートします。詳細については、「テーブルへのデータのインポート」をご参照ください。