计算 Flex 表键
将数据加载到 Flex 表后,您可以确定 __raw__
列(映射数据)中存在的键集。两个 Helper 函数从 Flex 表映射数据中计算出键:
-
COMPUTE_FLEXTABLE_KEYS 确定在 Flex 映射中哪些键作为虚拟列存在。
-
COMPUTE_FLEXTABLE_KEYS_AND_BUILD_VIEW 除执行与 COMPUTE_FLEXTABLE_KEYS 相同的功能外,还构建一个新视图。另请参阅更新 Flex 表视图。
注意
如果密钥的长度超过 65,000,Vertica 会截断该密钥。使用 COMPUTE_FLEXTABLE_KEYS
执行过程中,此函数计算 Flex 键表列的以下信息:
确定键数据类型
默认情况下,使用 COMPUTE_FLEXTABLE_KEYS
确定来自 __raw__
列 LONG VARBINARY 类型的非字符串键值。非字符串键包括以下数据类型(以及 数据类型 中列出的其他数据类型):
-
BOOLEAN
-
INTEGER
-
FLOAT
-
TIMESTAMP
-
DATE
使用此部分中的示例 CSV 数据来比较使用或不使用 EnableBetterFlexTypeGuessing
配置参数的结果。当参数为 ON 时,该函数可以更准确地确定地图数据中的关键非字符串数据类型。该参数的默认值为 1 (ON)。
Year,Quarter,Region,Species,Grade,Pond Value,Number of Quotes,Available
2015,1,2 - Northwest Oregon & Willamette,Douglas-fir,1P,$615.12 ,12,No
2015,1,2 - Northwest Oregon & Willamette,Douglas-fir,SM,$610.78 ,12,Yes
2015,1,2 - Northwest Oregon & Willamette,Douglas-fir,2S,$596.00 ,20,Yes
2015,1,2 - Northwest Oregon & Willamette,Hemlock,P,$520.00 ,6,Yes
2015,1,2 - Northwest Oregon & Willamette,Hemlock,SM,$510.00 ,6,No
2015,1,2 - Northwest Oregon & Willamette,Hemlock,2S,$490.00 ,14,No
要比较数据类型分配结果,请完成以下步骤:
-
保存此 CSV 数据文件(此处保存为
trees.csv
)。 -
创建 Flex 表 (
trees
) 并使用fcsvparser
加载trees.csv
:=> CREATE FLEX TABLE trees(); => COPY trees FROM '/home/dbadmin/tempdat/trees.csv' PARSER fcsvparser();
-
将
COMPUTE_FLEXTABLE_KEYS
用于trees
Flex 表。=> SELECT COMPUTE_FLEXTABLE_KEYS('trees'); COMPUTE_FLEXTABLE_KEYS ----------------------------------------------- Please see public.trees_keys for updated keys (1 row)
-
查询
trees_keys
表输出:=> SELECT * FROM trees_keys; key_name | frequency | data_type_guess ------------------+-----------+----------------- Year | 6 | Integer Quarter | 6 | Integer Region | 6 | Varchar(66) Available | 6 | Boolean Number of Quotes | 6 | Integer Grade | 6 | Varchar(20) Species | 6 | Varchar(22) Pond Value | 6 | Numeric(8,3) (8 rows)
-
将
EnableBetterFlexTypeGuessing
参数设置为 0(OFF)。 -
再次使用
trees
Flex 表调用COMPUTE_FLEXTABLE_KEYS
。 -
查询
trees_keys
表,将data_type_guess
的值与之前的结果进行比较。如果没有配置参数集,所有非字符串数据类型都是各种长度的 VARCHARS:=> SELECT * FROM trees_keys; key_name | frequency | data_type_guess ------------------+-----------+----------------- Year | 6 | varchar(20) Quarter | 6 | varchar(20) Region | 6 | varchar(66) Available | 6 | varchar(20) Grade | 6 | varchar(20) Number of Quotes | 6 | varchar(20) Pond Value | 6 | varchar(20) Species | 6 | varchar(22) (8 rows)
-
要保持非字符串数据类型的准确结果,请将
EnableBetterFlexTypeGuessing
参数重新设置为 1 (ON)。
有关 EnableBetterFlexTypeGuessing
配置参数的详细信息,请参阅 EnableBetterFlexTypeGuessing。
计算键值列宽
COMPUTE_FLEXTABLE_KEYS
函数通过确定每个键的最大值的长度再乘以 FlexTableDataTypeGuessMultiplier 因子来确定键的列宽。
下一个示例显示了在创建 Flex 表 (darkdata1
) 并加载数据后填充 _keys 表的结果。列宽显示在 data_type_guess
列的值之后的括号中(如果适用):
=> SELECT compute_flextable_keys('darkdata1');
compute_flextable_keys
--------------------------------------------------
Please see public.darkdata1_keys for updated keys
(1 row)
=> SELECT * from darkdata1_keys;
key_name | frequency | data_type_guess
----------------------------------------------------------+-----------+----------------------
created_at | 8 | TimestampTz
delete.status.id_str | 4 | Integer
delete.status.user_id | 4 | Integer
entities.hashtags | 8 | long varbinary(186)
favorited | 8 | Boolean
id_str | 8 | Integer
in_reply_to_screen_name | 8 | Varchar(24)
retweeted_status.contributors | 1 | Varchar(20)
retweeted_status.coordinates | 1 | Varchar(20)
retweeted_status.created_at | 1 | TimestampTz
.
.
.
(125 rows)