使用外部表加载数据并创建包含拒绝记录的日志文件并说明原因
Posted
技术标签:
【中文标题】使用外部表加载数据并创建包含拒绝记录的日志文件并说明原因【英文标题】:Loading data using external table and creating a log file with rejected records with reasons 【发布时间】:2014-05-23 16:33:02 【问题描述】:我想知道创建日志文件的方法是什么,该文件将包含被拒绝的记录及其背后的原因。
假设例如
**EMPLOYEE_ID,FIRST_NAME,LAST_NAME,SALARY,MANAGER_ID**
100,Steven,King,24000,NULL
101,Neena,Kochhar,35000,100
我想拒绝那些带有employee salary is greater than his/her manager's
的记录。所以employee_id 101
的记录将被拒绝。
如何创建一个包含诸如
101,Neena,Kochhar,Salary can't be greater than manager's,100
请指导我..我已经创建了将数据加载到外部表中所需的脚本..
【问题讨论】:
【参考方案1】:创建日志文件的一种方法是使用 UTL_FILE 包打开日志文件,写入所需的任何内容,然后关闭日志文件。例如:
CREATE PROCEDURE PROCESS_RECORDS IS
fErr_log UTL_FILE.FILE_TYPE;
BEGIN
fErr_log := UTL_FILE.FOPEN(SOME_DIRECTORY_OBJECT, 'your_filename_here.log', 'w');
FOR eachRecord IN (SELECT * FROM SOME_TABLE)
LOOP
IF eachRecord.SOME_FIELD NOT IN ('LIST', 'OF', 'VALID', 'VALUES') THEN
-- Write error log entry
UTL_FILE.PUT_LINE(fErr_log,
eachRecord.KEY || ',' ||
eachRecord.FIRSTNAME || ',' ||
eachRecord.LASTNAME || ',' ||
'SOME_FIELD not in list of valid values');
END IF;
END LOOP;
UTL_FILE.FCLOSE(fErr_log);
END PROCESS_RECORDS;
分享和享受。
【讨论】:
谢谢。我会尝试并发布我的结果以上是关于使用外部表加载数据并创建包含拒绝记录的日志文件并说明原因的主要内容,如果未能解决你的问题,请参考以下文章
Apache Beam on Dataflow - 加载外部文件