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

Parquet加载至Snowflake表时int32字段被转换为时长类型问题咨询

异常转换原因

  • Snowflake从Parquet格式加载数据到VARIANT类型列时,默认开启字段自动类型推断逻辑:当字段名包含latency、duration、time等和时间相关的关键词时,会优先将int32类型的整数值按照毫秒级时长转换为TIME类型,你看到的"00:00:18"就是18123毫秒转换后的结果。
  • 其余int64类型列未触发转换,是因为Snowflake对int64类型的默认推断逻辑优先指向微秒/纳秒级时间戳,字段名匹配度未达到触发时长转换的阈值,因此保留了原始整数值。

解决方案

方案1:加载时禁用自动类型转换(推荐,从根源避免问题)

在COPY命令的文件格式参数中添加disable_auto_convert = TRUE,即可禁用Parquet加载过程中的所有隐式类型转换,将字段按Parquet中的原始类型写入VARIANT列,修改后的COPY命令如下:

copy into my_table
from @my_table/dt=20211023/
pattern='.*/.*/.*/.*'
file_format = (type = parquet, disable_auto_convert = TRUE);

方案2:已加载数据的补救方案

如果已经完成加载不想重跑数据,可以在查询时将转换后的TIME类型值反向转回原始毫秒整数:

select datediff('millisecond', '00:00:00', v:full_latency::time) as full_latency
from my_table
limit 1;

执行上述查询可以得到原始的18123整数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:15:04