MaxCompute で、非パーティションテーブル、パーティションテーブル、外部テーブル、クラスター化テーブル、トランザクションテーブル、Delta テーブルを作成、削除します。
|
タイプ |
説明 |
必要な権限 |
実行ツール |
|
非パーティション化テーブル、パーティション化テーブル、外部テーブル、またはクラスター化テーブルを作成します。 |
プロジェクトの CreateTable 権限が必要です。 |
これらのコマンドは、以下で実行します: |
|
|
パーティション化テーブルまたは非パーティション化テーブルを削除します。 |
テーブルの 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 |
いいえ |
|
これは、次のコマンドを実行するのと同等です。
|
|
EXTERNAL |
いいえ |
外部テーブルを作成します。 |
該当なし |
|
IF NOT EXISTS |
いいえ |
同じ名前のテーブルが存在しない場合にのみ、テーブルを作成します。 |
IF NOT EXISTS を使用しない場合、同じ名前でテーブルを作成するとエラーが返されます。IF NOT EXISTS を使用すると、同じ名前のテーブルが異なるスキーマで存在していても、文は成功します。既存のテーブルのメタデータは変更されません。 |
|
table_name |
はい |
テーブルの名前。 |
テーブル名は 128 バイト以下で、英字、数字、アンダースコア (_) のみで構成されている必要があります。大文字と小文字を区別しません。名前の先頭は英字にすることを推奨します。 |
|
PRIMARY KEY(pk) |
いいえ |
テーブルのプライマリキー。 |
1 つ以上の列をプライマリキーとして定義し、列の組み合わせの一意性を保証します。標準の SQL プライマリキー構文に従います。プライマリキー列は NOT NULL であり、変更することはできません。 重要
このパラメーターは Delta テーブルにのみ適用されます。 |
|
col_name |
はい |
列の名前。 |
|
|
col_comment |
いいえ |
列のコメント。 |
1,024 バイト以下の文字列である必要があります。 |
|
data_type |
はい |
列のデータ型。 |
サポートされている型:BIGINT、DOUBLE、BOOLEAN、DATETIME、DECIMAL、STRING、および データ型 に記載されているその他の型。 |
|
NOT NULL |
いいえ |
列に NULL 値を含めることができないことを指定します。 |
NOT NULL プロパティの変更方法の詳細については、「NOT NULL プロパティの変更」をご参照ください。 |
|
default_value |
いいえ |
列のデフォルト値。 |
説明
|
|
table_comment |
いいえ |
テーブルのコメント。 |
1,024 バイト以下の文字列である必要があります。 |
|
LIFECYCLE |
いいえ |
テーブルのライフサイクル (日数)。 |
正の整数のみがサポートされています。単位は日です。
|
パーティションテーブルのパラメーター
パーティションテーブルのパラメーター
MaxCompute は、標準パーティションテーブルと自動パーティションテーブルをサポートしています。パーティション列の生成方法に基づいて選択してください。詳細については、パーティションテーブルの概要をご参照ください。
標準パーティションテーブルのパラメーター
|
パラメーター |
必須 |
説明 |
備考 |
|
PARTITIONED BY |
はい |
標準パーティションテーブルのパーティションを指定します。 |
PARTITIONED BY または AUTO PARTITIONED BY のいずれかを使用してパーティションを指定できますが、両方を同時に指定することはできません。 |
|
col_name |
はい |
パーティション列の名前です。 |
|
|
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 |
いいえ |
生成されるパーティション列の名前です。 名前を指定しない場合、システムは |
パーティション式の算出に基づき、STRING 型のパーティション列が生成されます。この列の名前は明示的に指定できますが、データ型や値を直接変更することはできません。 |
|
TBLPROPERTIES('ingestion_time_partition'='true') |
いいえ |
データインジェスト時間に基づいてパーティション列を生成するかどうかを指定します。 |
インジェスト時間パーティショニングについては、「データインジェスト時間に基づく自動パーティションテーブル」をご参照ください。 |
クラスター化テーブルのパラメーター
クラスター化テーブルのパラメーター
クラスター化テーブルには、ハッシュクラスター化テーブルとレンジクラスター化テーブルがあります。
ハッシュクラスター化テーブル
|
パラメーター |
必須 |
説明 |
備考 |
|
CLUSTERED BY |
はい |
ハッシュキーを指定します。MaxCompute は、指定した列のハッシュ値を計算し、その値に基づいてデータをハッシュバケットに分散します。 |
データスキューを防ぎ、十分な並列性を確保するには、 |
|
SORTED BY |
はい |
各ハッシュバケット内の列のソート順を指定します。 |
最適なパフォーマンスを得るには、SORTED BY と CLUSTERED 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 外部テーブルのパラメーターについて説明します。その他の外部テーブルの種類については、「外部テーブル」をご参照ください。
|
パラメーター |
必須 |
説明 |
|
|
はい |
外部テーブルのデータ形式に基づいて file_format を指定します。 |
|
|
いいえ |
外部テーブルの権限付与、圧縮、および文字解析に関連するパラメーターを指定します。 |
|
oss_location |
はい |
外部テーブルデータの OSS ストレージロケーションです。詳細については、「OSS 外部テーブル」をご参照ください。 |
トランザクションテーブルと Delta テーブルのパラメーター
トランザクションテーブルと Delta テーブルのパラメーター
Delta テーブルのパラメーター
Delta テーブルは、ニアリアルタイムの読み取りと書き込み、増分ストレージとアクセス、およびリアルタイム更新をサポートするテーブル形式です。現在、プライマリキーテーブルのみがサポートされています。
|
パラメーター |
必須 |
説明 |
備考 |
|
PRIMARY KEY (PK) |
はい |
Delta テーブルのプライマリキーを定義します。これには複数の列を含めることができます。 |
構文は、標準の SQL プライマリキー構文に従います。プライマリキー列は |
|
transactional |
はい |
Delta テーブルを作成するために必要です。このパラメーターを |
テーブルが MaxCompute ACID テーブルのトランザクションプロパティをサポートすることを示します。テーブルは、多版型同時実行制御 (MVCC) モデルを使用して、スナップショット分離レベルを保証します。 |
|
write.bucket.num |
いいえ |
デフォルト値は 16 です。有効な範囲は |
各パーティションまたは非パーティション化テーブルのバケット数を指定します。これは、データ書き込みの同時実行ノードの数も示します。パーティションテーブルの場合、このパラメーターを変更でき、新しい設定は新しいパーティションに適用されます。非パーティション化テーブルの場合、このパラメーターは変更できません。以下の推奨事項を考慮してください:
|
|
acid.data.retain.hours |
いいえ |
デフォルト値は 24 です。有効な値は 0、または |
タイムトラベルを使用して履歴データの状態をクエリできる時間範囲を時間単位で指定します。168 時間 (7 日間) を超えるタイムトラベル履歴が必要な場合は、MaxCompute のテクニカルサポートにお問い合わせください。
|
|
acid.incremental.query.out.of.time.range.enabled |
いいえ |
デフォルト値: |
|
|
acid.write.precombine.field |
いいえ |
単一の列名を指定します。 |
列名が指定されている場合、システムはこの列をプライマリキー列と組み合わせて使用し、同じコミット内でデータを重複排除します。これにより、データの一意性と一貫性が保証されます。 説明
単一のデータコミットが 128 MB を超える場合、複数のファイルが生成されます。このパラメーターは、複数ファイルにまたがっては適用されません。 |
|
acid.partial.fields.update.enable |
いいえ |
|
このパラメーターはテーブル作成時に設定します。テーブル作成後に 変更することはできません。 |
-
Delta テーブルのその他のパラメーター要件:
-
LIFECYCLE:テーブルのライフサイクルは、タイムトラベルの保持期間以上である必要があります。つまり、lifecycle >= acid.data.retain.hours / 24です。テーブルの作成時にチェックが行われ、この条件が満たされない場合はエラーが報告されます。 -
サポートされていない機能:
CLUSTERED BY、EXTERNAL、およびCREATE TABLE ASはサポートされていません。
-
-
その他の制限事項:
-
現在、他のエンジンは Delta テーブルを直接操作できません。MaxCompute SQL のみがサポートされています。
-
標準テーブルを Delta テーブルに変換することはできません。
-
Delta テーブルのプライマリキー列に対してスキーマ変更を実行することはできません。
-
トランザクションテーブルのパラメーター
|
パラメーター |
必須 |
説明 |
|
TBLPROPERTIES("transactional"="true") |
はい |
テーブルをトランザクションテーブルとして設定し、行レベルの |
トランザクションテーブルには、以下の制限事項があります:
-
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は読み取りまたは書き込み操作をサポートしていません。SparkとPAIは読み取り操作のみをサポートしています。 -
重要なデータに対して
更新、削除、または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 );
パーティション化テーブル
-
時間関数を使用して、時間ベースのデータ列に基づいてパーティションを生成する 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");
内部テーブル
-
外部パーティション化テーブルからデータをコピーして内部テーブルを作成します。内部テーブルには、パーティションプロパティは含まれません。
-
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 -
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 | | | +------------------------------------------------------------------------------------+
-
-
外部パーティション化テーブルからスキーマをコピーして内部テーブルを作成します。内部テーブルには、パーティションプロパティが含まれます。
-
内部テーブル
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 -
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;
その他の方法
既存のテーブルを置き換える
-
元のテーブル
my_tableを作成し、データを挿入します。CREATE OR REPLACE TABLE my_table(a BIGINT); INSERT INTO my_table(a) VALUES (1),(2),(3); -
OR REPLACEを使用して、同じ名前の新しいテーブルを作成し、その列を変更します。CREATE OR REPLACE TABLE my_table(b STRING); -
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」をご参照ください。
-
テーブル情報を変更および表示するには、「テーブルの変更と表示」をご参照ください。
-
既存のテーブルパーティションを管理するには、「パーティション操作」をご参照ください。
-
既存のテーブルカラムを管理するには、「カラム操作」をご参照ください。