Snowflake 中的值对:变体还是对象?
Value-Pairs in Snowflake: variant or object?
我们想在 Snowflake 中将值对存储为半结构化数据类型。
看起来我们可以使用 OBJECT 或 VARIANT 数据类型。
文档暗示将 OBJECT 用于值对,但不太清楚它是否是 "better" 选择而不是 Variant...或者我错过了(很有可能)
所以...对象还是变体?
更新:
到目前为止,我们已经开始使用类型为 JSON 的 OBJECT 列。
但是,我们的 JSON 只是键名永远不会为 NULL 的值对。
对于 name/value 对,OBJECT 就足够了。例如,OBJECT_CONSTRUCT('name',42)
。 VARIANT 还允许您存储其他数据类型。
不知道要在 table / 列中存储哪种数据,很难回答。
您可以轻松地将 OBJECT 存储在 VARIANT 列中,但不能以相反的方式存储。
存储 OBJECT 时,必须确保键不为空。
("OBJECTS: Used to represent collections of key-value pairs, where the key is a non-empty string, and the value is a value of VARIANT type. Snowflake does not currently support explicitly-typed objects.")
可以在此处找到更多信息:
https://docs.snowflake.net/manuals/sql-reference/data-types-semistructured.html
https://docs.snowflake.net/manuals/user-guide/querying-semistructured.html
如果您想将 JSON 存储在变体列中,您可以直接查询它或使用 FLATTEN 命令将其呈现得更像 table。
我们想在 Snowflake 中将值对存储为半结构化数据类型。
看起来我们可以使用 OBJECT 或 VARIANT 数据类型。
文档暗示将 OBJECT 用于值对,但不太清楚它是否是 "better" 选择而不是 Variant...或者我错过了(很有可能)
所以...对象还是变体?
更新: 到目前为止,我们已经开始使用类型为 JSON 的 OBJECT 列。 但是,我们的 JSON 只是键名永远不会为 NULL 的值对。
对于 name/value 对,OBJECT 就足够了。例如,OBJECT_CONSTRUCT('name',42)
。 VARIANT 还允许您存储其他数据类型。
不知道要在 table / 列中存储哪种数据,很难回答。 您可以轻松地将 OBJECT 存储在 VARIANT 列中,但不能以相反的方式存储。 存储 OBJECT 时,必须确保键不为空。 ("OBJECTS: Used to represent collections of key-value pairs, where the key is a non-empty string, and the value is a value of VARIANT type. Snowflake does not currently support explicitly-typed objects.") 可以在此处找到更多信息:
https://docs.snowflake.net/manuals/sql-reference/data-types-semistructured.html https://docs.snowflake.net/manuals/user-guide/querying-semistructured.html
如果您想将 JSON 存储在变体列中,您可以直接查询它或使用 FLATTEN 命令将其呈现得更像 table。