You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 19.26自建库创建Parquet外部表自动识别列失败求助

在Oracle 19.26本地库通过DBMS_CLOUD创建Parquet外部表时自动识别列的问题

场景与问题

在Oracle 19.26本地数据库中,使用DBMS_CLOUD创建指向S3存储桶中Parquet文件的外部表时,显式指定column_list可成功执行,代码如下:

begin
  dbms_cloud.create_external_table(
    table_name =>'test_parquet'
    ,credential_name =>'&my_credential'
    ,file_uri_list =>'https://s3.eu-central-1.amazonaws.com/&my_bucket/test.parquet'
    ,format =>  '{"type": "parquet",  "schema": "first"}'
    ,column_list => 'x number, y number'
  );
end;
/

但根据Oracle官方文档及博客内容,Oracle应支持自动识别Parquet文件的列信息,因此尝试**省略column_list**执行以下代码:

begin
  dbms_cloud.create_external_table(
    table_name =>'test_parquet'
    ,credential_name =>'&my_credential'
    ,file_uri_list =>'https://s3.eu-central-1.amazonaws.com/&my_bucket/test.parquet'
    ,format =>  '{"type": "parquet",  "schema": "first"}'
  );
end;
/

却触发错误:

ORA-20000: Missing column list ORA-06512: at
"C##CLOUD$SERVICE.DBMS_CLOUD", line 1181 ORA-06512: at
"C##CLOUD$SERVICE.DBMS_CLOUD", line 3158 ORA-06512: at line 2

已尝试操作:

  • 省略column_list → 触发ORA-20000
  • 设置column_list为NULL → 触发ORA-20000
  • 显式指定column_list → 成功但操作繁琐

解决方案

1. 确认版本兼容性

Oracle 19c本地库的DBMS_CLOUD自动识别Parquet列的功能,需要特定版本补丁支持。需确保数据库已安装Oracle Database 19.15及以上版本的RU(Release Update),且DBMS_CLOUD组件版本匹配。可通过以下SQL查询版本:

SELECT version FROM dba_registry WHERE comp_id = 'DBMS_CLOUD';

若版本过低,需升级到符合要求的RU补丁。

2. 用DBMS_CLOUD.DISCOVER_SCHEMA预生成列定义

若无法立即升级,可先通过DBMS_CLOUD.DISCOVER_SCHEMA获取Parquet文件的列结构,再动态生成外部表创建语句。示例代码:

DECLARE
  v_schema CLOB;
BEGIN
  v_schema := dbms_cloud.discover_schema(
    credential_name => '&my_credential',
    file_uri_list => 'https://s3.eu-central-1.amazonaws.com/&my_bucket/test.parquet',
    format => '{"type": "parquet"}'
  );
  DBMS_OUTPUT.PUT_LINE(v_schema);
END;
/

执行后会输出类似x number, y number的列定义,将其复制到create_external_table的column_list参数即可。

3. 调整格式参数

确保format参数设置正确,可尝试移除schema参数,使用默认自动识别逻辑:

begin
  dbms_cloud.create_external_table(
    table_name =>'test_parquet'
    ,credential_name =>'&my_credential'
    ,file_uri_list =>'https://s3.eu-central-1.amazonaws.com/&my_bucket/test.parquet'
    ,format =>  '{"type": "parquet"}'
  );
end;
/

若仍报错,说明当前版本不支持自动识别,需采用前两种方案。


内容的提问来源于stack exchange,提问作者Frank Schmitt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:57:34