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

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 Object Storeにアクセスするための資格証明を作成する必要はありません。詳細は、リソース・プリンシパルを使用した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$pathおよびfile$nameが含まれます。これらの列は、レコードの取得元ファイルの識別に役立ちます。詳細は、外部表のメタデータ列を参照してください。