外部データの問合せ
クラウドのファイルのデータを問合せるには、まず、オブジェクト・ストレージ資格証明をAutonomous AI 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またはAzure Data Lake Storage
-
Amazon S3
-
Amazon S3互換: Oracle Cloud Infrastructure Object Storage、Google Cloudストレージ、Wasabi Hot Cloudストレージなど。
-
GitHubリポジトリ
この例のソース・ファイルchannels.txtには、次のデータが含まれます:
S,Direct Sales,Direct
T,Tele Sales,Direct
C,Catalog,Indirect
I,Internet,Indirect
P,Partners,Others-
プロシージャ
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プロシージャ」を参照してください。 -
プロシージャ
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オブジェクトのネーミング規則に準拠している必要があります。詳細は、「データベース・オブジェクトのネーミング規則」を参照してください。credential_nameパラメータは、file_uri_listでディレクトリまたは表のハイパーリンクURLを指定する場合には使用されません。詳細は、Autonomous AI Databaseでのディレクトリの作成および管理およびAutonomous AI Databaseでの表ハイパーリンクについてを参照してください。 -
file_uri_list: 問い合せるソース・ファイルのカンマ区切りリストです。 -
format: ソース・ファイルのフォーマットを説明するために指定できるオプションを定義します。ソース・ファイル内のデータが暗号化されている場合は、
encryptionオプションを指定してformatパラメータを指定してデータを復号化します。データの復号化の詳細は、オブジェクト・ストレージからのインポート中のデータの復号化を参照してください。 -
column_list: ソース・ファイル内の列定義のカンマ区切りリストです。
この例では、
namespace-stringはOracle Cloud Infrastructureオブジェクト・ストレージ・ネームスペースで、bucketnameはバケット名です。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。ノート
ノート: Autonomous AI Databaseでは、圧縮データ形式を含む様々なソース・ファイル形式がサポートされています。サポートされている圧縮タイプを確認するには、「DBMS_CLOUDパッケージ・フォーマット・オプション」および「DBMS_CLOUD compression」フォーマット・オプションを参照してください。これで、前のステップで作成した外部表に対して問合せを実行できるようになります。たとえば:
SELECT count(*) FROM channels_ext;デフォルトでは、データベースは、外部データ・ファイルのすべての行が有効であり、ターゲット・データ型定義とファイル・フォーマット定義の両方に一致することを想定しています。指定したフォーマット・オプションに一致しない行がソース・ファイル内にある場合、問合せはエラーを報告します。rejectlimitなどの
DBMS_CLOUDパラメータを使用して、これらのエラーを抑止できます。別の方法として、作成した外部表を検証して、エラー・メッセージおよび却下された行を確認し、それに応じてフォーマット・オプションを変更することもできます。詳細は、外部データの検証を参照してください。パラメータの詳細は、CREATE_EXTERNAL_TABLEプロシージャに関する項を参照してください。
サポートされるクラウド・オブジェクト・ストレージ・サービスの詳細は、「DBMS_CLOUD URI形式」を参照してください。
-
外部表メタデータ列
外部表のメタデータは、問合せの実行時にデータの発生元を特定するのに役立ちます。
DBMS_CLOUD.CREATE_EXTERNAL_TABLE、DBMS_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非表示列の詳細は、「非表示列」を参照してください。