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

Snowflake中如何将CSV导入的带双引号数组转为标准数组

解决方案

问题根源

你当前的COPY命令直接将t.$2::array转换时,因为CSV里的字段被"包裹,内部的逗号会被当作字段内容而非分隔符,所以整个"a, b, c"被解析成单个字符串元素,最终形成只有一个元素的数组["a, b, c"]。

修正方法

需要先提取字段的原始字符串值,再对其拆分、清理空格后转换为标准数组,具体修改COPY命令的子查询部分即可:

1. 通用兼容方案(适配有无空格的分隔场景)

用正则拆分来兼容字段内a, b, c或a,b,c的格式,将原来的t.$2::array这类转换替换为:

REGEXP_SPLIT_TO_ARRAY(TRIM(t.$2, '"'), ',\\s*')
  • TRIM(t.$2, '"'):去掉字段前后的双引号,得到纯内容字符串
  • REGEXP_SPLIT_TO_ARRAY(..., ',\\s*'):按逗号加任意数量空格的规则拆分字符串,自动忽略元素间的空格
  • 无需额外转::ARRAY,因为该函数直接返回数组类型

2. 完整修正后的COPY命令

copy into stage_table
     (domain, primary_iab_v1_0, related_iab_v1_0, urg1, urg2, urg3,  primary_iab_v2_2, related_iab_v2_2, file_name)
from (select t.$1 as domain
           , REGEXP_SPLIT_TO_ARRAY(TRIM(t.$2, '"'), ',\\s*') as primary_iab_v1_0
           , REGEXP_SPLIT_TO_ARRAY(TRIM(t.$3, '"'), ',\\s*') as related_iab_v1_0
           , t.$4 as urg1
           , t.$5 as urg2
           , t.$6 as urg3
           , REGEXP_SPLIT_TO_ARRAY(TRIM(t.$9, '"'), ',\\s*') as primary_iab_v2_2
           , REGEXP_SPLIT_TO_ARRAY(TRIM(t.$10, '"'), ',\\s*') as related_iab_v2_2
           , METADATA$FILENAME as file_name
        from @stage_location t)
on_error = skip_file force = true files = (:file_names)
file_format = (type = 'CSV' field_delimiter = ',' field_optionally_enclosed_by = '"' skip_header=1);

验证方式

可以单独测试转换逻辑,确认结果符合预期:

SELECT REGEXP_SPLIT_TO_ARRAY(TRIM('"a, b, c"', '"'), ',\\s*') AS test_array;

返回结果就是标准数组["a","b","c"]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:08:22