华为云用户手册

  • 获取源数据的OBS路径并设置读取权限 登录OBS管理控制台。 单击“服务列表”,选择“ 对象存储服务 ”,打开OBS管理控制台页面。 获取数据源文件的OBS路径。 数据源文件在上传到OBS桶之后,会生成全局唯一的访问路径。在创建外表时需要指定数据源文件的OBS路径。 如何查看OBS路径,请参见《对象存储服务控制台指南》的通过对象URL访问对象章节。 例如,在本例中,查看到数据文件的OBS路径分别为: https://obs.cn-north-1.myhuaweicloud.com/mybucket/demo.db/product_info_orc/product_info.0 https://obs.cn-north-1.myhuaweicloud.com/mybucket/demo.db/product_info_orc/product_info.1 为用户设置OBS桶的读取权限。 在使用SQL on OBS功能时,执行该功能的用户需要取得数据源文件所在OBS桶的读取权限。通过配置桶的ACL权限,可以将读取权限授予指定的用户帐号。 具体请参见《对象存储服务控制台指南》中的配置桶ACL章节。
  • 操作场景 使用SQL on OBS功能查询OBS数据之前: 已将ORC数据存储在OBS上。 例如,在使用Hive或Spark等组件时创建了ORC表,其表数据已经存储在OBS上的场景。 假设有2个ORC数据文件“product_info.0”和“product_info.1”,其原始数据如原始数据所示,都已经存储在OBS桶“mybucket”的“demo.db/product_info_orc/”目录中。 如果数据文件已经在OBS上了,请执行获取源数据的OBS路径并设置读取权限中的步骤。 本小节以导入ORC格式为例,PARQUET、CARBONDATA、JSON数据的导入方法与ORC格式相似。 该方式同样也支持导入TEXT、 CS V格式文件,但由于该方式不支持错误表,因此推荐使用从OBS导入CSV、TEXT数据(方式一)的导入方式。
  • DBA_TAB_COLUMNS DBA_TAB_COLUMNS视图存储关于表和视图的字段的信息。数据库里每个表的每个字段都在DBA_TAB_COLUMNS里有一行。需要有系统管理员权限才可以访问。 名称 类型 描述 owner character varying(64) 表或视图的所有者。 table_name character varying(64) 表名或视图名。 column_name character varying(64) 列名。 data_type character varying(128) 列的数据类型。 column_id integer 创建表或视图时列的序号。 data_length integer 列的字节长度。 comments text 注释。 avg_col_len numeric 列的平均长度(单位字节)。 nullable bpchar 该列是否允许为空,对于主键约束和非空约束,该值为n。 data_precision integer 数据类型的精度,对于numeric数据类型有效,其他类型为NULL。 data_scale integer 小数点右边的位数,对于numeric数据类型有效,其他类型为0。 char_length numeric 列的长度(以字符计),只对varchar,nvarchar2, bpchar,char类型有效。 schema character varying(64) 包含该表或视图的命名空间。 kind text 当前记录所属的种类,如果此列属于表,则此字段显示为table;如果此列属于视图,则此字段显示为view。 父主题: 系统视图
  • 创建外表 当完成创建外部服务器后,在 GaussDB (DWS)数据库中创建一个OBS/HDFS只写外表,用来访问存储在OBS/HDFS上的数据。此外表是只写的,只能用于导出操作。 创建外表的语法格式如下,详细的描述请参见CREATE FOREIGN TABLE (SQL on OBS or Hadoop)章节。 1 2 3 4 5 6 7 8 9 10 11 CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ { column_name type_name [ { [CONSTRAINT constraint_name] NULL | [CONSTRAINT constraint_name] NOT NULL | column_constraint [...]} ] | table_constraint [, ...]} [, ...] ] ) SERVER dfs_server OPTIONS ( { option_name ' value ' } [, ...] ) [ {WRITE ONLY }] DISTRIBUTE BY {ROUNDROBIN | REPLICATION} [ PARTITION BY ( column_name ) [ AUTOMAPPED ] ] ; 例如,创建一个名为"product_info_ext_obs"的外表,对语法中的参数按如下描述进行设置: table_name 外表的表名。 表字段定义 column_name:外表中的字段名。 type_name:字段的数据类型。 多个字段用“,”隔开。 SERVER dfs_server 外表的外部服务器名称,这个server必须存在。外表通过设置外部服务器连接OBS/HDFS读取数据。 此处应填写为参照创建外部服务器创建的外部服务器名称。 OPTIONS参数 用于指定外表数据的各类参数,关键参数如下所示。 “format”:表示导出的数据文件格式,支持“orc”格式。 “foldername”:必选参数。外表中数据源文件目录。OBS:数据源文件的OBS路径,此处仅需要填写“/桶名/文件夹目录层级/”。HDFS:HDFS文件系统上的路径。此选项对WRITE ONLY外表为必选项。 “encoding”:外表中数据源文件的编码格式名称,缺省为utf8。 “filesize” 指定WRITE ONLY外表的文件大小,单位为MB。此选项为可选项,不指定该选项默认分布式文件系统配置中文件大小的配置值。此语法仅对WRITE ONLY的外表有效。 取值范围:[1, 1024]的整数。 filesize参数只对ORC格式的WRITE ONLY的HDFS外表有效。 “compression” 指定ORC格式文件的压缩方式,此选项为可选项。 取值范围:zlib,snappy,lz4。缺省值为snappy。 “version” 指定ORC格式的版本号,此选项为可选项。此语法仅对WRITE ONLY的外表有效。 取值范围:目前仅支持0.12。缺省值为0.12。 “dataencoding” 在数据库编码与数据表的数据编码不一致时,该参数用于指定导出数据表的数据编码。比如数据库编码为Latin-1,而导出的数据表中的数据为UTF-8编码。此选项为可选项,如果不指定该选项,默认采用数据库编码。此语法仅对HDFS的WRITE ONLY外表有效。 取值范围:该数据库编码支持转换的数据编码。 dataencoding参数只对ORC格式的WRITE ONLY的HDFS外表有效。 语法中的其他参数 其他参数均为可选参数,用户可以根据自己的需求进行设置,在本例中不需要设置。 根据以上信息,创建外表命令如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 DROP FOREIGN TABLE IF EXISTS product_info_ext_obs; ---建立不包含分区列的OBS外表,表关联的外部服务器为obs_server,表对应的OBS服务上的文件格式为‘orc’,OBS上的数据存储路径为'/mybucket/data/'。 CREATE FOREIGN TABLE product_info_ext_obs ( product_price integer , product_id char(30) , product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) SERVER obs_server OPTIONS ( format 'orc', foldername '/mybucket/demo.db/product_info_orc/', compression 'snappy', version '0.12' ) Write Only; 父主题: 导出ORC数据到OBS(方式二)
  • 多表并发导出操作步骤 通过创建的两个外表,将数据库中的两个表分别导出至OBS的桶中。 用户通过管理控制台登录到OBS数据服务器。在OBS数据服务器上,分别创建数据文件存放的两个桶“/input-data1”“/input-data2”,并创建每个桶下面的data目录“/input-data1/data”“/input-data2/data”。 在GaussDB(DWS)数据库上,创建外表tpcds.customer_address_ext1和tpcds.customer_address_ext2分别用于OBS服务器接收导出的数据。 规划OBS与集群处于同一区域,需要导出的表为已存在的表tpcds.customer_address和tpcds.customer_demographics。 其中设置的导出信息如下所示: 由于OBS服务器上的数据源文件存放目录为“/input-data1/data/ ”和/input-data2/data/ ,所以设置tpcds.customer_address_ext1参数“location”为“obs://input-data1/data/ ”,设置tpcds.customer_address_ext2参数“location”为“ obs://input-data2/data/”。 设置的数据格式信息是根据表从GaussDB(DWS)中导出时需要的详细数据格式参数信息指定的,参数设置如下所示: 数据源文件格式(format)为CSV。 编码格式(encoding)为UTF-8。 字段分隔符(delimiter)为E'\x08'。 是否使用加密(encrypt),默认为“off”。 用户获取OBS访问协议对应的AK值(access_key )。(必选) 用户获取OBS访问协议对应的SK值(secret_access_key)。(必选) 用户在创建用户是已经获取了access_key和secret_access_key的密钥,请根据实际密钥替换示例中的内容。 根据以上信息,创建的外表如下所示: 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 CREATE FOREIGN TABLE tpcds.customer_address_ext1 ( ca_address_sk integer , ca_address_id char(16) , ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(5,2) , ca_location_type char(20) ) SERVER gsmpp_server OPTIONS(LOCATION 'obs://input-data1/data/', FORMAT 'CSV', ENCODING 'utf8', DELIMITER E'\x08', ENCRYPT 'off', AC CES S_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )Write Only; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 CREATE FOREIGN TABLE tpcds.customer_address_ext2 ( ca_address_sk integer , ca_address_id char(16) , ca_address_name varchar(20) , ca_address_code integer , ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(5,2) ) SERVER gsmpp_server OPTIONS(LOCATION 'obs://input_data2/data/', FORMAT 'CSV', ENCODING 'utf8', DELIMITER E'\x08', QUOTE E'\x1b', ENCRYPT 'off', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )Write Only; 在GaussDB(DWS)数据库上,将数据表 tpcds.customer_address和 tpcds.warehouse并发导出到外表tpcds.customer_address_ext1和tpcds.customer_address_ext2中。 1 INSERT INTO tpcds.customer_address_ext1 SELECT * FROM tpcds.customer_address; 1 INSERT INTO tpcds.customer_address_ext2 SELECT * FROM tpcds.warehouse;
  • 单表导出操作步骤 通过创建外表,将数据库中的单表导出至OBS的两个桶中。 用户通过管理控制台登录到OBS数据服务器。在OBS数据服务器上,分别创建数据文件存放的两个桶“/input-data1”“/input-data2”,并创建每个桶下面的data目录“/input-data1/data”“/input-data2/data”。 在GaussDB(DWS)数据库上,创建外表tpcds.customer_address_ext1和tpcds.customer_address_ext2用于OBS数据服务器接收数据库导出数据。 OBS与集群处于同一区域,需要导出的表为GaussDB(DWS)示例表tpcds.customer_address。 其中设置的导出信息如下所示: 由于OBS数据服务器上的数据源文件存放目录为“/input-data1/data/ ”和/input-data2/data/ ,所以设置tpcds.customer_address_ext1参数“location”为“obs://input-data1/data/ ”,设置tpcds.customer_address_ext2参数“location”为“ obs://input-data2/data/”。 设置的数据格式信息是根据表从数据库导出时需要的详细数据格式参数信息指定的,参数设置如下所示: 数据源文件格式(format)为CSV。 编码格式(encoding)为UTF-8。 字段分隔符(delimiter)为E'\x08'。 是否使用加密(encrypt),默认为“off”。 用户获取OBS访问协议对应的AK值(access_key )。(必选) 用户获取OBS访问协议对应的SK值(secret_access_key)。(必选) 用户在创建用户时已经获取了access_key和secret_access_key的密钥,请根据实际密钥替换示例中的内容。 根据以上信息,创建的外表如下所示: 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 CREATE FOREIGN TABLE tpcds.customer_address_ext1 ( ca_address_sk integer , ca_address_id char(16) , ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(5,2) , ca_location_type char(20) ) SERVER gsmpp_server OPTIONS(LOCATION 'obs://input-data1/data/', FORMAT 'CSV', ENCODING 'utf8', DELIMITER E'\x08', ENCRYPT 'off', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )Write Only; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 CREATE FOREIGN TABLE tpcds.customer_address_ext2 ( ca_address_sk integer , ca_address_id char(16) , ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(5,2) , ca_location_type char(20) ) SERVER gsmpp_server OPTIONS(LOCATION 'obs://input-data2/data/', FORMAT 'CSV', ENCODING 'utf8', DELIMITER E'\x08', ENCRYPT 'off', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced' )Write Only; 在GaussDB(DWS)数据库上,将数据表tpcds.customer_address并发导出到外表tpcds.customer_address_ext1和tpcds.customer_address_ext2中。 1 INSERT INTO tpcds.customer_address_ext1 SELECT * FROM tpcds.customer_address; 1 INSERT INTO tpcds.customer_address_ext2 SELECT * FROM tpcds.customer_address; OBS外表在设计上禁止往非空的路径下导出文件,但是在并发场景下会出现同一路径导出文件的情况,此时会发生异常。 异常场景:假如用户使用同一张表的数据并发导出到同一个OBS的外表,在一条SQL语句执行在OBS服务器上没有生成文件时,另一条SQL语句也执行导出,最终执行结果为两条SQL语句均执行成功,产生数据覆盖现象,建议用户在执行OBS外表导出任务时,不要往同一OBS外表并发导出。
  • 应用示例 查看所有发布: 1 2 3 4 5 SELECT * FROM pg_publication; pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate ---------+----------+--------------+-----------+-----------+-----------+------------- mypub | 10 | t | t | t | t | t (1 row)
  • 操作步骤 在GaussDB(DWS)数据库中,创建目标表,用于存储从OBS导入的数据。建表语法请参考CREATE TABLE。 目标表的表结构和OBS上将要导入的数据源文件的字段要保持一一对应,即字段个数、字段类型要一致。并且,目标表和创建的外表的表结构也要保持一致,字段名称可以不一样。 (可选)若导入表存在索引,在数据导入过程中,将增量更新索引信息,影响数据导入性能。建议在执行数据导入前,先删除相关表的索引。在数据导入完成后,再重新创建索引。 执行数据导入。 1 INSERT INTO [目标表名] SELECT * FROM [foreign table 表名]; 若出现以下类似信息,说明数据导入成功。请查询错误信息表,查看是否存在数据格式错误,详细操作请参见处理错误表。 INSERT 0 20 若出现数据加载错误,请参见处理错误表,并重新执行数据导入。
  • 背景信息 在执行数据导入前,您可以参考以下优秀实践方法进行合理的设计部署,最大化的使用系统资源,以提高数据导入性能。 OBS的数据导入性能,多数场景受限于网络的并发访问速率,因此在OBS服务器上最好部署多个桶,使用多桶并发导入,提高DN数据传输利用率。 并发导入场景,与单表导入相似,至少应保证I/O性能大于网络最大速率。 配置GUC参数“raise_errors_if_no_files”、“partition_mem_batch”和“partition_max_cache_size”,设置导入时是否区分“导入文件记录数为空”和“导入文件不存在”、导入时的缓存个数以及数据缓存区大小。 若导入表存在索引,在数据导入过程中,将增量更新索引信息,影响数据导入性能。建议在执行数据导入前,先删除相关表的索引。在数据导入完成后,再重新创建索引。
  • 示例 创建一个名为product_info的表,示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 DROP TABLE IF EXISTS product_info; CREATE TABLE product_info ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) with ( orientation = column, compression=middle ) DISTRIBUTE BY HASH (product_id); 执行以下命令将外表product_info_ext的数据导入到目标表product_info中: 1 INSERT INTO product_info SELECT * FROM product_info_ext;
  • 空间索引 GaussDB(DWS)数据库的PostGIS Extension支持GIST (Generalized Search Tree) 空间索引(分区表除外)。相比于B-tree索引,GIST索引适应于任意类型的非常规数据结构,可有效提高几何和地理数据信息的检索效率。 使用如下命令创建GIST索引: 1 CREATE INDEX indexname ON tablename USING GIST ( geometryfield );
  • PG_STATIO_ALL_SEQUENCES PG_STATIO_ALL_SEQUENCES视图显示当前数据库中相关的序列信息以及指定序列的I/O的统计信息。 表1 PG_STATIO_ALL_SEQUENCES字段 名称 类型 描述 relid oid 序列OID。 schemaname name 序列中模式名。 relname name 序列名。 blks_read bigint 从序列中读取的磁盘块数。 blks_hit bigint 序列缓冲区命中数量。 父主题: 系统视图
  • 示例2 客户端内存占用过多解决 此示例主要使用setFetchSize来调整客户端内存使用,它的原理是通过数据库游标来分批获取服务器端数据,但它会加大网络交互,可能会损失部分性能。 由于游标事务内有效,故需要先关闭自动提交。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // 关闭掉自动提交 conn.setAutoCommit(false); Statement st = conn.createStatement(); // 打开游标,每次获取50行数据 st.setFetchSize(50); ResultSet rs = st.executeQuery("SELECT * FROM mytable"); while (rs.next()) { System.out.print("a row was returned."); } rs.close(); // 关闭服务器游标。 st.setFetchSize(0); rs = st.executeQuery("SELECT * FROM mytable"); while (rs.next()) { System.out.print("many rows were returned."); } rs.close(); // Close the statement. st.close();
  • 操作步骤 假设远端集群的待同步表名称是tbl_remote,用于数据同步的用户是user_remote,该用户须对表tbl_remote有访问权限;假设本地集群的待同步表名称是tbl_local。 创建server。 CREATE SERVER server_remote FOREIGN DATA WRAPPER GC_FDW OPTIONS( address '192.168.178.207:8109', dbname 'db_remote', username 'user_remote', password 'xxxxxxxx', syncsrv 'gsfs://192.168.178.129:8789|gsfs://192.168.178.129:8790' ); server_remote为server名称,供互联互通外表使用。 address为远端集群CN的IP地址和端口,仅允许填写一个地址。 dbname为远端集群的数据库名。 username为连接远端集群使用的用户名,注意该用户不能为系统管理员。 password为连接远端集群使用的用户名的密码。 syncsrv为GDS Server的IP地址和端口,如果有多个地址使用|分割,与GDS外表的location类似。 GaussDB(DWS)会对syncsrv所设置的GDS地址进行网络连接测试: 只能判断本地执行集群与GDS的网络情况,无法判断远端集群与GDS的网络情况,需要注意报错提示。 在移除不可用GDS后,从中选择不会导致业务hang的、数目适当的GDS进行数据同步。 创建互联互通外表。 CREATE FOREIGN TABLE ft_tbl( col_1 type_name, col_2 type_name, … ) SERVER server_remote OPTIONS ( schema_name 'schema_remote', table_name 'tbl_remote', encoding 'utf8' ); schema_name为远端集群表所属schema,如果该option缺省,则schema_name预设为该外表所在的schema。 table_name为远端集群表名,如果该option缺省,则table_name预设为该外表的表名。 encoding为远端集群的编码,如果该option缺省,则编码使用本地集群数据库的默认编码。 选项schema_name、table_name大小写敏感,必须与远端schema、table的名字大小写保持一致。 互联互通外表的列不允许带任何约束。 互联互通外表的列名、列类型必须与远端集群的表tbl_remote的列名和列类型完全一致。 SERVER须设置为步骤1中新建的server,必须包含syncsrv属性。 使用互联互通外表进行数据同步。 本地集群是目标集群时,发起数据同步业务: 全列全量数据同步: 1 INSERT INTO tbl_local SELECT * FROM ft_tbl; 全列过滤条件数据同步: 1 INSERT INTO tbl_local SELECT * FROM ft_tbl WHERE col_2 = XX; 部分列全量数据同步: 1 INSERT INTO tbl_local (col_1) SELECT col_1 FROM ft_tbl; 部分列过滤条件数据同步: 1 INSERT INTO tbl_local (col_1) SELECT col_1 FROM ft_tbl WHERE col_2 = XX; 本地集群是源集群时,发起数据同步业务: 单表数据同步: 1 INSERT INTO ft_tbl SELECT * FROM tbl_local; join结果集数据同步: 1 INSERT INTO ft_tbl SELECT * FROM tbl_local1 join tbl_local2 ON XXX; 如遇到报错连接失败,请检查server的信息确认两个集群是否已经相互连通。 如遇到报错GDS连接失败,请检查syncsrv指定的GDS Server是否都已经启动,且与两个集群所有节点可以网络连通。 如遇到报错表不存在,请检查外表的option信息是否正确。 如遇到报错列不存在,请检查外表的列名是否与源表一致。 如遇到报错列重复定义,请检查是否相应列名超长,若超长建议使用AS别名精简。 如遇到报错无法解析列类型,请检查语句中是否有列上表达式。 如遇到报错列信息不匹配,请检查外表的列信息是否与远端集群对应表的列信息是否一致。 如遇到报错语法不支持,请检查是否使用了Join、distinct、排序等复杂用法。 如遇到乱码,请检查两端数据库的实际编码是否一致。 当本地集群是源集群时,存在极小的概率出现数据成功同步到远端集群,但是本地集群返回执行失败的情况,针对这种情况建议校验同步数据记录数。 当本地集群是源集群时,通过事务块、子事务等控制的数据同步,需要总事务提交后才能查询到数据同步结果。 删除互联互通外表。 DROP FOREIGN TABLE ft_tbl;
  • 使用前准备 配置两个集群互连。 规划部署GDS服务器,确保所有的GDS服务器可以和上面配置的两个集群所有节点网络连通,即GDS服务器的安全组入方向要放通对应的GDS端口(例如5000)和DWS端口(默认8000)。部署GDS请参考安装配置和启动GDS。 启动GDS时,可指定任意目录作为数据中转的目录,例如/opt,启动命令示例如下: /opt/gds/bin/gds -d /opt -p 192.168.0.2:5000 -H 192.168.0.1/24 -l /opt/gds/bin/gds_log.txt -D -t 2
  • 使用场景 将数据从一个集群同步到另外一个集群,支持全量数据同步、过滤条件数据同步。 目前互联互通仅支持以下使用方式,除以下语句外,其他类型的语法均不支持。 INSERT INTO 内表 SELECT ... FROM 互联互通外表1 [WHERE]; INSERT INTO 互联互通表 SELECT * FROM 内表1 [JOIN 内表2 | WHERE]; SELECT ... FROM 互联互通表;
  • 注意事项 创建的互联互通外表与其对应的远端表的列名和类型名要完全一致,且远端表的类型为行存表或列存表。 执行同步语句时,要确保本地集群、远端集群的待同步表已存在。 使用期间,两个集群的状态应为Normal。 两个集群都需要具备基于GDS的跨集群互联互通功能。 建议两端集群的数据库编码保持一致,否则可能出现报错或者收到的数据为乱码。 两端集群所指定的数据库兼容类型要保持一致,否则可能报错或乱码。 确保执行数据同步的相关用户对待同步表有相应的访问权限。 互联互通外表只能用于跨集群数据同步场景,其他场景可能出错或无效。 互联互通外表不支持复杂的列上表达式,不支持复杂语法,包括join、排序、游标、with、集合等。 不下推的SQL语句无法使用本特性进行数据同步,否则会报错。 不支持EXPLAIN计划、逻辑集群。 当本地集群同步数据到远端集群时,只支持内表查询。 Foreign Server的syncsrv选项指定的GDS不支持SSL模式。 数据同步结束时只校验数据行数,不校验数据内容。 业务最大并发数不能大于GDS启动参数-t的一半,同时也不能大于max_active_statements,否则可能会导致业务超时失败。
  • 错误处理 如下错误信息,表示GaussDB(DWS)期望读取ORC数据文件,但实际却是*.txt类型的数据文件。请先创建Hive ORC类型的表,并将数据存储到该Hive ORC表中。 ERROR: dn_6009_6010: Error occurs while creating an orc reader for file /user/hive/warehouse/products_info.txt, detail can be found in dn log of dn_6009_6010. 父主题: 从 MRS 导入数据到集群
  • PGXC_SQL_COUNT 通过PGXC_SQL_COUNT视图,可以实时显示集群中各CN节点上SELECT、INSERT、UPDATE、DELETE、MERGE INTO五种SQL、以及DDL、DML、DCL语句的节点级和用户级统计结果,识别当前业务负载较重的query类型,衡量整个集群和单个节点执行某种类型查询的能力。通过对以上几类SQL查询进行计数和响应时间统计,获得指定时刻的统计结果,经计算可以得到指定QPS等统计信息。例如,T1时刻,USER1的SELECT计数结果为X1,T2时刻为X2,则可计算得到该用户SELECT查询的QPS值为(X2-X1)/(T2-T1)。由此,可获得集群用户级QPS曲线图和集群吞吐情况,监测每个用户的业务负载是否发生剧烈变化。如果有剧烈变化,可以定位具体的语句类型(SELECT/INSERT/UPDATE/DELETE/MERGE INTO)。同时观测QPS曲线可以获知问题发生时间点,结合其它工具,定位问题点。能够为集群性能调优、问题定位等提供依据。 PGXC_SQL_COUNT视图的字段与GS_SQL_COUNT一致,详见表1。 当执行MERGE INTO语句时,若能下推,在DN上收到的是MERGE INTO语句,将在DN节点上进行MERGE INTO类型计数,相应mergeinto_count列计数增加;若不能下推,在DN上收到的是UPDATE或INSERT语句,将在DN节点上进行UPDATE或INSERT类型计数,相应的update_count列或insert_count列计数增加。 父主题: 系统视图
  • 原型 1 2 3 4 5 6 SQLRETURN SQLGetData(SQLHSTMT StatementHandle, SQLUSMALLINT Col_or_Param_Num, SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLLEN BufferLength, SQLLEN *StrLen_or_IndPtr);
  • 参数 表1 SQLGetData参数 关键字 参数说明 StatementHandle 语句句柄,通过SQLAllocHandle获得。 Col_or_Param_Num 要返回数据的列号。结果集的列按增序从1开始编号。书签列的列号为0。 TargetType TargetValuePtr缓冲中的C数据类型的类型标识符。若TargetType为SQL_ARD_TYPE,驱动使用ARD中SQL_DESC_CONCISE_TYPE字段的类型标识符。若为SQL_C_DEFAULT,驱动根据源的SQL数据类型选择缺省的数据类型。 TargetValuePtr 输出参数:指向返回数据所在缓冲区的指针。 BufferLength TargetValuePtr所指向缓冲区的长度。 StrLen_or_IndPtr 输出参数:指向缓冲区的指针,在此缓冲区中返回长度或标识符的值。
  • autovacuum_mode 参数说明:该参数仅在autovacuum设置为on的场景下生效,它控制autoanalyze或autovacuum的打开情况。 参数类型:SIGHUP 取值范围:枚举类型 analyze表示只执行autoanalyze。 vacuum表示只执行autovacuum。 mix表示autoanalyze和autovacuum都执行。 none表示二者都不执行。 默认值:mix
  • autovacuum_analyze_threshold 参数说明:设置触发ANALYZE操作的阈值。当表上被删除、插入或更新的记录数超过设定的阈值时才会对这个表执行ANALYZE操作。 参数类型:SIGHUP 取值范围:整型,0~INT_MAX 默认值: 若当前集群为低版本升级到8.1.3及以上集群版本,为保持和前向兼容,默认值为10000。 若当前集群为新装的8.1.3及以上集群版本,默认值为50。
  • autovacuum 参数说明:控制是否启动数据库自动清理进程(autovacuum)。自动清理进程运行的前提是将track_counts设置为on。 参数类型:SIGHUP 取值范围:布尔型 on表示开启数据库自动清理进程。 off表示关闭数据库自动清理进程。 默认值:on 如系统在故障恢复后,需具备自动清理两阶段事务的功能,请将autovacuum设置为on。 当设置autovacuum为on,autovacuum_max_workers为0时,表示系统不会自动进行autovacuum,只会在故障恢复后,自动清理两阶段事务。 当设置autovacuum为on,autovacuum_max_workers大于0时,表示系统不仅在故障恢复后,自动清理两阶段事务,并且还可以自动清理进程。 即使此参数设置为off,数据库也会在需要防止事务ID回卷时发起清理进程。对于CREATE/DROP DATABASE发生异常时,可能有的节点提交或回滚,有的节点未提交(prepared状态),此时系统不能自动修复,需要手动修复,修复步骤: 使用gs_clean工具(-N参数)查询出异常两阶段事务的xid以及处于prepared的节点。 登录事务处于prepared状态的节点,系统管理员连接一个可用的数据库(如gaussdb),执行语句SET xc_maintenance_mode = on。 根据事务全局状态提交或者回滚此两阶段事务(如提交语句、回滚语句)。
  • log_autovacuum_min_duration 参数说明:当自动清理的执行时间大于或者等于某个特定的值时,向服务器日志中记录自动清理执行的每一步操作。设置此选项有助于追踪自动清理的行为。 参数类型:SIGHUP 取值范围:整型,-1~INT_MAX,单位为毫秒(ms)。 当参数设置为0时,表示所有的自动清理操作都记录到日志中。 当参数设置为-1时,表示所有的自动清理操作都不记录到日志中。 当参数设置为非-1时,当由于锁冲突的存在导致一个自动清理操作被跳过,记录一条消息。 例如:将log_autovacuum_min_duration设置为250ms,记录所有运行大于或者等于250ms的自动清理命令的相关信息。 默认值:-1
  • autovacuum_freeze_max_age 参数说明:设置事务内的最大时间,使得表的pg_class.relfrozenxid字段在VACUUM操作执行之前被写入。 VACUUM也可以删除pg_clog/子目录中的旧文件;即使自动清理进程被禁止,系统也会调用自动清理进程来防止循环重复。 参数类型:SIGHUP 取值范围:整型,100 000~576 460 752 303 423 487 默认值:4000000000
  • analyze_stats_mode 参数说明:设置analyze计算统计信息的模式。 参数类型:USERSET 取值范围:枚举类型 memory表示强制使用内存计算统计信息,不计算多列统计信息。 sample_table表示强制使用临时采样表计算统计信息,临时表不支持使用该模式。 dynamic表示按内存maintenance_work_mem大小自适应选择统计信息计算模式,若maintenance_work_mem可放下样本,则使用内存方式,否则使用临时采样表方式。 默认值: 若当前集群为低版本升级到8.2.0.100及以上集群版本,为保持和前向兼容,默认值为memory。 若当前集群为新装的8.2.0.100及以上集群版本,默认值为dynamic。
  • autoanalyze_mode 参数说明:设置autoanalyze的模式。该参数仅8.2.0及以上集群版本支持。 参数类型:USERSET 取值范围:枚举类型 normal表示普通的autoanalyze。 light表示轻量化的autoanalyze。 默认值: 若当前集群为低版本升级到8.2.0及以上集群版本,为保持和前向兼容,默认值为normal。 若当前集群为新装的8.2.0及以上集群版本,默认值为light。
  • autovacuum_analyze_scale_factor 参数说明:设置触发一个ANALYZE时增加到autovacuum_analyze_threshold的表大小的缩放系数。 参数类型:SIGHUP 取值范围:浮点型,0.0~100.0 默认值: 若当前集群为低版本升级到8.1.3及以上集群版本,为保持和前向兼容,默认值为0.25。 若当前集群为新装的8.1.3及以上集群版本,默认值为0.1。
  • colvacuum_threshold_scale_factor 参数说明:控制列存vacuum重写中,重写文件最低dead tuple的比例值。当autovacuum发现列存表dead tuple总数大于RelDefaultFullCuSize(6000)时,且该总数占all_tuple的比例大于该值的1/2,才会发起对该列存表的vacuum操作。当文件中的dead tuple占(all_tuple - null_tuple)的比例大于此值,该文件才会被重写。 参数类型:SIGHUP 取值范围:整型,-2~100。 -2表示不会执行vacuum重写,也不会执行vacuum清理。 -1表示不会执行vacuum重写,只会执行vacuum清理。 0-100为dead tuple的比例值。 默认值:70
共100000条