实时数仓函数
hstore_light_merge(rel_name text)
描述:该函数用于手动对HStore表进行轻量化清理操作,持有目标表的三级锁。
返回值类型:int
示例:
1
|
SELECT hstore_light_merge('reason_select'); |
hstore_full_merge(rel_name text, partitionName text)
描述:该函数用于手动对HStore表进行全量清理操作,其中第二个入参为可选参数,用于指定单分区进行操作。
返回值类型:int

- 执行该操作会强制将DELTA表上的所有可见操作Merge到主表,然后建一张新的空Delta表, 期间持有该表的八级锁。
- 该操作的耗时长度与DELTA表上的数据量有关,务必打开HStore的清理线程,确保HStore表的及时清理。
- 仅在8.3.0.100及以上集群版本支持第二个可选参数partitionName,因此8.3.0.100及以上集群版本不支持使用call调用此函数(call不支持重载)
示例:
1
|
SELECT hstore_full_merge('reason_select','part1'); |
pgxc_get_small_cu_info(rel_name text, row_count int)
描述:该函数用于获取目标表的小CU信息。其中第二个参数row_count为可选参数,表示小CU的阈值,存活元组数小于这个值的就会被认为是小CU,默认值200。该函数仅8.2.1.200及以上集群版本支持。
返回值类型:record
返回值:
- node_name:DN节点名。
- part_name:分区名,非分区表此列为空。
- zero_cu_count:0 CU的数量。当一个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及以上集群版本支持。
示例:
二级分区表:
1 2 3 4 5 6 |
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表:
1 2 3 4 5 6 |
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_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数据的大小)。
示例:
1 2 3 4 5 6 7 |
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。
示例:
1 2 3 4 5 6 |
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:目标表上各个用户字段的数据。
示例:
1 2 3 4 5 6 7 8 |
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 |
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
返回值:登记成功的节点数量。
示例:
1 2 3 4 5 |
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及以上集群版本支持。
返回值类型:int
返回值:返回0表示目标表的binlog仍没有被消费完毕(包含所有槽位以及checkpoint同步点),返回1表示目标表的binlog被全部消费完毕。
示例:
1 2 3 4 5 |
SELECT * FROM pgxc_consumed_binlog_records('hstore_binlog_source',0); pgxc_consumed_binlog_records ------------------------------ 1 (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。
示例:
1 2 3 4 5 6 |
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的数量。
示例:
1 2 3 4 5 6 |
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。
示例:
1 2 3 4 5 6 |
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表。
其中partition_name为可选参数,如果传入分区名则只返回该分区对应的信息;如果没传入分区名且是主表时分区表返回所有分区对应的信息。该函数仅9.1.0.100及以上集群版本支持。
返回值类型: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表大小。
示例:
1 2 3 4 5 6 7 8 |
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 |