テーブルは、MaxCompute におけるデータ格納の基本単位です。本チュートリアルでは、サンプルの銀行業界データを用いて、非パーティション化テーブルおよびパーティションテーブルの設計と作成手順を説明し、その後、作成結果を検証します。
学習内容:
-
データファイルを分析して適切なテーブル構造を決定する方法
-
MaxCompute クライアントを用いた非パーティション化テーブルおよびパーティションテーブルの作成方法
-
パーティションテーブルへのパーティション追加方法
-
テーブルが正しいスキーマで作成されたことを確認する方法
操作の概要: ステップ 1:テーブルの設計 → ステップ 2:テーブルの作成 → ステップ 3:テーブルの検証
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
-
MaxCompute クライアントがインストールされ、実行中であること。詳細については、「MaxCompute クライアントのインストールと起動」をご参照ください。
-
インポート対象の CSV または TXT データファイルが用意されていること。本チュートリアルでは、以下のサンプルファイルを使用します。
-
非パーティション化テーブル用:banking.txt
-
パーティションテーブル用(3 つのファイル):banking_nocreditcard.csv、banking_uncreditcard.csv、および banking_yescreditcard.csv
-
-
ご利用の MaxCompute プロジェクトに対して CREATE TABLE 権限が付与されていること。RAM ユーザーの場合、この権限の付与が必要です。Alibaba Cloud アカウント (root ユーザー) をお持ちの方は、デフォルトでこの権限が付与されています。
-
権限の確認方法については、「MaxCompute SQL を使用した権限の照会」をご参照ください。
-
RAM ユーザーへの権限付与方法については、「MaxCompute の権限」をご参照ください。
-
注意事項
テーブルの列のデータの型は、ソースファイル内のデータの型と一致させる必要があります。型が不一致の場合、データのインポートは失敗します。
ステップ 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 構文の詳細については、「テーブルの作成」をご参照ください。テーブルおよびパーティションの管理に関する詳細については、「テーブル操作」および「パーティション操作」をご参照ください。
-
(任意): 対象の MaxCompute プロジェクトに切り替えます。クライアント起動時にプロジェクトが既に選択済みの場合は、このステップをスキップできます。
use doc_test_dev;プロンプトが更新され、切り替えが確認されます。
doc_test_dev.default> -
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:テーブルの検証
すべてのテーブルが正しく作成され、スキーマが適切であることを確認します。
-
プロジェクト内のすべてのテーブルを一覧表示します。
show tables;出力には、4 つのテーブルがすべて表示されます。
ALIYUN$****:bank_data ALIYUN$****:bank_data_pt ALIYUN$****:result_table1 ALIYUN$****:result_table2 -
各テーブルのスキーマおよびパーティションを確認します。
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 つのテーブルの作成およびスキーマの検証が完了したので、サンプルファイルからデータをインポートします。詳細については、「テーブルへのデータのインポート」をご参照ください。