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

使用OracleToGCSOperator遇LOB错误,求算子级CLOB转字符串方案

解决OracleToGCSOperator处理CLOB类型的ArrowTypeError问题

你的推测无误,CLOB类型无法直接被pyarrow序列化为PARQUET格式,导致了该错误。可以通过两种方式在算子层面将CLOB转换为字符串:

方法一:在SQL查询中直接转换CLOB

利用Oracle内置函数将CLOB转为字符串,修改SQL语句即可:

SELECT 
  col1, col2, -- 其他列可保留*或按需列出
  DBMS_LOB.SUBSTR(clob_col1, 32767) AS clob_col1,
  DBMS_LOB.SUBSTR(clob_col2, 32767) AS clob_col2
FROM MY_TABLE
  • DBMS_LOB.SUBSTR第二个参数为截取长度,最大支持32767字符,可根据业务需求调整
  • 若CLOB内容超过该上限,可结合业务场景分块处理,或确认是否需要保留完整内容

方法二:使用算子的transform_callback参数

通过自定义函数在数据导出前处理每条记录,将LOB对象转为字符串:

def process_clob_rows(row):
    # 替换为你的实际CLOB列名
    target_cols = ['clob_col1', 'clob_col2']
    for col in target_cols:
        if row.get(col) is not None:
            # 读取LOB内容并解码,编码需与数据库字符集一致
            row[col] = row[col].read().decode('utf-8')
    return row

copy_data = OracleToGCSOperator(
   task_id='copy_data_task',
   oracle_conn_id='my_conn',
   sql="SELECT * FROM MY_TABLE",
   bucket=MY_BUCKET,
   filename=FILEPATH,
   export_format='PARQUET',
   transform_callback=process_clob_rows
)
  • 这种方式无需修改SQL,适合表列较多的场景(你有800余列,不用手动列出所有字段)
  • 注意匹配数据库字符集编码,避免出现乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:24:55