华为云用户手册

  • 使用前准备 配置两个集群互连。 规划部署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
  • 注意事项 创建的互联互通外表与其对应的远端表的列名和类型名要完全一致,且远端表的类型为行存表或列存表。 执行同步语句时,要确保本地集群、远端集群的待同步表已存在。 使用期间,两个集群的状态应为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 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 输出参数:指向缓冲区的指针,在此缓冲区中返回长度或标识符的值。
  • 原型 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);
  • 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
  • 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
  • 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。
  • 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。
  • 任务示例 创建一个名为reasons的目标表。 1 2 3 4 5 6 7 CREATE TABLE reasons ( r_reason_sk integer not null, r_reason_id char(16) not null, r_reason_desc char(100) ) DISTRIBUTE BY HASH (r_reason_sk); 在执行数据导入前,先删除相关表的索引。 假定在导入表“reasons”上的“r_reason_id”字段上存在普通索引“reasons_idx”。在执行数据导入前,请先删除相关索引。 1 DROP INDEX reasons_idx; 将数据源文件中的数据通过外表“foreign_tpcds_reasons”导入到表“reasons”中。 1 INSERT INTO reasons SELECT * FROM foreign_tpcds_reasons ; 在数据导入完成后,再重新创建索引。 1 CREATE INDEX reasons_idx ON reasons(r_reasons_id);
  • 操作步骤 在GaussDB(DWS)中创建目标表,用于存储导入的数据。建表语句请参见CREATE TABLE。 (可选)若导入表存在索引,在数据导入过程中,将增量更新索引信息,影响数据导入性能。建议在执行数据导入前,先删除相关表的索引,但是如果不能保证数据唯一性不建议删除唯一索引。在数据导入完成后,再重新创建索引。 假定在导入表“product_info”上的“product_id”字段上存在普通索引“product_idx”。在执行数据导入前,请先删除相关索引。 1 DROP INDEX product_idx; 在数据导入完成后,重建索引。 1 CREATE INDEX product_idx ON product_info(product_id); 执行数据导入。 1 INSERT INTO [目标表名] SELECT * FROM [foreign table 表名]; 若出现以下类似信息,说明数据导入成功。请查询错误信息表,查看是否存在数据格式错误,详细操作请参见处理错误表。 INSERT 0 9 若出现数据加载错误,请参见处理错误表,并重新执行数据导入。 若执行过程中出现数据加载错误,则数据全部导入失败,没有数据导入至目标表中。 编写批处理任务脚本,实现并发批量导入数据。并发量视机器资源使用情况而定。可通过几个表测试,监控资源利用率,根据结果提高或减少并发量。常用资源监控命令有:内存和CPU监控top命令,IO监控命令iostat,网络监控命令sar等。相关案例请参见多线程导入。 在资源许可的情况下,多台GDS服务器并发导入会很大程度上提高数据导入效率。相关案例请参见多数据服务器并行导入。 对于高并发的GDS导入场景,为了保持GDS和DN间的数据连接稳定,可以将GDS服务器环境和DN所在环境的TCP Keepalive检测时间增长(推荐增长至5分钟)。调整集群环境的TCP Keepalive参数会影响故障检测的响应时间。
  • 示例:从MySQL向GaussDB(DWS)进行数据迁移 下面示例演示如何通过CopyManager从mysql向GaussDB(DWS)进行数据迁移的过程。 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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 //以下用例以gsjdbc4.jar为例,如果要使用gsjdbc200.jar,请替换驱动类名(将代码中的“org.postgresql”替换成“com.huawei.gauss200.jdbc”)与连接URL串前缀(将“jdbc:postgresql”替换为“jdbc:gaussdb”)。 import java.io.StringReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; public class Migration{ public static void main(String[] args) { String url = new String("jdbc:postgresql://10.180.155.74:8000/gaussdb"); //数据库URL String user = new String("jack"); //mppdb用户名 String pass = new String("********"); //mppdb密码 String tablename = new String("migration_table"); //定义表信息 String delimiter = new String("|"); //定义分隔符 String encoding = new String("UTF8"); //定义字符集 String driver = "org.postgresql.Driver"; StringBuffer buffer = new StringBuffer(); //定义存放格式 化数据的缓存 try { //获取源数据库查询结果集 ResultSet rs = getDataSet(); //遍历结果集,逐行获取记录 //将每条记录中各字段值,按指定分隔符分割,由换行符结束,拼成一个字符串 //把拼成的字符串,添加到缓存buffer while (rs.next()) { buffer.append(rs.getString(1) + delimiter + rs.getString(2) + delimiter + rs.getString(3) + delimiter + rs.getString(4) + "\n"); } rs.close(); try { //建立目标数据库连接 Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, pass); BaseConnection baseConn = (BaseConnection) conn; baseConn.setAutoCommit(false); //初始化表信息 String sql = "Copy " + tablename + " from STDIN DELIMITER " + "'" + delimiter + "'" + " ENCODING " + "'" + encoding + "'"; //提交缓存buffer中的数据 CopyManager cp = new CopyManager(baseConn); StringReader reader = new StringReader(buffer.toString()); cp.copyIn(sql, reader); baseConn.commit(); reader.close(); baseConn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(System.out); } catch (SQLException e) { e.printStackTrace(System.out); } } catch (Exception e) { e.printStackTrace(); } } //******************************** // 从源数据库返回查询结果集 //********************************* private static ResultSet getDataSet() { ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://10.119.179.227:3306/jack?useSSL=false&allowPublicKeyRetrieval=true", "jack", "********"); Statement stmt = conn.createStatement(); rs = stmt.executeQuery("select * from migration_table"); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return rs; } } 父主题: 使用COPY FROM STDIN导入数据
  • 权限授予或撤销 数据库对象创建后,进行对象创建的用户就是该对象的所有者。集群安装后的默认情况下,未开启三权分立,数据库系统管理员具有与对象所有者相同的权限。 也就是说对象创建后,默认只有对象所有者或者系统管理员可以查询、修改和删除对象,以及通过GRANT将对象的权限授予其他用户。为使其他用户能够使用对象,可以由对象所有者或管理员通过GRANT/REVOKE对其他用户或角色授予与撤销。 使用GRANT语句授予权限。 例如,将模式myschema的权限赋给角色u1后,将表myschema.t1的SELECT权限授予角色u1。 1 2 GRANT USAGE ON SCHEMA myschema TO u1; GRANT SELECT ON TABLE myschema.t1 to u1; 使用REVOKE撤销已经授予的权限。 例如:撤销用户u1在指定表myschema.t1上的所有权限。 REVOKE ALL PRIVILEGES ON myschema.t1 FROM u1;
  • 层级权限管理 GaussDB(DWS)通过Database、Schema和数据对象权限实现层级权限管理。 Database之间无法直接互访,通过连接隔离实现彻底的权限隔离。各个Database之间共享资源极少,可实现连接隔离、权限隔离等。数据库集群包含一个或多个已命名数据库。用户和角色在整个集群范围内是共享的,但是其数据并不共享。即用户可以连接任何数据库,但当连接成功后,任何用户都只能访问连接请求里所声明的数据库。 Schema隔离的方式共用资源较多,可以通过GRANT与REVOKE语法便捷地控制不同用户对各Schema及其下属对象的权限,从而赋给业务更多的灵活性。每个数据库包括一个或多个Schema。每个Schema包含表、函数等其他类型的对象。用户要访问包含在指定Schema中的对象,需要被授予Schema的USAGE权限。 对象创建后,默认只有对象所有者或者系统管理员可以查询、修改和删除对象。其他用户要访问包含具体的数据库对象,例如table1,需要首先被授予database的CONNECT权限,再被授予Schema的USAGE权限,最后授予table1的SELECT权限。用户要访问底层的对象,必须先赋予上层对象的权限。比如用户要创建或者删除Schema,需要首先被授予database的CREATE权限; 图1 层级权限管理
  • 角色 GaussDB(DWS)的权限管理模型,是一种典型的RBAC(基于角色的权限控制)的实现。其将用户、角色、权限通过此模型管理起来。 角色是一组权限的集合。 “用户”概念和“角色”概念实际是等同的,唯一的区别在于“用户”拥有login权限,而“角色”拥有nologin权限。 按照数据库系统中承担的责任划分具有不同权限的角色。角色是数据库权限的集合,代表了一个数据库用户、或一组数据用户的行为约束。 角色和用户可以转换,通过ALTER将角色拥有登录权限。 通过GRANT把角色授予用户后,用户即具有了角色的所有权限。推荐使用角色进行高效权限分配。例如,可以为设计、开发和维护人员创建不同的角色,将角色GRANT给用户后,再向每个角色中的用户授予其所需数据的差异权限。在角色级别授予或撤销权限时,这些权限更改会对角色下的所有成员生效。 非三权分立时,只有系统管理员和具有CREATEROLE属性的用户才能创建、修改或删除角色。三权分立下,只有具有CREATEROLE属性的用户才能创建、修改或删除角色。 要查看所有角色,请查询系统表PG_ROLES: 1 SELECT * FROM PG_ROLES; 具体的创建,修改和删除角色操作,请参考SQL语法参考中CREARE ROLE/ALTER ROLE/DROP ROLE。
  • 权限概述 权限表示用户访问某个数据库对象(包括模式、表、函数、序列等)的操作(包括增、删、改、查、创建等)是否被允许。 GaussDB(DWS)中的权限管理分为三种场景: 系统权限 系统权限又称为用户属性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和LOGIN。 系统权限一般通过CREATE/ALTER ROLE语法来指定。其中,SYSADMIN权限可以通过GRANT/REVOKE ALL PRIVILEGE授予或撤销。但系统权限无法通过ROLE和USER的权限被继承,也无法授予PUBLIC。 数据对象权限 将数据库对象(表和视图、指定字段、数据库、函数、模式等)的相关权限授予特定角色或用户。GRANT命令将数据库对象的特定权限授予一个或多个角色。这些权限会追加到已有的权限上。 用户权限 将一个角色或用户的权限授予一个或多个其他角色或用户。在这种情况下,每个角色或用户都可视为拥有一个或多个数据库权限的集合。 当声明了WITH ADMIN OPTION,被授权的用户可以将该权限再次授予其他角色或用户,以及撤销所有由该角色或用户继承到的权限。当授权的角色或用户发生变更或被撤销时,所有继承该角色或用户权限的用户拥有的权限都会随之发生变更。 数据库系统管理员可以给任何角色或用户授予/撤销任何权限。拥有CREATEROLE权限的角色可以赋予或者撤销任何非系统管理员角色的权限。
  • 预置角色 GaussDB(DWS)提供了一组预置角色,以“gs_role_”开头命名,提供对特定的、通常需要高权限的操作的访问,可以将这些角色授权予数据库中的其他用户或角色,使这些用户能够访问或使用特定的信息和功能。请谨慎使用预置角色,以确保预置角色权限的安全使用。 预置角色允许的权限范围可参考下表: 表1 预置角色允许的权限范围 角色 权限描述 gs_role_signal_backend 具有调用函数pg_cancel_backend、pg_terminate_backend、pg_terminate_query、pg_cancel_query、pgxc_terminate_query、pgxc_cancel_query来取消或终止其他会话的权限,但不能操作属于初始用户的会话。 gs_role_read_all_stats 读取系统状态视图并且使用与扩展相关的各种统计信息,包括有些通常只对系统管理员可见的信息。包括: 资源管理类: pgxc_wlm_operator_history pgxc_wlm_operator_info pgxc_wlm_operator_statistics pgxc_wlm_session_info pgxc_wlm_session_statistics pgxc_wlm_workload_records pgxc_workload_sql_count pgxc_workload_sql_elapse_time pgxc_workload_transaction 状态信息类: pgxc_stat_activity pgxc_get_table_skewness table_distribution pgxc_total_memory_detail pgxc_os_run_info pg_nodes_memory pgxc_instance_time pgxc_redo_stat gs_role_analyze_any 具有系统级ANALYZE权限类似系统管理员用户,跳过schema权限检查,对所有的表可以执行ANALYZE。 gs_role_vacuum_any 具有系统级VACUUM权限类似系统管理员用户,跳过schema权限检查,对所有的表可以执行VACUUM。 预置角色的使用约束: 以gs_role_开头的角色名作为数据库的预置角色保留字,禁止新建以“gs_role_”开头的用户/角色,也禁止将已有的用户/角色重命名为以“gs_role_”开头。 禁止对预置角色执行ALTER和DROP操作。 预置角色默认没有LOGIN权限,不设置预置登录密码。 gsql元命令\du和\dg不显示预置角色的相关信息,但若指定了PATTERN(用来指定要被显示的对象名称)则预置角色信息会显示。 三权分立关闭时,系统管理员和具有预置角色ADMIN OPTION权限的用户有权对预置角色执行GRANT/REVOKE管理;三权分立打开时,安全管理员(具有CREATEROLE属性)和具有预置角色ADMIN OPTION权限的用户有权对预置角色执行GRANT/REVOKE管理。例如: 1 2 GRANT gs_role_signal_backend TO user1; REVOKE gs_role_signal_backend FROM user1;
  • 参数 表1 SQLBindCol参数 关键字 参数说明 StatementHandle 语句句柄。 ColumnNumber 要绑定结果集的列号。起始列号为0,以递增的顺序计算列号,第0列是书签列。若未设置书签页,则起始列号为1。 TargetType 缓冲区中C数据类型的标识符。 TargetValuePtr 输出参数:指向与列绑定的数据缓冲区的指针。SQLFetch函数返回这个缓冲区中的数据。如果此参数为一个空指针,则StrLen_or_IndPtr是一个有效值。 BufferLength TargetValuePtr指向缓冲区的长度,以字节为单位。 StrLen_or_IndPtr 输出参数:缓冲区的长度或指示器指针。若为空值,则未使用任何长度或指示器值。
  • 原型 1 2 3 4 5 6 SQLRETURN SQLBindCol(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLLEN BufferLength, SQLLEN *StrLen_or_IndPtr);
  • 应用示例 查询当前视图,统计OBS写流量和平均写带宽,统计结果按10分钟聚集。 1 2 3 4 5 6 7 8 9 10 select * from gs_obs_write_traffic; nodename | hostname | traffic_mb | bandwidth_mb_per_s | reqcount | logtime --------------+------------------+----------------------+---------------------+----------+------------------------ dn_1 | rhel_10_90_45_56 | .000738143920898438 | .000289970820362525 | 12 | 2022-10-24 16:10:00+08 dn_1 | rhel_10_90_45_56 | .000354766845703125 | .000386063466694153 | 7 | 2022-10-24 18:50:00+08 dn_1 | rhel_10_90_45_56 | 9.34600830078125e-05 | .000143659648687162 | 2 | 2022-11-07 09:20:00+08 dn_1 | rhel_10_90_45_56 | 4.10079956054688e-05 | .000186667253592502 | 1 | 2022-11-07 09:30:00+08 dn_1 | rhel_10_90_45_56 | 2048.17834663391 | 27.2766632219637 | 2 | 2022-11-22 16:10:00+08 dn_1 | rhel_10_90_45_56 | 3747.23722648621 | 28.0842938534546 | 4 | 2022-11-22 16:20:00+08 (6 row)
  • 迁移数据到GaussDB(DWS) GaussDB(DWS)提供了灵活的数据入库方式,可以将多种数据源的数据导入到GaussDB(DWS)中,如图1所示。各导入方式具有不同的特点,如表1所示,用户可以根据其特点自行选择。建议用户配合数据复制服务(Data Replication Service,简称DRS)、云数据迁移(Cloud Data Migration,简称CDM)和数据湖工厂(Data Lake Factory,简称DLF)一起使用,DRS用于数据实时同步,CDM用于批量数据迁移,DIS用于流数据接入,DLF可以对整个ETL过程进行编排调度,同时提供可视化的开发环境。 图1 数据迁移示意图 DRS、CDM、OBS、MRS为云服务。 GDS、DSC、gs_restore、gs_dump为内部工具。 表1 数据导入方式说明 数据导入方式 数据源 说明 优势 使用外表从OBS并行导入数据 OBS 支持将存储在OBS上的TXT、CSV、ORC及CARBONDATA格式的数据并行导入到GaussDB(DWS),支持导入后查询数据,也支持远程读OBS上的数据。 GaussDB(DWS)优先推荐的导入方式。 并行拉取方式,性能好,横向扩展。 使用GDS从远端服务器导入数据 Servers(即远端服务器) 使用GaussDB(DWS)提供的GDS工具,利用多DN并行的方式,将数据从远端服务器导入到GaussDB(DWS)。这种方式导入效率高,适用于大批量数据入库。 从MRS导入数据到集群 MRS(HDFS) 配置一个GaussDB(DWS)集群连接到一个MRS集群,然后将数据从MRS的HDFS中读取到GaussDB(DWS)。 并行拉取方式,性能好,横向扩展。 从GaussDB(DWS)集群导入数据到新集群 - 支持两个GaussDB(DWS)集群之间的数据互访互通。通过Foreign Table方式实现跨DWS集群的数据访问和导入。 适用于多套DWS集群之间的数据同步。 基于GDS的跨集群互联互通 - 通过GDS进行数据中转,实现多个集群之间的数据同步。 适用于多套DWS集群之间的数据同步。 使用gsql元命令导入数据 本地文件 与直接使用SQL语句COPY不同,该命令读取/写入的文件只能是gsql客户端所在机器上的本地文件。 操作简单,适用于小批量数据入库。 使用COPY FROM STDIN导入数据 其他文件或数据库 使用Java语言开发应用程序时,通过调用JDBC驱动的CopyManager接口,从文件或其他数据库向GaussDB(DWS)写入数据。 从其他数据库直接写入GaussDB(DWS)的方式,具有业务数据无需落地成文件的优势。 使用DRS将数据导入GaussDB(DWS) MySQL DDM PostgreSQL(公测) Oracle(公测) GaussDB分布式版(公测) 通过DRS实时同步功能,将数据从一个数据源复制到GaussDB(DWS)数据仓库,实现关键业务的数据实时流动。主要聚焦于表和数据的同步导入。 数据源丰富,操作简单。 使用CDM迁移数据到GaussDB(DWS) 数据库、NoSQL、文件系统、大数据平台 CDM提供同构/异构数据源之间批量数据迁移的功能,帮助用户实现从多种类型的数据源迁移数据到GaussDB(DWS)。CDM在迁移数据到GaussDB(DWS)时,采用的是COPY方式和GDS并行导入方式。 数据源丰富,操作简单。 使用DSC工具迁移SQL脚本 数据库、NoSQL、文件系统、大数据平台 请参考第三方ETL工具的相关文档。 GaussDB(DWS)提供了DSC工具,可以将Teradata/Oracle脚本迁移到GaussDB(DWS)。 通过OBS中转,数据源丰富,数据转换能力强。 使用gs_dump和gs_dumpall命令导出元数据 纯文本格式 自定义归档格式 目录归档格式 tar归档格式 gs_dump支持导出单个数据库或其内的对象,而gs_dumpall支持导出集群中所有数据库或各库的公共全局对象。 通过导入工具将导出的元数据信息导入至需要的数据库,可以完成数据库信息的迁移。 适用于元数据迁移。 使用gs_restore命令导入数据 sql/tmp/tar文件格式 在数据库迁移场景下,支持使用gs_restore工具将事先使用gs_dump工具导出的文件格式,重新导入GaussDB(DWS)集群,实现表定义、数据库对象定义等元数据的导入。导入数据主要包括以下内容: 所有数据库对象定义。 单个数据库对象定义。 单个schema定义。 单张表定义。 父主题: 数据迁移
  • 原型 1 2 3 4 5 6 7 SQLRETURN SQLConnect(SQLHDBC ConnectionHandle, SQLCHAR *ServerName, SQLSMALLINT NameLength1, SQLCHAR *UserName, SQLSMALLINT NameLength2, SQLCHAR *Authentication, SQLSMALLINT NameLength3);
  • 参数 表1 SQLConnect参数 关键字 参数说明 ConnectionHandle 连接句柄,通过SQLAllocHandle获得。 ServerName 要连接数据源的名称。 NameLength1 ServerName的长度。 UserName 数据源中数据库用户名。 NameLength2 UserName的长度。 Authentication 数据源中数据库用户密码。 NameLength3 Authentication的长度。
  • 导入数据后查询数据 在GaussDB(DWS)数据库中,创建导入数据的目标表,用于存储导入的数据。 该表的表结构必须与创建外表中创建的外表的表结构保持一致,即字段个数、字段类型要完全一致。 例如,创建一个名为product_info的表,示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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); 执行“INSERT INTO .. SELECT ..”命令从外表导入数据到目标表。 示例: 1 INSERT INTO product_info SELECT * FROM product_info_ext_obs; 若出现以下类似信息,说明数据导入成功。 INSERT 0 10 执行SELECT命令,查看从OBS导入到GaussDB(DWS)中的数据。 1 SELECT * FROM product_info; 查询结果显示如原始数据中所示的数据,表示导入成功。查询结果的结尾将显示以下信息: (10 rows)
共100000条