このトピックでは、非パーティションテーブル、パーティションテーブル、外部テーブル、またはクラスター化テーブルを作成する方法について説明します。
制限事項
パーティションテーブルには、最大 6 レベルのパーティションを設定できます。たとえば、テーブルがパーティションキー列として日付列を使用する場合、パーティションの 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>], ...)]
;クラスター化テーブルの作成
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 外部テーブルを作成します。
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name> (
<col_name> <data_type>, ... )
STORED AS '<file_format>'
[WITH SERDEPROPERTIES (options)]
LOCATION '<oss_location>';テーブルを作成してテーブルタイプを指定する
トランザクションテーブルを作成します。テーブルの作成後に、テーブルのデータを更新または削除できます。ただし、トランザクションテーブルには特定の制限が課せられます。必要に応じてトランザクションテーブルを作成することをお勧めします。
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>] [TBLPROPERTIES ("transactional"="true" [, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...])] [LIFECYCLE <days>];
既存のテーブルに基づいて新しいテーブルを作成する
既存のテーブルに基づいてテーブルを作成し、既存のテーブルから新しいテーブルにデータを複製します。パーティションプロパティは複製されません。既存の外部テーブル、またはデータレイクハウスソリューションの実装に使用される外部プロジェクトの既存のテーブルに基づいてテーブルを作成できます。
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 | いいえ | <table_name> で指定されたテーブルが既に存在する場合、そのテーブルに対して DROP TABLE 文を実行し、同じ名前のテーブルを作成して置き換えることができます。 | このパラメーターは、次の文の代わりに使用できます: 説明 制限事項: CREATE OR REPLACE TABLE は、次の構文と一緒には使用できません:
|
EXTERNAL | いいえ | 作成するテーブルが外部テーブルであることを指定します。 | なし |
IF NOT EXISTS | いいえ | 同じ名前のテーブルが既に存在する場合にエラーがスローされるのを防ぎます。テーブルが存在する場合、文は無視されます。 | IF NOT EXISTS パラメーターを指定せず、同じ名前のテーブルが存在する場合、エラーが返されます。IF NOT EXISTS パラメーターを指定した場合、既存のテーブルのスキーマが作成するテーブルのスキーマと同じであるかどうかに関係なく、成功メッセージが返されます。既存のテーブルのメタデータは変更されません。 |
table_name | はい | テーブルの名前。 | 名前は大文字と小文字を区別せず、文字、数字、アンダースコア (_) のみを含めることができます。名前は文字で始めることをお勧めします。名前は 128 バイトを超えることはできません。超える場合はエラーが返されます。 |
PRIMARY KEY(pk) | いいえ | テーブルのプライマリキー。 | 1 つ以上の列をプライマリキーとして指定できます。これは、これらの列の組み合わせがテーブル内で一意でなければならないことを示します。プライマリキーの標準 SQL 構文に準拠する必要があります。プライマリキーとして定義された列は not null に設定する必要があり、変更できません。 重要 このパラメーターは Delta テーブルにのみ適用されます。 |
col_name | はい | テーブル列の名前。 | 名前は大文字と小文字を区別せず、文字、数字、アンダースコア (_) のみを含めることができます。名前は文字で始めることをお勧めします。名前は 128 バイトを超えることはできません。超える場合はエラーが返されます。 |
col_comment | いいえ | 列のコメント。 | コメントは、長さが 1,024 バイトを超えない有効な文字列である必要があります。このパラメーターの値が要件を満たさない場合、エラーが返されます。 |
data_type | はい | 列のデータの型。 | データの型は、BIGINT、DOUBLE、BOOLEAN、DATETIME、DECIMAL、STRING、またはその他のデータの型にすることができます。詳細については、「データ型のエディション」をご参照ください。 |
NOT NULL | いいえ | このパラメーターを列に指定すると、その列の値は NULL にできません。 | NOT NULL 属性の変更方法の詳細については、「パーティション操作」をご参照ください。 |
default_value | いいえ | 列のデフォルト値。 |
説明
|
table_comment | いいえ | テーブルのコメント。 | コメントは、長さが 1,024 バイトを超えない有効な文字列である必要があります。このパラメーターの値が要件を満たさない場合、エラーが返されます。 |
LIFECYCLE | いいえ | テーブルのライフサイクル。 | 値は正の整数である必要があります。単位: 日。
|
パーティションテーブルのパラメーター
MaxCompute は、通常のパーティションテーブルと自動パーティションテーブル (AUTO PARTITION) の 2 種類のパーティションテーブルをサポートしています。さまざまなシナリオでパーティションキー列をどのように生成するかに応じて、タイプを選択できます。
通常のパーティションテーブルのパラメーター
パラメーター | 必須 | 説明 | 備考 |
PARTITIONED BY | はい | 通常のパーティションテーブルのパーティションを指定します。 | パーティションは、PARTITIONED BY または AUTO PARTITIONED BY のいずれかの方法でのみ指定できます。 |
col_name | はい | パーティションキー列の名前。 | 名前は大文字と小文字を区別せず、文字、数字、アンダースコア (_) のみを含めることができます。名前は文字で始めることをお勧めします。名前は 128 バイトを超えることはできません。超える場合はエラーが返されます。 |
data_type | はい | パーティションキー列のデータの型。 | MaxCompute V1.0 データ型エディションでは、パーティションキー列は STRING 型である必要があります。MaxCompute V2.0 データ型エディションでは、パーティションキー列は TINYINT、SMALLINT、INT、BIGINT、VARCHAR、または STRING 型にすることができます。詳細については、「データ型のエディション」をご参照ください。パーティションフィールドを使用してテーブルをパーティション分割する場合、パーティションの追加、パーティションデータの更新、またはパーティションデータの読み取り時に全表スキャンは不要です。これにより、データ処理の効率が向上します。 |
col_comment | いいえ | パーティションキー列のコメント。 | コメントは、長さが 1,024 バイトを超えない有効な文字列である必要があります。このパラメーターの値が要件を満たさない場合、エラーが返されます。 |
パーティションキー列の値には、中国語文字などの 2 バイト文字を含めることはできません。パーティションキー列の値は文字で始まる必要があり、文字、数字、およびサポートされている特殊文字を含めることができます。長さは 255 バイトを超えることはできません。サポートされている特殊文字には、スペース、コロン (:)、アンダースコア (_)、ドル記号 ($)、番号記号 (#)、ピリオド (.)、感嘆符 (!)、およびアットマーク (@) が含まれます。エスケープ文字 \t、\n、/ など、他の文字の動作は未定義です。
AUTO PARTITION テーブルのパラメーター
自動パーティションテーブル (AUTO PARTITION) は、特定の方法でパーティションキー列を自動的に生成します。
パラメーター | 必須 | 説明 | 備考 |
AUTO PARTITIONED BY | はい | AUTO PARTITION テーブルのパーティションを指定します。 | パーティションは、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 | はい | ハッシュバケットの数。 | このパラメーターは必須であり、このパラメーターの値はデータ量によって異なります。デフォルトでは、MaxCompute は最大 1,111 個の reducer をサポートします。これは、MaxCompute が最大 1,111 個のハッシュバケットをサポートすることを意味します。この制限を増やすには、 |
最適なパフォーマンスを維持するために、ハッシュバケットの数を指定する際には、次のルールに注意することをお勧めします:
各ハッシュバケットのサイズを約 500 MB に保ちます。たとえば、パーティションサイズが 500 GB の場合、1,000 個のバケットを指定することをお勧めします。これにより、各バケットのサイズは平均 500 MB になります。テーブルに大量のデータが含まれている場合、各バケットのサイズを 500 MB から 2 GB から 3 GB の範囲のサイズに増やすことができます。また、
set odps.stage.reducer.num=<concurrency>;を使用して 1,111 バケットの制限を超えることもできます。join最適化シナリオでは、シャッフルとソートのステップを削除することでパフォーマンスを大幅に向上させることができます。したがって、あるテーブルのハッシュバケットの数は、他のテーブルのハッシュバケットの数の倍数でなければなりません。たとえば、一方のテーブルには 256 個のハッシュバケットがあり、もう一方のテーブルには 512 個のハッシュバケットがあります。ハッシュバケットの数として 2n (512、1,024、2,048、4,096 など) を使用することをお勧めします。これにより、システムはハッシュバケットを自動的に分割およびマージし、シャッフルとソートのステップを削除して実行効率を向上させることができます。
レンジクラスター化テーブルのパラメーター
パラメーター | 必須 | 説明 | 備考 |
RANGE CLUSTERED BY | はい | レンジクラスター化列。 | MaxCompute は指定された列に対してバケット操作を実行し、バケット ID に基づいて各バケットにデータを分散します。 |
SORTED BY | はい | 各バケット内の列のソート順を指定します。 | このパラメーターは、ハッシュクラスター化テーブルの場合と同じように使用できます。 |
number_of_buckets | はい | ハッシュバケットの数。 | レンジクラスター化テーブルのバケット数は、ハッシュクラスター化テーブルの 2n のベストプラクティスに従う必要はありません。データ分布が妥当であれば、任意の数のバケットを使用できます。レンジクラスター化テーブルでバケット数を指定しない場合、MaxCompute はデータ量に基づいて最適な数を自動的に決定します。 |
レンジクラスター化テーブルで JOIN および AGGREGATE 操作が実行され、結合キーまたはグループキーがレンジクラスター化キーまたはレンジクラスター化キーのプレフィックスである場合、フラグを管理してシャッフルを無効にできます。これにより、実行効率が向上します。この機能を構成するには、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 構文に準拠する必要があります。プライマリキーとして定義された列は not null に設定する必要があり、変更できません。Delta テーブルにプライマリキーを指定すると、プライマリキーに基づいてテーブルから重複データが削除されます。プライマリキー列の一意性制約は、単一のパーティションまたは非パーティションテーブルで有効です。 |
transactional | はい | このパラメーターは、Delta テーブルを作成するときに必須です。このパラメーターを true に設定する必要があります。 | このプロパティを |
write.bucket.num | いいえ | デフォルト値: 16。有効値: | このパラメーターは、パーティションテーブルのパーティション内、または非パーティションテーブル内のバケット数を示します。このパラメーターは、データの書き込みに使用される同時ノードの数も指定します。パーティションテーブルに対してこのパラメーターの値を変更できます。パーティションテーブルに新しいパーティションが追加された場合、このパラメーターの構成はデフォルトで新しいパーティションに適用されます。非パーティションテーブルに対してこのパラメーターの値を変更することはできません。次の点に注意してください:
|
acid.data.retain.hours | いいえ | デフォルト値: 24。有効値: | タイムトラベル機能を使用して既存データのステータスをクエリできる時間範囲。単位: 時間。168 時間 (7 日) を超える期間の既存データのステータスをクエリするには、MaxCompute テクニカルサポートにお問い合わせください。
|
acid.incremental.query.out.of.time.range.enabled | いいえ | デフォルト値: | このパラメーターを true に設定すると、増分クエリで指定された endTimestamp プロパティの値は、テーブル内のデータの最大コミット時間よりも後の時点にすることができます。endTimestamp プロパティの値が現在時刻より大きい場合、新しいデータが Delta テーブルに挿入される可能性があり、複数のクエリで異なる結果が得られる場合があります。テーブルに対してこのパラメーターの値を変更できます。 |
acid.write.precombine.field | いいえ | このパラメーターを使用して、1 つの列の名前のみを指定できます。 | 列名を指定すると、システムは、このパラメーターとともにコミットされた SQL 文を含むファイル内のプライマリキー列に基づいてデータ重複除去を実行します。これにより、データの一意性と一貫性が確保されます。 説明 一度にコミットされるデータのサイズが 128 MB を超える場合、複数のファイルが生成されます。このパラメーターは、複数のファイルのデータ重複除去には使用できません。 |
acid.partial.fields.update.enable | いいえ | このパラメーターを | このパラメーターはテーブル作成時に設定できます。テーブル作成後、このパラメーターの値を変更することはできません。 |
Delta テーブルのその他の一般的なパラメーターの要件:
LIFECYCLE: テーブルのライフサイクルは、タイムトラベルクエリを実行できるライフサイクル以上である必要があります。数式は
lifecycle >= acid.data.retain.hours / 24です。テーブルを作成するとき、MaxCompute は指定したテーブルのライフサイクルをチェックします。指定したライフサイクルが要件を満たさない場合、エラーが返されます。その他のサポートされていない機能: Delta テーブルは CLUSTER BY および CREATE TABLE AS 文をサポートしておらず、外部テーブルとして使用することはできません。
その他の制限事項:
MaxCompute SQL のみが Delta テーブルを直接操作できます。
既存の共通テーブルを Delta テーブルに変更することはできません。
Delta テーブルのプライマリキー列のスキーマを変更することはできません。
トランザクションテーブルのパラメーター
パラメーター | 必須 | 説明 |
TBLPROPERTIES(transactional"="true") | はい | このパラメーターは、テーブルをトランザクションテーブルに設定するために使用されます。トランザクションテーブルに対して |
トランザクションテーブルには次の制限があります:
MaxCompute では、テーブルを作成するときにのみ、テーブルをトランザクションテーブルに設定できます。
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 内部テーブル、外部テーブル、またはクラスター化テーブルの間で変換することはできません。
トランザクションテーブルファイルは自動的にはマージされません。手動でマージ操作を実行する必要があります。詳細については、「トランザクションテーブルファイルをマージする」をご参照ください。
merge partition操作はサポートされていません。他のシステムのジョブからトランザクションテーブルにアクセスするには、特定の制限が課せられます。たとえば、ジョブが Graph ジョブの場合、そのジョブを使用してトランザクションテーブルからデータを読み書きすることはできません。ジョブが Spark ジョブまたは Platform for AI (PAI) ジョブの場合、そのジョブを使用してトランザクションテーブルからデータを読み取ることしかできず、そのジョブを使用してトランザクションテーブルにデータを書き込むことはできません。
トランザクションテーブル内の重要なデータに対して
update、delete、または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);パーティションテーブルの作成
sale_detail という名前のパーティションテーブルを作成します。
CREATE TABLE IF NOT EXISTS sale_detail(
shop_name STRING,
customer_id STRING,
total_price DOUBLE)
PARTITIONED BY (sale_date STRING, region STRING);元のテーブルを置き換える新しいテーブルの作成
元のテーブル
mytableを作成し、テーブルにデータを書き込みます。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 テーブルから sale_detail_ctas1 テーブルにデータを複製し、ライフサイクルを設定します。
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 文の定数を列の値として使用する
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 テーブルのスキーマと同一です。ただし、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;ハッシュクラスター化テーブルの作成
非パーティションテーブル
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;パーティションテーブル
CREATE TABLE t2 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;
レンジクラスター化テーブルの作成
非パーティションテーブル
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;パーティションテーブル
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");
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;
非パーティションテーブルを作成し、フィールドのデフォルト値を指定する
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);内部テーブルを作成し、外部パーティションテーブルからデータを複製する
内部テーブルにはパーティションプロパティが含まれていません。
OSS 外部テーブルと MaxCompute 内部テーブルを作成します。
-- OSS 外部テーブルを作成し、データを挿入します。 CREATE EXTERNAL TABLE max_oss_test(a INT, b INT, 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 20241110DESC from_exetbl_as_par;コマンドを実行して、内部テーブルのスキーマを取得します。+------------------------------------------------------------------------------------+ | 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 からデータレイクハウス外部テーブルをクエリします。 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 cDESC 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 | | +------------------------------------------------------------------------------------+
関連コマンド
ALTER TABLE: テーブル操作を変更します。
TRUNCATE: 指定したテーブルからデータをクリアします。
DROP TABLE: パーティションテーブルまたは非パーティションテーブルを削除します。
DESC TABLE/VIEW: MaxCompute 内部テーブル、ビュー、マテリアライズドビュー、外部テーブル、クラスター化テーブル、およびトランザクションテーブルに関する情報を取得します。
SHOW: テーブルの SQL DDL 文を取得したり、プロジェクト内のすべてのテーブルとビューを一覧表示したり、テーブル内のすべてのパーティションを一覧表示したりします。