パーティションテーブルは、パーティションを持つテーブルです。 テーブル内のデータは、1列以上の列で分割されます。 このように、テーブル内のデータは分散され、異なる物理的位置に記憶される。 テーブルのパーティションの適切な設計と使用は、クエリのパフォーマンスの向上、データ管理の簡素化、柔軟なデータアクセスとプロセスのサポートに役立ちます。
概要
パーティショニングは、同じカテゴリのデータを同じパーティションに分類することである。 パーティションテーブルのデータは、パーティションキー列に基づいて分類されます。 パーティションテーブルには、1つ以上のパーティションキー列を含めることができます。
MaxComputeでは、パーティションキー列の各値がパーティションとして指定されます。 複数のパーティションキー列を持つマルチレベルパーティションを指定できます。 マルチレベルパーティションは、構造がマルチレベルディレクトリに似ています。
パーティションテーブルは、クエリ効率を向上させます。 WHERE句を使用して、クエリするパーティションの名前を指定できます。 このように、MaxComputeは指定されたパーティションのみをスキャンし、処理効率を向上させ、コストを削減します。 テーブルをクエリするときにアクセスするパーティションの名前を指定すると、指定されたパーティションのデータのみが読み取られます。
パーティション上の特定のSQL文の実行効率は低いです。 これは、より高いコストを引き起こし得る。 たとえば、INSERT INTOまたはINSERT OVERWRITEを使用してデータを動的パーティションに挿入すると、コストが高くなる可能性があります。 詳細については、「動的パーティションへのデータの挿入または上書き (dynamic PARTITION) 」をご参照ください。
MaxComputeでは、パーティションテーブルと非パーティションテーブルの処理に使用される特定のSQL文の構文が異なります。 詳細については、「テーブル操作」および「テーブルまたは静的パーティションへのデータの挿入または更新 (Insert intoおよびINSERT OVERWRITE) 」をご参照ください。
制限事項
テーブルには最大6レベルのパーティションを含めることができます。
テーブルには最大60,000のパーティションを含めることができます。
一度に最大10,000のパーティションを照会できます。
STRING型のパーティションキー列の値には、漢字を含めることはできません。
使用上の注意
テーブル内の多数のパーティションに少量のデータが含まれている場合、データの計算とクエリのパフォーマンスが低下します。 各パーティションに少なくとも10,000行のデータが含まれることをお勧めします。
パーティションキー列のデータ型
MaxCompute V2.0は、TINYINT、SMALLINT、INT、BIGINT、VARCHAR、およびSTRING型のパーティションキー列をサポートします。
ほとんどの場合、メタデータ内のパーティションテーブルのパーティションキー列の値は文字列として格納されます。 STRING型でないパーティションキー列の値は、自動的に文字列に変換されます。 データ型変換による例外を回避するため、パーティションキー列を設計するときにパーティションキー列のデータ型をSTRINGとして指定することを推奨します。
MaxCompute V1.0は、STRINGタイプのパーティションキー列のみをサポートします。 パーティションキー列のデータ型をBIGINTとして指定できます。 ただし、パーティションキー列のみがBIGINT型です。 パーティションキー列のすべてのデータは、パーティションキー列のデータの計算や比較などの操作で文字列として処理されます。 次の例では、返される結果は空です。
--- Create a table named parttest.
create table parttest (a bigint) partitioned by (pt bigint);
--- Insert data into the table.
insert into parttest partition(pt)(a,pt) values (1, 1);
insert into parttest partition(pt)(a,pt) values (1, 10);
--- Query the rows where the value of pt is greater than or equal to 2.
select * from parttest where pt >= '2';
例
パーティションを作成します。
-- Create a partitioned table that contains two levels of partitions. The partition is based on the date and the subpartition is based on the region. CREATE TABLE src (shop_name string, customer_id bigint) PARTITIONED BY (pt string,region string);
パーティションキー列の値をフィルター条件として使用して、テーブルを照会します。
-- The following example shows a correct usage. When MaxCompute generates a query plan, only the data whose region is 'hangzhou' in the '20170601' partition is used as input data. select * from src where pt='20170601'and region='hangzhou'; -- The following example shows an incorrect usage. In this example, the effectiveness of the partition filtering cannot be ensured. Data in the pt partition key column is considered as a string. When a value of the STRING type is compared with a value of the BIGINT type, 20170601 in this example, MaxCompute converts both data types to DOUBLE, which causes a loss in precision. select * from src where pt = 20170601;
関連ドキュメント
パーティションの追加やパーティションキー列の値の変更など、パーティション分割されたMaxComputeテーブルのパーティションに対して操作を実行する方法の詳細については、「パーティションと列の操作」をご参照ください。