这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

Flex 数据函数

Flex 表数据 Helper 函数提供了直接在 Flex 表中查询数据所需的信息。计算键并利用原始数据创建视图之后,可直接在查询中使用字段名称,而不是使用映射函数提取数据。

Flex 表依赖项

每个 Flex 表具有两个依赖对象,一个键表和一个视图。虽然这两个对象均依赖于其父表,您可以独立删除其中任一对象。删除父表将同时移除这两个依赖项,而无需使用层叠 (CASCADE) 选项。

关联 Flex 表和视图

如果 Helper 函数与父表在内部相链接,则其可自动使用相关的表和视图。当您创建 Flex 表时,也将同时创建上述两项。您可以删除键表或视图,然后重新创建同名的对象。但如果您执行此操作,新的对象不会与父 Flex 表在内部相链接。

在这种情况下,您可以恢复这些对象到父表的内部链接。为此,请在调用 RESTORE_FLEXTABLE_DEFAULT_KEYS_TABLE_AND_VIEW 函数之前删除键表和视图。调用此函数可重新创建键表和视图。

其余 Helper 函数执行本节所述的任务。

1 - BUILD_FLEXTABLE_VIEW

创建或重新创建默认或用户定义键表的视图,忽略任何空键。

这是元函数。您必须在顶级 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

要创建或重新创建一个默认视图:

  1. 使用输入 Flex 表调用函数:

    => SELECT BUILD_FLEXTABLE_VIEW('darkdata');
                      build_flextable_view
    -----------------------------------------------------
     The view public.darkdata_view is ready for querying
    (1 row)
    

    函数从 darkdata_keys 表创建具有默认名称 (darkdata_view) 的视图。

  2. 从新视图或更新视图查询键名:

    => SELECT "user.id" FROM darkdata_view;
      user.id
    -----------
     340857907
     727774963
     390498773
     288187825
     164464905
     125434448
     601328899
     352494946
    (12 rows)
    

要使用自定义名称创建或重建视图:

  1. 用两个实参、一个输入弹性表 darkdata以及要创建的视图名称 dd_view 调用函数:

    => SELECT BUILD_FLEXTABLE_VIEW('darkdata', 'dd_view');
                build_flextable_view
    -----------------------------------------------
     The view public.dd_view is ready for querying
    (1 row)
    
  2. 从新视图或更新视图 (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

函数将其结果存储到关联的 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

要比较数据类型分配结果,请完成以下步骤:

  1. 保存此 CSV 数据文件(此处保存为 trees.csv)。

  2. 创建 Flex 表 (trees) 并使用 fcsvparser 加载 trees.csv

    => CREATE FLEX TABLE trees();
    => COPY trees FROM '/home/dbadmin/tempdat/trees.csv' PARSER fcsvparser();
    
  3. COMPUTE_FLEXTABLE_KEYS 用于 trees Flex 表。

    => SELECT COMPUTE_FLEXTABLE_KEYS('trees');
                COMPUTE_FLEXTABLE_KEYS
    -----------------------------------------------
     Please see public.trees_keys for updated keys
    (1 row)
    
  4. 查询 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)
    
  5. EnableBetterFlexTypeGuessing 参数设置为 0(OFF)。

  6. 再次使用 trees Flex 表调用 COMPUTE_FLEXTABLE_KEYS

  7. 查询 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)
    
  8. 要保持非字符串数据类型的准确结果,请将 EnableBetterFlexTypeGuessing 参数重新设置为 1 (ON)。

有关 EnableBetterFlexTypeGuessing 配置参数的详细信息,请参阅 EnableBetterFlexTypeGuessing

另请参阅

3 - COMPUTE_FLEXTABLE_KEYS_AND_BUILD_VIEW

可合并 BUILD_FLEXTABLE_VIEWCOMPUTE_FLEXTABLE_KEYS 的功能,以便计算来自 Flex 表 Vmap 数据的虚拟列(键),并构建视图。使用此函数创建视图将忽略空键。如果不需要一起执行这两项操作,请改为使用单操作函数之一。

这是元函数。您必须在顶级 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_KEYSCOMPUTE_FLEXTABLE_KEYS_AND_BUILD_VIEW 实体化执行计算的 flextable_keys 表中作为 key_names 列出的虚拟列。

这是元函数。您必须在顶级 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)

另请参阅