暗黙的パーティション化を使用した外部表の問合せ
Autonomous AI Databaseでは、Hiveスタイルのパーティション化されたデータから、またはクラウド・オブジェクト・ストアに格納されている単純なフォルダ・パーティション化されたデータから、暗黙的なパーティション化された外部表を作成できます。
- 暗黙的パーティション化による外部表について
自律型AIデータベースでは、DBMS_CLOUD.CREATE_EXTERNAL_TABLE
プロシージャを使用して、Hiveスタイルのパーティション化されたデータまたはクラウド・オブジェクト・ストアに格納されている単純なフォルダ・パーティション化されたデータから暗黙的なパーティション化された外部表を作成します。 - Hiveフォーマットのソース・ファイル編成を使用した外部暗黙的パーティション・データの問合せ
DBMS_CLOUD.CREATE_EXTERNAL_TABLE
プロシージャを使用して、Hiveデータから生成されたオブジェクト・ストアのデータから暗黙的パーティション外部表を作成します。 - 外部暗黙的パーティション非Hiveスタイル・データの問合せ
DBMS_CLOUD.CREATE_EXTERNAL_TABLE
プロシージャを使用して、非Hiveデータから生成されたオブジェクト・ストレージ内のデータから暗黙的パーティション外部表を作成します。
暗黙的パーティション化を使用した外部表について
Autonomous AI Databaseでは、DBMS_CLOUD.CREATE_EXTERNAL_TABLE
プロシージャを使用して、Hiveスタイルのパーティション化されたデータから、またはクラウド・オブジェクト・ストアに格納されている単純なフォルダ・パーティション化されたデータから、暗黙的なパーティション化された外部表を作成します。
このプロシージャに適切なオプションを渡すことで、パーティションはソース・データから導出されます。パーティション化された外部表は、パーティション列とその値のランタイム検出をサポートします。オブジェクトの追加や削除など、基礎となるオブジェクト・ストア構造の変更の実行時検出では、DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
で必要な追加の同期プロシージャが不要になるため、メンテナンス・プロセスが簡素化されます。これにより、問合せ実行時にデータが最新になります。
暗黙的なパーティション化では、Autonomous AI Databaseによって、オブジェクト・ストレージ・ソースの階層ファイル構造に基づいて、表がパーティション化される列が自動的に決定されます。パーティション化スキームを明示的に宣言する必要はありません。暗黙的なパーティション化では、DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
プロシージャを使用してパーティション化された外部表を明示的に定義する必要なく、パーティション表のようなパフォーマンス上の利点が得られます。
暗黙的なパーティション化を使用して非常に大きなデータ・セットの問合せに対する問合せレスポンス時間を最適化するために、strict_column_order
をtrueに設定して最適化を有効にできます。strict_column_order
パラメータは、implicit_partition_config
フォーマット・オプションのサブオプションです。この最適化は、partition_type
がハイブの場合にのみ適用されます。例は「Hive形式のソース・ファイル編成を使用した外部暗黙パーティション・データの問合せ」、暗黙的なパーティション化フォーマット・パラメータの詳細は「DBMS_CLOUDパッケージのフォーマット・オプション」を参照してください。
暗黙的パーティション化された外部表は、オブジェクト・ストア内のパーティション化されたオブジェクトに対して次のネーミング・スタイルをサポートします。
- Hiveネーミング形式: Hiveから生成されたオブジェクト・ストレージ内のデータの形式は、次のとおりです。
OBJBUCKET/<table>/<partcol1>=<value1>/<partcol2>=<value2>/file.parquet
例は、Hiveフォーマットのソース・ファイル編成を使用した外部暗黙的パーティション・データの問合せを参照してください
- Non-Hive "Pathtail" Naming Format: データ・レイクでよく見られる2番目の形式はハイブ形式に似ていますが、フォルダ名にはパーティション列は含まれません。
OBJBUCKET/<table>/<value1>/<value2>/file.parquet
例は、外部暗黙的パーティション非Hiveスタイル・データの問合せを参照してください。
ネーミング形式の詳細は、「ソース・ファイル・パーティション化を使用した外部表について」を参照してください。
DBMS_CLOUD.CREATE_EXTERNAL_TABLE
プロシージャを使用すると、暗黙的なパーティション化された外部表を次の方法で作成できます。
- 暗黙的なパーティション化を最適化します。
implicit_partition_config
オプションを使用して、経過した問合せ時間の暗黙的なパーティション化および最適化を有効にします。この例では、暗黙的なパーティション化を有効にするには、
partition_type
をhiveに設定します。partition_type
の有効な値はhiveのみです。最適化を有効にするには、setting strict_column_order
をtrueに設定します。partition_columns
オプションは、パーティション化される列を指定します。たとえば:
BEGIN dbms_cloud.create_external_table ( table_name => 'partitions1', file_uri_list => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet', column_list => 'c varchar2(100), y number, total_sales number', format => '{"type":"parquet", "implicit_partition_config":{ "partition_type":"hive", "strict_column_order":true, "partition_columns":["org","tenant","dbtype","year","month","day"] } }'); END; /
- パーティション列のリストを指定して、パーティション・タイプをハイブに設定します。
この場合、
implicit_partition_type
はhive
に設定され、implicit_partition_columns
はパーティション列のリストを提供します。たとえば:
BEGIN DBMS_CLOUD.CREATE_EXTERNAL_TABLE ( table_name => 'mysales', credential_name => 'MY_CREDENTIAL', file_uri_list => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet', column_list => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)', format => '{"type":"parquet", "implicit_partition_type":"hive", "implicit_partition_columns":["country","year","month"]}'); END; /
- パーティション列のリストを指定せずに、パーティション・タイプをハイブに設定します。
この場合、
implicit_partition_type
はhive
に設定され、implicit_partition_columns
は指定されません。パーティション列は、file_uri_list
で指定されたパスで'='を検索することで自動的に検出されます。column_name
は'='の左側にあり、値は右側にあります。パスにcolumn_name
が見つからない場合は、エラーがスローされます。たとえば:
BEGIN DBMS_CLOUD.CREATE_EXTERNAL_TABLE ( table_name => 'mysales', credential_name => 'MY_CREDENTIAL', file_uri_list => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet', column_list => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)', format => '{"type":"parquet", "implicit_partition_type":"hive"'); END; /
- タイプを指定せずにパーティション列のリストを指定します。
この場合、
implicit_partition_type
は設定されず、implicit_partition_columns
は列のリストを提供します。たとえば:
BEGIN DBMS_CLOUD.CREATE_EXTERNAL_TABLE ( table_name => 'mysales', credential_name => 'MY_CREDENTIAL', file_uri_list => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet', column_list => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)', format => '{"type":"parquet", "implicit_partition_columns":["country","year","month"]}'); END; /
詳細は、Hive形式のソース・ファイル編成を使用した外部暗黙パーティション・データの問合せおよびCREATE_EXTERNAL_TABLEプロシージャを参照してください。
親トピック: 暗黙的パーティション化を使用した外部表の問合せ
Hive形式のソース・ファイル編成を使用した外部暗黙的パーティション・データの問合せ
DBMS_CLOUD.CREATE_EXTERNAL_TABLE
プロシージャを使用して、Hiveデータから生成されたオブジェクト・ストアのデータから暗黙的なパーティション化された外部表を作成します。
次の例のサンプル・ソース・ファイルでは、次のネーミング形式を使用します。
OBJBUCKET/<table>/<partcol1>=<value1>/<partcol2>=<value2>/file.parquet
次のサンプル・ソース・ファイルについて考えてみます。
OBJBUCKET/sales/country=USA/year=2024/month=01/sales-2024-01.parquet
OBJBUCKET/sales/country=USA/year=2024/month=02/sales-2024-02.parquet
OBJBUCKET/sales/country=USA/year=2024/month=02/sales-2024-03.parquet
このサンプルHive形式で格納されたデータを含む暗黙的なパーティション化された外部表を作成するには、次の手順を実行します。
- strict_column_orderオプションを使用したオブジェクト・ストア問合せ計画の最適化
問合せが多数のファイルおよびサブフォルダを含むオブジェクト・ストア・フォルダを対象とする場合、計画およびリスト・フェーズは、データが実際にスキャンされる前に主要なコストになる可能性があります。これは、パスにパーティション値が埋め込まれているHiveスタイルのフォルダ・レイアウトに共通です。
親トピック: 暗黙的パーティション化を使用した外部表の問合せ
strict_column_orderオプションを使用したオブジェクト・ストア問合せ計画の最適化
非常に多くのファイルおよびサブフォルダを持つオブジェクト・ストア・フォルダを問合せがターゲットとする場合、計画およびリスト・フェーズは、データが実際にスキャンされる前にプライマリ・コストになる可能性があります。これは、パスにパーティション値が埋め込まれているHiveスタイルのフォルダ・レイアウトに共通です。
-
strict_column_order
設定は、デフォルトでは無効になっています。パス・レイアウトが一貫している場合にのみ「有効化」します。 -
フォルダ規則が変更された場合(パーティション列の追加、削除、順序変更など)、
partition_columns
オプションを更新する必要があり、このオプションを無効にする必要がある場合があります。
次の方法で strict_column_order
オプションを有効にします。
データでHiveスタイルのパーティション・パスが使用され、パーティション列が常に固定された一貫した順序で表示され、セグメントが欠落していない場合は、次の設定で最適化を有効にします。
strict_column_order = true (with partition_type = "hive")
データベースは、すでに定義されているパーティションの順序に従って、不要なディレクトリをスキップできます。これは、すべてのオブジェクトを一覧表示する必要がなく、大規模なデータセットの計画時間を大幅に短縮できることを意味します。
strict_column_orderオプションの使用に関するノート:
-
パスは、Hiveのネーミングおよび順序に従います。たとえば:
.../country=US/year=2025/month=09/...
-
パーティション列は、接頭辞の順序変更やスキップを行わずに、固定セットおよび順序を維持します。
- 非常に多数のオブジェクトを含むフォルダのプランタイム・リストを最適化する必要があります。
- すべての接頭辞が存在するわけではないデータセットでは、このオプションを使用できません。たとえば、フォルダの中にはyear= を含むものとmonth= で始まるものがあります。
例: DBMS_CLOUD.CREATE_EXTERNAL_TABLEを使用したHiveスタイル・パーティションのstrict_column_orderオプションの使用
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'sales_xt',
credential_name => 'MY_CREDENTIAL',
file_uri_list => 'https://objectstorage.example.com/n/tenant/b/lake/o/sales/',
-- Data is stored as: .../country=US/year=2025/month=09/*.parquet
column_list => 'product VARCHAR2(100),
units NUMBER,
amount NUMBER,
country VARCHAR2(30),
year NUMBER,
month NUMBER',
format => '{
"type": "parquet",
"implicit_partition_config": {
"partition_type": "hive",
"partition_columns": ["country","year","month"],
"strict_column_order": true
}
}'
);
END;
/
プランニング・ロジックによって、関連のない最上位レベルのパス(他の国や年に属するパスなど)のリストが回避されていることを確認します。
- 先頭のパーティションを制約する選択的問合せを実行します。次に例を示します。
次とSELECT COUNT(*) FROM sales_xt WHERE country = ''US'' AND year = 2025;
.strict_column_order = true
- レイアウトの前提条件が満たされない場合は、オプションを無効化して再試行してください。
外部暗黙的パーティション非Hiveスタイル・データの問合せ
DBMS_CLOUD.CREATE_EXTERNAL_TABLE
プロシージャを使用して、非Hiveデータから生成されたオブジェクト記憶域内のデータから暗黙的なパーティション化された外部表を作成します。
次の例のサンプル・ソース・ファイルでは、次のネーミング形式を使用します。
OBJBUCKET/<table>/<value1>/<value2>/file.parquet
次のサンプル・ソース・ファイルについて考えてみます。
OBJBUCKET/sales/USA/2024/01/sales-2024-01.parquet
OBJBUCKET/sales/USA/2024/01/sales-2024-02.parquet
OBJBUCKET/sales/USA/2024/01/sales-2024-03.parquet
このサンプルHive形式で格納されたデータを含む暗黙的なパーティション化された外部表を作成するには、次の手順を実行します。
親トピック: 暗黙的パーティション化を使用した外部表の問合せ