Snowflake卸载Parquet到S3时Epoch时间戳显示负值求助
问题分析与解决办法
- 问题根源:你将Epoch微秒值
1665136431585000强制转换为INT类型,但Snowflake的INT是32位有符号整数,最大值仅为2147483647,目标数值远超出这个上限,触发整数溢出,最终在Parquet文件中显示为负数。 - 解决办法:将类型转换从
:: INT改为:: BIGINT,64位的BIGINT可以容纳该量级的Epoch微秒值。
修改后的SQL语句如下:
alter session set ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION = false; copy into@PUBLIC.STAGE_mystage/ABC/abc.parquet from ( (date_part(EPOCH_MICROSECONDS ,transactiontimestamp)) :: BIGINT as transactiontimestamp from mydb.public.mytable ) FILE_FORMAT = (TYPE = PARQUET COMPRESSION = None) header = true overwrite = true SINGLE = TRUE ;
额外提示:如果不需要手动存储Epoch数值,也可以直接保留transactiontimestamp的原始时间类型卸载,Parquet会自动将其映射为合适的时间类型,避免溢出问题。
内容的提问来源于stack exchange,提问作者SadanandM
相关产品推荐
相关产品推荐

