# 实时数仓函数
#### hstore_light_merge(rel_name text)
描述：用于手动对HStore表进行轻量化清理操作，持有目标表的三级锁。
返回值类型：int
示例：
```
SELECT hstore_light_merge('reason_select');
```
#### hstore_full_merge(rel_name text, partitionName text)
描述：用于手动对HStore表进行全量清理操作。
partitionName为可选参数，用于指定单分区进行操作。
返回值类型：int
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/caution_3.0-zh-cn.png)
- 执行该操作会强制将DELTA表上的所有可见操作Merge到主表，然后建一张新的空Delta表， 期间持有该表的八级锁。
- 该操作的耗时长度与DELTA表上的数据量有关，务必打开HStore的清理线程，确保HStore表的及时清理。
- 仅在8.3.0.100及以上集群版本支持第二个可选参数partitionName，因此8.3.0.100及以上集群版本不支持使用call调用此函数（call不支持重载）
 
示例：
```
SELECT hstore_full_merge('reason_select'，'part1');
```
#### pgxc_get_small_cu_info(rel_name text, row_count int)
描述：用于获取目标表的小CU信息。该函数仅8.2.1.200及以上集群版本支持。
row_count为可选参数，表示小CU的阈值，存活元组数小于该参数值会被认为是小CU，默认值200。
返回值类型：record
返回值：
- node_name：DN节点名。
- part_name：分区名，非分区表此列为空。
- zero_cu_count：0CU的数量。当一个CU中的所有数据都被删除时，称之为0 CU。
- small_cu_count：小CU数量。当一个CU中**有存活数据** 且**存活数量小于阈值**时，称之为小CU。
- total_cu_count：总的CU的数量。
- sec_part_cu_num：每个二级分区的CU数量。当secondary_part_column被指定时，该列才会显示。该字段仅8.3.0及以上集群版本支持。

- bucket_cu_num：每个bucket的CU数量。当表是V3表时，该列才会显示。该字段仅9.1.1.100及以上集群版本支持。
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
此处CU是跨列的概念，并非一列一个的CU。
示例：
二级分区表：
```
SELECT * FROM pgxc_get_small_cu_info('hs');
node_name | part_name | zero_cu_count | small_cu_count | total_cu_count |             sec_part_cu_num              
-----------+-----------+---------------+----------------+----------------+------------------------------------------
 datanode1 |           |             0 |              4 |              4 | p1:1 p2:0 p3:1 p4:0 p5:1 p6:0 p7:1 p8:0 
 datanode2 |           |             0 |              4 |              4 | p1:0 p2:1 p3:0 p4:1 p5:0 p6:1 p7:0 p8:1 
(2 rows)
```
V3表：
```
SELECT * FROM pgxc_get_small_cu_info('hs_v3');
 node_name | part_name | zero_cu_count | small_cu_count | total_cu_count | sec_part_cu_num |    bucket_cu_num     
-----------+-----------+---------------+----------------+----------------+-----------------+----------------------
 datanode1 |           |             1 |              1 |              4 |                 | b0:2 b1:0 b2:2 b3:0 
 datanode2 |           |             0 |              0 |              2 |                 | b0:0 b1:1 b2:0 b3:1 
(2 rows)
```
#### pgxc_get_small_cu_info_with_percentage(rel_name text, row_count int)
描述：用于获取目标表的小CU信息。该函数仅9.1.1.200及以上集群版本支持。
row_count为可选参数，表示小CU的阈值，存活元组数小于该参数值会被认为是小CU，默认值200。
返回值类型：record
返回值：
- node_name：DN节点名。
- part_name：分区名，非分区表此列为空。
- zero_cu_count：0CU的数量。当一个CU中的所有数据都被删除时，称之为0 CU。
- small_cu_count：小CU数量。当一个CU中**有存活数据** 且**存活数量小于阈值**时，称之为小CU。
- total_cu_count：总的CU的数量。
- sec_part_cu_num：每个二级分区的CU数量。当secondary_part_column被指定时，该列才会显示。

- bucket_cu_num：每个bucket的CU数量。当表是V3表时，该列才会显示。
- total_cu_percentage：当前节点在整个表或分区的CU占比。
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
此处CU是跨列的概念，并非一列一个的CU。
示例：
```
SELECT * FROM pgxc_get_small_cu_info_with_percentage('tb') order by node_name, part_name;
node_name | part_name | zero_cu_count | small_cu_count | total_cu_count | sec_part_cu_num |                      bucket_cu_num                      | total_cu_percentage
--------------+------------+----------------+-----------------+----------------+-------------------+-----------   ----------------------------------+---------------------
datanode1  | part_1        |             0          |              8           |              8         |                              | b0:1 b2:1 b4:1 b6:1 b8:1 b10:1 b12:1 b14:1  |              50.000
datanode2  | part_1        |             0          |              8           |              8         |                              | b1:1 b3:1 b5:1 b7:1 b9:1 b11:1 b13:1 b15:1  |              50.000
(2 rows)
```
#### pgxc_get_hstore_delta_info(rel_name text)
描述：用于获取目标表的delta表信息，包括delta表的大小，insert/delete/update各种类型记录的数量等。该函数仅8.2.1.100及以上集群版本支持。
返回值类型：record
返回值：
- node_name：DN节点名。
- part_name：分区名，非分区表此列为non partition table。
- live_tup：存活的元组数量。
- n_ui_type：type是ui（小cu合并和upsert走update插入）的记录的数量。一条ui记录表示一次插入，可以是单插或者批插。该参数仅8.3.0.100及以上版本支持。
- n_i_type：type是i（insert）的记录的数量。一条i记录表示一次插入，可以是单插或者批插。
- n_d_type：type是d（delete）的记录的数量。一条d记录表示一次删除，可以是单条删或者批量删除。
- n_x_type：type是x（由update产生的delete）记录的数量。
- n_u_type：type是u（轻量化update）的记录数量。
- n_m_type：type是m（merge）的记录数量。
- data_size：delta表的总大小，单位为字节（包括delta上的索引与toast数据的大小）。
示例：
```
SELECT * FROM pgxc_get_hstore_delta_info('hs_part');
 node_name | part_name | live_tup | n_ui_type | n_i_type | n_d_type | n_x_type | n_u_type | n_m_type | data_size
-----------+-----------+----------+-----------+----------+----------+----------+----------+----------+-----------
 dn_1      | p1        |        2 |         0 |        2 |        0 |        0 |        0 |        0 |      8192
 dn_1      | p2        |        2 |         0 |        2 |        0 |        0 |        0 |        0 |      8192
 dn_1      | p3        |        2 |         0 |        2 |        0 |        0 |        0 |        0 |      8192
(3 rows)
```
#### pgxc_get_binlog_sync_point(rel_name text, slot_name text, checkpoint bool, node_id int)
描述：用于从pg_binlog_slots系统表上获取槽位对应的同步点信息，只能对开启binlog或binlog时间戳的表使用。该函数仅9.1.0.200及以上集群版本支持。
返回值类型：record
返回值：
- node_name：节点名称。
- node_id：节点ID。
- last_sync_point：上次同步点。
- latest_sync_point：当前最新同步点。
- xmin：同步点对应xmin。
示例：
```
SELECT * FROM pg_catalog.pgxc_get_binlog_sync_point('hstore_binlog_source', 'slot1', false, 0);
 node_name |   node_id   | last_sync_point | latest_sync_point | xmin
-----------+-------------+-----------------+-------------------+-------
 dn_2      | -1051926843 |               0 |             10512 | 10507
 dn_1      | -1300059100 |               0 |             10512 | 10508
(2 rows)
```
#### pgxc_get_binlog_changes(rel_name text, node_id int, start_csn bigint, end_csn bigint)
描述：用于获取目标表在指定DN上指定同步点区间的增量数据（node_id给0表示指定所有DN），只能对开启binlog或binlog时间戳的表使用。该函数仅9.1.0.200及以上集群版本支持。
返回值类型：record
返回值：
- gs_binlog_sync_point：同步点。
- gs_binlog_event_sequence：用于表示同一事务内的先后顺序。
- gs_binlog_event_type：binlog类型。
- gs_binlog_timestamp_us：binlog记录的时间戳，对于enable_binlog_timestamp为false的binlog表，该列返回空。
- value columns：目标表上各个用户字段的数据。
示例：
```
SELECT * FROM pgxc_get_binlog_changes('hstore_binlog_source', 0, 0 , 9999999999);
 gs_binlog_sync_point | gs_binlog_event_sequence | gs_binlog_event_type | gs_binlog_timestamp_us | c1  | c2 | c3
----------------------+--------------------------+----------------------+------------------------+-----+----+----
                10516 |                        2 | I                    |       1731570520900211 | 100 |  1 |  1
                10517 |                        3 | d                    |       1731570520904425 | 100 |  1 |  1
                10518 |                        2 | I                    |       1731570520909055 | 200 |  1 |  1
                10519 |                        3 | B                    |       1731570520914102 | 200 |  1 |  1
                10519 |                        4 | U                    |       1731570520914154 | 200 |  2 |  1
(5 rows)
```
#### pgxc_register_binlog_sync_point(rel_name text, slot_name text, node_id int, end_csn bigint, checkpoint bool, xmin bigint)
描述：用于登记同步点，只能对开启binlog或binlog时间戳的表使用。该函数仅9.1.0.200及以上集群版本支持。
返回值类型：int
返回值：登记成功的节点数量。
示例：
```
SELECT pgxc_register_binlog_sync_point('hstore_binlog_source', 'slot1', 0, 9999999999, false, 100);
 pgxc_register_binlog_sync_point
---------------------------------
                               2
(1 row)
```
#### pgxc_consumed_binlog_records(rel_name text, node_id int)
描述：用于获取目标表在指定DN上的消费状态，只能对开启binlog或binlog时间戳的表使用。该函数仅9.1.0.200及以上集群版本支持。
其中，node_id为0，表示查询所有DN。
返回值类型：int
返回值：
- 0，表示目标表的binlog仍没有被消费完毕（包含所有槽位以及checkpoint同步点）。
- 1，表示目标表的binlog被全部消费完毕。
示例：
```
SELECT * FROM pgxc_consumed_binlog_records('hstore_binlog_source',0);
 pgxc_consumed_binlog_records
------------------------------
                            1
(1 row)
```
#### pgxc_get_binlog_slots(rel_name text, node_id int)
描述：用于获取目标表所有槽位的进度信息。该函数仅9.1.0.223及以上集群版本支持。
返回值类型：record
其中，node_id为0，表示查询所有DN。
返回值：
- node_name：节点名。
- slot_name：槽位名。
- sync_point： 该槽位最近一次注册的同步点。
- sync_timestamp：该槽位最近一次注册的时间。
- oldest_xmin：该槽位最近一次注册时对应的oldest_xmin。
- is_checkpoint：是否属于checkpoint点位。
示例：
```
SELECT * FROM pgxc_get_binlog_slots('binlog_view_part_t1', 0);
 node_name | slot_name | sync_point |        sync_timestamp         | oldest_xmin |  is_checkpoint
-----------+-----------+------------+-------------------------------+-------------+----------------
 dn_1      |   slot1   |    210059  | 2025-09-19 10:31:38.894357+08 |       10054 |  f
(1 row)
```
#### pgxc_binlog_clear_target_slot(rel_name text, slot_name text)
描述：用于清理目标表的指定槽位。该函数仅9.1.0.223及以上集群版本支持。
返回值类型：int
返回值：返回所有节点被清理的槽位数量之和。
示例：
```
SELECT * FROM pgxc_binlog_clear_target_slot('binlog_view_part_t1',  'slot1');
 pgxc_binlog_clear_target_slot
------------------------------
                            4
(1 row)
```
#### pgxc_get_binlog_cursor_by_timestamp(rel_name text, timestamp timestampTz, node_id int)
描述：用于获取目标表上指定时间点后的第一个binlog记录的信息，只能对开启binlog时间戳的表使用。该函数仅9.1.0.200及以上集群版本支持。
返回值类型：record
返回值：
- node_name：节点名称。
- node_id：节点ID。
- latest_sync_point：当前最新同步点。
- binlog_sync_point：时间点后的第一个binlog记录的同步点。
- binlog_timestamp_us：时间点后的第一个binlog记录的时间戳。
- binlog_xmin：时间点后的第一个binlog记录的xmin。
示例：
```
SELECT * FROM pgxc_get_binlog_cursor_by_timestamp('hstore_binlog_source','2024-11-14 15:48:40.900211+08', 0);
 node_name |   node_id   | latest_sync_point | binlog_sync_point | binlog_timestamp_us | binlog_xmin
-----------+-------------+-------------------+-------------------+---------------------+-------------
 dn_2      | -1051926843 |             10532 |             10516 |    1731570520900211 |       10510
 dn_1      | -1300059100 |             10532 |             10518 |    1731570520909055 |       10510
(2 rows)
```
#### pgxc_get_binlog_consume_progress(rel_name text, node_id int)
描述：用于获取目标表的消费进度信息，只能对开启binlog时间戳的表使用。该函数仅9.1.0.200及以上集群版本支持。
返回值类型：record
返回值：
- node_name：节点名称。
- node_id：节点ID。
- slot_name：槽位名。
- checkpoint：是否属于checkpoint点位。
- latest_consumed_timestamp：已消费的最新的binlog的时间戳。
- latest_timestamp：所有binlog里最新的时间戳。
- latest_consumed_csn：已消费的最新的binlog的csn点位。
- latest_csn：所有binlog里最新的csn点位。
- unconsumed_binlog_count：还未消费的binlog的数量。
示例：
```
SELECT * FROM pgxc_get_binlog_consume_progress('hstore_binlog_source', 0);
 node_name |   node_id   | slot_name | checkpoint | latest_consumed_timestamp |    latest_timestamp    | latest_consumed_csn | latest_csn | unconsumed_binlog_count
-----------+-------------+-----------+------------+---------------------------+------------------------+---------------------+------------+-------------------------
 dn_1      | -1300059100 | slot1     | f          | 2025-04-15 15:55:55+08    | 2025-04-15 15:55:55+08 |              417725 |     417725 |                       0
 dn_1      | -1300059100 | slot1     | t          | 2025-04-15 15:55:55+08    | 2025-04-15 15:55:55+08 |              417725 |     417725 |                       0
(2 rows)
```
#### pgxc_get_binlog_cursor_by_syncpoint(rel_name text, csn int8, node_id int)
描述：用于获取目标表上指定同步点后的第一个binlog记录的信息，只能对开启binlog时间戳的表使用。该函数仅9.1.0.200及以上集群版本支持。
返回值类型：record
返回值：
- node_name：节点名称。
- node_id：节点ID。
- latest_sync_point：当前最新同步点。
- binlog_sync_point：同步点后的第一个binlog记录的同步点。
- binlog_timestamp_us：同步点后的第一个binlog记录的时间戳。
- binlog_xmin：同步点后的第一个binlog记录的xmin。
示例：
```
SELECT * FROM pgxc_get_binlog_cursor_by_syncpoint('hstore_binlog_source',10516,0);
 node_name |   node_id   | latest_sync_point | binlog_sync_point | binlog_timestamp_us | binlog_xmin
-----------+-------------+-------------------+-------------------+---------------------+-------------
 dn_1      | -1300059100 |             11187 |             10518 |    1731570520909055 |       10510
 dn_2      | -1051926843 |             11187 |             10516 |    1731570520900211 |       10510
(2 rows)
```
#### pgxc_get_cstore_dirty_ratio(rel_name text, partition_name)
描述：用于获取各个DN上目标表的cu、delta以及cudesc的脏页率以及大小，仅支持HStore_opt表。该函数仅9.1.0.100及以上集群版本支持。
partition_name为可选参数，如果传入分区名则只返回该分区对应的信息；如果没传入分区名且是主表时分区表返回所有分区对应的信息。
返回值类型：record
返回值：
- node_name：DN节点名称。
- database_name：表所在数据库名称。
- rel_name：主表名。
- part_name：分区名。
- cu_dirty_ratio：cu文件的脏页率。
- cu_size：cu文件大小。
- delta_dirty_ratio：delta表脏页率。
- delta_size：delta表大小。
- cudesc_dirty_ratio：cudesc表脏页率。
- cudesc_size：cudesc表大小。
示例：
```
SELECT * FROM pgxc_get_cstore_dirty_ratio('hs_opt_part');
 node_name | database_name |      rel_name      | partition_name | cu_dirty_ratio | cu_size | delta_dirty_ratio | delta_size | cudesc_dirty_ratio | cudesc_size
-----------+---------------+--------------------+----------------+----------------+---------+-------------------+------------+--------------------+-------------
 dn_1      | postgres      | public.hs_opt_part | p1             |              0 |       0 |                 0 |      16384 |                  0 |       24576
 dn_1      | postgres      | public.hs_opt_part | p2             |              0 |       0 |                 0 |      16384 |                  0 |       24576
 dn_1      | postgres      | public.hs_opt_part | p3             |              0 |       0 |                 0 |      16384 |                  0 |       24576
 dn_1      | postgres      | public.hs_opt_part | p4             |              0 |       0 |                 0 |      16384 |                  0 |       24576
 dn_1      | postgres      | public.hs_opt_part | other          |              0 | 1105920 |                 0 |     524288 |                  0 |       40960
(5 rows)
```
#### get_bucket_cuid_fileid_info(bucketid integer)
描述：根据指定的bucketid查询对应的cuid、fileid等信息。该函数仅9.1.1.300及以上集群版本支持。
返回值类型：record
返回值：
- min_globalcuid：指定bucketid对应的最小globalcuid。
- max_globalcuid：指定bucketid对应的最大globalcuid。
- min_localcuid：指定bucketid对应的最小localcuid。
- max_localcuid：指定bucketid对应的最大localcuid。
- localcuid_num：指定bucketid对应的localcuid的最大数量。
- min_globalfileid：指定bucketid对应的globalfileid的最小值。
- max_globalfileid：指定bucketid对应的globalfileid的最大值。
- min_seqno：指定bucketid对应的localfileid的最小值。
- max_seqno：指定bucketid对应的localfileid的最大值。
- seqno_num：指定bucketid对应的localfileid的最大数量。
示例：
```
SELECT * FROM get_bucket_cuid_fileid_info(1);
 min_globalcuid | max_globalcuid | min_localcuid | max_localcuid | localcuid_num | min_globalfileid | max_globalfileid | min_seqno | max_seqno | seqno_num 
----------------+----------------+---------------+---------------+---------------+------------------+------------------+-----------+-----------+-----------
           1025 |     4294950913 |             1 |       4194288 |       4194288 |            16385 |            32767 |         1 |     16383 |     16383
(1 row)
```
#### get_table_cuid_fileid_info(tableName regclass)
描述：查询指定表中所有bucketid的存储信息，如cuid、fileid等。该函数仅9.1.1.300及以上集群版本支持。
返回值类型：record
返回值：
- nodename：节点名称。
- partname：分区表名，非分区表显示空。
- bucketid：对应的bucketid。
- min_globalcuid：指定表中globalcuid的最小值。
- max_globalcuid：指定表中globalcuid的最大值。
- globalcuid_num：指定表中globalcuid的数量。
- rowcount：指定表对应bucket中的数据行数。
- bucket_skew_ratio：bucket倾斜率，每个bucket数据行数占总行数的比率。
- min_globalfileid：指定表中globalfileid的最小值。
- max_globalfileid：指定表中globalfileid的最大值。
- globalfileid_num：指定表中globalfileid的数量。
- max_seqno：指定表中localfileid的最大值。
- seqno_num：指定表中localfileid的数量。
示例：
```
SELECT * FROM get_table_cuid_fileid_info('t1');
 nodename  | partname | bucketid | min_globalcuid | max_globalcuid | globalcuid_num | rowcount | bucket_skew_ratio | min_globalfileid | max_globalfileid | globalfileid_num | max_seqno | seqno_num 
-----------+----------+----------+----------------+----------------+----------------+----------+-------------------+------------------+------------------+------------------+-----------+-----------
 datanode1 |          |        0 |           4096 |           4096 |              1 |    37615 |             .1254 |   97307852800002 |   97307852800002 |                1 |         2 |         1
 datanode1 |          |        2 |           4098 |           4098 |              1 |    37490 |              .125 |   97307852832770 |   97307852832770 |                1 |         2 |         1
 datanode1 |          |        4 |           4100 |           4100 |              1 |    37632 |             .1254 |   97307852865538 |   97307852865538 |                1 |         2 |         1
 datanode1 |          |        6 |           4102 |           4102 |              1 |    37578 |             .1253 |   97307852898306 |   97307852898306 |                1 |         2 |         1
 datanode2 |          |        1 |           4097 |           4097 |              1 |    37678 |             .1256 |   97307869593602 |   97307869593602 |                1 |         2 |         1
 datanode2 |          |        3 |           4099 |           4099 |              1 |    37339 |             .1245 |   97307869626370 |   97307869626370 |                1 |         2 |         1
 datanode2 |          |        5 |           4101 |           4101 |              1 |    37380 |             .1246 |   97307869659138 |   97307869659138 |                1 |         2 |         1
 datanode2 |          |        7 |           4103 |           4103 |              1 |    37288 |             .1243 |   97307869691906 |   97307869691906 |                1 |         2 |         1
(8 rows)
```
