機械翻訳について

暗黙的なパーティション化による外部表の問合せ

Autonomous Databaseでは、Hiveスタイルのパーティション化されたデータから、またはクラウド・オブジェクト・ストアに格納されている単純なフォルダ・パーティション化されたデータから、暗黙的にパーティション化された外部表を作成できます。

暗黙的なパーティション化を使用した外部表について

Autonomous Databaseで、DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャを使用して、Hiveスタイルのパーティション・データまたはクラウド・オブジェクト・ストアに格納されている単純なフォルダ・パーティション・データから暗黙的にパーティション化された外部表を作成します。

このプロシージャに適切なオプションを渡すことによって、パーティションはソース・データから導出されます。 パーティション化された外部表は、パーティション列とその値の実行時検出をサポートします。 オブジェクトの追加や削除など、基礎となるオブジェクト・ストア構造の変更の実行時検出では、DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEで必要な追加の同期プロシージャが不要になるため、メンテナンス・プロセスが簡素化されます。 これにより、問合せ実行時にデータが最新であることが保証されます。

暗黙的なパーティション化では、Autonomous Databaseは、オブジェクト・ストレージ・ソースの階層ファイル構造に基づいて、表がパーティション化される列を自動的に決定します。 パーティション分割スキームを明示的に宣言する必要はありません。 暗黙的なパーティション化では、DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEプロシージャを使用してパーティション化された外部表を明示的に定義する必要なく、パーティション表のようなパフォーマンス上の利点が得られます。

暗黙的なパーティション化を使用して非常に大きなデータ・セットの問合せに対する問合せレスポンス時間を最適化するために、strict_column_orderをtrueに設定して最適化を有効にできます。 strict_column_orderパラメータは、implicit_partition_configフォーマット・オプションのサブオプションです。 この最適化は、partition_typeがハイブの場合にのみ適用されます。 例は「Hive形式のソース・ファイル編成を使用した外部暗黙パーティション・データの問合せ」、暗黙的なパーティション化フォーマット・パラメータの詳細は「DBMS_CLOUDパッケージのフォーマット・オプション」を参照してください。

暗黙的にパーティション化された外部表は、オブジェクト・ストア内のパーティション化されたオブジェクトに対して次のネーミング・スタイルをサポートしています:

フォーマットのネーミングの詳細は、「ソース・ファイル・パーティション化を使用した外部表について」を参照してください。

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_typehiveに設定され、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_typehiveに設定され、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形式で格納されたデータを使用して暗黙的にパーティション化された外部表を作成するには、次の手順を実行します:

  1. プロシージャDBMS_CLOUD.CREATE_CREDENTIALを使用してオブジェクト・ストア資格証明を格納します。

    たとえば:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'MY_CREDENTIAL',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /

    リソース・プリンシパル資格証明を有効にした場合、Oracle Cloud Infrastructureオブジェクト・ストアにアクセスするための資格証明の作成は必要ありません。 詳細については、「リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセス」を参照してください。

    この操作では、資格証明がデータベースに暗号化された形式で保存されます。  資格証明名には任意の名前を使用できます。 このステップは、オブジェクト・ストア資格証明が変更されないかぎり、1回のみ実行すれば済みます。  資格証明を保存したら、外部表の作成に同じ資格証明名を使用できます。

    様々なオブジェクト・ストレージ・サービスのusernameおよびpasswordパラメータの詳細は、「CREATE_CREDENTIALプロシージャ」を参照してください。

  2. プロシージャDBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEを使用して、ソース・ファイルの上に暗黙的なパーティション外部表を作成します。
    1. ケース1: 暗黙的なパーティション化を有効にします。
      この例では、フォーマット・オプションimplicit_partition_columnsが指定されていないため、パーティション列は自動的に検出され、フォーマット・オプションimplicit_partition_typehiveに設定して暗黙的なパーティション化が有効になります。

      ただし、列のリストが指定されている場合、それらの列はパーティション列として使用され、Autonomous Databaseは列の検出を試行しません。

      パーティション列を検出するために、Autonomous Databaseは、file_uri_listで指定されたパスの先頭から「=」の検索を開始します。 見つかった場合、最後の'/'までの'='の左側部分が列(例: "country")として取得され、最初の'/'が値(例: "USA")として取得されます。 '='の検索は、最初のパーティション値に続く'/'の後、パス内の2番目の'='を検出するまで続行されます。

      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;
      /

      パラメータは次のとおりです:

      • table_name: 外部表名です。

      • credential_name: 前のステップで作成した資格証明の名前です。

      • file_uri_list: ソース・ファイルURIのカンマ区切りリストです。 このリストには2つのオプションがあります:

        • ワイルドカードを使用せずに個々のファイルURIのカンマ区切りリストを指定します。

        • ワイルドカードは最後のスラッシュ"/""の後にのみ指定できる、ワイルドカードを含む単一のファイルURIを指定します。 文字「*」は複数の文字のワイルドカードとして使用でき、文字「?」は1文字のワイルドカードとして使用できます。

        この例では、namespace-stringがOracle Cloud Infrastructureオブジェクト・ストレージのネームスペースで、bucketnameがバケット名です。 詳細については、「オブジェクト・ストレージのネームスペースについて」を参照してください。

      • column_list: 外部表の列名とデータ型のカンマ区切りリストです。 リストには、データファイル内のカラムと、オブジェクト名から派生したカラム(file_uri_listで指定されたファイル・パスの名前から)が含まれます。

        データファイルが構造化ファイル(Parquet、AvroまたはORC)の場合、column_listは必要ありません。

      • format: ソース・ファイルの形式を記述するために指定できるオプションを定義します。 implicit_partition_typeオプションは、データ形式タイプをhiveとして指定します。

        ソース・ファイル内のデータが暗号化されている場合は、encryption形式オプションを指定してデータを復号化します。 データの復号化の詳細は、「オブジェクト・ストレージからのインポート中のデータの復号化」を参照してください。

        詳細については、「DBMS_CLOUDパッケージ・フォーマット・オプション」を参照してください。

    1. ケース2: 最適化された暗黙的パーティション化
      この例では、implicit_partition_configフォーマット・オプションを指定して暗黙的パーティション化を有効にし、strict_column_orderをtrueに設定して最適化された暗黙的パーティション化を有効にします。

      partition_columnsはパーティション列のリストを指定するため、これらの列はパーティション列として使用され、Autonomous Databaseは列の検出を試行しません。

      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_config":{
                                          "partition_type":"hive",
                                          "strict_column_order":true,
                                          "partition_columns":["country","year","month","day"]
                                }
                                }');
      END;
      /

      フォーマット・パラメータは次のとおりです。

      • format: ソース・ファイルの形式を記述するために指定できるオプションを定義します。 implicit_partition_configオプションには、次のサブオプションがあります。
        • partition_type

          受け入れられる値は"hive"のみです。 デフォルトはハイブ以外のファイル名パスです。 partition_typeを指定しない場合、クライアント・エラーが返されます。

        • partition_columns

          パーティション化された列のリスト。

        • strict_column_order

          最適化された暗黙的パーティション化を有効にするには、trueに設定します。 trueに設定するのは、オブジェクト・ストア・パスが変更されず、欠落している接頭辞がない場合のみです。 falseに設定するか、無効にする場合は省略します。

        ソース・ファイル内のデータが暗号化されている場合は、encryption形式オプションを指定してデータを復号化します。 データの復号化の詳細は、「オブジェクト・ストレージからのインポート中のデータの復号化」を参照してください。

        詳細については、「DBMS_CLOUDパッケージ・フォーマット・オプション」を参照してください。

    パラメータの詳細は、「CREATE_EXTERNAL_TABLEプロシージャ」を参照してください。 サポートされているクラウド・オブジェクト・ストレージ・サービスの詳細は、「DBMS_CLOUD URIの書式」を参照してください。

  3. これで、前のステップで作成した外部パーティション表に対して問合せを実行できます。

    Autonomous Databaseは、外部パーティション表のパーティション化情報を利用して、問合せがオブジェクト・ストア内の関連データファイルにのみアクセスするようにします。

    たとえば:

    SELECT product, units FROM mysales WHERE year='2024' and month='02'

    このSQL文は、2024年の02月のパーティションのデータのみを問い合せます。

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形式で格納されたデータを使用して暗黙的にパーティション化された外部表を作成するには、次の手順を実行します:

  1. プロシージャDBMS_CLOUD.CREATE_CREDENTIALを使用してオブジェクト・ストア資格証明を格納します。

    たとえば:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'MY_CREDENTIAL',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /

    リソース・プリンシパル資格証明を有効にした場合、Oracle Cloud Infrastructureオブジェクト・ストアにアクセスするための資格証明の作成は必要ありません。 詳細については、「リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセス」を参照してください。

    この操作では、資格証明がデータベースに暗号化された形式で保存されます。  資格証明名には任意の名前を使用できます。 このステップは、オブジェクト・ストア資格証明が変更されないかぎり、1回のみ実行すれば済みます。  資格証明を保存したら、外部表の作成に同じ資格証明名を使用できます。

    様々なオブジェクト・ストレージ・サービスのusernameおよびpasswordパラメータの詳細は、「CREATE_CREDENTIALプロシージャ」を参照してください。

  2. プロシージャDBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEを使用して、ソース・ファイルの上に暗黙的なパーティション外部表を作成します。
    この例では、パーティション列にフォーマット・オプションimplicit_partition_columnsを指定することで、暗黙的なパーティション化が有効になります。 フォルダ名にはパーティション列が含まれていないため、file_uri_listで指定されたパス内のパーティション値は、書式オプション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;
    /

    パラメータは次のとおりです:

    • table_name: 外部表名です。

    • credential_name: 前のステップで作成した資格証明の名前です。

    • file_uri_list: ソース・ファイルURIのカンマ区切りリストです。 このリストには2つのオプションがあります:

      • ワイルドカードを使用せずに個々のファイルURIのカンマ区切りリストを指定します。

      • ワイルドカードは最後のスラッシュ"/""の後にのみ指定できる、ワイルドカードを含む単一のファイルURIを指定します。 文字「*」は複数の文字のワイルドカードとして使用でき、文字「?」は1文字のワイルドカードとして使用できます。

    • column_list: 外部表の列名とデータ型のカンマ区切りリストです。 リストには、データファイル内のカラムと、オブジェクト名から派生したカラム(file_uri_listで指定されたファイル・パスの名前から)が含まれます。

      データファイルが構造化ファイル(Parquet、AvroまたはORC)の場合、column_listは必要ありません。

    • format: ソース・ファイルの形式を記述するために指定できるオプションを定義します。 implicit_partition_typeオプションは未設定です。 implicit_partition_columnsが指定されているため、型は自動的に非ハイブとして検出されます。

      ソース・ファイル内のデータが暗号化されている場合は、encryption形式オプションを指定してデータを復号化します。 データの復号化の詳細は、「オブジェクト・ストレージからのインポート中のデータの復号化」を参照してください。

      詳細については、「DBMS_CLOUDパッケージ・フォーマット・オプション」を参照してください。

    この例では、namespace-stringがOracle Cloud Infrastructureオブジェクト・ストレージのネームスペースで、bucketnameがバケット名です。 詳細については、「オブジェクト・ストレージのネームスペースについて」を参照してください。

    パラメータの詳細は、「CREATE_EXTERNAL_TABLEプロシージャ」を参照してください。

    サポートされているクラウド・オブジェクト・ストレージ・サービスの詳細は、「DBMS_CLOUD URIの書式」を参照してください。

  3. これで、前のステップで作成した外部パーティション表に対して問合せを実行できます。

    Autonomous Databaseは、外部パーティション表のパーティション化情報を利用して、問合せがオブジェクト・ストア内の関連データファイルにのみアクセスするようにします。

    たとえば:

    SELECT product, units FROM mysales WHERE year='2024'

    このSQL文は、2024年のパーティションのデータのみを問い合せます。