機械翻訳について

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

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

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

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

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

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

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

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

DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャを使用すると、暗黙的にパーティション化された外部表を次の方法で作成できます:
  • パーティション列のリストを指定してパーティション・タイプをハイブに設定

    この場合、implicit_partition_typehiveに設定され、implicit_partition_columnsはパーティション列のリストを提供します。

    たとえば:

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       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"]}');
  • パーティション列のリストを指定せずに、パーティション・タイプをハイブに設定

    この場合、implicit_partition_typehiveに設定され、implicit_partition_columnsは指定されません。 パーティション列は、file_uri_listで指定されたパスで'='を検索することで自動的に検出されます。 column_nameは'='の左側にあり、値は右側にあります。 パスにcolumn_nameが見つからない場合は、エラーがスローされます。

    たとえば:

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       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_typeは設定されず、implicit_partition_columnsは列のリストを提供します。

    たとえば:

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       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"]}');

詳細は、「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 => 'DEF_CRED_NAME',
        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が指定されていないため、パーティション列は自動的に検出され、フォーマット・オプションimplicit_partition_typehiveに設定して暗黙的なパーティション化が有効になります。

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

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

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'DEF_CRED_NAME',
       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"');

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

    • 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オプションは、データ形式タイプをhiveとして指定します。

      ソース・ファイル内のデータが暗号化されている場合は、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' and month='02'

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

外部暗黙的パーティション非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 => 'DEF_CRED_NAME',
        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で列のリストが明示的に指定されている場合にのみ検出できます。 パス内のそれぞれの列値を検出するには、列の順序が値の順序と同じである必要があります。

    パーティション列が自動的に検出されます。
    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'DEF_CRED_NAME',
       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"]}');

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

    • 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年のパーティションのデータのみを問い合せます。