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。