26ai新特性之可直接读写外部 Iceberg 数据

Apache Iceberg 作为开源开放的表格式标准,凭借 ACID 事务、Schema 演进、时间旅行、多引擎兼容能力,成为打通异构数据平台的核心基石。而全新 Oracle AI Database(23ai/26ai)重磅落地原生 Iceberg 双向读写能力,彻底终结跨平台数据搬运难题。

前置配置

配置对象存储访问凭证、绑定对应 Iceberg Catalog(Unity Catalog / Polaris),通过 Oracle 内置 DBMS_CATALOG 包完成注册。

创建 Iceberg 外部表(读写通用)

-- 创建指向外部Iceberg表的外部表(自动适配Databricks/Snowflake生成的Iceberg结构)
CREATE EXTERNAL TABLE ORACLE_ICEBERG_SALE (
    SALE_ID    NUMBER,
    USER_ID    VARCHAR2(64),
    AMOUNT     NUMBER(18,2),
    SALE_TIME  TIMESTAMP
)
ORGANIZATION EXTERNAL
(
  TYPE ICEBERG
  DEFAULT DIRECTORY OBJ_STORE_BUCKET
  ACCESS PARAMETERS
  (
    CATALOG_NAME 'UNITY_CATALOG' -- 对接Databricks Unity Catalog
    DATABASE_NAME 'DB_LAKE'
    TABLE_NAME 'SALE_DETAIL'
  )
)
REJECT LIMIT UNLIMITED;

双向读写操作(完全兼容标准SQL)

-- 1. 查询Databricks/Snowflake生成的Iceberg数据
SELECT * FROM ORACLE_ICEBERG_SALE WHERE SALE_TIME > SYSDATE-7;

-- 2. 直接写入数据(自动更新Iceberg元数据,跨平台实时可见)
INSERT INTO ORACLE_ICEBERG_SALE VALUES(1001,'U2026001',99.90,SYSDATE);

-- 3. 更新、删除湖仓数据(支持事务一致性)
UPDATE ORACLE_ICEBERG_SALE SET AMOUNT=89.90 WHERE SALE_ID=1001;
DELETE FROM ORACLE_ICEBERG_SALE WHERE SALE_ID=1001;

-- 4. 支持Iceberg专属能力:时间旅行查询
SELECT * FROM ORACLE_ICEBERG_SALE
FOR ICEBERG AS OF TIMESTAMP TO_TIMESTAMP('2026-05-27 10:00:00','YYYY-MM-DD HH24:MI:SS');

所有读写操作完全遵循 Iceberg 事务规范,修改后的数据可在 Databricks、Snowflake 中直接查询,无需任何同步操作。

Related Posts