Stream列METADATA$ACTION字段声明长度与实际查询长度不一致问题
长度不一致的成因
该问题是Snowflake平台Stream对象的历史兼容设计导致的,具体原因如下:
- 早期版本的类型定义遗留
Snowflake最初推出Stream功能时,METADATA$ACTION列的取值为单字符:I对应插入操作、U对应更新操作、D对应删除操作,因此该列的声明类型被定义为VARCHAR(1)。后续平台为了提升字段可读性,将实际返回值调整为完整的INSERT/UPDATE/DELETE字符串,但为了兼容旧版本中基于VARCHAR(1)类型开发的业务逻辑、查询语句,就没有修改元数据中记录的类型声明,仅调整了底层实际返回的内容。 - DESC命令返回的是静态元数据
你执行DESC VIEW看到的类型是视图定义时固化的静态元数据,不会同步为实际返回值的真实长度,因此仍然显示为VARCHAR(1);而length()函数统计的是查询时实际返回的字符串长度,INSERT/UPDATE/DELETE三个取值的字符数均为6,所以查询返回结果为6。
开发提示:判断
METADATA$ACTION取值时直接和完整字符串比较即可,不要依赖DESC返回的类型长度做截断、校验类逻辑,避免业务报错。
内容的提问来源于stack exchange,提问作者rakesh singh
相关产品推荐
相关产品推荐

