"non-native" 数据类型的列化加载到 VARIANT 列

Columnarization for "non-native" data types loaded into VARIANT column

文档中有一个关于 semi-structured considerations 的部分警告某些情况,在这种情况下,VARIANT 列中给定路径的值将不会被具体化;例如,如果值并非都具有相同的数据类型。也就是说,如果 {"foo":1}{"foo":"1"} 都存在,则 "foo" 的值显然不能提取为它的列。

但是在所有值都具有相同类型的情况下,仍然不完全清楚如何处理所谓的非本地类型

例如,文档在 VARIANT 数据类型的上下文中将日期和时间戳描述为 non-native(意味着此类值是 "stored as strings"),我的问题是这是否扩展到数字类型,例如作为 FLOAT8。该文档表明,可以在 JSON 的上下文中理解本机类型(它具有本质上相当混合的本机数字类型)。

文档建议进行性能测试 "to see which structure provides the best performance",但如果准确理解提取逻辑,这会容易得多。

下面的测试表明是的,FLOAT8 没有存储为字符串,所以我希望它以一种可以独立于 [=13= 中的其他数据检索(/修剪等)的方式存储] 在查询执行期间。

create table foo (col variant) as (select object_construct('x', FLOOR(random()*1000000)::float8) col from table(generator(rowcount => 100000000)));
create table foo2 (col variant) as (select object_construct('x', col:x::string) col from foo);
TABLE_NAME  BYTES
FOO         800071680
FOO2        1480282112