华为云用户手册

  • 如何使用\copy导入导出? 由于云上 GaussDB (DWS)是全托管服务,用户无法登录后台,无法使用copy进行导入导出文件,所以云上将copy语法禁掉。云上推荐将数据文件放到obs上,使用obs外表进行入库,如果需要使用copy导入导出数据,可以参考如下方法: 将数据文件放到客户端的机器上。 使用gsql连接集群。 执行如下命令导入数据,输入数据文件在客户端的目录信息和文件名,with中指定导入选项,跟正常copy一样,但是需要在copy前添加"\"标识,入库成功后不会有消息提示。 \copy tb_name from '/directory_name/file_name' with(...); 执行如下命令,使用默认参数直接导出数据到本地文件。 \copy table_name to '/directory_name/file_name'; 使用copy_option参数导出为 CS V文件。 \copy table_name to '/directory_name/file_name' CSV; 使用with指定option参数,导出为CSV文件,分隔符为'|'。 \copy table_name to '/directory_name/file_name' with(format 'csv',delimiter '|') ; 父主题: 数据导入导出
  • 选择合适的分布列 Hash分布表的分布列选取至关重要,需要满足以下基本原则: 列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。 在满足第一条原则的情况下尽量不要选取存在常量filter的列。 在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。 支持多分布列特性,可以更好地满足数据分布的均匀性要求。
  • 如何调整 通过select version();语句查询当前数据库版本号,版本号不同,调整的方式不同: 8.0.x及以前版本,通过重建表时指定分布列来调整: 通过Data Studio或者Linux下使用gsql访问数据库。 创建新表。 以下步骤语句中,table1为原表名,table1_new为新表名,column1和column2为分布列名称。 1 2 3 4 CREATE TABLE IF NOT EXISTS table1_new ( LIKE table1 INCLUDING ALL EXCLUDING DISTRIBUTION) DISTRIBUTE BY HASH (column1, column2); 迁移数据到新表。 1 2 3 4 START TRANSACTION; LOCK TABLE table1 IN AC CES S EXCLUSIVE MODE; INSERT INTO table1_new SELECT * FROM table1; COMMIT; 查看表数据是否迁移成功,删除原表。 1 2 SELECT COUNT(*) FROM table1_new; DROP TABLE table1; 替换原表。 1 ALTER TABLE table1_new RENAME TO table1; 8.1.0及以后版本后,通过ALTER TABLE语法进行调整,以下为示例。 查询当前表定义,回显发现该表分布列为c_last_name。 1 SELECT pg_get_tabledef('customer_t1'); 尝试执行更新分布列中的数据提示错误信息。 1 UPDATE customer_t1 SET c_last_name = 'Jimy' WHERE c_customer_sk = 6885; 将该表的分布列修改为不会更新的列,例如c_customer_sk。 1 ALTER TABLE customer_t1 DISTRIBUTE BY hash (c_customer_sk); 重新执行更新旧的分布列的数据。更新成功。 1 UPDATE customer_t1 SET c_last_name = 'Jimy'WHERE c_customer_sk = 6885;
  • LibrA、GaussDB A与GaussDB(DWS)是什么关系? GaussDB(DWS)是一种在线数据处理数据库,是华为自研的GaussDB A(原名 FusionInsight LibrA)产品基于华为云基础架构和平台构建而成的。而GaussDB A为物理机的纯软件销售形态,GaussDB A相关文档可访问以下网址获取: 6.5.1及以前版本:https://support.huawei.com/enterprise/zh/cloud-computing/gaussdb-200-pid-21407429 8.0.0版本:https://support.huawei.com/enterprise/zh/cloud-computing/gaussdb-a-pid-250949677 父主题: 通用问题
  • 原因分析 扩容前,如果您没有执行vacuum清理和回收存储空间,GaussDB(DWS) 数据仓库 中之前被删除的数据,可能没有释放占用的磁盘空间形成脏数据,导致磁盘浪费。 而在扩容时,系统会做一次重分布,集群扩容时新节点添加完成后,原节点存储的业务数据明显多于新节点,此时系统自动在所有节点重新分布保存数据。在开始做重分布时,系统会自动执行一次vacuum,从而释放了存储空间,因此,扩容后已使用存储容量减少了很多。
  • 自定义函数属性设置不合理 场景:自定义函数get_count()并调用该函数出现结果不一致场景。 1 2 3 4 5 6 7 8 9 10 11 CREATE FUNCTION get_count() returns int SHIPPABLE as $$ declare result int; begin result = (select count(*) from test); --test表是hash表 return result; end; $$ language plpgsql; 调用该函数。 1 2 3 4 5 6 7 8 9 10 11 SELECT get_count(); get_count ----------- 2106 (1 row) SELECT get_count() FROM t_src; get_count ----------- 1032 (1 row) 原因分析: 由于该函数指定了SHIPPABLE的函数属性,因此生成计划时该函数会下推到DN上执行,该函数下推到DN后,由于函数定义中的test表是hash表,因此每个DN上只有该表的一部分数据,所以select count(*) from test; 返回的结果不是test表全量数据的结果,而是每个DN上部分数据的结果,因此导致加上from表后函数返回预期发生变化。 解决方法: 以下两种方法任选其一即可(推荐第一种方法): 将函数改为不下推:ALTER FUNCTION get_count() not shippable; 将函数中用到的表改为复制表,这样每个DN上都是一份该表的全量数据,即使下推到DN执行,也能保证结果集符合预期。
  • 数据库兼容模式 场景:在数据库中查询空串结果不一致。 database1(TD兼容模式): 1 2 3 4 5 td=# select '' is null; isnull -------- f (1 row) database2(ORA兼容模式): 1 2 3 4 5 ora=# select '' is null; isnull -------- t (1 row) 原因分析: 查询空串结果不同是由于不同数据库兼容模式下空串与null语法有差异导致。 目前,GaussDB(DWS)支持三种数据库兼容模式:Oracle、TD和MySql,不同兼容模式下语法和行为存在差异,兼容性差异说明可参考Oracle、Teradata和MySQL语法兼容性差异。 不同兼容模式下的database表现出不同的兼容性行为属于正常现象。可以通过查看select datname, datcompatibility from pg_database;确认数据库兼容性设置是否相同。 解决方法: 这种场景下只能将两个database的兼容性模式设置为一致的才能解决。Database的DBCOMPATIBILITY属性不支持ALTER,只能通过新建数据库的方法,在创建数据库时指定相同的DBCOMPATIBILITY属性解决。
  • 数据库兼容性行为配置项behavior_compat_options设置不同 场景:add_months函数计算结果不一致。 database1: 1 2 3 4 5 SELECT add_months('2018-02-28',3) from dual; add_months --------------------- 2018-05-28 00:00:00 (1 row) database2: 1 2 3 4 5 SELECT add_months('2018-02-28',3) from dual; add_months --------------------- 2018-05-31 00:00:00 (1 row) 原因分析: 数据库兼容性配置项behavior_compat_options不同会导致部分行为不同,该参数选项可参考behavior_compat_options中的相关选项描述。 此场景中behavior_compat_options配置项中的end_month_calculate参数控制add_months函数计算逻辑配置项。设置end_month_calculate配置项时,如果param1的日期(Day字段)为月末,并且param1的日期(Day字段)比result月份的月末日期比小,计算结果中的日期字段(Day字段)和result的月末日期保持一致。 解决方法: 需要将数据库中参数behavior_compat_options的兼容性配置项设置为一致。该参数类型为USERSET类型,可session级别设置或集群级修改。
  • 使用UN LOG GED表 场景: 使用unlogged表后,在集群重启后,关联查询结果集异常,查看unlogged表缺少部分数据。 原因分析: 如果设置max_query_retry_times为0,且在建表时指定UNLOGGED关键字,则创建的表为非日志表。在非日志表中写入的数据不会被写入到预写日志中,这样就会比普通表快很多。但是非日志表在冲突、执行操作系统重启、强制重启、切断电源操作或异常关机后会被自动截断,会造成数据丢失的风险。非日志表中的内容也不会被复制到备服务器中。在非日志表中创建的索引也不会被自动记录。因此当集群发生异常重启(进程重启、节点故障、集群重启)时,会导致部分内存中的数据未及时落盘,造成部分数据丢失,从而导致结果集异常。 解决方法: unlogged表在集群异常情况下的安全性无法保证,一般不能作为业务表使用,更多的场景是作为临时表使用。当出现集群故障后,为了保证数据正常,需要重建unlogged表或将数据备份后重新导入数据库。
  • 子查询limit 场景:子查询中使用limit,两次查询结果不一致。 1 2 3 4 5 6 7 8 9 10 11 SELECT * FROM (select a from test limit 1 ) order by 1; a --- 5 (1 row) SELECT * FROM (select a from test limit 1 ) order by 1; a --- 1 (1 row) 原因分析: 子查询中的limit会导致获取随机结果,从而最终查询结果为随机提取。 解决方法: 要保证最终查询结果的稳定,需避免在子查询中使用limit。
  • 子视图/子查询中使用排序 场景: 创建表test和视图v后,子查询中使用排序查询表test,出现查询结果不一致。 1 2 3 4 5 6 CREATE TABLE test(a serial ,b int); INSERT INTO test(b) VALUES(1); INSERT INTO test(b) SELECT b FROM test; … INSERT INTO test(b) SELECT b FROM test; CREATE VIEW v as SELECT * FROM test ORDER BY a; 问题SQL: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 SELECT * FROM v limit 1; a | b ---+--- 3 | 1 (1 row) SELECT * FROM (select * from test order by a) limit 10; a | b ----+--- 14 | 1 (1 row) SELECT * FROM test order by a limit 10; a | b ---+--- 1 | 1 (1 row) 原因分析: 对于子视图和子查询中order by是无效的。 解决方法: 不建议在子视图和子查询中使用order by,若要保证结果有序,需在最外层查询中使用order by。
  • 使用string_agg 场景:使用string_agg查询表employee,出现查询结果不一致。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 SELECT * FROM employee; empno | ename | job | mgr | hiredate | sal | comm | deptno -------+--------+---------+------+---------------------+-------+------+-------- 7654 | MARTIN | SALEMAN | 7698 | 2022-11-08 00:00:00 | 12000 | 1400 | 30 7566 | JONES | MANAGER | 7839 | 2022-11-08 00:00:00 | 32000 | 0 | 20 7499 | ALLEN | SALEMAN | 7698 | 2022-11-08 00:00:00 | 16000 | 300 | 30 (3 rows) SELECT count(*) FROM (select deptno, string_agg(ename, ',') from employee group by deptno) t1, (select deptno, string_agg(ename, ',') from employee group by deptno) t2 where t1.string_agg = t2.string_agg; count ------- 2 (1 row) SELECT count(*) FROM (select deptno, string_agg(ename, ',') from employee group by deptno) t1, (select deptno, string_agg(ename, ',') from employee group by deptno) t2 where t1.string_agg = t2.string_agg; count ------- 1 (1 row) 原因分析: String_agg函数的作用是将组内的数据合并成一行,但是如果某用户的用法是string_agg(ename, ',') ,结果集就是不稳定的,因为没有指定组合的顺序。例如,上述语句中,对于select deptno, string_agg(ename, ',') from employee group by deptno; 输出结果既可以是: 1 30 | ALLEN,MARTIN 也可能是: 1 30 |MARTIN,ALLEN 两个结果都是合理的,因此上述关联场景下,有可能出现t1这个subquery中的结果和t2这个subquery中的结果对于deptno=30时的输出结果不一致。 解决方法: String_agg中增加order by排序,保证按顺序拼接。 1 SELECT count(*) FROM (select deptno, string_agg(ename, ',' order by ename desc) from employee group by deptno) t1 ,(select deptno, string_agg(ename, ',' order by ename desc) from employee group by deptno) t2 where t1.string_agg = t2.string_agg;
  • 窗口函数中使用排序后取部分结果 场景: 窗口函数row_number()中使用排序后查询表t3的c列,两次查询结果不同。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 SELECT * FROM t3 order by 1,2,3; a | b | c ---+---+--- 1 | 2 | 1 1 | 2 | 2 1 | 2 | 3 (3 rows) SELECT c,rn FROM (select c,row_number() over(order by a,b) as rn from t3) where rn = 1; c | rn ---+---- 1 | 1 (1 row) SELECT c,rn FROM (select c,row_number() over(order by a,b) as rn from t3) where rn = 1; c | rn ---+---- 3 | 1 (1 row) 原因分析: 如上所示,执行同一条语句:select c,rn from (select c,row_number() over(order by a,b) as rn from t3) where rn = 1; 两次查询结果不同,因为在窗口函数的排序列a、b上存在重复值1、2且重复值在c列上的值不同,就会导致每次按照a,b列排序结果取第一条时,所取的数据是随机的,造成结果集不一致。 解决方法: 该场景需要将取值列c列也加到排序中,使排序结果获取的第一条数据固定。 1 2 3 4 5 SELECT c,rn FROM (select c,row_number() over(order by a,b,c) as rn from t3) where rn = 1; c | rn ---+---- 1 | 1 (1 row)
  • 如何免费试用数据仓库服务? 免费试用活动仅限新用户可以参加。如果您的账号从未创建过GaussDB(DWS)集群,且已完成实名认证,就有资格免费试用GaussDB(DWS)服务1个月。 您可以登录GaussDB(DWS)管理控制台,单击“立即申请试用”开通免费试用套餐。不同区域之间的免费试用套餐不互通,请根据您的实际需求慎重选择。 当您开通免费试用套餐后,在免费时间段内,您可以直接登录GaussDB(DWS)控制台创建相应区域、节点规格和节点数量的集群,该规格集群会自动享受免费试用活动。如果您选择使用其他节点类型,将按标准的按需费率支付费用,计费详情请参见GaussDB(DWS)价格详情。 当1个月免费试用结束时,您可以删除集群,从而避免产生任何费用,或者您也可以继续保留集群,此时将按标准的按需费率支付费用。 父主题: 计费问题
  • 场景二:执行计划中的or条件对普通用户执行语句逐一判断耗时 执行计划中的or条件里有权限相关的判断,此场景多发生在使用系统视图时。例如以下sql: 1 2 3 4 5 6 7 8 SELECT distinct(dtp.table_name), ta.table_catalog, ta.table_schema, ta.table_name, ta.table_type from information_schema.tables ta left outer join DBA_TAB_PARTITIONS dtp on (dtp.schema = ta.table_schema and dtp.table_name = ta.table_name) where ta.table_schema = 'public'; 一部分执行计划如下: 可以看到系统视图中的权限判断中多用or条件判断: 1 pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(c.oid, 'SELECT, INSERT, UPDATE, REFERENCES'::text) 由于dbadmin用户pg_has_role总能返回true,因此or之后的条件无需继续判断; 而普通用户的or条件需要逐一判断,如果数据库中表个数比较多,最终会导致普通用户比dbadmin需要更长的执行时间。 这种场景如果输出结果集很少,可以考虑尝试设置set enable_hashjoin = off; set enable_seqscan = off; 走index + nestloop的计划。
  • 使用公网IP连接集群时如何设置白名单? 用户可以登录VPC管理控制台手动创建一个安全组,然后回到GaussDB(DWS)创建集群页面,单击“安全组”下拉列表旁边的按钮,刷新后在“安全组”下拉列表中选择新建的安全组。 为了使GaussDB(DWS)客户端可以连接集群,用户需要在新建的安全组中添加一条入规则,开放GaussDB(DWS)集群的数据库端口的访问权限。 协议:TCP。 端口范围:8000。指定为创建GaussDB(DWS)集群时设置的数据库端口,这个端口是GaussDB(DWS)用于接收客户端连接的端口。 源地址:选中“IP地址”,然后指定为客户端主机的IP地址,例如“192.168.0.10/32”。 图1 添加入方向规则 添加完成后,即设置白名单成功。 父主题: 数据库连接
  • 为什么要使用华为云数据仓库服务GaussDB(DWS) ? 传统的数据仓库售价昂贵,设备系统选型,采购周期长,扩容复杂,整体运行成本十分高昂,因此很难为中小企业所采纳。 公有云数据仓库服务GaussDB(DWS)与传统的数据仓库相比,主要有以下特点与显著优势: 一款分布式MPP数据仓库云化服务,具备开放,高效,兼容,可扩展,易运维等特点。 基于GaussDB数据仓库产品内核,以云上数据仓库服务的形式将GaussDB(DWS)的能力提供给公有云上的企业用户,打造云上云下一致的数据仓库用户体验。 GaussDB(DWS)是具有国产自主知识产权的新一代分布式数据仓库系统。目前已经被广泛地应用在国内外政府,金融,运营商等行业和财富500强企业当中。该产品不仅兼容主流开源Postgres系列数据库,而且特别针对Oracle和Teradata的SQL语法进行了兼容性增强,在很多场合都可以替代国外同类型产品。 数据仓库服务工程师重点设计实现了基于行列混存的数据仓库内核,在支持海量数据快速分析的同时也很好地兼顾了业务运作系统对数据增删改的需求。引入了基于代价的查询优化器,以及当前数据仓库系统所流行的一些黑科技,包括机器码级别的向量计算,算子间和算子内的并行,节点内和节点间并行,使用LLVM优化编译查询计划的本机代码等。这些黑科技极大地提高了数据查询和分析的性能,为用户带来了更好的体验,解决了特定场景当中的业务痛点。 GaussDB(DWS)服务即开即用 相比以前动辄长达数月的数据仓库选型采购过程,在公有云上开通使用数据仓库服务只需要数分钟时间,简化了企业用户的购买过程,使用数据仓库的方式,降低使用数据仓库的代价和门槛,让数据仓库实实在在地走进千万家大中小企业, 让数据为企业的发展和决策提供其应有的价值。 父主题: 通用问题
  • GaussDB(DWS)和 MRS 分别应在何时使用? 如果需要使用自定义代码通过大数据处理框架 (如Apache Spark、Hadoop或HBase) 来处理和分析超大数据集,则应该使用MRS。MRS让您能够控制集群的配置和集群上安装的软件。 GaussDB(DWS)这类数据仓库是专为不同类型的分析而设计的。数据仓库旨在将多个不同来源(如库存、财务和零售销售系统)的数据汇集在一起。为了确保整个公司的报告具有一致的准确性,数据仓库采用一种高度结构化的方式来存储数据。这种结构可将数据一致性规则直接构建到数据库的表中。同时对标准SQL,事务支持传统数据库语法有很好的兼容性。 当您需要对大量结构化数据执行复杂查询并获得超快性能时,GaussDB(DWS)就是理想的服务选择。 父主题: 通用问题
  • 数据如何存储到数据仓库服务? GaussDB(DWS)支持多数据源高效入库,典型的入库方式如下所示。详细指导请参见导入数据。 从OBS导入数据。 数据上传到OBS 对象存储服务 中,再从OBS中导入,支持CSV,TEXT格式数据。 通过INSERT语句直接插入数据。 用户可以通过GaussDB(DWS)提供的客户端工具(gsql)或者JDBC/ODBC驱动从上层应用向GaussDB(DWS)写入数据。GaussDB(DWS)支持完整的数据库事务级别的增删改(CRUD)操作。这是最简单的一种方式,这种方式适合数据写入量不太大, 并发度不太高的场景。 从MRS导入数据,将MRS作为ETL。 通过COPY FROM STDIN方式导入数据。 通过COPY FROM STDIN命令写数据到一个表。 使用GDS从远端服务器导入数据到GaussDB(DWS)。 当用户需要将普通文件系统(例如,弹性云服务器)中的数据文件导入到GaussDB(DWS)时,可以使用GaussDB(DWS)提供的GDS导入数据的功能。 使用 CDM 迁移数据到GaussDB(DWS)。 父主题: 数据导入导出
  • 操作步骤 以下将演示不同权限的授权方法和验证过程。 打开窗口1(即dbadmin连接会话窗口,后续不再提示),使用系统管理员dbadmin连接DWS数据库,创建用户u1~u5(系统默认会创建u1~u5的同名SCHEMA)。 1 2 3 4 5 CREATE USER u1 PASSWORD '{password}'; CREATE USER u2 PASSWORD '{password}'; CREATE USER u3 PASSWORD '{password}'; CREATE USER u4 PASSWORD '{password}'; CREATE USER u5 PASSWORD '{password}'; 在SCHEMA u1下创建表u1.t1。 1 CREATE TABLE u1.t1 (c1 int, c2 int); 为表中插入两条数据。 1 2 INSERT INTO u1.t1 VALUES (1,2); INSERT INTO u1.t1 VALUES (1,2); DWS中引入了SCHEMA层概念,如果有SCHEMA,需要先给用户赋予SCHEMA的使用权限。 1 GRANT USAGE ON SCHEMA u1 TO u2,u3,u4,u5; 给只读用户u2赋予表u1.t1的查询权限。 1 GRANT SELECT ON u1.t1 TO u2; 打开窗口2(即用户u2连接会话窗口,后续不再提示),使用用户u2连接DWS数据库,验证u2可以查询u1.t1表,但是不能写入和修改,此时u2为只读用户。 1 2 3 SELECT * FROM u1.t1; INSERT INTO u1.t1 VALUES (1,20); UPDATE u1.t1 SET c2 = 3 WHERE c1 =1; 切回窗口1,分别给u3、u4、u5赋予对应的权限。 1 2 3 GRANT INSERT ON u1.t1 TO u3; --插入用户u3,可以插入数据 GRANT SELECT,UPDATE ON u1.t1 TO u4; --改写用户u4,可以修改表 GRANT ALL PRIVILEGES ON u1.t1 TO u5; --拥有所有权限的用户u5,可以对表进行查询、插入、改写和删除 打开窗口3,使用用户u3连接DWS数据库,验证u3可以插入u1.t1,但是不能查询和修改,此时u3为插入用户。 1 2 3 SELECT * FROM u1.t1; INSERT INTO u1.t1 VALUES (1,20); UPDATE u1.t1 SET c2 = 3 WHERE c1 =1; 打开窗口4,使用用户u4连接DWS数据库,验证u4可以修改u1.t1,同时还可以查询,但是不能插入,此时u4为改写用户。 1 2 3 SELECT * FROM u1.t1; INSERT INTO u1.t1 VALUES (1,20); UPDATE u1.t1 SET c2 = 3 WHERE c1 =1; 打开窗口5,使用用户u5连接DWS数据库,验证u5可以查询、插入、修改和删除u1.t1,此时u5为拥有所有权限的用户。 1 2 3 4 SELECT * FROM u1.t1; INSERT INTO u1.t1 VALUES (1,20); UPDATE u1.t1 SET c2 = 3 WHERE c1 =1; DELETE FROM u1.t1; 最后切回窗口1,通过函数has_table_privilege分别查询每个用户的权限。 1 SELECT * FROM pg_class WHERE relname = 't1'; 返回结果,查看relacl字段,该字段回显结果如下。"rolename=xxxx/yyyy" --表示rolename对该表有xxxx权限,且权限来自yyyy; 例如下图,与以上验证结果完全一致。 u1=arwdDxtA/u1,表示u1为owner,拥有所有权限。 u2=r/u1,表示u2拥有读权限。 u3=a/u1,表示u3拥有插入权限。 u4=rw/u1,表示u4拥有读和修改权限。 u5=arwdDxtA/u1,表示u5拥有所有权限。
  • 语法格式 1 2 3 4 5 6 GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
  • 场景介绍 假设当前有用户u1~u5,在系统中有对应的同名Schema u1~u5,各用户的权限管控如下: u2作为只读用户,需要表u1.t1的SELECT权限。 u3作为插入用户,需要表u1.t1的INSERT权限。 u4作为改写用户,需要表u1.t1的UPDATE权限。 u5作为拥有所有权限的用户,需要表u1.t1的所有权限。 表1 表u1.t1的表权限分类 用户名 用户类型 Grant授权语句 查询 插入 修改 删除 u1 所有者 - √ √ √ √ u2 只读用户 1 GRANT SELECT ON u1.t1 TO u2; √ x x x u3 插入用户 1 GRANT INSERT ON u1.t1 TO u3; x √ x x u4 改写用户 1 GRANT SELECT,UPDATE ON u1.t1 TO u4; 须知: 授予UPDATE权限必须同时授予SELECT权限,否则会出现信息泄露。 √ x √ x u5 拥有所有权限的用户 1 GRANT ALL PRIVILEGES ON u1.t1 TO u5; √ √ √ √
  • 什么是数据仓库? 随着数据库的大规模应用,以及信息行业的数据爆炸式的增长。为了研究数据之间的关系,挖掘数据隐藏的价值,人们越来越多的需要使用联机分析处理OLAP(On-Line Analytical Processing)进行数据分析,探究一些深层次的关系和信息。但是不同的数据库之间很难做到数据共享,数据之间的集成与分析也存在非常大的挑战。 为解决企业的数据集成与分析问题,数据仓库之父比尔·恩门于1990年提出数据仓库(Data Warehouse)。数据仓库主要功能是将OLTP经年累月所累积的大量数据,通过数据仓库特有的数据储存架构进行OLAP,最终帮助决策者能快速有效地从大量数据中,分析出有价值的信息,提供决策支持。自从数据仓库出现之后,信息产业就开始从以关系型数据库为基础的运营式系统慢慢向决策支持系统发展。 数据仓库相比数据库,主要有以下两个特点: 数据仓库是面向主题集成的。数据仓库是为了支撑各种业务而建立的,数据来自于分散的操作型数据。因此需要将所需数据从多个异构的数据源中抽取出来,进行加工与集成,按照主题进行重组,最终进入数据仓库。 数据仓库主要用于支撑企业决策分析,所涉及的数据操作主要是数据查询。因此数据仓库通过表结构优化、存储方式优化等方式提高查询速度、降低开销。 表1 数据仓库与数据库的对比 维度 数据仓库 数据库 应用场景 OLAP OLTP 数据来源 多数据源 单数据源 数据标准化 非标准化Schema 高度标准化的静态Schema 数据读取优势 针对读操作进行优化 针对写操作进行优化
  • 数据智能方案 数据治理中心 DataArts Studio为大型政企客户量身定制跨越孤立系统、感知业务的数据资源智能管理解决方案,实现全域数据入湖,帮助政企客户从多角度、多层次、多粒度挖掘数据价值,实现数据驱动的数字化转型。 数据治理 中心 DataArts Studio 的核心主要是 智能数据湖 FusionInsight,包含数据库、数据仓库、 数据湖 等各计算引擎平台,提供了数据使能的全套能力,支持数据的采集、汇聚、计算、资产管理、数据开放服务的全生命周期管理。 拥有强大的湖、仓、库引擎技术,比如数据湖敏捷构建、 GaussDB数据库 快速迁移,数仓的实时分析等,对应服务如下: 数据库: 关系型数据库包括:云数据库RDS、云数据库 GaussDB(for MySQL)、云数据库 GaussDB、云数据库 PostgreSQL、云数据库 SQL Server等。 非关系型数据库包括:文档数据库服务DDS、云数据库 GeminiDB等。 数据仓库:云数据仓库 GaussDB(DWS)。 数据湖\湖仓一体: MapReduce服务 MRS, 数据湖探索 DLI等。 数据治理中心:数据治理中心DataArts Studio。
  • 什么是湖仓一体? 虽然数据仓库和数据湖的应用场景和架构不同,但它们并不是对立关系。数据仓库存储结构化的数据,适用于快速的BI和决策支撑,而数据湖可以存储任何格式的数据,往往通过挖掘能够发挥出数据的更大作为,因此在一些场景上二者的并存可以给企业带来更多收益。 湖仓一体,又被称为Lake House,其出发点是通过数据仓库和数据湖的打通和融合,让数据流动起来,减少重复建设。Lake House架构最重要的一点,是实现数据仓库和数据湖的数据/元数据无缝打通和自由流动。湖里的“显性价值”数据可以流到仓里,甚至可以直接被数仓使用;而仓里的“隐性价值”数据,也可以流到湖里,低成本长久保存,供未来的数据挖掘使用。
  • 什么是数据湖? 在企业内部,数据是一类重要资产已经成为了共识。随着企业的持续发展,数据不断堆积,企业希望把生产经营中的所有相关数据都完整保存下来,进行有效管理与集中治理,挖掘和探索数据价值。 数据湖就是在这种背景下产生的。数据湖是一个集中存储各类结构化和非结构化数据的大型数据仓库,它可以存储来自多个数据源、多种数据类型的原始数据,数据无需经过结构化处理,就可以进行存取、处理、分析和传输。数据湖能帮助企业快速完成异构数据源的联邦分析、挖掘和探索数据价值。 数据湖的本质,是由“数据存储架构+数据处理工具”组成的解决方案。 数据存储架构:要有足够的扩展性和可靠性,可以存储海量的任意类型的数据,包括结构化、半结构化和非结构化数据。 数据处理工具,则分为两大类: 第一类工具,聚焦如何把数据“搬到”湖里。包括定义数据源、制定数据同步策略、移动数据、编制数据目录等。 第二类工具,关注如何对湖中的数据进行分析、挖掘、利用。数据湖需要具备完善的数据管理能力、多样化的数据分析能力、全面的数据生命周期管理能力、安全的数据获取和数据发布能力。如果没有这些数据治理工具,元数据缺失,湖里的数据质量就没法保障,最终会由数据湖变质为数据沼泽。 随着大数据和AI的发展,数据湖中数据的价值逐渐水涨船高,价值被重新定义。数据湖能给企业带来多种能力,例如实现数据的集中式管理,帮助企业构建更多优化后的运营模型,也能为企业提供其他能力,如预测分析、推荐模型等,这些模型能刺激企业能力的后续增长。 对于数据仓库与数据湖的不同之处,可以类比为仓库和湖泊的区别:仓库存储着来自特定来源的货物;而湖泊的水来自河流、溪流和其他来源,并且是原始数据。 表2 数据湖与数据仓库的对比 维度 数据湖 数据仓库 应用场景 可以探索性分析所有类型的数据,包括机器学习、数据发现、特征分析、预测等。 通过历史的结构化数据进行数据分析。 使用成本 起步成本低,后期成本较高。 起步成本高,后期成本较低。 数据质量 包含大量原始数据,使用前需要清洗和标准化处理。 质量高,可作为事实依据。 适用对象 数据科学家、数据开发人员为主。 业务分析师为主。
  • 什么是数据库? 数据库是“按照数据结构来组织、存储和管理数据的仓库”。 广义上的数据库,在20世纪60年代已经在计算机中应用了。但这个阶段的数据库结构主要是层次或网状的,且数据和程序之间具备非常强的依赖性,应用较为有限。 现在通常所说的数据库指的是关系型数据库。关系数据库是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,具有结构化程度高、独立性强、冗余度低等优点。1970年关系型数据库的诞生,真正彻底把软件中的数据和程序分开来,成为主流计算机系统不可或缺的组成部分。关系型数据库已经成为目前数据库产品中最重要的一员,几乎所有的数据库厂商新出的数据库产品都支持关系型数据库,即使一些非关系数据库产品也几乎都有支持关系数据库的接口。 关系型数据库的主要用于联机事务处理OLTP(On-Line Transaction Processing)主要进行基本的、日常的事务处理,例如银行交易等场景。
  • PG数据库定时同步GaussDB(DWS)服务如何收费? GaussDB(DWS)数据定时同步到PG数据库,可以通过以下方式实现: 使用 云数据迁移 (CDM)实现GaussDB(DWS)集群数据库与PG数据库之间的数据迁移同步,具体收费情况请参见云数据迁移价格说明。 使用GaussDB(DWS)导出数据到对象存储服务(OBS),然后再将数据从OBS导入PG数据库来实现数据同步。该过程只有数据存储在OBS中会产生费用,OBS数据存储的计费标准,请参见对象存储服务价格说明。 父主题: 计费问题
  • 如何选择公有云GaussDB(DWS)或者公有云RDS? 公有云GaussDB(DWS)和公有云RDS都让您能够在云中运行传统的关系数据库,同时转移数据库管理负载。您可将RDS数据库用于联机事务处理 (OLTP) ,报告和分析,对于大量数据的读(一般是复杂的只读类型查询)支持不足。GaussDB(DWS)利用多节点的规模和资源并使用各种优化法(列存,向量引擎,分布式框架等),专注于联机分析处理(OLAP),为传统数据库对大型数据集的分析及报告工作负荷提供了数量级改善。 当您的数据及查询的复杂性增加时,或者在您要防止报告和分析处理对OLTP工作负荷造成干扰时,GaussDB(DWS)可提供横向扩展能力。 您可以根据下表简单判断什么场景更适合用GaussDB(DWS)或RDS。 表1 OLTP和OLAP特性比较 特性 OLTP OLAP 用户 操作人员,低层管理人员 决策人员,高级管理人员 功能 日常操作处理 分析决策 设计 面向应用 面向主题 数据 最新的,细节的,二维的,分立的 历史的,集成的,多维的,统一的 存取 读/写数十条记录 读上百万条记录 工作范围 简单的读写 复杂的查询 数据库大小 百GB TB-PB级别 父主题: 通用问题
  • GaussDB(DWS)是否支持第三方客户端以及JDBC和ODBC驱动程序? 推荐使用GaussDB(DWS)客户端和驱动程序。与开源的PostgreSQL客户端和驱动程序相比,有两个主要的优点: 安全强化:PostgreSQL驱动程序只支持MD5认证,但GaussDB(DWS)驱动程序支持SHA256和MD5。 数据类型增强:GaussDB(DWS)驱动程序支持新的数据类型smalldatetime和tinyint。 GaussDB(DWS)支持开源PostgreSQL客户端和JDBC和ODBC驱动程序。 兼容的客户端和驱动程序版本如下: PostgreSQL的psql 9.2.4或更高版本 PostgreSQL JDBC驱动程序9.3-1103或更高版本 PSQL ODBC 09.01.0200或更高版本 使用JDBC/ODBC连接GaussDB(DWS),可参见开发指南的教程:使用JDBC或ODBC开发。 父主题: 数据库连接
共100000条