フォルダ形式のソース・ファイル編成を使用した外部パーティション・データの問合せ

DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEを使用して、外部パーティション表を作成し、クラウド・オブジェクト・ストアのファイル・パスからパーティション化情報を生成します。

フォルダ形式のデータファイルを使用して外部表を作成する場合、パーティション列のタイプを指定するための2つのオプションがあります。

  • column_listパラメータを使用して、列とそのデータ型を手動で指定できます。column_listパラメータの使用例は、「Hive形式のソース・ファイル編成を使用した外部パーティション・データの問合せ」を参照してください。

  • DBMS_CLOUDは、Avro、ORC、Parquetデータファイルなどの構造化データファイルの情報からデータファイルの列とその型を導出できます。この場合、partition_columnsオプションをformatパラメータとともに使用して、パーティション列に列名とそのデータ型を指定するため、column_listまたはfield_listパラメータを指定する必要はありません。

オブジェクト・ストアで次のサンプル・ソース・ファイルを検討します。

.../sales/USA/2020/01/sales1.parquet

.../sales/USA/2020/02/sales2.parquet

このサンプル・フォルダ形式のファイルからパーティションを定義するクラウド・オブジェクト・ストア・ファイル・パスを使用してパーティション化された外部表を作成するには、次の手順を実行します。

  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プロシージャを使用して、ソース・ファイルに基づいて外部パーティション表を作成します。

    プロシージャDBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEは、サポートされているクラウド・オブジェクト・ストレージ・サービスで、外部パーティション・ファイルをサポートします。資格証明は表レベルのプロパティであるため、外部ファイルはすべて同じクラウド・オブジェクト・ストア上に存在している必要があります。

    たとえば:

    BEGIN DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE(
        table_name => 'MYSALES',
        credential_name => 'DEF_CRED_NAME',
        file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales/*.parquet',
        format =>
            json_object('type' value 'parquet', 'schema' value 'first',
                        'partition_columns' value
                              json_array(
                                    json_object('name' value 'country', 'type' value 'varchar2(100)'),
                                    json_object('name' value 'year', 'type' value 'number'),
                                    json_object('name' value 'month', 'type' value 'varchar2(2)')
                              )
             )
        );
    END;
    /

    Parquetデータ・ファイルなど、構造化データ・ファイルのDBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEパラメータには、column_listまたはfield_listパラメータは必要ありません。列名とデータ型は、プロシージャがスキャンする最初のparquetファイルの列に対して導出されます(したがって、すべてのファイルのシェイプが同じである必要があります)。生成された列リストにはオブジェクト名から導出された列が含まれ、これらの列のデータ型はpartition_columns formatパラメータで指定されます。

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

    • table_name: 外部表の名前です。

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

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

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

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

    • column_list: 外部表の列名およびデータ型のカンマ区切りリスト。リストには、ファイル内の列と、オブジェクト名から導出された列が含まれます。

      データ・ファイルが構造化ファイル(Parquet、AvroまたはORC)の場合、column_listは不要です。

    • field_list: ソース・ファイル内のフィールドとそのデータ型を識別します。デフォルト値はNULLで、フィールドおよびそのデータ型がcolumn_listパラメータによって決定されることを示します。

      データ・ファイルが構造化ファイル(Parquet、AvroまたはORC)の場合、field_listは不要です。

    • format: ソース・ファイルのフォーマットを説明するために指定できるオプションを定義します。partition_columns formatパラメータでは、パーティション列の名前を指定します。詳細は、DBMS_CLOUDパッケージ・フォーマット・オプションを参照してください。

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

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

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

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

    指定したフォーマット・オプションに一致しない行がソース・ファイル内にある場合、問合せはエラーを報告します。rejectlimitなどのDBMS_CLOUDパラメータを使用して、これらのエラーを抑止できます。別の方法として、作成した外部パーティション表を検証し、エラー・メッセージと拒否された行を確認して、それに従ってフォーマット・オプションを変更することもできます。詳細は、「外部データの検証」および「外部パーティション・データの検証」を参照してください。

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

    Autonomous AI Databaseは、外部パーティション表のパーティション化情報を利用して、問合せがオブジェクト・ストア内の関連データ・ファイルにのみアクセスするようにします。たとえば、次の問合せでは、1つのパーティションからのみデータ・ファイルを読み取ります。

    たとえば:

    SELECT year, month, product, units
    FROM SALES WHERE year='2020' AND month='02' AND country='USA'

    DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEを使用して作成する外部パーティション表には、2つの非表示列file$pathfile$nameが含まれます。これらの列は、レコードの取得元ファイルの識別に役立ちます。詳細は、外部表メタデータ列を参照してください。