"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 的上下文中理解本机类型(它具有本质上相当混合的本机数字类型)。
FLOAT8
是 VARIANT 数据中的本机类型还是存储为字符串?
- 这样的值(存储为字符串)会被提取到它自己的列中,还是显示为 "parsed semi-structured structure" 以及那些未提取到其他列中的剩余值?
文档建议进行性能测试 "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
文档中有一个关于 semi-structured considerations 的部分警告某些情况,在这种情况下,VARIANT 列中给定路径的值将不会被具体化;例如,如果值并非都具有相同的数据类型。也就是说,如果 {"foo":1}
和 {"foo":"1"}
都存在,则 "foo" 的值显然不能提取为它的列。
但是在所有值都具有相同类型的情况下,仍然不完全清楚如何处理所谓的非本地类型。
例如,文档在 VARIANT 数据类型的上下文中将日期和时间戳描述为 non-native(意味着此类值是 "stored as strings"),我的问题是这是否扩展到数字类型,例如作为 FLOAT8
。该文档表明,可以在 JSON 的上下文中理解本机类型(它具有本质上相当混合的本机数字类型)。
FLOAT8
是 VARIANT 数据中的本机类型还是存储为字符串?- 这样的值(存储为字符串)会被提取到它自己的列中,还是显示为 "parsed semi-structured structure" 以及那些未提取到其他列中的剩余值?
文档建议进行性能测试 "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