使用专用 Exadata 基础结构上的 Autonomous Database 查询外部数据
介绍使用 Autonomous Database on Dedicated Exadata Infrastructure 查询和验证数据的程序包和工具。
外部数据不由数据库管理;但是,您可以使用 DBMS_CLOUD
过程查询外部数据。虽然对外部数据的查询速度不如对数据库表的查询快,但您可以使用此方法快速开始对外部源文件和外部数据运行查询。
您可以使用 DBMS_CLOUD
过程验证外部表的外部源文件中的数据,以便您可以识别问题,更正外部表中的数据,或在使用数据之前排除无效数据。
查询外部数据
要查询云中文件中的数据,您需要先将对象存储身份证明存储在 Autonomous 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.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 Procedure 。
有关验证操作的结果,请参见 View Logs for Data Validation (在表 dba_load_operations
和 user_load_operations
中)。
查看用于数据验证的日志
验证外部表后,可以通过查询加载操作表来查看验证操作的结果:
-
dba_load_operations
:显示所有验证操作。 -
user_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_TABLE
和 BADFILE_TABLE
表将存储两天,然后自动删除。