这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
Flex 数据函数
Flex 表数据 Helper 函数提供了直接在 Flex 表中查询数据所需的信息。计算键并利用原始数据创建视图之后,可直接在查询中使用字段名称,而不是使用映射函数提取数据。
Flex 表依赖项
每个 Flex 表具有两个依赖对象,一个键表和一个视图。虽然这两个对象均依赖于其父表,您可以独立删除其中任一对象。删除父表将同时移除这两个依赖项,而无需使用层叠 (CASCADE) 选项。
关联 Flex 表和视图
如果 Helper 函数与父表在内部相链接,则其可自动使用相关的表和视图。当您创建 Flex 表时,也将同时创建上述两项。您可以删除键表或视图,然后重新创建同名的对象。但如果您执行此操作,新的对象不会与父 Flex 表在内部相链接。
在这种情况下,您可以恢复这些对象到父表的内部链接。为此,请在调用 RESTORE_FLEXTABLE_DEFAULT_KEYS_TABLE_AND_VIEW 函数之前删除键表和视图。调用此函数可重新创建键表和视图。
其余 Helper 函数执行本节所述的任务。
1 - BUILD_FLEXTABLE_VIEW
创建或重新创建默认或用户定义键表的视图,忽略任何空键。
注意
如果密钥的长度超过 65,000,Vertica 会截断该密钥。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变
语法
BUILD_FLEXTABLE_VIEW ('[[database.]schema.]flex-table'
[ [,'view-name'] [,'user-keys-table'] ])
参数
-
[database.]schema
数据库和架构。默认架构为 public
。如果指定一个数据库,它必须是当前数据库。
- flex-table
- 弹性表名称。默认情况下,该函数使用关联的
flex_table_keys
表的当前内容构建或重建输入表的视图。
- view-name
- 自定义视图名称。使用此选项可以用您指定的名称构建 flex-table 的新视图。
- user-keys-table
- 要从中创建视图的键表的名称。如果从 Flex 表(而不是
flex_table_keys
默认表)映射数据创建一个自定义键表,则使用此选项。函数从 user_keys
中(而不是从 flex_table_keys
中)的键构建视图。
示例
下面的示例显示如何用 1、2 或 3 实参调用 BUILD_FLEXTABLE_VIEW。
要创建或重新创建一个默认视图:
-
使用输入 Flex 表调用函数:
=> SELECT BUILD_FLEXTABLE_VIEW('darkdata');
build_flextable_view
-----------------------------------------------------
The view public.darkdata_view is ready for querying
(1 row)
函数从 darkdata
_keys 表创建具有默认名称 (darkdata_view
) 的视图。
-
从新视图或更新视图查询键名:
=> SELECT "user.id" FROM darkdata_view;
user.id
-----------
340857907
727774963
390498773
288187825
164464905
125434448
601328899
352494946
(12 rows)
要使用自定义名称创建或重建视图:
-
用两个实参、一个输入弹性表 darkdata
以及要创建的视图名称 dd_view
调用函数:
=> SELECT BUILD_FLEXTABLE_VIEW('darkdata', 'dd_view');
build_flextable_view
-----------------------------------------------
The view public.dd_view is ready for querying
(1 row)
-
从新视图或更新视图 (user.lang
) 查询键名 (dd_view
):
=> SELECT "user.lang" FROM dd_view;
user.lang
-----------
tr
en
es
en
en
it
es
en
(12 rows)
要使用 BUILD_FLEXTABLE_VIEW 从自定义键表创建一个视图,此自定义表必须具有与默认表 (darkdata_keys
) 相同的架构和表定义。使用下面三种方法中的任何一种创建一个自定义键表:
-
使用弹性表 (darkdata_keys
) 的默认键表中的所有键创建一个柱状表:
=> CREATE TABLE new_darkdata_keys AS SELECT * FROMdarkdata_keys;
CREATE TABLE
-
从弹性表 (LIMIT 0
) 的默认键表创建一个不含内容的柱状表 (darkdata_keys
):
=> CREATE TABLE new_darkdata_keys AS SELECT * FROM darkdata_keys LIMIT 0;
CREATE TABLE
kdb=> SELECT * FROM new_darkdata_keys;
key_name | frequency | data_type_guess
----------+-----------+-----------------
(0 rows)
-
从默认键表创建一个不含内容的柱状表 (LIMIT 0
),并将两个值 ('user.lang
', 'user.name
') 插入 key_name
列:
=> CREATE TABLE dd_keys AS SELECT * FROM darkdata_keys limit 0;
CREATE TABLE
=> INSERT INTO dd_keys (key_name) values ('user.lang');
OUTPUT
--------
1
(1 row)
=> INSERT INTO dd_keys (key_name) values ('user.name');
OUTPUT
--------
1
(1 row)
=> SELECT * FROM dd_keys;
key_name | frequency | data_type_guess
-----------+-----------+-----------------
user.lang | |
user.name | |
(2 rows)
创建一个自定义键表后,用所有实参(输入 Flex 表、新视图名称、自定义键表)调用 BUILD_FLEXTABLE_VIEW:
=> SELECT BUILD_FLEXTABLE_VIEW('darkdata', 'dd_view', 'dd_keys');
build_flextable_view
-----------------------------------------------
The view public.dd_view is ready for querying
(1 row)
查询新视图:
=> SELECT * FROM dd_view;
另请参阅
2 - COMPUTE_FLEXTABLE_KEYS
计算来自 flex 表 VMap 数据的虚拟列(键和值)。使用此函数可计算键,而不必创建关联的表视图。如需生成视图,请使用 COMPUTE_FLEXTABLE_KEYS_AND_BUILD_VIEW。
注意
如果密钥的长度超过 65,000,Vertica 会截断该密钥。
函数将其结果存储到关联的 Flex 键表 (
flexTableName_keys
),其中包含以下列:
-
key_name
-
frequency
-
data_type_guess
有关详细信息,请参阅计算 Flex 表键。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变
语法
COMPUTE_FLEXTABLE_KEYS ('[[database.]schema.]flex-table')
参数
-
[database.]schema
数据库和架构。默认架构为 public
。如果指定一个数据库,它必须是当前数据库。
-
flex-table
- Flex 表的名称。
使用数据类型猜测
data_type_guess
列中的结果取决于 EnableBetterFlexTypeGuessing
配置参数。默认情况下,参数为 1 (ON)。此设置会导致函数采用以下类型之一(以及 数据类型 中列出的其他类型)返回 data_type_guess
列中的所有非字符串键:
-
BOOLEAN
-
INTEGER
-
FLOAT
-
TIMESTAMP
-
DATE
将配置参数设置为 0 (OFF) 会导致函数仅返回键表 data_type_guess
列中所有值的字符串类型 ([LONG]VARCHAR) 或 ([LONG] VARBINARY)。
使用此部分中的示例 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。
另请参阅
3 - COMPUTE_FLEXTABLE_KEYS_AND_BUILD_VIEW
可合并 BUILD_FLEXTABLE_VIEW 和 COMPUTE_FLEXTABLE_KEYS 的功能,以便计算来自 Flex 表 Vmap 数据的虚拟列(键),并构建视图。使用此函数创建视图将忽略空键。如果不需要一起执行这两项操作,请改为使用单操作函数之一。
注意
如果密钥的长度超过 65,000,Vertica 会截断该密钥。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变
语法
COMPUTE_FLEXTABLE_KEYS_AND_BUILD_VIEW ('flex-table')
参数
- flex-table
- Flex 表的名称
示例
此示例显示如何调用 darkdata Flex 表的函数。
=> SELECT COMPUTE_FLEXTABLE_KEYS_AND_BUILD_VIEW('darkdata');
compute_flextable_keys_and_build_view
-----------------------------------------------------------------------
Please see public.darkdata_keys for updated keys
The view public.darkdata_view is ready for querying
(1 row)
另请参阅
4 - MATERIALIZE_FLEXTABLE_COLUMNS
使用 COMPUTE_FLEXTABLE_KEYS 或 COMPUTE_FLEXTABLE_KEYS_AND_BUILD_VIEW 实体化执行计算的 flextable_keys 表中作为 key_names 列出的虚拟列。
注意
使用本函数实体化的每一列均不利于您许可证的数据存储限制。要检查您的 Vertica 许可证合规性,请调用 AUDIT()
或 AUDIT_FLEX()
函数。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变
语法
MATERIALIZE_FLEXTABLE_COLUMNS ('[[database.]schema.]flex-table' [, n-columns [, keys-table-name] ])
实参
-
[database.]schema
数据库和架构。默认架构为 public
。如果指定一个数据库,它必须是当前数据库。
- flex-table
- 具有需要实体化的列的 flex 表的名称。函数:
- n-列
- 要实体化的列数,最多为 9800。函数尝试实体化键表中的列数,跳过所有已经实体化的列。按频率降序排列实体化结果。如果未指定,则默认为最多 50 列。
- keys-table-name
- 要从中实体化列的键的名称。函数:
-
实体化键表中的 n-columns 列
-
跳过已实体化的任何列
-
按频率降序排列实体化结果
示例
以下示例显示了如何调用 MATERIALIZE_FLEXTABLE_COLUMNS 实体化列。首先,将 tweets 样本文件 (tweets_10000.json
) 载入 flex 表 twitter_r
。加载数据并计算样本 Flex 表的键以后,调用 MATERIALIZE_FLEXTABLE_COLUMNS,实体化前四列:
=> COPY twitter_r FROM '/home/release/KData/tweets_10000.json' parser fjsonparser();
Rows Loaded
-------------
10000
(1 row)
=> SELECT compute_flextable_keys ('twitter_r');
compute_flextable_keys
---------------------------------------------------
Please see public.twitter_r_keys for updated keys
(1 row)
=> SELECT MATERIALIZE_FLEXTABLE_COLUMNS('twitter_r', 4);
MATERIALIZE_FLEXTABLE_COLUMNS
-------------------------------------------------------------------------------
The following columns were added to the table public.twitter_r:
contributors
entities.hashtags
entities.urls
For more details, run the following query:
SELECT * FROM v_catalog.materialize_flextable_columns_results WHERE table_schema = 'public' and table_name = 'twitter_r';
(1 row)
例子的最后一条消息推荐查询 MATERIALIZE_FLEXTABLE_COLUMNS_RESULTS 系统表,查看列实体化的结果,如下所示:
=> SELECT * FROM v_catalog.materialize_flextable_columns_results WHERE table_schema = 'public' and table_name = 'twitter_r';
table_id | table_schema | table_name | creation_time | key_name | status | message
-------------------+--------------+------------+------------------------------+-------------------+--------+---------------------
45035996273733172 | public | twitter_r | 2013-11-20 17:00:27.945484-05| contributors | ADDED | Added successfully
45035996273733172 | public | twitter_r | 2013-11-20 17:00:27.94551-05 | entities.hashtags | ADDED | Added successfully
45035996273733172 | public | twitter_r | 2013-11-20 17:00:27.945519-05| entities.urls | ADDED | Added successfully
45035996273733172 | public | twitter_r | 2013-11-20 17:00:27.945532-05| created_at | EXISTS | Column of same name already
(4 rows)
另请参阅
5 - RESTORE_FLEXTABLE_DEFAULT_KEYS_TABLE_AND_VIEW
恢复键表和视图。无论删除任一表,函数还会将键表与其关联的 Flex 表链接起来。该函数还会指示其恢复了一个对象还是同时恢复了两个对象。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变
语法
RESTORE_FLEXTABLE_DEFAULT_KEYS_TABLE_AND_VIEW ('flex-table')
参数
-
flex-table
- Flex 表的名称
示例
此示例显示如何使用现有的 Flex 表调用此函数,还原键表和视图:
=> SELECT RESTORE_FLEXTABLE_DEFAULT_KEYS_TABLE_AND_VIEW('darkdata');
RESTORE_FLEXTABLE_DEFAULT_KEYS_TABLE_AND_VIEW
----------------------------------------------------------------------------------
The keys table public.darkdata_keys was restored successfully.
The view public.darkdata_view was restored successfully.
(1 row)
此示例描述函数恢复了 darkdata_view
,但不需要恢复 darkdata_keys
:
=> SELECT RESTORE_FLEXTABLE_DEFAULT_KEYS_TABLE_AND_VIEW('darkdata');
RESTORE_FLEXTABLE_DEFAULT_KEYS_TABLE_AND_VIEW
------------------------------------------------------------------------------------
The keys table public.darkdata_keys already exists and is linked to darkdata.
The view public.darkdata_view was restored successfully.
(1 row)
还原键表之后,其中没有任何内容。要填充 Flex 键,请调用 COMPUTE_FLEXTABLE_KEYS 函数。
=> SELECT * FROM darkdata_keys;
key_name | frequency | data_type_guess
----------+-----------+-----------------
(0 rows)
另请参阅