外部データの問合せ

クラウドのファイルのデータを問合せするには、まず、オブジェクト・ストレージ資格証明をAutonomous Databaseに格納してから、PL/SQLプロシージャDBMS_CLOUD.CREATE_EXTERNAL_TABLEを使用して外部表を作成する必要があります。

プロシージャDBMS_CLOUD.CREATE_EXTERNAL_TABLEを使用して、アタッチされたファイル・システムまたはローカル・ファイル・システムの外部データを問い合せることもできます。

プロシージャDBMS_CLOUD.CREATE_EXTERNAL_TABLEでは、サポートされているクラウド・オブジェクト・ストレージ・サービスで次のような外部ファイルがサポートされています:

  • Oracle Cloud Infrastructure Object Storage

  • Azure Blob Storage

  • Amazon S3

  • Amazon S3互換: Oracle Cloud Infrastructure Object Storage、Google Cloud Storage、Wasabi Hot Cloud Storageなど。

  • GitHubリポジトリ

この例のソース・ファイルchannels.txtには、次のデータが含まれています:

S,Direct Sales,Direct
T,Tele Sales,Direct
C,Catalog,Indirect
I,Internet,Indirect
P,Partners,Others
  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_TABLEを使用して、ソース・ファイルの上に外部表を作成します。

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

    たとえば、次のとおりです。

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'CHANNELS_EXT',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/channels.txt',
        format => json_object('delimiter' value ','),
        column_list => 'CHANNEL_ID VARCHAR2(2), CHANNEL_DESC VARCHAR2(20), CHANNEL_CLASS VARCHAR2(20)' );
    END;
    /
    

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

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

    • credential_name: 前のステップで作成された資格証明の名前です。credential_nameパラメータは、スペースやハイフンを使用できないOracleオブジェクトの命名規則に準拠している必要があります。

      file_uri_listでディレクトリを指定する場合、credential_nameパラメータは使用されません。詳細は、Autonomous Databaseでのディレクトリの作成および管理を参照してください。

    • file_uri_list: 問い合せるソース・ファイルのカンマ区切りリストです。

    • format: ソース・ファイルのフォーマットを説明するために指定できるオプションを定義します。

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

    • column_list: ソース・ファイル内の列定義のカンマ区切りリストです。

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

    ノート

    Autonomous Databaseは、圧縮データ形式を含む様々なソース・ファイル形式をサポートしています。サポートされている圧縮タイプを確認するには、DBMS_CLOUDパッケージ・フォーマット・オプションおよびDBMS_CLOUD compressionフォーマット・オプションを参照してください。

    これで、前のステップで作成した外部表に対して問合せを実行できるようになります。たとえば、次のとおりです。

    SELECT count(*) FROM channels_ext;

    デフォルトでは、データベースは外部データ・ファイルのすべての行が有効であり、ターゲットのデータ型定義とファイルのフォーマット定義の両方に一致することを前提としています。指定したフォーマット・オプションに一致しない行がソース・ファイル内にある場合、問合せはエラーを報告します。これらのエラーを抑制するには、rejectlimitなどのDBMS_CLOUDパラメータを使用できます。別の方法として、作成した外部表を検証して、エラー・メッセージおよび却下された行を確認し、それに応じてフォーマット・オプションを変更することもできます。詳細は、外部データの検証を参照してください。

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

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

外部表メタデータ列

外部表のメタデータは、問合せの実行時にデータがどこから送られるかを判断するのに役立ちます。

DBMS_CLOUD.CREATE_EXTERNAL_TABLEDBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEまたはDBMS_CLOUD.CREATE_HYBRID_PART_TABLEを使用して作成する外部表には、2つの非表示列file$pathおよびfile$nameが含まれます。これらの列は、レコードの取得元ファイルの識別に役立ちます。

  • file$path: オブジェクト名の先頭までのファイル・パス・テキストを指定します。

  • file$name: 最後の「/」に続くすべてのテキストを含め、オブジェクト名を指定します。

たとえば:

SELECT genre_id, name, file$name, file$path FROM ext_genre
     WHERE rownum <= 2;

genre_id      name        file$name     file$path
--------      ---------   -----------   ----------------------
1             Action      genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre
2             Adventure   genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre

詳細は、非表示列を参照してください。