在專用 Exadata 基礎架構上使用自治式 AI 資料庫查詢外部資料

描述在專用 Exadata 基礎架構上使用自治式 AI 資料庫查詢及驗證資料的套裝程式和工具。

外部資料不是由資料庫管理;不過,您可以使用 DBMS_CLOUD 程序來查詢您的外部資料。雖然對外部資料的查詢不會和資料庫表格的查詢一樣快,但您可以使用此方法來快速啟動對外部來源檔案和外部資料的執行查詢。

您可以使用 DBMS_CLOUD 程序來驗證外部表格之外部來源檔案中的資料,以便在您使用資料之前,識別問題並更正外部表格中的資料或排除無效的資料。

注意:如果您不是使用 ADMIN 使用者,請確定使用者具備使用者需要執行之作業的必要權限。請參閱管理資料庫使用者權限瞭解詳細資訊。

查詢外部資料

若要查詢雲端檔案中的資料,您必須先將物件儲存證明資料儲存在自治式 AI 資料庫中,然後使用 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
  1. 使用 DBMS_CREDENTIAL.CREATE_CREDENTIAL 程序儲存您的雲端物件儲存證明資料。舉例而言:

     BEGIN
       DBMS_CREDENTIAL.CREATE_CREDENTIAL(
         credential_name => 'DEF_CRED_NAME',
         username => 'adb_user@oracle.com',
         password => 'password'
       );
     END;
     /
    

    您為 usernamepassword 提供的值取決於您使用的雲端物件儲存服務:

    • Oracle Cloud Infrastructure Object Storage:username 是您的 Oracle Cloud Infrastructure 使用者名稱,password 是您的 Oracle Cloud Infrastructure 認證權杖。請參閱使用認證權杖

    • Oracle Cloud Infrastructure Object Storage Classic:username 是您的 Oracle Cloud Infrastructure Classic 使用者名稱,而 password 是您的 Oracle Cloud Infrastructure Classic 密碼。

    此作業會以加密格式將證明資料儲存在資料庫中。您可以為證明資料名稱使用任何名稱。請注意,除非您的物件存放區證明資料變更,否則此步驟只需要執行一次。儲存證明資料之後,您就可以對所有資料載入使用相同的證明資料名稱。

  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://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/channels.txt',
         format => json_object('delimiter' value ','),
         column_list => 'CHANNEL_ID NUMBER,
         CHANNEL_DESC VARCHAR2(20),
         CHANNEL_CLASS VARCHAR2(20)'
      );
     END;
     /
    

    參數包括:

    • table_name:為外部表格名稱。

    • credential_name:是在上一個步驟中建立的證明資料名稱。

    • file_uri_list:是您要查詢之來源檔案的逗號分隔清單。

      在此範例中,file_uri_list 是 Oracle Cloud Infrastructure Swift URI,指定 us-phoenix-1 區域中 mybucket 儲存桶的 channels.txt 檔案。(idthydc0kinr 是儲存桶所在的物件儲存命名空間。) 如需支援 URI 格式的相關資訊,請參閱雲端物件儲存 URI 格式

    • format:定義您可以指定以描述來源檔案格式的選項。如需您可以指定之格式選項的相關資訊,請參閱格式參數

    • column_list:是來源檔案中以逗號分隔的資料欄定義清單。

    您現在可以在上一個步驟建立的外部表格上執行查詢。舉例而言:

     SELECT count(*) FROM channels_ext;
    

    依預設,資料庫會預期外部資料檔中的所有資料列都有效,且會同時符合目標資料類型定義與檔案的格式定義。如果來源檔案中的任何資料列與您指定的格式選項不相符,查詢就會報告錯誤。您可以使用 format 參數選項 (例如 rejectlimit) 來抑制這些錯誤。或者,您也可以驗證您建立的外部表格,以查看錯誤訊息和拒絕的資料列,如此您便可適當地變更格式選項。請參閱驗證外部資料以取得詳細資訊。

    如需有關參數的詳細資訊,請參閱 CREATE_EXTERNAL_TABLE Procedure

外部表格描述資料資料欄

外部表格中繼資料可協助您決定執行查詢時來自何處的資料。

您使用 DBMS_CLOUD.CREATE_EXTERNAL_TABLEDBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEDBMS_CLOUD.CREATE_HYBRID_PART_TABLE 建立的外部表格包含兩個不顯示的資料欄 file$pathfile$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 參數。設定 rowcountstop_on_error 設為 FALSE 時,驗證作業會掃描資料列,並在拒絕指定的資料列數目或驗證指定的資料列數目時停止,而不會發生錯誤。例如,下列範例會在拒絕 100 個資料列或驗證 100 個資料列但無錯誤時,掃描 100 個資料列並停止:

BEGIN
  DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE (
     table_name => 'CHANNELS_EXT',
     rowcount => 100,
     stop_on_error => FALSE );
END;
/

請參閱 VALIDATE_EXTERNAL_TABLE Procedure ,瞭解 DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE 參數的詳細資訊。

請參閱「檢視資料驗證日誌」,查看 dba_load_operationsuser_load_operations 表格中驗證作業的結果。

檢視資料驗證的日誌

驗證外部表格之後,您可以查詢載入作業表格來查看驗證作業的結果:

您可使用這些表格來檢視載入驗證資訊。例如,使用此 SELECT 敘述句來查詢 user_load_operations

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_BAD

使用此 SQL 陳述式搭配 TYPE 資料欄上的 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_TABLEBADFILE_TABLE 表格兩天,然後自動移除。