You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Oracle外部表读取维基百科pageviews文件无数据返回问题求助

解决Oracle外部表读取维基百科Pageviews数据无返回的问题

我来帮你排查下这个问题,你遇到的外部表读不到数据的情况,大概率是建表配置没匹配文件格式,或者权限/路径有问题,咱们一步步来:

  • 先确认文件的真实格式
    虽然你猜测分隔符是空格,但先别急着下定论,先看看解压后的文件内容。比如在服务器上用命令取前几行看看:

    head -10 pageviews-20180407-130000
    

    维基百科2018年的Pageviews日志格式是域名代码 页面标题 访问量 总响应大小,确实是空格分隔,但要注意页面标题里的空格是被替换成下划线的,不会出现字段内的空格干扰分隔。另外要确认有没有隐藏的换行符或者特殊字符,比如Windows格式的换行(\r\n),Oracle默认识别Unix的\n换行,这个也可能导致加载失败。

  • 补全并修正外部表的创建语句
    你给出的建表语句不完整,Oracle外部表必须指定目录、访问参数这些关键配置。给你一个适配Pageviews格式的完整示例:

    -- 先创建并授权目录对象(必须先做这一步)
    CREATE OR REPLACE DIRECTORY pageviews_dir AS '/你存放解压后文件的绝对路径';
    GRANT READ, WRITE ON DIRECTORY pageviews_dir TO 你的数据库用户名;
    
    -- 创建外部表
    CREATE TABLE Funcionarios_Externa (
        domain_code VARCHAR2(20),
        page_title VARCHAR2(4000),
        count_views NUMBER,
        total_response_size NUMBER
    )
    ORGANIZATION EXTERNAL (
        TYPE ORACLE_LOADER
        DEFAULT DIRECTORY pageviews_dir
        ACCESS PARAMETERS (
            RECORDS DELIMITED BY NEWLINE
            FIELDS TERMINATED BY ' '
            MISSING FIELD VALUES ARE NULL
            REJECT ROWS WITH ALL NULL FIELDS
            -- 如果是Windows格式的换行,把上面的NEWLINE改成 '\r\n'
        )
        LOCATION ('pageviews-20180407-130000')
    )
    PARALLEL 5
    REJECT LIMIT UNLIMITED;
    

    这里要注意:

    • 目录路径必须是操作系统的绝对路径,而且Oracle进程要有这个路径的读写权限
    • 如果你的文件里有部分行格式异常,REJECT LIMIT UNLIMITED会让Oracle跳过错误行,不会因为个别坏行导致整个表读不到数据
  • 查看加载错误日志
    Oracle外部表加载失败时会生成日志文件,默认存放在你指定的目录下,文件名一般是Funcionarios_Externa.log。打开这个日志,里面会详细记录哪些行被拒绝、拒绝的原因(比如分隔符不匹配、字段长度不够、数据类型转换失败等),这是排查问题最直接的方式。

  • 用小文件测试
    复制原文件的前10行到一个新的小文件(比如test_pageviews.txt),然后修改外部表的LOCATION指向这个小文件。如果小文件能读到数据,说明原大文件可能有部分坏行,或者Oracle加载大文件时遇到了资源问题;如果小文件也读不到,那肯定是建表语句或者权限的问题。

内容的提问来源于stack exchange,提问作者Laerte Junior

火山引擎 最新活动