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

动态Schema下移除特殊字符:含逗号的引号包裹源数据加载至目标表方案

实现方案

方案1:Python 实现(适合本地/脚本处理场景)

核心依赖csv模块自带的引号识别能力,自动跳过包裹在引号内的逗号分隔符,避免手动拆分出错

import csv

# 读取源文件,指定单引号为字段包裹符
with open('source.csv', 'r', newline='', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter=',', quotechar="'")
    # 去除字段多余单引号后用|拼接
    result = [
        '|'.join([field.strip("'") for field in row])
        for row in reader
    ]

# 写入目标格式文件
with open('target.csv', 'w', encoding='utf-8') as f:
    f.write('Col1|Col2|Col3\n')
    f.write('\n'.join(result))

方案2:Spark SQL 实现(适合大数据数仓加载场景)

如果已经把源数据读为单字符串列,可直接用正则拆分处理:

-- 原始单列表名为raw_data,表名source_tbl
SELECT 
    split(raw_data, ",'(?=.)|(?<=.),'")[0] as Col1,
    replace(split(raw_data, ",'(?=.)|(?<=.),'")[1], "'", "") as Col2,
    split(raw_data, ",'(?=.)|(?<=.),'")[2] as Col3
FROM source_tbl

如果是直接读取源文件,可直接通过csv读取参数自动处理:

CREATE TABLE target_tbl 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'field.delim' = '|',
  'serialization.format' = '|'
) AS
SELECT 
    _c0 as Col1,
    _c1 as Col2,
    _c2 as Col3
FROM csv.`源文件路径`
OPTIONS (
    'sep' = ',',
    'quote' = '\'', -- 指定单引号为字段包裹符,自动忽略包裹内的逗号
    'escape' = '\'' -- 适配两个单引号的转义规则
)

方案3:Shell 命令实现(适合轻量服务器端快速处理)

awk -F ",'" 'BEGIN{OFS="|"}{gsub(/'\''/,"",$2);print $1,$2,$3}' source.csv | sed '1i Col1|Col2|Col3' > target.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:45:05