华为云用户手册

  • 注意事项 当单次插入的数据量大于等于表级参数DELTAROW_THRESHOLD时,数据会直接插入主表生成CU(Compress Unit)。 当插入的数据量小于表级参数DELTAROW_THRESHOLD时,会在辅助Delta表上插入一条类型为I的记录,同时将数据序列化存储到这条记录的values字段。 插入到Delta表的数据跟主表使用全局统一分配的cuid。 插入到delta表的数据依赖autovacuum 来merge到主表CU。
  • 示例 创建表reason_t2: 1234567 CREATE TABLE reason_t2( TABLE_SK INTEGER , TABLE_ID VARCHAR(20) , TABLE_NA VARCHAR(20))WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON);INSERT INTO reason_t2 VALUES (1, 'S01', 'StudentA'),(2, 'T01', 'TeacherA'),(3, 'T02', 'TeacherB'); 使用WHERE 条件删除: 12 DELETE FROM reason_t2 WHERE TABLE_SK = 2;DELETE FROM reason_t2 AS rt2 WHERE rt2.TABLE_SK = 2; 使用IN语法删除: 1 DELETE FROM reason_t2 WHERE TABLE_SK in (1,3);
  • 注意事项 如果需要删除表上的所有数据,建议使用TRUNCATE语法,可以有效提高性能同时减少空间膨胀。 HStore表上的单条Delete操作,会往Delta中插入一条type是D的记录,同时在更新内存更新链用于管理并发。 HStore表上的批量Delete操作,对于每个CU上的连续delete,会插入一条type是D的记录。 对于并发delete场景, 传统列存储格式由于同时操作相同CU时会阻塞所以并发性能较差, 对于HStore表由于不需要阻塞等待,并发delete性能可达到列存的百倍以上。 语法完全兼容列存,更多信息可以参考UPDATE语法。
  • 数据同步示例 GaussDB (DWS)侧: 新建binlog表时,enable_hstore_binlog_table参数需要设置为true,可以通过show enable_hstore_binlog_table来查询。 -- 源表(产生binlog) 1 CREATE TABLE test_binlog_source(a int, b int, c int, primary key(a)) with(orientation=column, enable_hstore_opt=on, enable_binlog=true); -- 目标表 1 CREATE TABLE test_binlog_sink(a int, b int, c int, primary key(a)) with(orientation=column, enable_hstore_opt=on); Flink侧: 执行如下命令进行完整数据同步: 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031 -- 建立源表的映射表CREATE TABLE test_binlog_source ( a int, b int, c int, primary key(a) NOT ENFORCED) with ( 'connector' = 'dws', 'url' = 'jdbc:gaussdb://ip:port/gaussdb', 'binlog' = 'true', 'tableName' = 'test_binlog_source', 'binlogSlotName' = 'slot', 'username'='xxx', 'password'='xxx'); ​-- 建立目标表的映射表CREATE TABLE test_binlog_sink ( a int, b int, c int, primary key(a) NOT ENFORCED) with ( 'connector' = 'dws', 'url' = 'jdbc:gaussdb://ip:port/gaussdb', 'tableName' = 'test_binlog_sink', 'ignoreUpdateBefore'='false', 'connectionSize' = '1', 'username'='xxx', 'password'='xxx');​INSERT INTO test_binlog_sink select * from test_binlog_source;
  • 注意事项 当前仅8.3.0.100及以上的版本支持HStore和HStore-opt记录Binlog功能。 V3 HStore表不支持Binlog,仅V3 HStore_opt表支持Binlog,且V3处于试商用阶段,使用前需要进行评估。 目前GaussDB(DWS)只有Hstore表和HStore-opt支持Binlog功能,表需要包含主键且设置enable_binlog=on或者enable_binlog_timestamp=on。 消费的Binlog表名不要带有特殊字符,如.、""等。 如果多个任务消费同一张表的Binlog数据,需要保证每个任务的binlogSlotName唯一。 为了达到最高的消费速度,建议将任务的并发度和DWS集群DN数设置一致。 使用dws-connector-flink的Sink能力来写入Binlog数据的话,需要注意以下几点: 如果需要保证DN内的数据写入顺序则需要设置connectionSize设置为1。 如果源端有更新主键操作或者需要flink进行聚合计算的话,将ignoreUpdateBefore设置为false,否则不建议将 ignoreUpdateBefore设置为false(默认true)。
  • Binlog相关参数说明 下表仅涉及消费Binlog时的参数。 表1 消费Binlog时的参数 参数 说明 数据类型 默认值 binlog 是否读取Binlog信息 Boolean false binlogSlotName 槽位信息,可以理解一个标识。由于可能存在多个Flink任务同时消费同一张表的Binlog信息,所以该场景需要保证每个任务的binlogSlotName不同。 String Flink映射表的表名 binlogBatchReadSize 批量读取binlog的数据行数 Integer 5000 fullSyncBinlogBatchReadSize 全量读取binlog的数据行数 Integer 50000 binlogReadTimeout 增量消费Binlog数据时超时时间,单位毫秒 Integer 600000 fullSyncBinlogReadTimeout 全量消费Binlog数据时超时时间,单位毫秒 Long 1800000 binlogSleepTime 实时消费不到Binlog数据时休眠时间,单位毫秒。如果连续读取不到Binlog数据,则休眠时间为:binlogSleepTime * 次数,最大为binlogMaxSleepTime。读取到数据后,则重置。 Long 500 binlogMaxSleepTime 实时消费不到Binlog数据时最大休眠时间,单位毫秒。 Long 10000 binlogMaxRetryTimes 消费Binlog数据出错后的重试次数。 Integer 1 binlogRetryInterval 消费binlog数据出错后的重试时间间隔。重试时sleep时间:binlogRetryInterval * (1~binlogMaxRetryTimes) +Random(100)。单位毫秒。 Long 100 binlogParallelNum 消费Binlog数据时线程数,只有任务并发度小于DWS集群DN数时,该参数才有效,即此时一个并发度会消费多个DN上的数据,所以可以考虑设置该参数。 Integer 3 connectionPoolSize JDBC连接池连接大小。 Integer 5 needRedistribution 表示是否兼容扩充重分布(需要升级到对应内核版本,如果是低版本则设置为false);如果设置成true的话,flink的restart-strategy不能设置为none。 Boolean true newSystemValue 表示读取binlog数据时是否使用新的系统字段(需要升级到对应内核版本,如果是低版本则设置为false)。 Boolean true checkNodeChangeInterval 检测节点变化的间隔,只有needRedistribution=true才生效。 Long 10000 connectionSocketTimeout 连接处理超时时间(可以看成客户端执行SQL超时时间),单位毫秒;默认值为0,即不设置超时时间。 Integer 0 binlogIgnoreUpdateBefore 是否过滤Binlog记录中的before_update记录,以及delete记录是否只返回主键信息。该参数仅9.1.0.200及以上版本支持。 Boolean false binlogStartTime 设置从某个时间点开始消费Binlog(只能增量消费),格式为yyyy-MM-dd hh:mm:ss且表需要开启enable_binlog_timestamp。 该参数仅9.1.0.200及以上版本支持。 String 无 binlogSyncPointSize 增量读取binlog同步点区间的大小(增量读取binlog时,如果数据量过大可能涉及下盘,可通过调整该参数控制)。 该参数仅9.1.0.200及以上版本支持。 Integer 5000
  • 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 示例: 123456 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_consumed_binlog_records(rel_name text, node_id int) 描述:该函数用于获取目标表在指定DN上的消费状态,只能对开启binlog或binlog时间戳的表使用。该函数仅9.1.0.200及以上集群版本支持。 返回值类型:int 返回值:返回0表示目标表的binlog仍没有被消费完毕(包含所有槽位以及checkpoint同步点),返回1表示目标表的binlog被全部消费完毕。 示例: 12345 SELECT * FROM pgxc_consumed_binlog_records('hstore_binlog_source',0); pgxc_consumed_binlog_records------------------------------ 1(1 row)
  • 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 示例: 123456 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表大小 示例: 12345678 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
  • 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数据的大小)。 示例: 1234567 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 示例: 123456 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:目标表上各个用户字段的数据 示例: 12345678 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 返回值: 登记成功的节点数量 示例: 12345 SELECT pgxc_register_binlog_sync_point('hstore_binlog_source', 'slot1', 0, 9999999999, false, 100); pgxc_register_binlog_sync_point--------------------------------- 2(1 row)
  • 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: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及以上集群版本支持。 需要注意的是,这里的CU是跨列的概念,并非一列一个的CU。 示例: 123456 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)
  • 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');
  • 注意事项 创建HStore表时,必须确保数据库GUC参数设置满足以下条件: autovacuum设置为on。 autovacuum_max_workers_hstore取值大于0。 autovacuum_max_workers取值大于autovacuum_max_workers_hstore的取值。 创建HStore表的用户需要拥有schema cstore的USAGE权限。 表级参数enable_delta与enable_hstore无法同时开启,因为enable_delta用于控制普通列存表的delta开启,会与enable_hstore冲突。 每一个HStore表绑定一张delta表,delta表的oid记录在pg_class中reldeltaidx字段(reldelta字段被列存表的delta表使用)。
  • 示例 创建简单的HStore表: CREATE TABLE warehouse_t1( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2))WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON);CREATE TABLE warehouse_t2 (LIKE warehouse_t1 INCLUDING ALL);
  • 列存表的Delta表差异 表1 HStore表与列存表的辅助Delta表差异 数仓类型 列存的delta表 HStore的delta表 HStore Opt的delta表 表结构 与列存主表的表定义一致。 与主表定义不一致。 不同于主表,与HStore表相同。 功能 用于暂存小批量insert的数据,满阈值后再merge到主表,避免直接insert到主表产生大量小CU。 用于持久化存储update/delete/insert信息。在产生故障后用于恢复内存更新链等管理并发更新的内存结构。 用于持久化存储update/delete/insert信息。在产生故障后用于恢复内存更新链等管理并发更新的内存结构。相比HStore进一步优化。 缺陷 来不及merge导致delta表膨胀,影响查询性能,同时无法解决并发update的锁冲突问题 依赖后台常驻autovacuum来做merge操作。 依赖后台常驻autovacuum来做merge操作。 规格差异 不支持同一CU的并发,适合并发更新较少的情况。 插入和更新限制 MERGE INTO操作不支持并发更新同一行或对同一键进行重复更新。 不支持并发update或delete同一行,会触发报错。 索引和查询限制 索引不支持数组条件过滤、IN 表达式过滤、部分索引或表达式索引。 索引不支持失效处理。 表结构和操作限制 在进行分区交换或 relfilenode 操作时,确保交换的表都是 HStore表。 不支持update修改分布列,不建议update修改分区列(不报错,但性能非常差)。 插入和更新限制 MERGE INTO操作不支持并发更新同一行或对同一键进行重复更新。 不支持并发update或delete同一行,会触发报错。 hstore_opt不支持跨分区upsert更新。 索引和查询限制 支持bitmap索引。 支持全局字典。 bitmap_columns 必须在建表时确定,一旦设置后不允许修改。 opt 版本不支持 SMP streaming 透传参数。在需要分区剪枝的多表关联查询中,避免使用复制表或设置 query_dop。 表结构和操作限制 不支持update修改分布列,不支持update修改分区列。 enable_hstore_opt 属性需在创建表时设定,且不可更改。 入库建议 综合入库、查询和空间情况,建议选择hstore_opt表,微批copy无更新入库场景性能要求高的情况下选择hstore表。 HStore/HStore Opt共同点: update入库性能差,建议修改为upsert。 delete入库,确定计划走索引扫描即可,用JDBC batch方式入库最佳。 merge into入库建议在单次入库数据量超过100W/dn,且无并发数据保证无重复的情况下使用。 尽量避免对冷分区的数据进行修改和新增。 HStore的upsert入库建议: 选择流程: 第1步:部分列upsert选择方式二,全列upsert(遇到冲突update所有列到新值且没有表达式)进入第2步判断。 第2步:数据入库是否会并发更新到同一个key,没有冲突时选择方式一,有冲突时进入第3步判断。 第3步:入库的数据可能遇到重复数据,选择方式二,否则进入第4步判断。 第4步:入库的方式是copy攒批临时表时,选择方式三,否则(包括jdbc的batch入库,简单的单行入库)选择方式二。 配置方式选项解释: 方式一:enable_hstore_nonconflict_upsert_optimization开启+enable_hstore_partial_upsert_optimization关闭。 方式二:enable_hstore_nonconflict_upsert_optimization关闭+enable_hstore_partial_upsert_optimization开启。 方式三:enable_hstore_nonconflict_upsert_optimization关闭+enable_hstore_partial_upsert_optimization关闭。 附加说明:攒批小于2000使用batch模式入库,大于2000使用copy临时表模式入库。 HStore Opt的upsert入库建议: 无并发冲突下开启enable_hstore_nonconflict_upsert_optimization参数,其他场景都关闭即可,会自动选择最优路径。 点查建议 综合点查场景,建议使用HStore Opt表。 HStore/HStore Opt共同点: 在等值过滤条件使用最多且distinct值分布相对均匀的一个列上创建二级分区。 HStore的点查建议: 使用主键之外的索引加速不能得到预期效果,不建议开启。 如果数据类型多为numeric或者16字节以内的字符串,建议使用turbo加速。 HStore Opt的点查建议: 除了二级分区之外的等值过滤列,如果过滤条件涉及的列在查询中基本固定,使用cbtree索引,如果不断变化建议使用GIN索引,注意创建索引的列数不要超过5列。 所有涉及等值过滤的字符串列,都可以建表时指定bitmap索引,不限列数,但后续不可修改。 时间范围过滤的列,指定为分区列。 点查返回数据量超过10W/dn的场景,索引扫描的性能提升有限,建议针对这种情况使用guc参数enable_seqscan对比测试,灵活选择。
  • 参数说明 IF NOT EXISTS 指定IF NOT EXISTS时,若不存在同名表,则可以成功创建表。若已存在同名表,创建时不会报错,仅会提示该表已存在并跳过创建。 table_name 要创建的表名。 表名长度不超过63个字符,以字母或下划线开头,可包含字母、数字、下划线、$、#。 column_name 新表中要创建的字段名。 字段名长度不超过63个字符,以字母或下划线开头,可包含字母、数字、下划线、$、#。 data_type 字段的数据类型。 LIKE source_table [ like_option ... ] LIKE子句声明一个表,新表自动从这个表中继承所有字段名及其数据类型。 新表与原表之间在创建动作完毕之后是完全无关的。在原表做的任何修改都不会传播到新表中,并且也不可能在扫描原表的时候包含新表的数据。 被复制的列并不使用相同的名字进行融合。如果明确的指定了相同的名字或者在另外一个LIKE子句中,将会报错。 HStore表只能从HStore表中进行继承。 WITH ( { storage_parameter = value } [, ... ] ) 这个子句为表指定一个可选的存储参数。 ORIENTATION 指定表数据的存储方式,即时序方式、行存方式、列存方式,该参数设置成功后就不再支持修改。对于HStore表,应当使用列存方式,同时设置enable_hstore为on。 取值范围: TIMESERIES,表示表的数据将以时序方式存储。 COLUMN,表示表的数据将以列存方式存储。 ROW,表示表的数据将以行方式存储。 默认值:ROW。 COMPRESSION 指定表数据的压缩级别,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。 取值范围: HStore表和列存表的有效值为YES/NO和/LOW/MIDDLE/HIGH,默认值为LOW。 行存表的有效值为YES/NO,默认值为NO。 COMPRESSLEVEL 指定表数据同一压缩级别下的不同压缩水平,它决定了同一压缩级别下表数据的压缩比以及压缩时间。对同一压缩级别进行了更加详细的划分,为用户选择压缩比和压缩时间提供了更多的空间。总体来讲,此值越大,表示同一压缩级别下压缩比越大,压缩时间越长;反之亦然。该参数只对时序表和列存表有效。 取值范围:0~3 默认值:0 MAX_BATCHROW 指定了在数据加载过程中一个存储单元可以容纳记录的最大数目。该参数只对时序表和列存表有效。 取值范围:10000~60000 默认值:60000 PARTIAL_CLUSTER_ROWS 指定了在数据加载过程中进行将局部聚簇存储的记录数目。该参数只对时序表和列存表有效。 取值范围:600000~2147483647 enable_delta 指定了在列存表是否开启delta表。对HStore表不能开启该参数。 默认值:off enable_hstore 指定了是否创建为HStore表(基于列存表实现)。该参数只对列存表有效。该参数仅8.2.0.100及以上集群版本支持。 默认值:off 打开该参数时必须设置以下GUC参数用于保证HStore表的清理,推荐值如下: autovacuum=true,autovacuum_max_workers=6,autovacuum_max_workers_hstore=3。 enable_disaster_cstore 指定了列存表是否开启细粒度容灾功能。该参数仅适用于COLVERSION为2.0的列存表,并且不能和enable_hstore同时打开。该参数仅8.2.0.100及以上集群版本支持。 默认值:off 设置该参数为on前需要先设置GUC参数enable_metadata_tracking=on,否则可能开启细粒度容灾功能失败。 SUB_PARTITION_COUNT 指定二级分区的个数。该参数用于设置在导入阶段二级分区个数。在建表时进行设置,建表后不支持修改。不建议用户随意设置该默认值,可能会影响导入和查询的性能。 取值范围:1~1024 默认值:32 DELTAROW_THRESHOLD 指定HStore表导入时小于多少行(SUB_PARTITION_COUNT * DELTAROW_THRESHOLD)的数据进入delta表。 取值范围:0~60000 默认值:60000 COLVERSION 指定存储格式的版本。 HStore表只支持2.0版本,enable_hstore_opt表支持2.0和3.0版本。 取值范围: 1.0:列存表的每列以一个单独的文件进行存储,文件名以relfilenode.C1.0、relfilenode.C2.0、relfilenode.C3.0等命名。 2.0:列存表的每列合并存储在一个文件中,文件名以relfilenode.C1.0命名。 默认值:2.0 enable_binlog 用于控制hstore表是否开启binlog功能。该参数仅8.3.0.100及以上集群版本支持。 取值范围:on/off 默认值:off enable_binlog_timestamp 用于控制hstore表是否开启带时间戳的binlog功能。该参数与enable_binlog无法同时打开,且仅9.1.0.200及以上集群版本支持。 取值范围:on/off 默认值:off DISTRIBUTE BY 指定表如何在节点之间分布或者复制。 取值范围: HASH (column_name ) :对指定的列进行Hash,通过映射,把数据分布到指定DN。 TO { GROUP groupname | NODE ( nodename [, ... ] ) } TO GROUP指定创建表所在的Node Group,目前不支持hdfs表使用。TO NODE主要供内部扩容工具使用,一般用户不应该使用。 PARTITION BY 指定HStore表的初始分区。 secondary_part_column 指定列存表二级分区列的列名,仅能指定一列作为二级分区列且只适用于HStore列存表。该参数仅8.3.0及以上集群版本支持,其中v3表不支持该参数,会走hashbucket剪枝。 被指定为二级分区的列不能被删除或者修改。 只能在建表时指定二级分区列,建表后不支持修改。 不建议指定分布列作为二级分区列。 指定二级分区列后,该表将会在DN上按照二级分区列进行逻辑上的HASH分区存储,从而有效提升该列等值查询的性能。 secondary_part_num 指定列存表二级分区的数量,仅适用于HStore列存表。该参数仅8.3.0及以上集群版本支持,v3表不支持该参数,会走hashbucket剪枝。 取值范围:1~32 默认值:8 只有secondary_part_column被指定时,该参数才可以指定。 只能在建表时指定二级分区的数量,建表后不支持修改。 不建议用户随意设置该默认值,否则会影响导入和查询的性能。
  • 语法格式 1 2 3 4 5 6 7 8 91011121314 CREATE TABLE [ IF NOT EXISTS ] table_name({ column_name data_type | LIKE source_table [like_option [...] ] }} [, ... ])[ WITH ( {storage_parameter = value} [, ... ] ) ][ TABLESPACE tablespace_name ][ DISTRIBUTE BY HASH ( column_name [,...])][ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ][ PARTITION BY { {RANGE (partition_key) ( partition_less_than_item [, ... ] )} } [ { ENABLE | DISABLE } ROW MOVEMENT ] ]; 其中like选项like_option为:{ INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | DISTRIBUTION | ALL }
  • 功能描述 在当前数据库中创建一个新的空白HStore表,该表由命令执行者所有。 实时数仓提供创建HStore表DDL语句。创建HStore表DDL需要指定enable_hstore为true, 同时需要将orientation属性设置为column。 如需使用实时数仓能力,请在DWS控制台创建集群时,选择存算一体1:4云盘规格,了解更多参见存算一体规格。 创建DWS集群选择1:8云盘规格为标准数仓,1:4云盘规格为实时数仓,以下内容描述的“实时数仓”、“标准数仓”即通过以上规格区分。
  • enable_hstoreopt_insert_sort 参数说明:用于控制HStore Opt表是否开启入库排序(包括Vaccum Full)。 该参数仅9.1.0.100及以上版本支持。 参数类型:SIGHUP 取值范围:布尔型 on表示开启入库排序。 off表示在异步排序开启(autovacuum_asyncsort_time_limit大于0)时,关闭入库排序(包括Vacuum Full),异步排序关闭时,入库排序(包括Vacuum Full) 仍然启用。 默认值:on
  • autovacuum_max_workers 参数说明:设置能同时运行的自动清理线程的最大数量,该参数的取值上限与max_connections和job_queue_processes大小有关。 参数类型:SIGHUP 取值范围:整型 最小值为0,表示不会自动进行autovacuum。 理论最大值为262143,实际最大值为动态值。计算公式为“262143 - max_inner_tool_connections - max_connections - job_queue_processes - 辅助线程数 – autovacuum的launcher线程数 - 1”,其中辅助线程数和autovacuum的launcher线程数由两个宏来指定,当前版本的默认值分别为20和2。 默认值:4
  • gtm_option 参数说明:GaussDB(DWS)场景下,指定GTM运行模式。该参数仅8.2.1及以上集群版本支持。 GTM模式:常规模式,由GTM统一管理运行中的事务,以及XID和 CS N的分配工作。 GTM-Lite模式:GTM只负责XID的分配和CSN的更新,不再负责全局事务管理。GTM-Lite模式适用于高并发,短查询的TP场景,可以在保证事务一致性的情况下提升查询性能。 GTM-Free模式:分布式事务只支持写外部一致性,不具有读外部一致性。实时数仓场景下设置该模式不生效。 参数类型:POSTMASTER 取值范围:枚举类型 gtm或0:表示开启GTM模式。 gtm-lite或1:表示开启GTM-Lite模式。 gtm-free或2:表示开始GTM-Free模式。 默认值:gtm GaussDB(DWS)实例和GTM实例都有相同含义的gtm_option参数,对于GTM和GTM-Lite两种模式,一定要在gaussdb和gtm上设置为相同的模式,否则会出现业务报错无法执行的问题。 GTM-Free模式可以通过enable_gtm_free = on或gtm_option = gtm-free的任一方法开启。 设置非GTM-Free模式时,enable_gtm_free 必须设置为off。 GTM-Free模式仅在混合云与ESL场景设置后生效。
  • autovacuum_compaction_rows_limit 参数说明:小CU的阈值,存活元组数小于这个值的就会被认为是小CU。该参数仅8.2.1.300及以上集群版本支持。 参数类型:USERSET 取值范围:整型,-1~5000 默认值:2500 版本低于9.1.0.100,禁止设置该参数,否则可能会导致主键数据重复。 版本低于9.1.0.100,默认值为-1,表示关闭0CU开关。 9.1.0.100版本,该参数默认值为0。 9.1.0.200及以上版本,该参数默认值为2500。 该参数不建议自行修改,如需修改请联系技术支持。
  • autovacuum_max_workers_hstore 参数说明:设置Autovacuum_max_workers里面,能同时运行的专用于清理hstore的自动清理线程的最大数量。 参数类型:SIGHUP 取值范围:整型 默认值:1 当需要使用hstore表时,一定要同步修改以下几个参数的默认值,否则会导致hstore表性能严重劣化,推荐的修改配置是: autovacuum_max_workers_hstore=3,autovacuum_max_workers=6,autovacuum=true。
  • enable_hstore_keyby_upsert 参数说明:用于控制是否开启hstore表对于批量upsert的特定优化,针对前端可以保证不会并发upsert到同一行且是全列upsert的场景,建议开启,性能会有较大提升,该参数仅8.3.0及以上集群版本支持。 参数类型:USERSET 取值范围:布尔型 on表示开启对hstore表上的upsert特定优化。 off表示关闭对hstore表上的upsert特定优化,走老的流程。 默认值:off
  • 注意事项 列存表与HStore表都暂不支持SELECT FOR UPDATE语法。 对HStore表执行SELECT查询时,会扫描列存主表CU上的数据、delta表上的I记录中的数据、内存中每行数据更新信息,并将三种信息合并后返回。 在通过主键索引或唯一索引查询数据的场景中: 对于传统列存表,唯一索引会同时存储行存Delta表上的数据位置信息(blocknum,offset)与列存主表的数据位置信息(cuid,offset),数据MERGE到主表后又会插入新的索引元组,索引会持续膨胀。 对于HStore表,由于实现了全局CUID的统一分配,索引元组中始终只存储(cuid,offset), 数据MERGE后不会产生新的索引元组。
  • 语法格式 1 2 3 4 5 6 7 8 910 [ WITH [ RECURSIVE ] with_query [, ...] ]SELECT [/*+ plan_hint */] [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]{ * | {expression [ [ AS ] output_name ]} [, ...] }[ FROM from_item [, ...] ][ WHERE condition ][ GROUP BY grouping_element [, ...] ][ HAVING condition [, ...] ][ { UNION | INTERSECT | EXCEPT | MINUS } [ ALL | DISTINCT ] select ][ ORDER BY {expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ]} [, ...] ][ { [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] } | { LIMIT start, { count | ALL } } ]
共99354条