専用Exadataインフラストラクチャ上のAutonomous AI Databaseを使用した外部データの問合せ
専用Exadataインフラストラクチャ上のAutonomous AI Databaseでデータを問い合せ、検証するためのパッケージとツールについて説明します。
外部データはデータベースによって管理されませんが、DBMS_CLOUDプロシージャを使用して外部データを問い合せることはできます。外部データの問合せはデータベース表の問合せほど高速ではありませんが、この方法を使用すると、外部ソース・ファイルおよび外部データの問合せの実行をすばやく開始できます。
DBMS_CLOUDプロシージャを使用すると、外部表の外部ソース・ファイル内にあるデータを検証できるため、問題を特定して、データを使用する前に外部表のデータを修正するか、無効なデータを除外することができます。
外部データの問合せ
クラウドのファイルのデータを問い合せるには、まず、オブジェクト・ストレージ資格証明をAutonomous AI Databaseに格納してから、PL/SQLプロシージャDBMS_CLOUD.CREATE_EXTERNAL_TABLEを使用して外部表を作成する必要があります。
この例のソース・ファイルchannels.txtには、次のデータが含まれています:
S,Direct Sales,Direct
T,Tele Sales,Direct
C,Catalog,Indirect
I,Internet,Indirect
P,Partners,Others
外部表メタデータ列
外部表のメタデータは、問合せの実行時にデータの発生元を特定するのに役立ちます。
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非表示列の詳細は、「非表示列」を参照してください。
外部データの検証
外部表を検証するには、プロシージャDBMS_CLOUD.VALIDATE_EXTERNAL_TABLEを使用します。
外部表を検証する前に、DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャを使用して外部表を作成する必要があります。次に、DBMS_CLOUD.VALIDATE_EXTERNAL_TABLEプロシージャを使用してそれを検証します。たとえば次のようにします。
BEGIN
DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE (
table_name => 'CHANNELS_EXT' );
END;
/
このプロシージャによってソース・ファイルがスキャンされ、外部表の作成時に指定したフォーマット・オプションを使用して検証されます。
検証操作は、デフォルトでソース・ファイル内のすべての行をスキャンし、行が拒否されると停止します。行のサブセットのみを検証する場合は、rowcountパラメータを使用します。rowcountパラメータが設定されている場合、検証操作は行をスキャンし、行が拒否されるか、指定した数の行がエラーなしで検証されると停止します。
たとえば、次の検証操作は100行をスキャンし、行が拒否されるか、100行がエラーなしで検証されると停止します:
BEGIN
DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE (
table_name => 'CHANNELS_EXT',
rowcount => 100 );
END;
/行が拒否されても検証を停止せずに、拒否されたすべての行を確認する場合は、stop_on_errorパラメータをFALSEに設定します。この場合、VALIDATE_EXTERNAL_TABLEは、すべての行をスキャンし、拒否されたすべての行をレポートします。
行のサブセットのみを検証する場合は、rowcountパラメータを使用します。rowcountが設定され、stop_on_errorがFALSEに設定されている場合、検証操作は行をスキャンし、指定した数の行が拒否されるか、指定した数の行がエラーなしで検証されると停止します。たとえば、次の例は100行をスキャンし、100行が拒否されるか、100行がエラーなしで検証されると停止します:
BEGIN
DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE (
table_name => 'CHANNELS_EXT',
rowcount => 100,
stop_on_error => FALSE );
END;
/DBMS_CLOUD.VALIDATE_EXTERNAL_TABLEパラメータの詳細は、VALIDATE_EXTERNAL_TABLEプロシージャを参照してください。
表dba_load_operationsおよびuser_load_operationsの検証操作の結果を確認するには、データ検証のログの表示を参照してください。
データ検証のログの表示
外部表の検証後、ロード操作表を問い合せると、検証操作の結果を確認できます:
-
dba_load_operations: すべての検証操作が表示されます。 -
user_load_operations: スキーマ内の検証操作が表示されます。
これらの表を使用して、ロード検証情報を確認できます。たとえば、user_load_operationsを問い合せるには、次のSELECT文を使用します:
SELECT table_name,owner_name,type,status,start_time,update_time,logfile_table,badfile_table
FROM user_load_operations
WHERE type = 'VALIDATE';
TABLE_NAME OWNER_NAME TYPE STATUS START_TIME UPDATE_TIME LOGFILE_TABLE BADFILE_TABLE
------------- ---------- ---------- ---------- -------------- ------------- --------------- ---------------
CHANNELS_EXT SH VALIDATE COMPLETED 13-NOV-17... 13-NOV-17... VALIDATE$21_LOG VALIDATE$21_BADTYPE列でこのSQL文をWHERE句とともに使用すると、VALIDATEタイプのロード操作がすべて表示されます。
LOGFILE_TABLE列には、検証操作のログを確認するための問合せを実行できる表の名前が表示されます。たとえば、次の問合せでは、この検証操作のログが表示されます:
SELECT * FROM VALIDATE$21_LOG;BADFILE_TABLE列には、検証中にエラーが発生した行を確認するための問合せを実行できる表の名前が表示されます。たとえば、次の問合せでは、前述の検証操作で拒否されたレコードが表示されます:
SELECT * FROM VALIDATE$21_BAD;ログに示されているエラーおよびBADFILE_TABLEに示されている行によっては、DROP TABLEコマンドを使用して外部表を削除してから、DBMS_CLOUD.CREATE_EXTERNAL_TABLEで適切なフォーマット・オプションを指定して外部表を再作成することで、エラーを修正できる場合があります。
ノート:
LOGFILE_TABLEおよびBADFILE_TABLEの各表は、検証操作ごとに2日間保存され、自動的に削除されます。