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

MaxCompute:テーブルの作成と削除

最終更新日:Aug 22, 2026

MaxCompute で、非パーティションテーブル、パーティションテーブル、外部テーブル、クラスター化テーブル、トランザクションテーブル、Delta テーブルを作成、削除します。

タイプ

説明

必要な権限

実行ツール

CREATE TABLE

非パーティション化テーブル、パーティション化テーブル、外部テーブル、またはクラスター化テーブルを作成します。

プロジェクトの CreateTable 権限が必要です。

これらのコマンドは、以下で実行します:

DROP TABLE

パーティション化テーブルまたは非パーティション化テーブルを削除します。

テーブルの Drop 権限が必要です。

テーブルの作成

非パーティションテーブル、パーティションテーブル、外部テーブル、またはクラスター化テーブルを作成します。

制限

  • パーティションテーブルでは、最大 6 つのパーティションレベルを設定できます。たとえば、日付をパーティション列として使用し、 year/month/week/day/hour/minute などのレベルを定義できます。

  • テーブルあたりの最大パーティション数はプロジェクトごとに設定でき、デフォルトは 60,000 です。

その他のテーブルの制限については、「MaxCompute SQL の制限」をご参照ください。

構文

内部テーブル

内部テーブル (非パーティション化またはパーティション化) の作成

CREATE [OR REPLACE] TABLE [IF NOT EXISTS] <table_name> (
<col_name> <data_type>, ... )
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type> [COMMENT <col_comment>], ...)]
[AUTO PARTITIONED 
   BY (<auto_partition_expression> [AS <auto_partition_column_name>])
  [TBLPROPERTIES('ingestion_time_partition'='true')]
];

クラスター化テーブル

クラスター化テーブルの作成

CREATE TABLE [IF NOT EXISTS] <table_name> (
<col_name> <data_type>, ... )
[CLUSTERED BY | RANGE CLUSTERED BY (<col_name> [, <col_name>, ...]) 
[SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] 
INTO <number_of_buckets> BUCKETS];

外部テーブル

外部テーブルの作成

この例では、組み込みのテキストデータパーサーを使用して OSS 外部テーブルを作成します。その他の形式の詳細については、「ORC 外部テーブル」をご参照ください。

CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name> ( 
<col_name> <data_type>, ... ) 
STORED AS '<file_format>' 
[WITH SERDEPROPERTIES (options)]  
LOCATION '<oss_location>';

トランザクションテーブルと Delta テーブル

  • トランザクションテーブルを作成します。このタイプのテーブルでは UPDATE または DELETE 操作を実行できます。ただし、トランザクションテーブルには制限があります。

    CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> (
    <col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [COMMENT <col_comment>], ...   
    [COMMENT <table_comment>]
    [TBLPROPERTIES ("transactional"="true")];
  • Delta テーブルを作成します。プライマリキーと組み合わせることで、アップサート、増分クエリ、タイムトラベルなどの操作を実行できます。

    CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> (
    <col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [COMMENT <col_comment>], ...   
    [PRIMARY KEY (<pk_col_name>[, <pk_col_name2>, ...] )]) 
    [COMMENT <table_comment>]
    [CLUSTERED BY (<pk_col_name>[, <pk_col_name2>, ...] )]
    [TBLPROPERTIES ("transactional"="true" 
    [, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...])] [LIFECYCLE <days>];
    • プライマリキーを持つ Delta テーブルでは、プライマリキーのサブセットをハッシュクラスターキーとして使用できます。

      プライマリキーを持つ Delta テーブルでは、システムはデフォルトで完全なプライマリキーをクラスターキーとしてハッシュクラスタリングを使用します。クエリがプライマリキー列のサブセットで頻繁にフィルタリングする場合は、そのサブセットをクラスターキーとして明示的に指定することで、フィルタリングパフォーマンスを向上させることができます。

    • クラスターキーを明示的に指定すると、システムは指定された列に基づいてテーブルデータをハッシュバケットに分散します。クラスターキーは、プライマリキー列のサブセットである必要があります。

      クラスターキーを明示的に指定しない場合、システムはプライマリキー列の完全なセットをデフォルトのクラスターキーとして使用します。

      テーブルの作成後にクラスターキーを変更することはできません。テーブルの作成時に指定する必要があります。

CTAS 句と LIKE 句

  • 既存のテーブル (外部テーブルや外部レイクハウスプロジェクト内のテーブルを含む) に基づいて新しいテーブルを作成し、データをコピーしますが、パーティションプロパティはコピーしません。

    CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>;
  • 既存のテーブル (外部テーブルや外部レイクハウスプロジェクト内のテーブルを含む) と同じ構造で新しいテーブルを作成しますが、データはコピーしません。

    CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;

パラメータ

一般的なパラメーター

一般的なパラメーター

パラメーター

必須

説明

備考

OR REPLACE

いいえ

  • 同じ名前のテーブルが存在する場合、そのテーブルは削除され、新しいテーブルに置き換えられます。

  • CREATE OR REPLACE TABLE は、次の句とは併用できません。

    • CREATE TABLE ... IF NOT EXISTS

これは、次のコマンドを実行するのと同等です。

DROP TABLE IF EXISTS <tableName>;  -- テーブルが存在する場合は削除します。
CREATE TABLE <tableName> ...;      -- 新しいテーブルを作成します。

EXTERNAL

いいえ

外部テーブルを作成します。

該当なし

IF NOT EXISTS

いいえ

同じ名前のテーブルが存在しない場合にのみ、テーブルを作成します。

IF NOT EXISTS を使用しない場合、同じ名前でテーブルを作成するとエラーが返されます。IF NOT EXISTS を使用すると、同じ名前のテーブルが異なるスキーマで存在していても、文は成功します。既存のテーブルのメタデータは変更されません。

table_name

はい

テーブルの名前。

テーブル名は 128 バイト以下で、英字、数字、アンダースコア (_) のみで構成されている必要があります。大文字と小文字を区別しません。名前の先頭は英字にすることを推奨します。

PRIMARY KEY(pk)

いいえ

テーブルのプライマリキー。

1 つ以上の列をプライマリキーとして定義し、列の組み合わせの一意性を保証します。標準の SQL プライマリキー構文に従います。プライマリキー列は NOT NULL であり、変更することはできません。

重要

このパラメーターは Delta テーブルにのみ適用されます。

col_name

はい

列の名前。

  • 列名は 128 バイト以下で、英字、数字、アンダースコア (_)、または漢字のみで構成されている必要があります。大文字と小文字を区別しません。名前の先頭は英字にすることを推奨します。

  • SET odps.sql.bigquery.compatible=true; コマンドを実行して、BigQuery 互換モードを有効にします。このモードでは、列名は最大 256 バイト長になります。そうでない場合、エラーが返されます。

col_comment

いいえ

列のコメント。

1,024 バイト以下の文字列である必要があります。

data_type

はい

列のデータ型。

サポートされている型:BIGINT、DOUBLE、BOOLEAN、DATETIME、DECIMAL、STRING、および データ型 に記載されているその他の型。

NOT NULL

いいえ

列に NULL 値を含めることができないことを指定します。

NOT NULL プロパティの変更方法の詳細については、「NOT NULL プロパティの変更」をご参照ください。

default_value

いいえ

列のデフォルト値。

insert 操作でこの列の値が指定されていない場合、デフォルト値が列に書き込まれます。

説明

GETDATE()NOW() などの関数は、デフォルト値としてサポートされていません。

table_comment

いいえ

テーブルのコメント。

1,024 バイト以下の文字列である必要があります。

LIFECYCLE

いいえ

テーブルのライフサイクル (日数)。

正の整数のみがサポートされています。単位は日です。

  • 非パーティション化テーブルの場合、ライフサイクルは最終データ変更時刻から開始されます。データが指定された日数変更されない場合、MaxCompute はテーブルを自動的に回収します。これは DROP TABLE 操作と同等です。

  • パーティションテーブルの場合、システムはパーティションの LastModifiedTime に基づいてパーティションを回収するかどうかを決定します。非パーティション化テーブルとは異なり、最後のパーティションが回収された後もテーブル自体は削除されません。ライフサイクルはテーブルレベルでのみ設定でき、パーティションレベルでは設定できません。

パーティションテーブルのパラメーター

パーティションテーブルのパラメーター

MaxCompute は、標準パーティションテーブルと自動パーティションテーブルをサポートしています。パーティション列の生成方法に基づいて選択してください。詳細については、パーティションテーブルの概要をご参照ください。

標準パーティションテーブルのパラメーター

パラメーター

必須

説明

備考

PARTITIONED BY

はい

標準パーティションテーブルのパーティションを指定します。

PARTITIONED BY または AUTO PARTITIONED BY のいずれかを使用してパーティションを指定できますが、両方を同時に指定することはできません。

col_name

はい

パーティション列の名前です。

  • 列名は 128 バイト以下で、英字、数字、アンダースコア (_) または漢字のみを含める必要があります。大文字と小文字は区別されません。先頭は英字にすることを推奨します。

  • SET odps.sql.bigquery.compatible=true; コマンドを実行して、BigQuery 互換モードを有効にします。このモードでは、列名は最大 256 バイト長になります。そうでない場合、エラーが返されます。

data_type

はい

パーティション列のデータ型です。

MaxCompute V1.0 では STRING のみがサポートされています。V2.0 では TINYINT、SMALLINT、INT、BIGINT、および VARCHAR が追加されます (STRING も引き続きサポートされます)。データ型の完全な一覧については、データ型をご参照ください。パーティショニングにより、パーティションレベルの操作でフルテーブルスキャンを回避できます。

col_comment

いいえ

パーティション列のコメントです。

1,024 バイト以下の文字列である必要があります。

説明

パーティション値は 255 バイト以下である必要があります。漢字などの 2 バイト文字を含めることはできません。値は英字で始まり、英字、数字、および次の文字のみを含める必要があります:スペース、コロン (:)、アンダースコア (_)、ドル記号 ($)、シャープ記号 (#)、ピリオド (.)、感嘆符 (!)、アットマーク (@)。\t\n/ などのエスケープ文字を含むその他の文字の動作は未定義です。

自動パーティションテーブルのパラメーター

自動パーティションテーブルでは、パーティション列が自動的に生成されます。使用方法の詳細については、「パーティションテーブルの種類」をご参照ください。

パラメーター

必須

説明

備考

AUTO PARTITIONED BY

はい

自動パーティションテーブルのパーティションを指定します。

PARTITIONED BY または AUTO PARTITIONED BY のいずれかを使用してパーティションを指定できますが、両方を同時に指定することはできません。

auto_partition_expression

はい

パーティション列の算出方法を定義する式です。

現時点では、パーティション列の生成に使用できるのは TRUNC_TIME 関数のみです。サポートされるパーティション列は 1 つのみです。

TRUNC_TIME 関数は、指定した時間単位に基づいて時刻型または日付型の列のデータを切り捨て、パーティション列を生成できます。

auto_partition_column_name

いいえ

生成されるパーティション列の名前です。

名前を指定しない場合、システムは _pt_col_0_ をデフォルト名として使用します。この名前が既に使用されている場合、未使用の名前が見つかるまで接尾辞をインクリメントします (例:_pt_col_1_ または _pt_col_2_)。

パーティション式の算出に基づき、STRING 型のパーティション列が生成されます。この列の名前は明示的に指定できますが、データ型や値を直接変更することはできません。

TBLPROPERTIES('ingestion_time_partition'='true')

いいえ

データインジェスト時間に基づいてパーティション列を生成するかどうかを指定します。

インジェスト時間パーティショニングについては、「データインジェスト時間に基づく自動パーティションテーブル」をご参照ください。

クラスター化テーブルのパラメーター

クラスター化テーブルのパラメーター

クラスター化テーブルには、ハッシュクラスター化テーブルとレンジクラスター化テーブルがあります。

ハッシュクラスター化テーブル

パラメーター

必須

説明

備考

CLUSTERED BY

はい

ハッシュキーを指定します。MaxCompute は、指定した列のハッシュ値を計算し、その値に基づいてデータをハッシュバケットに分散します。

データスキューを防ぎ、十分な並列性を確保するには、CLUSTERED BY 句にカーディナリティが高く、重複の少ない列を選択してください。join の最適化を目的とする場合は、頻繁に使用される結合キーまたは集計キーを選択します。

SORTED BY

はい

各ハッシュバケット内の列のソート順を指定します。

最適なパフォーマンスを得るには、SORTED BYCLUSTERED BY に同じ列を使用してください。SORTED BY 句を指定すると、MaxCompute はインデックスを自動的に作成し、そのインデックスを使用してクエリを高速化します。

number_of_buckets

はい

ハッシュバケット数を指定します。

この値は必須で、データ量によって決まります。

説明

ハッシュバケット数を選択する際は、次の 2 つの原則に従ってください:

  • ハッシュバケットのサイズを適切に保つ:各ハッシュバケットの推奨サイズは約 500 MB です。たとえば、推定パーティションサイズが 500 GB の場合、バケット数を 1,000 に設定します。これにより、平均ハッシュバケットサイズは約 500 MB になります。非常に大きいテーブルの場合は、500 MB を超えてもかまいません。バケットあたり 2 GB ~ 3 GB が適切です。

  • join 操作を最適化するには、シャッフルとソートのステップを削除することで、パフォーマンスが大幅に向上します。そのためには、2 つのテーブルのハッシュバケット数が互いに倍数関係である必要があります (例:256 と 512)。512、1024、2048、4096 など、ハッシュバケット数を 2 のべき乗 (2n) に設定することを推奨します。これにより、システムはハッシュバケットを自動的に分割またはマージし、シャッフルとソートのステップを削除できるため、実行効率が向上します。

レンジクラスター化テーブル

パラメーター

必須

説明

備考

RANGE CLUSTERED BY

はい

レンジクラスター列を指定します。

MaxCompute は、指定した列に対してバケット分割を実行し、バケット番号に基づいてデータをバケットに分散します。

SORTED BY

はい

各バケット内の列のソート順を指定します。

使用方法は、ハッシュクラスター化テーブルの場合と同じです。

number_of_buckets

いいえ

バケット数を指定します。

レンジクラスター化テーブルでは、ハッシュクラスター化テーブルに適用される 2 のべき乗 (2n) のベストプラクティスは必須ではありません。データが均等に分散される場合は、任意のバケット数を使用できます。このパラメーターはレンジクラスター化テーブルでは任意です。省略した場合、システムはデータ量に基づいて最適なバケット数を自動的に決定します。

レンジクラスター化テーブルで join または集計操作を実行する際、結合キーまたはグループキーがレンジクラスタリングキーまたはそのプレフィックスであれば、データの再分散 (シャッフルの削除) を行わずにパフォーマンスを向上させることができます。この機能は、set odps.optimizer.enable.range.partial.repartitioning=true/false; コマンドを実行して有効または無効にできます。デフォルトでは無効です。

説明
  • クラスター化テーブルのメリット:

    • バケットプルーニングの最適化

    • 集計の最適化

    • ストレージの最適化

  • クラスター化テーブルの制限:

    • INSERT INTO はサポートされていません。INSERT OVERWRITE でのみデータを追加できます。

    • Tunnel はデータを順不同でアップロードするため、Tunnel を使用してレンジクラスター化テーブルにデータを直接アップロードすることはできません。

    • バックアップと復元の機能はサポートされていません。

外部テーブルのパラメーター

外部テーブルのパラメーター

このセクションでは、OSS 外部テーブルのパラメーターについて説明します。その他の外部テーブルの種類については、「外部テーブル」をご参照ください。

パラメーター

必須

説明

STORED AS '<file_format>'

はい

外部テーブルのデータ形式に基づいて file_format を指定します。

WITH SERDEPROPERTIES(options)

いいえ

外部テーブルの権限付与、圧縮、および文字解析に関連するパラメーターを指定します。

oss_location

はい

外部テーブルデータの OSS ストレージロケーションです。詳細については、「OSS 外部テーブル」をご参照ください。

トランザクションテーブルと Delta テーブルのパラメーター

トランザクションテーブルと Delta テーブルのパラメーター

Delta テーブルのパラメーター

Delta テーブルは、ニアリアルタイムの読み取りと書き込み、増分ストレージとアクセス、およびリアルタイム更新をサポートするテーブル形式です。現在、プライマリキーテーブルのみがサポートされています。

パラメーター

必須

説明

備考

PRIMARY KEY (PK)

はい

Delta テーブルのプライマリキーを定義します。これには複数の列を含めることができます。

構文は、標準の SQL プライマリキー構文に従います。プライマリキー列は NOT NULL に設定する必要があり、変更することはできません。プライマリキーが設定されると、データはプライマリキー列に基づいて重複排除されます。一意性制約は、単一のパーティション内または非パーティション化テーブル内で適用されます。

transactional

はい

Delta テーブルを作成するために必要です。このパラメーターを true に設定する必要があります。

テーブルが MaxCompute ACID テーブルのトランザクションプロパティをサポートすることを示します。テーブルは、多版型同時実行制御 (MVCC) モデルを使用して、スナップショット分離レベルを保証します。

write.bucket.num

いいえ

デフォルト値は 16 です。有効な範囲は (0, 4096] です。

各パーティションまたは非パーティション化テーブルのバケット数を指定します。これは、データ書き込みの同時実行ノードの数も示します。パーティションテーブルの場合、このパラメーターを変更でき、新しい設定は新しいパーティションに適用されます。非パーティション化テーブルの場合、このパラメーターは変更できません。以下の推奨事項を考慮してください:

  • Tunnel を使用してデータをインポートする場合、このパラメーターは同時実行 Tunnel ノードの数を指定します。この設定はインポートトラフィックに影響し、同時実行 Tunnel ノードの最大数によっても制約されます。

  • SQL を使用してデータを書き込む場合、このパラメーターはリデューサーの同時実行の度合いを指定します。これは、同時実行リデューサーノードの最大数によって制約されます。

  • 各バケットの推奨サイズは、約 500 MB のデータです。たとえば、推定パーティションサイズが 500 GB の場合、バケット数を 1,000 に設定します。非常に大きなテーブルの場合は、バケットサイズを 2 GB から 3 GB に増やすことができます。

acid.data.retain.hours

いいえ

デフォルト値は 24 です。有効な値は 0、または [24, 168] の範囲の整数です。

タイムトラベルを使用して履歴データの状態をクエリできる時間範囲を時間単位で指定します。168 時間 (7 日間) を超えるタイムトラベル履歴が必要な場合は、MaxCompute のテクニカルサポートにお問い合わせください。

  • 値 0 は、履歴データの状態が保持されず、タイムトラベルクエリがサポートされないことを示します。

  • 指定された値より古い履歴データは、削除またはコンパクションされる可能性があります。

  • タイムトラベルクエリがこのパラメーターで定義された期間より前の時点を指定した場合、エラーが返されます。たとえば、この値が 72 の場合、72 時間以上前のデータのクエリは失敗します。

acid.incremental.query.out.of.time.range.enabled

いいえ

デフォルト値: false

true の場合、増分クエリの endTimestamp は、テーブルの最新データコミット時刻より後になることがあります。この場合、新しいデータが挿入される可能性があるため、複数のクエリが異なる結果を返すことがあります。既存のテーブルに対してこのパラメーターの値を変更できます。

acid.write.precombine.field

いいえ

単一の列名を指定します。

列名が指定されている場合、システムはこの列をプライマリキー列と組み合わせて使用し、同じコミット内でデータを重複排除します。これにより、データの一意性と一貫性が保証されます。

説明

単一のデータコミットが 128 MB を超える場合、複数のファイルが生成されます。このパラメーターは、複数ファイルにまたがっては適用されません。

acid.partial.fields.update.enable

いいえ

true に設定すると、SQL または Tunnel を使用して Delta テーブルで部分的な列の更新を実行できます。

このパラメーターはテーブル作成時に設定します。テーブル作成後に 変更することはできません

  • Delta テーブルのその他のパラメーター要件:

    • LIFECYCLE:テーブルのライフサイクルは、タイムトラベルの保持期間以上である必要があります。つまり、lifecycle >= acid.data.retain.hours / 24 です。テーブルの作成時にチェックが行われ、この条件が満たされない場合はエラーが報告されます。

    • サポートされていない機能:CLUSTERED BYEXTERNAL、および CREATE TABLE AS はサポートされていません。

  • その他の制限事項:

    • 現在、他のエンジンは Delta テーブルを直接操作できません。MaxCompute SQL のみがサポートされています。

    • 標準テーブルを Delta テーブルに変換することはできません。

    • Delta テーブルのプライマリキー列に対してスキーマ変更を実行することはできません。

トランザクションテーブルのパラメーター

パラメーター

必須

説明

TBLPROPERTIES("transactional"="true")

はい

テーブルをトランザクションテーブルとして設定し、行レベルの 更新 および 削除 操作を有効にします。「データの更新または削除 (UPDATE | DELETE)」をご参照ください。

トランザクションテーブルには、以下の制限事項があります:

  • transactional プロパティは、テーブル作成時にのみ設定できます。既存のテーブルに対して ALTER TABLE を使用してこのプロパティを変更することはできません。次のステートメントはエラーを返します:

    ALTER TABLE not_txn_tbl SET TBLPROPERTIES("transactional"="true");
    -- エラーが返されます。
    FAILED: Catalog Service Failed, ErrorCode: 151, Error Message: Set transactional is not supported
  • クラスター化テーブルまたは外部テーブルをトランザクションテーブルとして設定することはできません。

  • 標準の内部テーブル、外部テーブル、またはクラスター化テーブルをトランザクションテーブルに変換すること、またその逆もできません。

  • 自動コンパクションはサポートされていません。「トランザクションテーブル内のファイルをコンパクションする」で説明されているように、手動でファイルをコンパクションしてください。

  • パーティションのマージ 操作はサポートされていません。

  • 他のシステムからのトランザクションテーブルへのアクセスは制限されています。たとえば、MaxCompute Graph は読み取りまたは書き込み操作をサポートしていません。SparkPAI は読み取り操作のみをサポートしています。

  • 重要なデータに対して 更新削除、または INSERT OVERWRITE 操作を実行する前に、SELECT ... INSERT ステートメントを使用して、手動で別のテーブルにバックアップしてください。

既存テーブルからのテーブル作成

既存テーブルからのテーブル作成

  • CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>; ステートメントを使用して、別のテーブルを作成すると同時に新しいテーブルにデータをコピーできます。

    • このステートメントでは、パーティションプロパティはコピーされません。ソーステーブルのパーティション列は、宛先テーブルでは通常の列として扱われます。また、ソーステーブルのライフサイクルプロパティもコピーされません。

    • lifecycle パラメーターを使用して、新規テーブルのライフサイクルを指定できます。このステートメントは、内部テーブルの作成と、外部テーブルからのデータのコピーもサポートしています。

  • CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>; ステートメントを使用して、既存のテーブルと同じスキーマの新しいテーブルを作成できます。

    • このステートメントはスキーマをコピーしますが、ソーステーブルのデータやライフサイクルプロパティはコピーしません。

    • lifecycle パラメーターを使用して、新しいテーブルのライフサイクルを指定できます。また、このステートメントでは、外部テーブルのスキーマをコピーして内部テーブルを作成することもできます。

非パーティション化テーブル

  • 非パーティション化テーブルを作成します。

    CREATE TABLE test1 (key STRING);
  • 非パーティション化テーブルを作成し、列のデフォルト値を指定します。

    CREATE TABLE test_default( 
    tinyint_name tinyint NOT NULL default 1Y,
    smallint_name SMALLINT NOT NULL DEFAULT 1S,
    int_name INT NOT NULL DEFAULT 1,
    bigint_name BIGINT NOT NULL DEFAULT 1,
    binary_name BINARY ,
    float_name FLOAT ,
    double_name DOUBLE NOT NULL DEFAULT 0.1,
    decimal_name DECIMAL(2, 1) NOT NULL DEFAULT 0.0BD,
    varchar_name VARCHAR(10) ,
    char_name CHAR(2) ,
    string_name STRING NOT NULL DEFAULT 'N',
    boolean_name BOOLEAN NOT NULL DEFAULT TRUE
    );

パーティション化テーブル

  • 標準パーティション化テーブルを作成します。

    CREATE TABLE IF NOT EXISTS sale_detail(
     shop_name     STRING,
     customer_id   STRING,
     total_price   DOUBLE)
    PARTITIONED BY (sale_date STRING, region STRING);
  • 時間関数を使用して、時間ベースのデータ列に基づいてパーティションを生成する AUTO PARTITION パーティション化テーブルを作成します。

    -- sale_date 列を月単位で切り捨てて、sale_month という名前のパーティション列を生成し、この列でテーブルをパーティション化します。
    CREATE TABLE IF NOT EXISTS auto_sale_detail(
     shop_name     STRING,
     customer_id   STRING,
     total_price   DOUBLE,
     sale_date    DATE )
    AUTO PARTITIONED BY (TRUNC_TIME(sale_date, 'month') AS sale_month);
  • データインジェスト時間に基づいてパーティションを生成する AUTO PARTITION パーティション化テーブルを作成します。システムは、データが MaxCompute に書き込まれた時刻を自動的に取得し、時間関数を使用してパーティションを生成します。

    -- テーブルの作成後、データが書き込まれると、システムは自動的にデータインジェスト時間 (_partitiontime) を取得し、日単位で切り捨てて、sale_date という名前のパーティション列を生成し、この列でテーブルをパーティション化します。
    CREATE TABLE IF NOT EXISTS auto_sale_detail2(
     shop_name     STRING,
     customer_id   STRING,
     total_price   DOUBLE,
     _partitiontime TIMESTAMP_NTZ)
    AUTO PARTITIONED BY (TRUNC_TIME(_partitiontime, 'day') AS sale_date)
    TBLPROPERTIES('ingestion_time_partition'='true');

ハッシュまたはレンジクラスター化テーブル

  • ハッシュクラスター化非パーティション化テーブルを作成します。

    CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 バケット;
  • ハッシュクラスター化パーティション化テーブルを作成します。

    CREATE TABLE t2 (a STRING, b STRING, c BIGINT) 
    PARTITIONED BY (dt STRING) CLUSTERED BY (c) SORTED BY (c) INTO 1024 バケット;
  • レンジクラスター化非パーティション化テーブルを作成します。

    CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 バケット;
  • レンジクラスター化パーティション化テーブルを作成します。

    CREATE TABLE t4 (a STRING, b STRING, c BIGINT) 
    PARTITIONED BY (dt STRING) RANGE CLUSTERED BY (c) SORTED BY (c); 

トランザクションテーブル

  • 非パーティション化トランザクションテーブルを作成します。

    CREATE TABLE t5(id BIGINT) TBLPROPERTIES ("transactional"="true");
  • パーティション化トランザクションテーブルを作成します。

    CREATE TABLE IF NOT EXISTS t6(id BIGINT) 
    PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true");

内部テーブル

  • 外部パーティション化テーブルからデータをコピーして内部テーブルを作成します。内部テーブルには、パーティションプロパティは含まれません。

    1. OSS 外部テーブルと MaxCompute 内部テーブルを作成します。CREATE TABLE AS を使用して内部テーブルを作成します。

      -- OSS 外部テーブルを作成し、データを挿入します。
      CREATE EXTERNAL TABLE max_oss_test(a INT, b INT) PARTITIONED BY (c INT)
      STORED AS TEXTFILE
      LOCATION "oss://oss-cn-hangzhou-internal.aliyuncs.com/<bucket_name>";
      
      INSERT INTO max_oss_test VALUES 
      (101, 1, 20241108),
      (102, 2, 20241109),
      (103, 3, 20241110);
      
      SELECT * FROM max_oss_test;
      
      -- 結果
      a    b    c
      101    1    20241108
      102    2    20241109
      103    3    20241110
      
      
      -- CREATE TABLE AS を使用して内部テーブルを作成します。
      CREATE TABLE from_exetbl_oss AS SELECT * FROM max_oss_test;
      
      -- 新しい内部テーブルをクエリします。
      SELECT * FROM from_exetbl_oss;
      
      -- 結果は、すべてのデータがコピーされたことを示しています。
      a    b    c
      101    1    20241108
      102    2    20241109
      103    3    20241110
    2. DESC from_exetbl_oss; コマンドを実行して、内部テーブルのスキーマを表示します。コマンドから次の出力が返されます。

      +------------------------------------------------------------------------------------+
      | Owner:                    ALIYUN$***********                                       |
      | Project:                  ***_*****_***                                            |
      | TableComment:                                                                      |
      +------------------------------------------------------------------------------------+
      | CreateTime:               2023-01-10 15:16:33                                      |
      | LastDDLTime:              2023-01-10 15:16:33                                      |
      | LastModifiedTime:         2023-01-10 15:16:33                                      |
      +------------------------------------------------------------------------------------+
      | InternalTable: YES      | Size: 919                                                |
      +------------------------------------------------------------------------------------+
      | Native Columns:                                                                    |
      +------------------------------------------------------------------------------------+
      | Field           | Type       | Label | Comment                                     |
      +------------------------------------------------------------------------------------+
      | a               | string     |       |                                             |
      | b               | string     |       |                                             |
      | c               | string     |       |                                             |
      +------------------------------------------------------------------------------------+
  • 外部パーティション化テーブルからスキーマをコピーして内部テーブルを作成します。内部テーブルには、パーティションプロパティが含まれます。

    1. 内部テーブル from_exetbl_like を作成します。MaxCompute から OSS 外部テーブルをクエリします。CREATE TABLE LIKE を使用して内部テーブルを作成します。

      -- MaxCompute から OSS 外部テーブルをクエリします。
      SELECT * FROM max_oss_test;
      -- 結果
      a    b    c
      101    1    20241108
      102    2    20241109
      103    3    20241110
      
      -- CREATE TABLE LIKE を使用して内部テーブルを作成します。
      CREATE TABLE from_exetbl_like LIKE max_oss_test;
      
      -- 新しい内部テーブルをクエリします。
      SELECT * FROM from_exetbl_like;
      -- 結果:テーブルスキーマのみが返されます。
      a    b    c
    2. DESC from_exetbl_like; コマンドを実行して、内部テーブルのスキーマを表示します。コマンドから次の出力が返されます。

      +------------------------------------------------------------------------------------+
      | Owner:                    ALIYUN$************                                      |
      | Project:                  ***_*****_***                                            |
      | TableComment:                                                                      |
      +------------------------------------------------------------------------------------+
      | CreateTime:               2023-01-10 15:09:47                                      |
      | LastDDLTime:              2023-01-10 15:09:47                                      |
      | LastModifiedTime:         2023-01-10 15:09:47                                      |
      +------------------------------------------------------------------------------------+
      | InternalTable: YES      | Size: 0                                                  |
      +------------------------------------------------------------------------------------+
      | Native Columns:                                                                    |
      +------------------------------------------------------------------------------------+
      | Field           | Type       | Label | Comment                                     |
      +------------------------------------------------------------------------------------+
      | a               | string     |       |                                             |
      | b               | string     |       |                                             |
      +------------------------------------------------------------------------------------+
      | Partition Columns:                                                                 |
      +------------------------------------------------------------------------------------+
      | c               | string     |                                                     |
      +------------------------------------------------------------------------------------+

Delta テーブル

  • Delta テーブルを作成します。

    CREATE TABLE mf_tt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) 
      TBLPROPERTIES ("transactional"="true");
  • Delta テーブルを作成し、主要なテーブルプロパティを設定します。

    CREATE TABLE mf_tt2 ( 
      pk BIGINT NOT NULL, 
      pk2 BIGINT NOT NULL, 
      val BIGINT, 
      val2 BIGINT, 
      PRIMARY KEY (pk, pk2)
    ) 
    TBLPROPERTIES (
      "transactional"="true", 
      "write.bucket.num" = "64", 
      "acid.data.retain.hours"="120"
    ) LIFECYCLE 7;

その他の方法

既存のテーブルを置き換える

  1. 元のテーブル my_table を作成し、データを挿入します。

    CREATE OR REPLACE TABLE my_table(a BIGINT);
    
    INSERT INTO my_table(a) VALUES (1),(2),(3);
  2. OR REPLACE を使用して、同じ名前の新しいテーブルを作成し、その列を変更します。

    CREATE OR REPLACE TABLE my_table(b STRING);
  3. my_table テーブルをクエリします。クエリの結果は次のとおりです。

    +------------+
    | b          | 
    +------------+
    +------------+

    次の SQL ステートメントは無効です:

    CREATE OR REPLACE TABLE IF NOT EXISTS my_table(b STRING);
    CREATE OR REPLACE TABLE my_table AS SELECT;
    CREATE OR REPLACE TABLE my_table LIKE newtable;

データをコピーしてライフサイクルを設定する

-- sale_detail_ctas1 という名前の新しいテーブルを作成し、sale_detail からデータをコピーして、ライフサイクルを設定します。
SET odps.sql.allow.fullscan=true;
CREATE TABLE sale_detail_ctas1 LIFECYCLE 10 AS SELECT * FROM sale_detail;

DESC EXTENDED sale_detail_ctas1; コマンドを実行して、テーブルのスキーマやライフサイクルなどの詳細を表示します。

説明

この例では、sale_detail はパーティション化テーブルです。CREATE TABLE ... AS select_statement ... ステートメントを使用して sale_detail_ctas1 テーブルを作成する場合、パーティションプロパティはコピーされません。ソーステーブルのパーティション列は、ターゲットテーブルでは通常の列になります。したがって、sale_detail_ctas1 は 5 つの列を持つ非パーティション化テーブルです。

列の値として定数を使用

説明

SELECT 句で列の値として定数を使用する場合は、列名を指定してください。それ以外の場合、作成されたテーブル sale_detail_ctas3 の 4 番目と 5 番目の列には、_c4_c5 などのデフォルト名が割り当てられます。

  • 列名を指定します。

    SET odps.sql.allow.fullscan=true;
    CREATE TABLE sale_detail_ctas2
    AS
    SELECT shop_name, customer_id, total_price, '2013' AS sale_date, 'China' AS region
    FROM sale_detail;
  • 列名を指定しません。

    SET odps.sql.allow.fullscan=true;
    
    CREATE TABLE sale_detail_ctas3
    AS
    SELECT shop_name, customer_id, total_price, '2013', 'China' 
    FROM sale_detail;

スキーマをコピーしてライフサイクルを設定する

CREATE TABLE sale_detail_like LIKE sale_detail LIFECYCLE 10;

DESC EXTENDED sale_detail_like; コマンドを実行して、テーブルのスキーマやライフサイクルなどの詳細を表示します。

説明

sale_detail_like のスキーマは sale_detail のスキーマと同一です。列名、列コメント、テーブルコメントなどのすべてのプロパティがコピーされますが、ソーステーブルのライフサイクルプロパティは継承されません。この例では、LIFECYCLE 10 が新しいテーブルに設定されています。ただし、sale_detail のデータは sale_detail_like テーブルにコピーされません。

外部テーブルからスキーマをコピーする

-- 外部テーブル mc_oss_extable_orc と同じスキーマを持つ、mc_oss_extable_orc_like という名前の新しいテーブルを作成します。
CREATE TABLE mc_oss_extable_orc_like LIKE mc_oss_extable_orc;

DESC mc_oss_extable_orc_like; コマンドを実行して、テーブルのスキーマなどの詳細を表示します。

+------------------------------------------------------------------------------------+
| Owner: ALIYUN$****@***.aliyunid.com | Project: max_compute_7u************yoq              |
| TableComment:                                                                      |
+------------------------------------------------------------------------------------+
| CreateTime:               2022-08-11 11:10:47                                      |
| LastDDLTime:              2022-08-11 11:10:47                                      |
| LastModifiedTime:         2022-08-11 11:10:47                                      |
+------------------------------------------------------------------------------------+
| InternalTable: YES      | Size: 0                                                  |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field           | Type       | Label | Comment                                     |
+------------------------------------------------------------------------------------+
| id              | string     |       |                                             |
| name            | string     |       |                                             |
+------------------------------------------------------------------------------------+

新しいデータ型

SET odps.sql.type.system.odps2=true;
CREATE TABLE test_newtype (
    c1 TINYINT,
    c2 SMALLINT,
    c3 INT,
    c4 BIGINT,
    c5 FLOAT,
    c6 DOUBLE,
    c7 DECIMAL,
    c8 BINARY,
    c9 TIMESTAMP,
    c10 ARRAY<MAP<BIGINT,BIGINT>>,
    c11 MAP<STRING,ARRAY<BIGINT>>,
    c12 STRUCT<s1:STRING,s2:BIGINT>,
    c13 VARCHAR(20))
LIFECYCLE 1;

DROP TABLE

非パーティション化テーブルまたはパーティションテーブルを削除します。

注意事項

  • テーブルを削除する際は、注意が必要です。 削除されたテーブルは、プロジェクトでバックアップと復元が有効になっており、かつテーブルがデータ保持期間内にある場合にのみ復元できます。 復元には ローカルバックアップ の設定が必要です。

  • テーブルを削除すると、MaxCompute プロジェクトのストレージ使用量が削減されます。

構文

DROP TABLE [IF EXISTS] <table_name>; 

パラメーター

パラメーター

必須

説明

IF EXISTS

いいえ

IF EXISTS を指定しない場合、存在しないテーブルを削除しようとすると例外が返されます。IF EXISTS を指定した場合、テーブルが存在しない場合でもステートメントは成功します。

table_name

はい

削除するテーブルの名前です。

-- sale_detail テーブルを削除します。テーブルが存在するかどうかに関わらず、ステートメントは成功します。
DROP TABLE IF EXISTS sale_detail; 

参考

  • テーブルデータを別のテーブルにコピーするには、「CLONE TABLE」をご参照ください。

  • テーブル情報を変更および表示するには、「テーブルの変更と表示」をご参照ください。

  • 既存のテーブルパーティションを管理するには、「パーティション操作」をご参照ください。

  • 既存のテーブルカラムを管理するには、「カラム操作」をご参照ください。