使用外部表加载数据并创建包含拒绝记录的日志文件并说明原因

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;

分享和享受。

【讨论】:

谢谢。我会尝试并发布我的结果

以上是关于使用外部表加载数据并创建包含拒绝记录的日志文件并说明原因的主要内容,如果未能解决你的问题,请参考以下文章

从外部表读取与加载数据并在 Bigquery 中读取

2018-11-13#Hive外表创建和加载数据

Apache Beam on Dataflow - 加载外部文件

如何查看mysql运行,访问记录等日志

我的 Cordova 应用程序会被拒绝吗?从 json 响应加载外部数据

在 Amazon Redshift Spectrum 中加载外部表时如何跳过最后几条记录?