edit-icon download-icon

テーブル

最終更新日: Jun 19, 2018

ユーザーがプロジェクトに追加され、対応する特権を付与されると、MaxCompute を操作することができます。MaxCompute ではテーブルを操作するため、データ処理を開始する前にテーブルとパーティションを作成する必要があります。

テーブルの作成

コマンド形式:

  1. CREATE TABLE [IF NOT EXISTS] table_name
  2. [(col_name data_type [COMMENT col_comment], ...)]
  3. [COMMENT table_comment]
  4. [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  5. [LIFECYCLE days]
  6. [AS select_statement]
  7. CREATE TABLE [IF NOT EXISTS] table_name
  8. LIKE existing_table_name

説明:

  • テーブル名とカラム名では大文字と小文字を区別しません。
  • 同じ名前のテーブルがすでに存在する場合、エラーが発生します。エラーをスキップするには、[if not exists]オプションを指定する必要があります。[if not exists]オプションを指定すると、同じ名前のテーブルある場合やソーステーブル構造とターゲットテーブル構造が矛盾している場合も、テーブルの作成が可能です。既存のテーブルのメタ情報は変更されません。
  • データ型は、bigint、double、boolean、datetime、およびstringのみをサポートします。
  • テーブル名とカラム名には特殊文字を使用できません。英字で開始し、英数字、および下線を含むことができます。名前の長さは128文字以下で設定してください。
  • パーティションを指定するには「Partitioned by」を使用し、現時点ではstringとbigintのみがサポートされています。パーティションの値は2バイト文字(漢字など)を指定することはできません英数数字で開始し、長さは128バイト以下である必要があります。スペース「 」、コロン「:」、アンダースコア「_」、「$」、「#」、 ポイント「.」、感嘆符「!」および「@」などの記号は、「\t」、「\n」、「/」などの未定義文字として扱われます。パーティションテーブルにパーティションフィールドを使用する場合は、パーティションを追加したり、パーティション内のデータを更新したり、読み取りする際に、フルテーブルスキャンは必要ありません。
  • コメント内容は、1024文字以下の有効な文字列を入力してください。
  • lifecycle は、テーブルのライフサイクルを示します。単位は「day」です。「create table like」というステートメントでは、ソーステーブルのライフサイクル属性をコピーできません。
  • 現在、パーティション階層は6レベルを超えることはできません。テーブルの最大パーティション番号は、特定のプロジェクトで設定できます。デフォルトの最大数は60000です。

注意:MaxComputeのテーブルは、パーティションとライフサイクルをサポートします。テーブルの作成の詳細については、CREATE TABLEを参照してください。パーティション操作については、パーティションの追加/削除を参照してください。ライフサイクルの運用については、テーブルのライフサイクルの変更を参照してください。

テーブルの作成例:

  1. create table test1 (key string); -- create a no-partition table.
  2. create table test2 (key bigint) partitioned by (pt string, ds string); --Create a partition table.
  3. create table test3 (key boolean) partitioned by (pt string, ds string) lifecycle 100; -- Create a table with lifecycle.
  4. create table test4 like test3; -- Except the lifecycle properity, other properties of test3 (field type, partition type) were completely consistent with test4.
  5. create table test5 as select * from test2;
  6. -- This operation will create test5, but the partition and lifecycle information will not be copied to the object table.
  7. -- This operation will copy the data of test2 to the table test5.

ここでは、テーブルを作成するためのインスタンスを紹介します。次の情報を含むuserという名前のテーブルを作成する必要があるとします。

  • user_id:bigintタイプ、ユーザーを識別するためのユーザーID
  • 性別:bigintタイプ、性別(0、不明; 1、男性; 2、女性)
  • 年齢:bigintタイプ、ユーザーの年齢

リージョンとDT をキーとしてパーティションを作成し、ライフサイクルは365日で設定します。このテーブルを作成する文は次のようになります。

  1. CREATE TABLE user (
  2. user_id BIGINT, gender BIGINT COMMENT '0 unknow,1 male, 2 Female', age BIGINT)
  3. PARTITIONED BY (region string, dt string) LIFECYCLE 365;

テーブル定義の取得

  1. desc <table_name>;

例:test3から情報を取得します。

  1. desc test3;

次に、test4から情報を取得します。

  1. desc test4;

ライフサイクルの適性を除いて、test3の他のプロパティ(フィールドタイプ、パーティションタイプ)はtest4と完全に一致していました。テーブルの説明の詳細については、Describe Tableを参照してください。

ユーザーがtest2の情報を表示する場合、2つのフィールド’pt’、’ds’はテーブルのパーティションではなく、2つの共通の列としてのみ存在します。

テーブルの削除

  1. DROP TABLE [IF EXISTS]table_name;

たとえば、’test2’という表を削除します。

  1. drop table test2;

詳細については、DROP TABLEを参照してください。

パーティションの追加

パーティションテーブルを作成し、異なるパーティションにデータをインポートする必要がある場合は、パーティションを作成する必要があります。ステートメントの形式は次のとおりです。

  1. alter table table_name add [if not exists] partition partition_spec
  2. partition_spec:
  3. : (partition_col1 = partition_col_value1, partition_col2 = partiton_col_value2, ...)

最後の例で示したように、パーティションを追加する必要があります。( リージョンは「杭州」で、dtは「20150923」)、テーブル、ユーザーのためのステートメントは次のように表示されます。

  1. Alter table user add if not exists partition(region='hangzhou',dt='20150923');

パーティションの削除

ステートメントフォーマット:

  1. alter table table_name drop [if exists] partition_spec;
  2. partition_spec:
  3. : (partition_col1 = partition_col_value1, partition_col2 = partiton_col_value2, ...)

たとえば、パーティションを削除しなければならないときの( リージョンは「杭州」でdtは「20150923」)ステートメントは次のように表示されます。

  1. Alter table user drop if exists partition(region='hangzhou',dt='20150923');