MaxCompute におけるテーブル、パーティション、列の DDL 操作に関するよくある質問です。
|
カテゴリ |
よくある質問 |
|
テーブル操作 |
|
|
パーティション操作 |
|
|
列操作 |
|
|
ライフサイクル操作 |
仮想テーブルのサポート
MaxCompute では仮想テーブルをサポートしていません。DUAL テーブルは手動で作成できます。
インデックスのサポート
いいえ、MaxCompute のテーブルにインデックスはありません。ただし、ハッシュクラスタリング機能は、データベースのクラスターインデックスと同様に機能します。詳細については、「テーブル操作」をご参照ください。
ハッシュクラスタリング属性の変更
-
テーブルにハッシュクラスタリング属性を追加するには、次のコマンドを実行します。
alter table table_name [clustered by (col_name [, col_name, ...]) [sorted by (col_name [asc | desc] [, col_name [asc | desc] ...])] into number_of_buckets buckets]; -
テーブルからハッシュクラスタリング属性を削除するには、次のコマンドを実行します。
alter table table_name not clustered;
非パーティション化テーブルからパーティションテーブルへの変換
非パーティション化テーブルをパーティションテーブルに変換したり、既存のテーブルにパーティションキー列を追加したりすることはできません。新しいパーティションテーブルを作成する必要があります。詳細については、「テーブル操作」をご参照ください。
削除されたテーブルの復元
MaxCompute はバックアップと復元機能を提供しており、デフォルトの無料保持期間は 24 時間ですが、カスタマイズも可能です。誤ってテーブルを削除した場合、この期間内にデータを復元できます。バックアップと復元の詳細については、「バックアップと復元」をご参照ください。
所有者によるテーブルの照会
TABLES メタデータビューを使用し、owner_name フィールドでフィルタリングして、特定のユーザーが作成したテーブルを検索します。TABLES の詳細については、「TABLES」をご参照ください。
テーブルの存在確認
TABLE_EXISTS 関数を使用して、特定のテーブルが存在するかどうかを確認できます。詳細については、「TABLE_EXISTS」をご参照ください。
プロジェクト内のすべてのテーブル名の取得
MaxCompute クライアントでshow tables; コマンドを実行するか、MaxCompute のメタデータサービスを使用します。詳細については、「テーブル操作」または「Information Schema」をご参照ください。
プロジェクト内のすべてのパーティションテーブルの検索
MaxCompute クライアントで次のコマンドを実行すると、プロジェクト内のすべてのパーティションテーブルを検索できます。
select table_name from information_schema.columns where is_partition_key = true group by table_name;
テーブルの最終アクセス時刻の確認
DataWorks で、データマップページに移動し、テーブルを検索してその詳細ページを開きます。 [Technical Information] パネルには、[Technical type]、[Last DDL change time]、[Last data modification time]、[Last access time]、[Compute engine information] といったフィールドがあります。
テーブルのデータ量の確認
テーブルのデータ量とは、その行数と占有する物理ストレージ領域を指します。
-
テーブル全体の物理ストレージ領域を確認するには、
descコマンドを実行します。行数を確認するには、SQL 文select count(*) as cnt from table_name;を実行します。
-
特定のパーティションの物理ストレージ領域を確認するには、
WHERE句を指定してdescコマンドを実行します。パーティションの行数を確認するには、SQL 文select count(*) as cnt from table_name where ...;を実行します。
テーブルの行数の確認
MaxCompute クライアントでselect count(*) from table_name; コマンドを実行して、パーティションテーブルまたは非パーティション化テーブルの行数を確認できます。
DataWorks でテーブルが表示されない
DataWorks の UI での作成ではなく SQL 文を使用してテーブルを作成した場合、テーブルが表示されるまでに 2〜3 時間かかることがあります。
パーティションとパーティションキー列
MaxCompute のテーブルはパーティション化できます。パーティションテーブルにはパーティションキー列があり、これを使用してパーティションを作成します。
たとえば、ds=20150101 として指定されたパーティションでは、ds がパーティションキー列で、ds=20150101 がパーティションです。
最適なパーティション数
MaxCompute テーブルは最大 60,000 個のパーティションを持つことができ、各パーティションの容量は無制限です。ただし、パーティションが多すぎると、データの統計や分析が複雑になる可能性があります。
MaxCompute はジョブあたりの最大インスタンス数を制限しています。ジョブが使用するインスタンスの数は、入力データ量とパーティション数によって決まります。そのため、ビジネスニーズに合ったパーティショニング戦略を選択する必要があります。
パーティションキーのないテーブルへのパーティションの追加
MaxCompute では、既存のテーブルへのパーティションキーフィールドの追加や変更はサポートしていません。新しいパーティションテーブルを作成し、動的パーティショニング SQL 文を使用してソーステーブルから新しいテーブルにデータをインポートできます。詳細については、「動的パーティションへのデータの挿入または上書き (DYNAMIC PARTITION)」をご参照ください。
パーティションの存在確認
PARTITION_EXISTS 関数を使用して、特定のパーティションが存在するかどうかを確認できます。詳細については、「PARTITION_EXISTS」をご参照ください。
パーティション数の確認
Information Schema のPARTITIONS ビューを使用してパーティション名を取得し、それらをカウントできます。
列の追加または削除
MaxComputeは列の追加をサポートしています。列の削除は招待制プレビューでのみ利用可能です。プレビューを利用しない場合、列を直接削除することはできず、回避策が必要になります。また、複雑なデータ型の列の追加も招待制プレビューで利用できます。トライアルを申請するには、「新機能のトライアル申請」をご参照ください。
列の追加
次のコマンドを実行して列を追加します。テーブルにすでにデータが含まれている場合、新しい列の値は既存のすべての行で NULL になります。
alter table table_name add columns (col_name1 type1, col_name2 type2…);
構文の詳細については、「列の追加」をご参照ください。
自動インクリメント列の設定
MaxCompute は自動インクリメント列をサポートしていません。少量のデータの場合は、回避策としてROW_NUMBER 関数を使用できます。
テーブルあたりの最大列数
1 つの MaxCompute テーブルには最大 1,200 列まで含めることができます。テーブルがこの制限を超える場合は、次の解決策を検討してください。
-
データの次元数を 1,200 列以下に減らします。
-
配列やマップなどの複雑なデータ型を使用して関連データを統合するなど、データストレージの方法を変更します。
キーワードの列名としての使用
キーワードを使用してテーブル、列、またはパーティションに名前を付ける場合は、キーワードをバッククォート (``) で囲む必要があります。そうしないと、エラーが発生します。
列のデータ型の変更
既存の列のデータ型は変更できません。代わりに、目的のデータ型で新しいテーブルを作成し、データを移行してください。データ型の詳細については、「データ型のエディション」をご参照ください。
ライフサイクル設定済みパーティションテーブルのデータクリーンアップ
ライフサイクルが設定されたテーブルのパーティションが指定された期間内に変更されない場合、MaxCompute はそれを自動的に回収します。
desc table_name partition(pt_spec); コマンドを実行して、古いパーティションがライフサイクル期間内に変更されたかどうかを確認します。desc tablename; コマンドを実行して、ライフサイクル設定を表示します。MaxCompute は、期限切れのパーティションを毎日 17:00 に回収します。DataWorks コンソールでのステータスの更新は、通常最大 1 日遅れることがあります。