Snowflake创建含命名字段OBJECT类型表报错问题咨询
问题解答
报错原因
你使用的OBJECT(b VARCHAR(100))语法不符合Snowflake的类型定义规范。Snowflake中,OBJECT类型用于存储无固定结构的键值对集合,无法直接在类型声明中指定固定命名字段;若要定义带固定命名字段的结构化列,需使用STRUCT类型,你混淆了两者的用法,因此触发报错。
正确语法
场景1:需要固定命名字段的结构化列(用STRUCT)
如果需求是创建包含固定字段b(类型为VARCHAR(100))的结构化列,正确语法如下:
CREATE OR ALTER TABLE TEST_TABLE ( a STRUCT(b VARCHAR(100)) );
场景2:无固定结构的键值对列(用OBJECT)
若不需要固定字段,仅需存储任意键值对的OBJECT类型列,直接声明OBJECT即可,后续可通过函数构造数据插入:
CREATE OR ALTER TABLE TEST_TABLE ( a OBJECT ); -- 插入示例数据 INSERT INTO TEST_TABLE VALUES (OBJECT_CONSTRUCT('b', 'test_value'));
补充说明
官方文档中提到的“指定OBJECT”,指的是如何构造OBJECT类型的数据(如使用OBJECT_CONSTRUCT函数)或在查询中引用OBJECT的字段,而非在建表时直接通过OBJECT(字段 类型)的语法定义固定结构。建表时定义固定结构的结构化类型,Snowflake的标准用法是STRUCT。
内容的提问来源于stack exchange,提问作者Victor Grigoriu
相关产品推荐
相关产品推荐

