华为云用户手册

  • _PG_FOREIGN_TABLE_COLUMNS 显示外部表的列信息,如表1所示。该视图只有sysadmin权限可以查看。 表1 _PG_FOREIGN_TABLE_COLUMNS字段 名称 类型 描述 nspname name schema名称。 relname name 表名称。 attname name 列名称。 attfdwoptions text[] 外部数据封装器的属性选项,使用“keyword=value”格式的字符串。 父主题: Information Schema
  • global_streaming_hadr_rto_and_rpo_stat global_streaming_hadr_rto_and_rpo_stat视图显示流式容灾的主数据库实例和备数据库实例日志流控信息(只可在主数据库实例的主DN使用,备DN以及备数据库实例上均不可获取到统计信息),如表1所示。 表1 global_streaming_hadr_rto_and_rpo_stat参数说明 参数 类型 描述 hadr_sender_node_name text 节点的名称,包含主数据库实例和备数据库实例首备。 hadr_receiver_node_name text 备数据库实例首备名称。 current_rto int 流控的信息,当前主备数据库实例的日志rto时间(单位:秒)。-1标识灾备集群多数派异常。 target_rto int 流控的信息,目标主备数据库实例间的rto时间(单位:秒)。 current_rpo int 流控的信息,当前主备数据库实例的日志rpo时间(单位:秒)。-1标识灾备集群多数派异常。 target_rpo int 流控的信息,目标主备数据库实例间的rpo时间(单位:秒)。 rto_sleep_time int RTO流控信息,为了达到目标rto,预期主机walsender所需要的睡眠时间(单位:微秒)。 rpo_sleep_time int RPO流控信息,为了达到目标rpo,预期主机xlogInsert所需要的睡眠时间(单位:微秒)。 父主题: RTO & RPO
  • 示例 修改聚合函数的名称。 --创建自定义函数。 gaussdb=# CREATE OR REPLACE FUNCTION int_add(int,int) returns int as $BODY$ declare begin return $1 + $2; end; $BODY$ language plpgsql; --创建聚合函数。 gaussdb=# CREATE AGGREGATE myavg (int) ( sfunc = int_add, stype = int, initcond = '0' ); --把一个接受int类型参数的聚合函数myavg重命名为my_average。 gaussdb=# ALTER AGGREGATE myavg(int) RENAME TO my_average;
  • 基本语句 在编写PL/SQL过程中,会定义一些变量,给变量赋值,调用其他存储过程等。介绍PL/SQL中的基本语句,包括定义变量、赋值语句、调用语句以及返回语句。 尽量不要在存储过程中调用包含密码的SQL语句,因为存储在数据库中的存储过程文本可能被其他有权限的用户看到导致密码信息泄漏。如果存储过程中包含其他敏感信息也需要配置存储过程的访问权限,以避免敏感信息泄漏。 定义变量 赋值语句 调用语句 父主题: 存储过程
  • 示例 修改PACKAGE的所有者。 --创建PACKAGE。 gaussdb=# CREATE OR REPLACE PACKAGE test_pkg AS pkg_var int := 1; PROCEDURE test_pkg_proc(var int); END test_pkg; / gaussdb=# CREATE OR REPLACE PACKAGE BODY test_pkg AS PROCEDURE test_pkg_proc(var int) AS BEGIN pkg_var := 1; END; END test_pkg; / --创建用户。 gaussdb=# CREATE ROLE test PASSWORD '********'; --修改包的所有者。 gaussdb=# ALTER PACKAGE test_pkg OWNER TO test; --查询test_pkg的所有者。 gaussdb=# SELECT t1.pkgname,t2.rolname FROM gs_package t1, pg_roles t2 WHERE t1.pkgname = 'test_pkg' AND t1.pkgowner = t2.oid; pkgname | rolname ----------+--------- test_pkg | test (1 row) 重编译包。 --开启依赖功能。 gaussdb=# SET behavior_compat_options ='plpgsql_dependency'; --重编译包。 gaussdb=# ALTER PACKAGE test_pkg COMPILE; --删除。 gaussdb=# DROP PACKAGE test_pkg; gaussdb=# DROP ROLE test; --关闭依赖功能。 gaussdb=# RESET behavior_compat_options;
  • wal_flush_delay 参数说明:遍历WalInsertStatusEntryTbl时,遇到WAL_NOT_COPIED状态entry时等待的时间间隔。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型, 0 ~ 90000000(微秒) 默认值: 1us(196核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存,80核CPU/640G内存,64核CPU/512G内存,60核CPU/480G内存,32核CPU/256G内存,16核CPU/128G内存,8核CPU/64G内存,4核CPU/32G内存);100us(4核CPU/16G内存)
  • wal_receiver_bind_cpu 参数说明:WAL receiver 线程绑定cpu的核号。 默认是-1,-1是无效值,就是不绑核。 虽然数值范围为INT_MAX,但是实际和所用设备核数相关,所设定CPU核号不存在时报错中断。 多个线程允许绑定一个核,但是性能下降,不建议。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:最大值INT_MAX ,最小值-1。 默认值:-1
  • wal_rec_writer_bind_cpu 参数说明:WAL rec writer 线程绑定cpu的核号。 默认是-1,-1是无效值,就是不绑核。 虽然数值范围为INT_MAX,但是实际和所用设备核数相关,所设定CPU核号不存在时报错中断。 多个线程允许绑定一个核,但是性能下降,不建议。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:最大值INT_MAX ,最小值-1。 默认值:-1
  • walwriter_sleep_threshold 参数说明:xlogflusher进入sleep之前空闲xlog刷新的次数,达到阈值会休眠。 参数类型:整型 参数单位:次 取值范围:1-50000 默认值:500(196核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存,80核CPU/640G内存,64核CPU/512G内存,60核CPU/480G内存);50(32核CPU/256G内存,16核CPU/128G内存,8核CPU/64G内存,4核CPU/32G内存,4核CPU/16G内存) 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:建议设置为默认值。
  • wal_file_init_num 参数说明:WalWrtier线程启动时一次创建xlog段文件的数量。 参数类型:整型 参数单位:无 取值范围:0~1000000 默认值:10(196核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存,80核CPU/640G内存,64核CPU/512G内存,60核CPU/480G内存);0(32核CPU/256G内存,16核CPU/128G内存,8核CPU/64G内存,4核CPU/32G内存,4核CPU/16G内存) 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:建议设置为默认值。
  • full_page_writes 参数说明:设置GaussDB服务器在检查点之后对页面的第一次修改时,是否将每个磁盘页面的全部内容写到WAL日志中。当enable_incremental_checkpoint和enable_double_write同时打开时,则不使用full_page_writes。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置这个参数是因为在操作系统崩溃过程中可能磁盘页面只写入了一部分内容,从而导致在同一个页面中包含新旧数据的混合。在崩溃后的恢复期间,由于在WAL日志中存储的行变化信息不够完整,因此无法完全恢复该页。把完整的页面影像保存下来就可以保证页面被正确还原,代价是增加了写入WAL日志的数据量。 关闭此参数,在系统崩溃的时候,可能无法恢复原来的数据。如果服务器硬件的特质(比如电池供电的磁盘控制器)可以减小部分页面的写入风险,或者文件系统特性支持(比如ReiserFS 4),并且清楚知道写入风险在一个可以接受的范畴,可以关闭这个参数。 取值范围:布尔型 on表示启用此特性。 off表示关闭此特性。 默认值:on
  • commit_delay 参数说明:表示一个已经提交的数据在WAL缓冲区中存放的时间。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置为非 0 值时事务执行commit后不会立即写入WAL中,而仍存放在WAL缓冲区中,等待WalWriter线程周期性写入磁盘。 如果系统负载很高,在延迟时间内,其他事务可能已经准备好提交。但如果没有事务准备提交,这个延迟就是在浪费时间。 取值范围:整型, 0~100000(微秒),其中0表示无延迟。 默认值:0
  • wal_flush_timeout 参数说明:遍历WalInsertStatusEntryTbl的超时时间。Xlog刷盘自适应控制的刷盘IO遍历WalInsertStatusEntryTbl等待的最大时间。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 如果时间过长可能造成Xlog刷盘频率降低,降低Xlog处理性能。 取值范围:整型, 0 ~ 90000000(微秒) 默认值: 2us(196核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存,80核CPU/640G内存,64核CPU/512G内存,60核CPU/480G内存,32核CPU/256G内存,16核CPU/128G内存,8核CPU/64G内存,4核CPU/32G内存);800us(4核CPU/16G内存)
  • wal_sender_bind_cpu_attr 参数说明:用于控制日志发送的绑核操作,仅sysadmin用户可以访问。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 'nobind':线程不做绑核。 'cpuorderbind: 8-12': 从8号核开始一个线程绑定一个CPU,区间内核不足就不参与绑定。建议区间大小设置为大于等于参数max_wal_senders。 取值范围:字符串,长度大于0,该参数不区分大小写。 默认值:'nobind'
  • wal_file_preinit_bounds 参数说明:设置业务运行时,WAL writer辅助线程每秒可预扩的WAL日志段文件的数量限制(WAL日志段文件的大小为16MB)。当该参数值为0时,表示不进行限制。 参数类型:整型 参数单位:无 取值范围:0~1024 默认值:0 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:设置为默认值,不做调整。当把该参数设置为有效值时,需基于磁盘IO能力进行设置,可参考参数max_io_capacity的数值进行设置: 若max_io_capacity为500MB,可设置为25; 若max_io_capacity为1GB,可设置为50。
  • wal_level 参数说明:设置写入WAL信息量的级别,不能为空或被注释掉。 如果需要启用WAL日志归档和主备机的数据流复制,必须将此参数设置为archive、hot_standby或者logical。 如果此参数设置为minimal,hot_standby必须设置为off,max_wal_senders参数设置为0,且需为单机环境,否则将导致数据库无法启动。 如果此参数设置为archive,hot_standby必须设置为off,否则将导致数据库无法启动。但是,hot_standby在双机环境中不能设置为off,具体参见hot_standby参数说明。 参数类型:枚举类型 取值范围: minimal 优点:一些重要操作(包括创建表、创建索引、簇操作和表的复制)都能安全的跳过,这样就可以使操作变得更快。 缺点:WAL仅提供从数据库服务器崩溃或者紧急关闭状态恢复时所需要的基本信息,无法用WAL归档日志恢复数据。 archive 这个参数增加了WAL归档需要的日志信息,从而可以支持数据库的归档恢复。 hot_standby 这个参数进一步增加了在备机上运行的SQL查询的信息,这个参数只能在数据库服务重新启动后生效。 为了在备机上开启只读查询,wal_level必须在主机上设置成hot_standby,并且备机必须打开hot_standby参数。hot_standby和archive级别之间的性能只有微小的差异,如果它们的设置对产品的性能影响有明显差异,欢迎反馈。 logical 这个参数表示WAL日志支持逻辑复制。 默认值:hot_standby 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:开启逻辑复制功能时设置为logical,其他场景设置为hot_standby。
  • wal_sync_method 参数说明:设置向磁盘强制更新WAL数据的方法。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 如果将fsync关闭,这个参数的设置就没有意义,因为所有数据更新都不会强制写入磁盘。 取值范围:枚举类型 open_datasync表示用带O_DSYNC选项的open()打开“WAL”文件。 fdatasync表示每次提交的时候都调用fdatasync()(支持suse10和suse11)。 fsync_writethrough表示每次提交的时候调用fsync()强制把缓冲区任何数据写入磁盘。 由于历史原因,Windows平台支持将wal_sync_method设置为fsync_writethrough。在windows平台上fsync_writethrough和fsync等效。 fsync表示每次提交的时候调用fsync()(支持suse10和suse11)。 open_sync表示用带O_SYNC选项的open()写“WAL”文件(支持suse10和suse11)。 不是所有的平台都支持以上参数。 默认值:fdatasync
  • fsync 参数说明:设置GaussDB服务器是否使用fsync()系统函数(请参见wal_sync_method)确保数据的更新及时写入物理磁盘中。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 使用fsync()系统函数可以保证在操作系统或者硬件崩溃的情况下将数据恢复到一个已知的状态。 如果将此参数关闭,可能会在系统崩溃时无法恢复原来的数据,导致数据库不可用。 取值范围:布尔型 on表示使用fsync()系统函数。 off表示不使用fsync()系统函数。 默认值:on
  • SUMMARY_TRANSACTIONS_PREPARED_XACTS 显示数据库主节点当前准备好进行两阶段提交的事务的信息汇总,如表1所示。 表1 SUMMARY_TRANSACTIONS_PREPARED_XACTS字段 名称 类型 描述 transaction xid 预备事务的数字事务标识。 gid text 赋予该事务的全局事务标识。 prepared timestamp with time zone 事务准备好提交的时间。 owner name 执行该事务的用户的名称。 database name 执行该事务所在的数据库名。 父主题: Transaction
  • GLOBAL_STATIO_USER_INDEXES GLOBAL_STATIO_USER_INDEXES视图显示各节点的命名空间中所有用户关系表索引的I/O状态信息,如表1所示。 表1 GLOBAL_STATIO_USER_INDEXES字段 名称 类型 描述 node_name name 节点名称。 relid oid 索引的表的OID。 indexrelid oid 该索引的OID。 schemaname name 该索引的模式名。 relname name 该索引的表名。 indexrelname name 索引名称。 idx_blks_read numeric 从索引中读取的磁盘块数。 idx_blks_hit numeric 索引命中缓存数。 父主题: Cache/IO
  • 查询规划 介绍查询优化器方法配置、开销常量、规划算法以及一些配置参数。 优化器中涉及的两个参数: INT_MAX数据类型INT的最大值,其值为2147483647。 DBL_MAX数据类型FLOAT的最大值。 全局设置查询规划相关参数除了客户业务外也会对数据库自身运维和监控业务造成影响,如WDR报告生成、扩容、重分布、数据导入导出等。 优化器方法配置 优化器开销常量 基因查询优化器 其他优化器选项 父主题: GUC参数说明
  • PG_STATIO_SYS_TABLES PG_STATIO_SYS_TABLES视图显示命名空间中所有系统表的I/O状态信息。 表1 PG_STATIO_SYS_TABLES字段 名称 类型 描述 relid oid 表OID。 schemaname name 该表的模式名。 relname name 表名。 heap_blks_read bigint 从该表中读取的磁盘块数。 heap_blks_hit bigint 该表命中缓存数。 idx_blks_read bigint 从表中所有索引读取的磁盘块数。 idx_blks_hit bigint 表中所有索引命中缓存数。 toast_blks_read bigint 从该表的TOAST表读取的磁盘块数(如果存在)。 toast_blks_hit bigint 该表的TOAST表命中缓存数(如果存在)。 tidx_blks_read bigint 从该表的TOAST表索引读取的磁盘块数(如果存在)。 tidx_blks_hit bigint 该表的TOAST表索引命中缓存数(如果存在)。 父主题: 其他系统视图
  • 示例 --设置模式搜索路径。 gaussdb=# SET search_path TO tpcds, public; --把日期时间风格设置为传统的 POSTGRES 风格(日在月前)。 gaussdb=# SET datestyle TO postgres,dmy; --SET自定义用户变量的功能。 gaussdb=# CREATE DATABASE user_var dbcompatibility 'b'; gaussdb=# \c user_var user_var=# SET b_format_behavior_compat_options = enable_set_variables; user_var=# SET @v1 := 1, @v2 := 1.1, @v3 := true, @v4 := 'dasda', @v5 := x'41'; --查询自定义用户变量。 user_var=# SELECT @v1, @v2, @v3, @v4, @v5, @v6, @v7; --PREPARE语法使用自定义用户变量。 user_var=# SET @sql = 'select 1'; user_var=# PREPARE stmt as @sql; user_var=# EXECUTE stmt; user_var=# \q --删除数据库。 gaussdb=# DROP DATABASE user_var;
  • 参数说明 SESSION 声明的参数只对当前会话起作用。如果SESSION和LOCAL都没出现,则SESSION为缺省值。 如果在事务中执行了此命令,命令的产生影响将在事务回滚之后消失。如果该事务已提交,影响将持续到会话的结束,除非被另外一个SET命令重置参数。 LOCAL 声明的参数只在当前事务中有效。在COMMIT或ROLLBACK之后,会话级别的设置将再次生效。 不论事务是否提交,此命令的影响只持续到当前事务结束。一个特例是:在一个事务里面,既有SET命令,又有SET LOCAL命令,且SET LOCAL在SET后面,则在事务结束之前,SET LOCAL命令会起作用,但事务提交之后,则是SET命令会生效。 TIME ZONE timezone 用于指定当前会话的本地时区。 取值范围:有效的本地时区。该选项对应的运行时参数名称为TimeZone,DEFAULT缺省值为PRC。 CURRENT_SCHEMA schema CURRENT_SCHEMA用于指定当前的模式。 取值范围:已存在模式名称。如果模式名不存在,会导致CURRENT_SCHEMA值为空。 SCHEMA schema 同CURRENT_SCHEMA。此处的schema是个字符串。 例如:set schema 'public'; NAMES {'charset_name' [COLLATE 'collation_name'] | DEFAULT}; 在B兼容模式下,并在设置b_format_version='5.7'、b_format_dev_version='s2';时,支持指定collate子句。 用于设置客户端字符编码,常量字符串的字符集、字符序,及返回结果的字符集。 等价于: set client_encoding = charset_name; set character_set_connection = charset_name; set collation_connection = collation_name; set character_set_results = charset_name; 取值范围:B兼容模式下支持的字符集,字符序。暂不支持指定charset_name与数据库字符集不同。 其他场景下不支持指定collate子句。 用于设置客户端的字符编码。 等价于: set client_encoding to charset_name 取值范围:有效的字符编码。该选项对应的运行时参数名称为client_encoding,默认编码为UTF8。 config_parameter 可设置的运行时参数的名称。可用的运行时参数可以使用SHOW ALL命令查看。 部分通过SHOW ALL查看的参数不能通过SET设置。如max_datanodes。 value config_parameter的新值。可以声明为字符串常量、标识符、数字,或者逗号分隔的列表。DEFAULT用于把这些参数设置为它们的缺省值。 SESSION | @@SESSION. | @@ 声明的参数生效方式为superuser、user,可通过pg_settings系统视图的context字段确定,如果没有出现GLOBAL /SESSION,则SESSION为缺省值。支持config_parameter赋值为表达式。 SET SESSION 只有在兼容B模式下(sql_compatibility = 'B')支持,并且GUC参数b_format_behavior_compat_options设置值包含 enable_set_variables的场景下才支持(set b_format_behavior_compat_options = 'enable_set_variables')。 使用@@config_parameter进行操作符运算时,尽量使用空格隔开。比如set @@config_parameter1=@@config_parameter1*2; 命令中,会将=@@当做操作符,可将其修改为set @@config_parameter1= @@config_parameter1 * 2 。
  • 语法格式 设置所处的时区。 SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }; 设置所属的模式。 SET [ SESSION | LOCAL ] {CURRENT_SCHEMA { TO | = } { schema | DEFAULT } | SCHEMA 'schema'}; 设置客户端编码集。 SET [ SESSION | LOCAL ] NAMES {'charset_name' [COLLATE 'collation_name'] | DEFAULT}; 设置其他运行时参数。 SET [ LOCAL | SESSION ] {config_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }};
  • 更新表中数据 修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行、所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。 使用UPDATE命令更新现有行,需要提供以下三种信息: 表的名称和需要更新的字段名 字段的新值 需要更新的行 SQL通常不会为数据行提供唯一标识,因此无法直接声明需要更新哪一行。但是可以通过声明一个被更新的行必须满足的条件。只有在表里存在主键的时候,才可以通过主键指定一个独立的行。 建立表和插入数据的步骤请参见创建表和向表中插入数据。 需要将表customer_t1中c_customer_sk为9527的地域重新定义为9876。 1 gaussdb=# UPDATE customer_t1 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527; 这里的表名称也可以使用模式名修饰,否则会从默认的模式路径找到这个表。SET后面紧跟字段和新的字段值。新的字段值不仅可以是常量,也可以是变量表达式。 比如,把所有c_customer_sk的值增加100。 1 gaussdb=# UPDATE customer_t1 SET c_customer_sk = c_customer_sk + 100; 在这里省略了WHERE子句,表示表中的所有行都要被更新。如果出现了WHERE子句,那么只有匹配其条件的行才会被更新。 在SET子句中的等号是一个赋值,而在WHERE子句中的等号是比较。WHERE条件不一定是相等比较,许多其他的操作符也可以使用。 用户可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值,比如: 1 gaussdb=# UPDATE customer_t1 SET c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421; 批量更新或删除数据后,会在数据文件中产生大量的删除标记,查询过程中标记删除的数据也是需要扫描的。故多次批量更新/删除后,标记删除的数据量过大会严重影响查询的性能。建议在批量更新/删除业务会反复执行的场景下,定期执行VACUUM FULL以保证查询性能。 父主题: 创建和管理表
  • 聚合函数 hll_add_agg(hll_hashval) 描述:把哈希后的数据按照分组放到hll中。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 --准备数据 gaussdb=# CREATE TABLE t_id(id int); gaussdb=# INSERT INTO t_id VALUES(generate_series(1,500)); gaussdb=# CREATE TABLE t_data(a int, c text); gaussdb=# INSERT INTO t_data SELECT mod(id,2), id FROM t_id; --创建表并指定列为hll gaussdb=# CREATE TABLE t_a_c_hll(a int, c hll); --根据a列group by对数据分组,把各组数据加到hll中 gaussdb=# INSERT INTO t_a_c_hll SELECT a, hll_add_agg(hll_hash_text(c)) FROM t_data GROUP BY a; --得到每组数据中hll的Distinct值 gaussdb=# SELECT a, #c AS cardinality FROM t_a_c_hll ORDER BY a; a | cardinality ---+------------------ 0 | 247.862354346299 1 | 250.908710610377 (2 rows) hll_add_agg(hll_hashval, int32 log2m) 描述:把哈希后的数据按照分组放到hll中, 并指定参数log2m,取值范围是10到16。若输入-1或者NULL,则采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), 12)) FROM t_data; hll_cardinality ------------------ 497.965240179228 (1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit) 描述:把哈希后的数据按照分组放到hll中,依次指定参数log2m、log2explicit。 log2explicit取值范围是0到12,0表示直接跳过Explicit模式。该参数可以用来设置Explicit模式的阈值大小,在数据段长度达到2log2explicit后切换为Sparse模式或者Full模式。若输入-1或者NULL,则log2explicit采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1)) FROM t_data; hll_cardinality ------------------ 498.496062953313 (1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse) 描述:把哈希后的数据按照分组放到hll中, 依次指定参数log2m、log2explicit、log2sparse。log2sparse取值范围是0到14,0表示直接跳过Sparse模式。该参数可以用来设置Sparse模式的阈值大小,在数据段长度达到2log2sparse后切换为Full模式。若输入-1或者NULL,则log2sparse采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10)) FROM t_data; hll_cardinality ------------------ 498.496062953313 (1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse, int32 duplicatecheck) 描述:把哈希后的数据按照分组放到hll中, 依次制定参数log2m、log2explicit、log2sparse、duplicatecheck,duplicatecheck取值范围是0或者1,表示是否开启该模式,默认情况下该模式会关闭。若输入-1或者NULL,则duplicatecheck采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10, -1)) FROM t_data; hll_cardinality ------------------ 498.496062953313 (1 row) hll_union_agg(hll) 描述:将多个hll类型数据union成一个hll。 返回值类型:hll 示例: 1 2 3 4 5 6 --将各组中的hll数据union成一个hll,并计算distinct值。 gaussdb=# SELECT #hll_union_agg(c) AS cardinality FROM t_a_c_hll; cardinality ------------------ 498.496062953313 (1 row) 注意:当两个或者多个hll数据结构做union的时候,必须要保证其中每一个hll里面的精度参数一样,否则将不可以进行union。同样的约束也适用于函数hll_union(hll,hll)。
  • 废弃函数 由于版本升级,HLL(HyperLogLog)有一些旧的函数废弃,用户可以用类似的函数进行替代。 hll_schema_version(hll) 描述:查看当前hll中的schema version。旧版本schema version是常值1,用来进行hll字段的头部校验,重构后的hll在头部增加字段“HLL”进行校验,schema version不再使用。 hll_regwidth(hll) 描述:查看hll数据结构中桶的位数大小。旧版本桶的位数regwidth取值1~5,会存在较大的误差,也限制了基数估计上限。 重构后regwidth为固定值6,不再使用regwidth变量。 hll_expthresh(hll) 描述:得到当前hll中expthresh大小。采用hll_log2explicit(hll)替代类似功能。 hll_sparseon(hll) 描述:是否启用Sparse模式。采用hll_log2sparse(hll)替代类似功能,0表示关闭Sparse模式。
  • 内置函数 HLL(HyperLogLog)有一系列内置函数用于内部对数据进行处理,一般情况下用户不需要熟知这些函数的使用,具体如表1所示。 表1 内置函数 函数名称 功能描述 hll_in 以string格式接收hll数据。 hll_out 以string格式发送hll数据。 hll_recv 以bytea格式接收hll数据。 hll_send 以bytea格式发送hll数据。 hll_trans_in 以string格式接收hll_trans_type数据。 hll_trans_out 以string格式发送hll_trans_type数据。 hll_trans_recv 以bytea形式接收hll_trans_type数据。 hll_trans_send 以bytea形式发送hll_trans_type数据。 hll_typmod_in 接收typmod类型数据。 hll_typmod_out 发送typmod类型数据。 hll_hashval_in 接收hll_hashval类型数据。 hll_hashval_out 发送hll_hashval类型数据。 hll_add_trans0 类似于hll_add所提供的功能,初始化时无指定入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans1 类似于hll_add所提供的功能,初始化时指定一个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans2 类似于hll_add所提供的功能,初始化时指定两个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans3 类似于hll_add所提供的功能,初始化时指定三个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans4 类似于hll_add所提供的功能,初始化时指定四个入参,通常在聚合运算的第一阶段DN上使用。 hll_union_trans 类似hll_union所提供的功能,在聚合运算的第一阶段DN上使用。 hll_union_collect 类似于hll_union所提供的功能,在聚合运算第二阶段DN上使用,汇总各个DN上的结果。 hll_pack 在聚合运算第三阶段DN上使用,把自定义hll_trans_type类型最后转换成hll类型。 hll 用于hll类型转换成hll类型,根据输入参数会设定指定参数。 hll_hashval 用于bigint类型转换成hll_hashval类型。 hll_hashval_int4 用于int4类型转换成hll_hashval类型。
  • 功能函数 hll_empty() 描述:创建一个空的hll。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_empty(); hll_empty ------------------------------------------------------------ \x484c4c00000000002b05000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m) 描述:创建空的hll并指定参数log2m,取值范围是10到16。若输入-1,则采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT hll_empty(10); hll_empty ------------------------------------------------------------ \x484c4c00000000002b04000000000000000000000000000000000000 (1 row) gaussdb=# SELECT hll_empty(-1); hll_empty ------------------------------------------------------------ \x484c4c00000000002b05000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m, int32 log2explicit) 描述:创建空的hll并依次指定参数log2m、log2explicit。log2explicit取值范围是0到12,0表示直接跳过Explicit模式。该参数可以用来设置Explicit模式的阈值大小,在数据段长度达到2log2explicit后切换为Sparse模式或者Full模式。若输入-1,则log2explicit采用内置默认值。 返回值类型: hll 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT hll_empty(10, 4); hll_empty ------------------------------------------------------------ \x484c4c00000000001304000000000000000000000000000000000000 (1 row) gaussdb=# SELECT hll_empty(10, -1); hll_empty ------------------------------------------------------------ \x484c4c00000000002b04000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m, int32 log2explicit, int64 log2sparse) 描述:创建空的hll并依次指定参数log2m、log2explicit、log2sparse。log2sparse取值范围是0到14,0表示直接跳过Sparse模式。该参数可以用来设置Sparse模式的阈值大小,在数据段长度达到2log2sparse后切换为Full模式。若输入-1,则log2sparse采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT hll_empty(10, 4, 8); hll_empty ------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000 (1 row) gaussdb=# SELECT hll_empty(10, 4, -1); hll_empty ------------------------------------------------------------ \x484c4c00000000001304000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m, int32 log2explicit, int64 log2sparse, int32 duplicatecheck) 描述:创建空的hll并依次指定参数log2m、log2explicit、log2sparse、duplicatecheck。duplicatecheck取0或者1,表示是否开启该模式,默认情况下该模式会关闭。若输入-1,则duplicatecheck采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT hll_empty(10, 4, 8, 0); hll_empty ------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000 (1 row) gaussdb=# SELECT hll_empty(10, 4, 8, -1); hll_empty ------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000 (1 row) hll_add(hll, hll_hashval) 描述:把hll_hashval加入到hll中。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_add(hll_empty(), hll_hash_integer(1)); hll_add ---------------------------------------------------------------------------- \x484c4c08000002002b0900000000000000f03f3e2921ff133fbaed3e2921ff133fbaed00 (1 row) hll_add_rev(hll_hashval, hll) 描述:把hll_hashval加入到hll中,和hll_add功能一样,只是参数位置进行了交换。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_add_rev(hll_hash_integer(1), hll_empty()); hll_add_rev ---------------------------------------------------------------------------- \x484c4c08000002002b0900000000000000f03f3e2921ff133fbaed3e2921ff133fbaed00 (1 row) hll_eq(hll, hll) 描述:比较两个hll是否相等。 返回值类型:bool 示例: 1 2 3 4 5 gaussdb=# SELECT hll_eq(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_eq -------- f (1 row) hll_ne(hll, hll) 描述:比较两个hll是否不相等。 返回值类型:bool 示例: 1 2 3 4 5 gaussdb=# SELECT hll_ne(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_ne -------- t (1 row) hll_cardinality(hll) 描述:计算hll的distinct值。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT hll_cardinality(hll_empty() || hll_hash_integer(1)); hll_cardinality ----------------- 1 (1 row) hll_union(hll, hll) 描述:把两个hll数据结构union成一个。 返回值类型:hll 示例: 1 2 3 4 5 gaussdb=# SELECT hll_union(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_union -------------------------------------------------------------------------------------------- \x484c4c10002000002b090000000000000000400000000000000000b3ccc49320cca1ae3e2921ff133fbaed00 (1 row)
共100000条