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

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 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が含まれます。これらの列は、レコードの取得元ファイルの識別に役立ちます。詳細は、外部表のメタデータ列を参照してください。