• [迁移系列] GaussDB 中实现current_user下推的方法
    SQL语句中存在current_user或user写法时不能下推,需要替换为可下推语法。方法如下:在库中创建如下函数current_user_select(),并将业务中使用的current_user替换为current_user_select即可实现下推。CREATE OR REPLACE FUNCTION public.current_user_select()RETURNS nameLANGUAGE internalimmutable STRICTAS $function$current_user$function$;示例如下:原语句select current_user from emp;原语句select current_user_select() from emp;
  • [热门活动] 什么?听说你想免费试用GaussDB(DWS),安排!!!
    一、活动时间:2021年4月15日—2021年5月31日二、活动介绍:     大家期待已久的GaussDB(DWS)免费试用活动,来咯!现在填写试用申请问卷,工作人员将根据问卷信息筛选抽取用户赠送价值3578.4元的DWS免费试用机会,名额有限,快来申请吧!      ps:问卷信息请尽可能完整正确,方便我们联系您哦~三、试用规格:产品规格:标准数仓-鲲鹏-4 vCPUs |32 GB|160GB SSD节点数量:3节点四、申请步骤:1、扫码关注GaussDB(DWS)微信公众号↓↓↓,在公众号后台回复“免费试用”获取问卷链接,填写调查问卷;2、工作人员将根据问卷信息筛选抽取免费试用用户,并邮件告知用户免费试用筛选抽取结果;3、扫描下方二维码添加小助手微信,获得免费试用名额的用户联系小助手配置DWS免费试用权限;4、开始试用,定期反馈试用心得。五、试用新手指南(简单4步,轻松上手!)产品主页→https://www.huaweicloud.com/product/dws.html产品文档→https://support.huaweicloud.com/dws/index.html教程视频→ https://bbs.huaweicloud.com/forum/thread-120729-1-1.html在线求助→https://bbs.huaweicloud.com/forum/forumdisplay-fid-598-orderby-lastpost-filter-typeid-typeid-78sub.html(提供在线技术支持团队,为您解答相关问题)六、注意事项1、活动期间,同一用户仅能申请一次DWS免费试用机会。*同一用户指:在华为云注册、登录、使用过程中的实名认证信息、手机号、邮箱、设备或地址如果一样,则视为同一用户;2、为保证活动的公平公正,如用户在填写问卷中存在隐瞒、虚构、作弊、欺诈或通过其他非正常手段规避活动规则、获取不当利益的行为,例如:作弊领取、恶意套现、网络攻击、虚假交易等,华为云GaussDB(DWS)有权收回相关权益、取消用户的活动参与资格,撤销违规交易,必要时追究违规用户的法律责任。3、如用户账号下存在未支付订单,会导致系统对用户试用资格的审核无法通过;在此情况下,用户须将相应的未支付订单作废后,方可正常参与相应产品的试用(去订单管理);4、免费试用应在有效期内使用,有效期自领取之日起30天有效,过期自动作废。5、试用产品的升级:用户在试用GaussDB(DWS)过程中,主动进行升配等操作,将按照官网标准价格收费;如果进行降配或切换计费方式等,将不进行退费。注意:降配或切换计费方式后,如果需要切换回原来的配置,可能会产生额外的费用;具体场景或解释说明,请您浏览阅读 《变更资源费用说明》;6、试用产品的续费:用户需要在试用期满后继续使用相关云产品的,应当在期满前按标准费用进行续费;7、试用产品到期提醒:免费试用时长为领取免费试用机会之日起30天内,试用期结束后,集群未删除会产生欠费,强烈建议费用快结束的时候删除集群,否则费用将由用户自己承担。8、所有参加本活动的用户,均视为认可并同意遵守《华为云用户协议》。9、华为云数仓GaussDB(DWS)有权根据业务需求,随时调整提供给用户免费试用的产品范围、产品数量、产品配置、试用规则等,用户应以参与试用时相关页面的展示内容为准;但不影响用户在活动规则调整前已经获得的权益。10、DWS免费试用用户每周须反馈至少一篇试用心得(内容包括但不限于实践经验、技术干货、开发技能、学习心得、产品建议等)。11、本活动最终解释权归华为云数仓GaussDB(DWS)所有。原文链接:https://bbs.huaweicloud.com/forum/thread-122035-1-1.html【推荐阅读】【最新活动汇总】DWS活动火热进行中,互动好礼送不停(持续更新中)  HOT  【博文汇总】GaussDB(DWS)博文汇总1,欢迎大家交流探讨~(持续更新中)【维护宝典汇总】GaussDB(DWS)维护宝典汇总贴1,欢迎大家交流探讨(持续更新中)【项目实践汇总】GaussDB(DWS)项目实践汇总贴,欢迎大家交流探讨(持续更新中)【DevRun直播汇总】GaussDB(DWS)黑科技直播汇总,欢迎大家交流学习(持续更新中)【培训视频汇总】GaussDB(DWS) 培训视频汇总,欢迎大家交流学习(持续更新中)扫码关注我哦,我在这里↓↓↓
  • [热门活动] 什么?听说你想免费试用GaussDB(DWS),安排!!!
    一、活动时间:2021年4月15日—2021年5月31日二、活动介绍:     大家期待已久的GaussDB(DWS)免费试用活动,来咯!现在填写试用申请问卷,工作人员将根据问卷信息筛选抽取用户赠送价值3578.4元的DWS免费试用机会,名额有限,快来申请吧!      ps:问卷信息请尽可能完整正确,方便我们联系您哦~三、试用规格:产品规格:标准数仓-鲲鹏-4 vCPUs |32 GB|160GB SSD节点数量:3节点四、申请步骤:1、扫码关注GaussDB(DWS)微信公众号↓↓↓,在公众号后台回复“免费试用”获取问卷链接,填写调查问卷;2、工作人员将根据问卷信息筛选抽取免费试用用户,并邮件告知用户免费试用筛选抽取结果;3、扫描下方二维码添加小助手微信,获得免费试用名额的用户联系小助手配置DWS免费试用权限;4、开始试用,定期反馈试用心得。五、试用新手指南(简单4步,轻松上手!)产品主页→https://www.huaweicloud.com/product/dws.html产品文档→https://support.huaweicloud.com/dws/index.html教程视频→ https://bbs.huaweicloud.com/forum/thread-120729-1-1.html在线求助→https://bbs.huaweicloud.com/forum/forumdisplay-fid-598-orderby-lastpost-filter-typeid-typeid-78sub.html(提供在线技术支持团队,为您解答相关问题)六、注意事项1、活动期间,同一用户仅能申请一次DWS免费试用机会。*同一用户指:在华为云注册、登录、使用过程中的实名认证信息、手机号、邮箱、设备或地址如果一样,则视为同一用户;2、为保证活动的公平公正,如用户在填写问卷中存在隐瞒、虚构、作弊、欺诈或通过其他非正常手段规避活动规则、获取不当利益的行为,例如:作弊领取、恶意套现、网络攻击、虚假交易等,华为云GaussDB(DWS)有权收回相关权益、取消用户的活动参与资格,撤销违规交易,必要时追究违规用户的法律责任。3、如用户账号下存在未支付订单,会导致系统对用户试用资格的审核无法通过;在此情况下,用户须将相应的未支付订单作废后,方可正常参与相应产品的试用(去订单管理);4、免费试用应在有效期内使用,有效期自领取之日起30天有效,过期自动作废。5、试用产品的升级:用户在试用GaussDB(DWS)过程中,主动进行升配等操作,将按照官网标准价格收费;如果进行降配或切换计费方式等,将不进行退费。注意:降配或切换计费方式后,如果需要切换回原来的配置,可能会产生额外的费用;具体场景或解释说明,请您浏览阅读 《变更资源费用说明》;6、试用产品的续费:用户需要在试用期满后继续使用相关云产品的,应当在期满前按标准费用进行续费;7、试用产品到期提醒:免费试用时长为领取免费试用机会之日起30天内,试用期结束后,集群未删除会产生欠费,强烈建议费用快结束的时候删除集群,否则费用将由用户自己承担。8、所有参加本活动的用户,均视为认可并同意遵守《华为云用户协议》。9、华为云数仓GaussDB(DWS)有权根据业务需求,随时调整提供给用户免费试用的产品范围、产品数量、产品配置、试用规则等,用户应以参与试用时相关页面的展示内容为准;但不影响用户在活动规则调整前已经获得的权益。10、DWS免费试用用户每周须反馈至少一篇试用心得(内容包括但不限于实践经验、技术干货、开发技能、学习心得、产品建议等)。11、本活动最终解释权归华为云数仓GaussDB(DWS)所有。原文链接:https://bbs.huaweicloud.com/forum/thread-122035-1-1.html【推荐阅读】【最新活动汇总】DWS活动火热进行中,互动好礼送不停(持续更新中)  HOT  【博文汇总】GaussDB(DWS)博文汇总1,欢迎大家交流探讨~(持续更新中)【维护宝典汇总】GaussDB(DWS)维护宝典汇总贴1,欢迎大家交流探讨(持续更新中)【项目实践汇总】GaussDB(DWS)项目实践汇总贴,欢迎大家交流探讨(持续更新中)【DevRun直播汇总】GaussDB(DWS)黑科技直播汇总,欢迎大家交流学习(持续更新中)【培训视频汇总】GaussDB(DWS) 培训视频汇总,欢迎大家交流学习(持续更新中)扫码关注我哦,我在这里↓↓↓
  • [迁移系列] GaussDB和Oracle DDL的差异和替换示例
    DDL语法OracleGaussDB A处理方案示例create table支持pctfree、initrans、maxtrans、storage属性。不支持。删除。影响:不具备类似Oracle中pctfree、initrans、maxtrans控制存储方式的功能。-支持字段和表名被双引号包含,Oracle默认全部转换为大写支持字段和表名被双引号包含,但是GaussDB A默认全部转换为小写,且加引号导致大小写敏感去掉引号。Oracle:CREATE TABLE "CTRM2"."TEMP_LGH"( "IMEI" VARCHAR2(20 BYTE) NOT NULL ENABLE,"MOBILE_NO" VARCHAR2(20 BYTE),"SALESTIME" DATE,);GaussDB A:CREATE TABLE CTRM2.TEMP_LGH( IMEI VARCHAR2(20 ) NOT NULL ENABLE,MOBILE_NO VARCHAR2(20 ),SALESTIME DATE,);[l(1]List分区表list类型分区表。不支持。改为范围分区。Oracle:CREATE TABLE rp_t_trans(  POLICYNO       VARCHAR2(22) not null,  COMID          VARCHAR2(8),)PARTITION BY LIST (COMID)(  PARTITION par_1100 VALUES ('11000000')    TABLESPACE report,  PARTITION par_1200 VALUES ('12000000')    TABLESPACE report,  PARTITION par_1300 VALUES ('13000000')    TABLESPACE report,  PARTITION p_other VALUES (DEFAULT)    TABLESPACE report);GaussDB A:CREATE TABLE rp_t_trans(  POLICYNO       VARCHAR2(22) NOT NULL,  COMID          VARCHAR2(8),)PARTITION BY RANGE(COMID)(  PARTITION par_1100VALUES LESS THAN ('11000000'),  PARTITION par_1200VALUES LESS THAN ('12000000'),  PARTITION par_1300VALUES LESS THAN ('13000000'),  PARTITION p_otherVALUES LESS THAN (MAXVALUE));create indextype创建索引类型。不支持。删除。影响:无索引类型对象。-create indexl  分区表支持全局索引。l  索引可以加模式名指定索引所属的模式。l  不支持全局索引。l  不支持组织索引。l  索引名前不能带schema名称。l  HASH表中唯一索引必须包含分布列,分区表唯一索引必须包含分布列和分区键。复制表无此限制。l  替换全局索引为分区索引。l  删除索引前的模式名。l  根据约束整改。-constraint无要求。l  不支持外键约束。l  unique约束必须包含分布列。l  列存不支持UNIQUE/PRIMARY KEY。l  不支持pctfree。l  add check 后面不能添加enable。l  约束名不能和表名和索引同名。根据约束要求整改。-sequence序列。Oracle访问方式如下:sequence_name.NEXTVALGaussDB A访问方式如下:NEXTVAL(‘sequence_name’)替换访问方式。-view视图。l  不支持force view。l  不支持视图名带有字符@。l  不支持sys_guid()。l  不支持给视图中插入数据。l  物化视图。l  删除。l  修改视图名称不包含@。l  修改为sequence,为每个视图创建Sequence,采用seq+视图名的方式命名。l  直接将数据插入至视图底层的表中。l  替换为普通视图。-自定义类型支持。不支持。将自定义类型替换为自定义函数。GaussDB A:DROP FUNCTION test_func(str text, delimter text) ; CREATE FUNCTION test_func(str text, delimter text)RETURNS setof intAS $$declare    arr text array;    result text;    item text;    sumnum int :=0;begin    select regexp_split_to_array(str,delimter) into arr from dual;    foreach item in array arr    loop        sumnum := sumnum+to_number(item);                if result is null then                        result := to_char(sumnum);                else                        result := result || delimter || to_char(sumnum);                end if;    --    raise info 'item: %  result %', item, sumnum;    end loop;         return query with t(a) as (select regexp_split_to_table(result, delimter)) select a::int from t;end;$$language plpgsql; select test_func('11#11#11','#');select string_agg(a, ',') from  (values ('aa'), ('bb'), ('cc')) as a(a) ;================================================= CREATE OR REPLACE FUNCTION public.test_func(str text, delimter text) RETURNS SETOF integer LANGUAGE plpgsql FENCEDAS $function$declare    arr text array;    result text;    item text;    sumnum int :=0;begin    select regexp_split_to_array(str,delimter) into arr from dual;    foreach item in array arr    loop        sumnum := sumnum+to_number(item);                if result is null then                        result := to_char(sumnum);                else                        result := result || delimter || to_char(sumnum);                end if;    --    raise info 'item: %  result %', item, sumnum;    end loop;         return query with t(a) as (select regexp_split_to_table(result, delimter)) select a::int from t;end;$function$package支持。不支持。替换为schema。变量放在函数里。Oracle:--存储过程和函数。function/procedure secu_f_global_setparm()--自定义游标。CREATE OR REPLACE PROCEDURE pkg_fasp_gl. checkdatas(                                    ....                      o_result_cur    out refcursor);--存储过程中引用包的全局变量。FUNCTION secu_f_global_setparm(v_userida varchar2,v_pmdivida varchar2,v_pmyeara varchar2,v_pmyaa varchar2 default null)  return varchar2 is      begin                v_userid:=v_userida;--调用存储过程。deleteglvouchersnolock;GaussDB A:--在数据库中创建和包名同名的schema。CREATE SCHEMA global_multyear_cz;--创建存储过程和函数。CREATE OR REPLACE FUNCTION/PROCEDURE global_multyear_cz.secu_f_global_setparm();--自定义游标。CREATE OR REPLACE PROCEDURE pkg_fasp_gl. checkdatas(                                    ....                      o_result_cur    out refcursor);--存储过程中引用包的全局变量。CREATE OR REPLACE FUNCTION global_multyear_cz.secu_f_global_setparm(v_userida varchar2,v_pmdividavarchar2,v_pmyeara varchar2,v_pmyaa varchar2 default null)  return varchar2 is      v_userid  varchar2(32);      begin--调用存储过程。deleteglvouchersnolock();procedure支持变量名和表定义字段名相同不支持变量名和表定义字段名相同GaussDB不允许存储过程中出现表字段名和变量名相同的情况,建议变量使用不同于字段的名称。Oracle:CREATE OR replace PROCEDURE ctrm3.s_insert_s_t_status_2015 ( v_settlemon IN varchar2 ) IS sql_query varchar2 ( 500 ) ;isdelete NUMBER ;BEGINsql_query := ' select sc.settleobjorg_id,sc.isdelete from settleobj_confirm sc ' ;OPEN cur_rs1 FOR sql_query ;LOOP…FETCH cur_rs1 INTO orgid,isdelete;EXIT…END ;/GaussDB A:CREATE OR replace PROCEDURE ctrm3.s_insert_s_t_status_2015 ( v_settlemon IN varchar2 ) IS sql_query varchar2 ( 500 ) ;isdelete1 NUMBER ;BEGINsql_query := ' select sc.settleobjorg_id,sc.isdelete from settleobj_confirm sc ' ;OPEN cur_rs1 FOR sql_query ;LOOP…FETCH cur_rs1 INTO orgid,isdelete1;EXIT…END ;/[l(1]视图user_view_tab_columns支持。不支持。使用如下自定义视图代替。CREATE VIEW  user_view_tab_columns asSELECT dba_view_columns.owner, dba_view_columns.table_name,dba_view_columns.column_name,dba_view_columns.data_type,dba_view_columns.column_id, dba_view_columns.data_length,dba_view_columns.comments  FROM dba_view_columnsUNION SELECT dba_tab_columns.owner, dba_tab_columns.table_name,dba_tab_columns.column_name, dba_tab_columns.data_type,dba_tab_columns.column_id, dba_tab_columns.data_length,dba_tab_columns.comments FROM dba_tab_columns;-
  • [迁移系列] Gauss DB(DWS)迁移系列-Oracle 函数转换差异(四)
    字符串处理函数:TO_NUMBER参数nlsparam:GaussDB A没有可选参数nlsparam。fmt:格式化字符串fmt和GaussDB A不完全一致,但是GaussDB A和PostgreSQL兼容。当需要将时间间隔转化为分钟数的时候,GaussDB A的to_number函数不能接受时间间隔类型的参数,可参考示例将to_number函数替换为cast函数来实现此功能。处理方案:在实施中如果TO_NUMBER带有nlsparam参数,建议直接删除参数。在实施中需要将时间间隔转化为分钟数的时候,将to_number函数替换为cast函数。示例OracleSELECT to_number ((to_date('201809091010s','yyyymmddhh24mis')-to_date('201809081111s','yyyymmddhh24mis'))*24*60 as number(16,2));GaussDB ASELECT cast((to_date('201809091010s','yyyymmddhh24mis')-to_date('201809081111s','yyyymmddhh24mis'))*24*60 as number(16,2));REPLACE函数说明GaussDB A中有类似函数replace(string  text, from text, to text),但是必须有第三个参数,没有需要用NULL替代。处理方案增加第三个参数,没有需要用NULL替代。示例OracleSELECT replace('1234','1') FROM dual; REPLACE('1234','1')-------------------234GaussDB ASELECT replace('1234','1',null) FROM dual; replace --------- 234(1 row)splitstr函数说明Oracle中的自建函数,用于行转列。GaussDB A不支持。处理方案使用GaussDB A的内置函数regexp_split_to_table;使用unnset和string_to_array的组合处理。示例OracleSELECT * FROM table (splitstr('11;22;33', ';')) ;GaussDB A方法一:使用unnset和string_to_array的组合处理。SELECT * FROM unnest(string_to_array('11;22;33',';')); unnest -------- 11 22 33(3 rows)方法二:使用内置函数regexp_split_to_table。SELECT * FROM regexp_split_to_table('11;22;33',';'); unnest -------- 11 22 33(3 rows)regexp_substr函数说明GaussDB A支持函数regexp_substr,语法和参数与Oracle有差异。Oracle数据库中支持五个参数:字符串,正则表达式,起始位置,匹配组,模式。GaussDB A数据库只支持两个参数:字符串,正则表达式。处理方案按照GaussDB A语法改写。regexp_replace函数说明GaussDB A支持函数regexp_replace。但是在Oracle中默认会进行全局替换,在GaussDB A中默认只会替换第一个满足条件的字符串。处理方案在Regexp_Replace函数中加上'g'参数,进行全局替换。regexp_instr函数说明正则表达式的抽取子串函数。GaussDB A无同名函数。处理方案使用regexp_substr函数替换regexp_instr函数。listagg函数说明GaussDB A无同名函数,可以用stringagg函数替换。处理方案使用stringagg函数替换Listagg函数。示例OracleSELECT listagg (T.OS_SOFTASSETS_ID,’,’) WITHIN GROUP (ORDER BY T.SOFTASSETS_ID);与窗口函数连用时:SELECT deptno,ename,sal,listagg(ename,',') WITHIN GROUP (order by sal) over (partition by deptno)name FROM emp;GaussDB ASELECT string_agg(T.OS_SOFTASSETS_ID,’,’);与窗口函数连用时:SELECT deptno,ename,sal,string_agg(ename,',')over(partition by deptno order by sal range between unbounded preceding and unbounded following) FROM emp;SYS_GUID函数说明SYS_GUID产生并返回一个全球唯一的标识符(原始值)由16个字节组成。GaussDB A目前无此语法,不兼容。处理方案目前没有很好的方法进行简单适配,只能自建函数实现此功能。自建函数示例如下:CREATE OR REPLACE FUNCTION public.sys_guid() RETURNS character varying LANGUAGE plpgsql FENCEDAS $function$ DECLARE  o_result varchar2; begin select nextval('sys_guid') into o_result from dual ;return o_result;end$function$current_user / user函数说明GaussDB ASQL语句中存在current_user或user写法时不能下推(V300R002C00之前版本),需要替换为可下推语法。处理方案在库中创建如下函数current_user_select(),并将业务中使用的current_user替换为current_user_select即可实现下推。函数current_user_select()如下:CREATE OR REPLACE FUNCTION public.current_user_select()RETURNS nameLANGUAGE internalimmutable STRICTAS $function$current_user$function$;示例OracleSELECT current_user FROM emp;GaussDB ASELECT current_user_select() FROM emp;sysdate/ current_date / SYSTIMESTAMP函数说明GaussDB ASQL语句中存在sysdate或current_date写法时不能下推(V300R002C00之前版本),同时,不支持SYSTIMESTAMP。处理方案需要使用current_timetamp(0)替换。current_timestamp带有时间及时区信息,如果不需要,可以使用substr函数截取。示例OracleSELECT sysdate FROM emp;SELECT current_date FROM emp;SELECT SYSTIMESTAMP FROM emp;GaussDB ASELECT current_timestamp(0) FROM emp;SELECT current_timestamp(0) FROM emp;SELECT current_timestamp(0) FROM emp;concat()函数说明GaussDB A SQL语句中如果存在concat函数,则整个语句不支持下推(6.5版本之前版本)。处理方案需要使用可改为||代替。示例OracleSELECT concat(first_name, last_name) FROM emp;GaussDB ASELECT first_name||last_name FROM emp;rowid函数说明是Oracle中的一个虚拟字段,用于返回特定行的具体地址。GaussDB A不支持。处理方案GaussDB A可用xc_node_id,tableoid,ctid三个虚拟字段的组合来替代。示例OracleSELECT empid, ename, ROWID FROM employees; GaussDB ASELECT empid, ename, CAST( ( xc_node_id || '#' || tableoid || '#' || ctid ) AS TEXT ) AS ROWID FROM employees; nvl2函数说明GaussDB A不支持。处理方案GaussDB A可用DECODE替代。示例OracleSELECT NVL2(Expr1, Expr2, Expr3) ;GaussDB ASELECT DECODE(Expr1, NULL, Expr3, Expr2) ;            keep函数说明keep是Oracle下的一个分析函数,它的用法不同于通过over关键字指定的分析函数,可以用于这样一种场合下:取同一个分组下以某个字段排序后,对指定字段取最小或最大的那个值。GaussDB A不支持。其实这个目标通过一般的dense_rank分析函数也可以实现,即指定rank=1。可结合示例修改keep函数。如果是取last,可以倒排序,如果取first,则可以正排序。处理方案GaussDB A可用dense_rank分析函数替代。指定rank=1。可结合下面例子修改keep函数。如果是取last,可以倒排序,如果取first,则可以正排序。示例OracleSELECT  max(id) keep(dense_rank last order by name) from test1 group by dept;GaussDB ASELECT max(v.id) FROM (select id,name, from test1) v WHERE dense_rank() OVER (partition by dept order by name desc) AS rankv.rank=1 GROUP BY v.dept;  
  • [迁移系列] Gauss DB(DWS)迁移系列-Oracle 函数转换差异(二)
    date 处理函数ADD_MONTHSGaussDB A目前无此语法,不兼容。处理方案现场实施的可以采取 + interval '1 month' 的方式实现同样功能。MONTHS_BETWEENGaussDB A目前无此语法,不兼容。处理方案目前没有很好的方法进行简单适配,只能自建函数实现此功能。自建函数示例如下:CREATE OR REPLACE FUNCTION MONTHS_BETWEEN(date, date) RETURNS double precision    AS $$    SELECT   CASE    --WHEN EXTRACT(day from $1) = EXTRACT(day FROM $2) THEN   /* the two dates have the same day component */       -- EXTRACT(year FROM $1) * 12 + EXTRACT(month FROM $1) - EXTRACT(year FROM $2) * 12 - EXTRACT(month FROM $2)    WHEN (EXTRACT(day FROM $1) = EXTRACT(day FROM (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day'))) and    (EXTRACT(day FROM $2) = EXTRACT(day FROM (date_trunc('MONTH', $2) + INTERVAL '1 MONTH - 1 day'))) THEN /* both the last day of the month */        EXTRACT(year FROM $1) * 12 + EXTRACT(month FROM $1) - EXTRACT(year FROM $2) * 12 - EXTRACT(month FROM $2)    when (EXTRACT(day FROM $1) = EXTRACT(day FROM (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day'))) and    (EXTRACT(day FROM $2) <> EXTRACT(day FROM (date_trunc('MONTH', $2) + INTERVAL '1 MONTH - 1 day'))) then         (EXTRACT(year FROM $1)-EXTRACT(year FROM $2))*12+         EXTRACT(month FROM $1)-EXTRACT(month FROM $2)+1-EXTRACT(day FROM $2)/31    when (EXTRACT(day FROM $1) <> EXTRACT(day FROM (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day'))) and    (EXTRACT(day FROM $2) = EXTRACT(day FROM (date_trunc('MONTH', $2) + INTERVAL '1 MONTH - 1 day'))) then         (EXTRACT(year FROM $1)-EXTRACT(year FROM $2))*12+         EXTRACT(month FROM $1)-EXTRACT(month FROM $2)-1+ EXTRACT(day FROM $1)/31         ELSE        (EXTRACT(year FROM $1)-EXTRACT(year FROM $2))*12+         EXTRACT(month FROM $1)-EXTRACT(month FROM $2)+         (EXTRACT(day FROM $1)-EXTRACT(day FROM $2))/31END NEXT_DAYGaussDB A目前无此语法,不兼容。处理方案实施中遇到此问题可以用 + interval '1 day'的方式简单适配。TRUNC(date)参数GaussDB A有一个类似的函数date_trunc(text, timestamp)。fmt:Oracle的fmt是可选的,GaussDB A的fmt是必选的。输出无差异。处理方案实施中此函数可以用GaussDB A的date_trunc实现。ROUND(date)GaussDB A目前无此语法,不兼容。处理方案:目前没有好的适配方案,只能自定义函数的形式实现逻辑。
  • [迁移系列] Gauss DB(DWS)迁移系列-Oracle 函数转换差异(一)
    与Oracle函数的差异TO_DATE参数fmt:有些Oracle的fmt格式GaussDB A没有,但是GaussDB A和Oracle的fmt绝大部分是一致的。GaussDB A的fmt是和PostgreSQL兼容的。nlsparam:GaussDB A没有可选参数nlsparam。此处的nlsparam是指参数NLS_DATE_LANGUAGE,主要是指结果的显示语言。输出Oracle输出格式为Date类型。GaussDB A输出格式为Timestamp类型。处理方案在实施中如果to_date带有nlsparam参数,建议直接删除参数。TO_CHAR(datetime)参数fmt:有些Oracle的fmt格式GaussDB A没有,但是GaussDB A和Oracle的fmt绝大部分是一致的。GaussDB A和PostgreSQL支持的fmt格式兼容。nlsparam:GaussDB A没有可选参数nlsparam,此处的nlsparam是指参数NLS_DATE_LANGUAGE,主要是指结果的显示语言。输出无差异。处理方案在实施中如果to_char带有nlsparam参数,建议直接删除参数。TO_CHAR (character)GaussDB A目前无此语法,不兼容。TO_CHAR (number)参数fmt:格式中B C PR TM U X,GaussDB A不支持。但是这几种格式相对生僻。nlsparam:GaussDB A没有可选参数nlsparam,此处的nlsparam是指NLS_NUMERIC_CHARACTERS,NLS_CURRENCY,NLS_ISO_CURRENCY。功能近似于对应GaussDB A的lc_monetary,lc_numeric。输出无差异。处理方案在实施中如果to_char带有nlsparam参数,建议直接删除参数。
  • [迁移系列] Gauss DB(DWS)迁移系列-Oracle 数据类型差异
    Oracle数据类型差异数据类型OracleGaussDB A处理方案NUMBER支持两种类型:l  NUMBER(10,0)l  NUMBER(10.0)只支持NUMBER(10,0)格式。替换SMALLINT支持自定义精度,例如SMALLINT(10,0)。不支持自定义精度,如SMALLINT。替换VARCHAR2支持类型:VARCHAR2( num char)支持类型:NVARCHAR2(n)替换
  • [迁移系列] [项目实践-迁移系列] Gauss DB(DWS)迁移系列-Oracle迁移分析函数
    Oracle 的分析函数ratio_to_report函数名称OracleGaussDB A迁移方案ratio_to_reportselect    name,    score,    ratio_to_report(score) over() as  "占所有科目的百分比",    ratio_to_report(score) over(partition by kemu) as  "占各科目的百分比"from student_info;select    name,    score,    (score/sum(score) over()) as "占所有科目的百分比",    (score/sum(score) over(partition by kemu)) as "占各科目的百分比"from student_info;
  • [运维管理] GaussDB A 8.0.0.7 白名单配置问题
    集群外客户端访问集群时需要配置白名单,想知道白名单中配置的外部IP是否支持通过配置域名解析来实现?我看产品文档上也没相关描述;如果有的话,是否可以提供相关示例。
  • [热门活动] 什么?听说你想免费试用GaussDB(DWS)?安排!!!
    一、活动时间:2021年4月15日—2021年6月30日二、活动介绍:     大家期待已久的GaussDB(DWS)免费试用活动,来咯!现在填写试用申请问卷,工作人员将根据问卷信息筛选抽取用户赠送价值3578.4元的DWS免费试用机会,名额有限,快来申请吧!      ps:问卷信息请尽可能完整正确,方便我们联系您哦~三、试用规格:产品规格:标准数仓-鲲鹏-4 vCPUs |32 GB|160GB SSD节点数量:3节点四、申请步骤:1、扫码关注GaussDB(DWS)微信公众号↓↓↓,在公众号后台回复“免费试用”获取问卷链接,填写调查问卷;2、工作人员将根据问卷信息筛选抽取免费试用用户,并邮件告知用户免费试用筛选抽取结果;3、扫描下方二维码添加小助手微信,获得免费试用名额的用户联系小助手配置DWS免费试用权限;4、开始试用,定期反馈试用心得。五、试用新手指南(简单4步,轻松上手!) 产品主页:https://www.huaweicloud.com/product/dws.html产品文档:https://support.huaweicloud.com/dws/快速入门:https://support.huaweicloud.com/qs-dws/开发者社区:https://bbs.huaweicloud.com/forum/forum-598-1.html免费试用教程:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=126069&page=1&extra=#pid1163477六、注意事项1、活动期间,同一用户仅能申请一次DWS免费试用机会;*同一用户指:在华为云注册、登录、使用过程中的实名认证信息、手机号、邮箱、设备或地址如果一样,则视为同一用户;2、如用户账号下存在未支付订单,会导致系统对用户试用资格的审核无法通过;在此情况下,用户须将相应的未支付订单作废后,方可正常参与相应产品的试用(去订单管理);订单管理:https://account.huaweicloud.com/usercenter/?agencyId=09e4b1f3b50025ba1f2fc0173e9a84cb&region=cn-north-4&locale=zh-cn#/userindex/myOrder3、试用产品的升级:用户在试用GaussDB(DWS)过程中,主动进行升配等操作,将按照官网标准价格收费;如果进行降配或切换计费方式等,将不进行退费。注意:降配或切换计费方式后,如果需要切换回原来的配置,可能会产生额外的费用;具体场景或解释说明,请您浏览阅读 《变更资源费用说明》;*变更资源费用说明:https://support.huaweicloud.com/usermanual-billing/renewals_topic_60000001.html4、试用产品的续费:用户需要在试用期满后继续使用相关云产品的,应当在期满前按标准费用进行续费;5、免费试用时长为领取免费试用之日起30天内,试用期结束后,集群如果未删除会自行续费,用户可在试用期到期之前自行删除集群,否则超期费用将由用户自己承担;6、华为云有权根据业务需求,随时调整提供给用户免费试用的产品范围、产品数量、产品配置、试用规则等,用户应以参与试用时相关页面的展示内容为准;7、用户参与免费试用所获得的相应权益,仅限本账号使用,不得转让、出售或以其他方式换取利益;8、为保证活动的公平公正,华为云有权对恶意刷抢(如通过程序等技术手段)活动资源,长期资源闲置,利用资源从事违法违规行为的用户收回免费套餐使用资格;9、如用户在活动中存在隐瞒、虚构、作弊、欺诈或通过其他非正常手段规避活动规则、获取不当利益的行为,例如:作弊领取、恶意套现、网络攻击、虚假交易等,华为云有权收回相关权益、取消用户的活动参与资格,撤销违规交易,必要时追究违规用户的法律责任;10、所有参加本活动的用户,均视为认可并同意遵守《华为云用户协议》;*华为云用户协议:https://www.huaweicloud.com/declaration/sa_cua.html11、DWS免费试用用户每周须反馈至少一篇试用心得(内容包括但不限于实践经验、技术干货、开发技能、学习心得、产品建议等);12、本活动最终解释权归华为云数仓GaussDB(DWS)所有。 【推荐阅读】【最新活动汇总】DWS活动火热进行中,互动好礼送不停(持续更新中)  HOT  【博文汇总】GaussDB(DWS)博文汇总1,欢迎大家交流探讨~(持续更新中)【维护宝典汇总】GaussDB(DWS)维护宝典汇总贴1,欢迎大家交流探讨(持续更新中)【项目实践汇总】GaussDB(DWS)项目实践汇总贴,欢迎大家交流探讨(持续更新中)【DevRun直播汇总】GaussDB(DWS)黑科技直播汇总,欢迎大家交流学习(持续更新中)【培训视频汇总】GaussDB(DWS) 培训视频汇总,欢迎大家交流学习(持续更新中)扫码关注我哦,我在这里↓↓↓
  • [技术干货] HDC.Cloud2021|如何使用华为云GaussDB(for Influx) + Grafana搭建亿级时间线数据的监控系统
     随着云计算规模越来越大,以及物联网应用逐渐普及,在物联网(AIoT)以及运维监控(AIOps)领域,存在海量的时序数据需要存储管理。我们日常在生活中经常见到城市的空气质量、风力和温度等数据,都需要用到时序数据库,再通过监控系统和大数据处理系统利用时序数据库的数据查询和计算分析功能将业务监控和分析结果实时展现出来。读完本文你将很快学会使用华为云数据库GaussDB(for Influx) + Grafana搭建亿级时间线数据的监控系统。 在真实的场景中,监控系统主要负责监控指标的采集、展示、分析和告警,其作用在于监控业务整体的运行情况。系统采集的指标通常和业务运维是强相关的,比如通用指标有服务器资源数据(CPU,内存,磁盘空间,带宽,网络时延),比如业务相关指标,以视频会议的应用为例,包括创建会议事件相关信息,会议接入相关信息,接口调用状态信息等。指标数据采集与存储 指标数据是典型的时序数据,适合采用时序数据库进行存储。GaussDB(for Influx)为华为云时序数据库服务,购买即可使用,无需安装部署。 采集业务相关指标数据通常有写时序数据库和写日志两种方法,其中写时序数据库最为直接,适合于中小型应用。大型企业级应用通常采用写日志的方式,由Kafka对日志进行收集和聚合,再利用Telegraf取出Kafka数据并写入时序数据库。Telegraf采集Kafka数据的简单配置如下:[[inputs.kafka_consumer]] ## Kafka brokers. ## 这里设置Kafka brokers的IP地址 brokers = ["192.168.100.10:9092"] ## Topics to consume. topics = ["telegraf"] ...... ## Data format to consume. ## Each data format has its own unique set of configuration options, read ## more about them here: ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md ## 这里设置数据格式,其他格式参考 DATA_FORMAT_INPUT.md,Logfmt为日志格式。 data_format = "Logfmt"Telegraf写入时序数据库的配置如下:# Configuration for sending metrics to InfluxDB [[outputs.influxdb]] ## The full HTTP or UDP URL for your InfluxDB instance. ## ## Multiple URLs can be specified for a single cluster, only ONE of the ## urls will be written to each interval. # urls = ["unix:///var/run/influxdb.sock"] # urls = ["udp://127.0.0.1:8089"] ## 这里设置华为云GaussDB(for Influx)的配置的ELB IP地址或者节点内网IP地址 urls=[“https://rwuser:password@IP:8635”] ## The target database for metrics; will be created as needed. ## For UDP url endpoint database needs to be configured on server side. ## 设置数据库名称(默认telegraf) database = "telegraf" ... ... ## HTTP Basic Auth ## 这里设置GaussDB(for Influx)数据库用户名和密码,实际密码替换password username = "rwuser" password = "password" ## HTTP User-Agent # user_agent = "telegraf" ## UDP payload size is the maximum packet size to send. # udp_payload = "512B" ## Optional TLS Config for use on HTTP connections. # tls_ca = "/etc/telegraf/ca.pem" # tls_cert = "/etc/telegraf/cert.pem" # tls_key = "/etc/telegraf/key.pem" ## Use TLS but skip chain & host verification ## 这里设置跳过ssl验证 # insecure_skip_verify = true以上配置中,中文注释的部分是必须设置的。GaussDB(for Influx)的用户名默认为rwuser,不可更改。配置时,选择时序数据库的其中一个节点内网ip或者ELB ip替换urls中的IP,用GaussDB(for Influx)实例的密码替换password,如果密码包含如下特殊字符,需换成 ASIIC 码形式输入。~ : %7E,! : %21,@ : %40,# : %23,$ : %24% : %25,^ : %5E,& : %26,* : %2A,? : %3F例如密码:“Huawei@123”,转换后为 “Huawei%40123”。在应用程序中直接写入GaussDB(for Influx)有所不同,需要借助驱动程序帮助完成。以Python为例:第一步:安装数据库驱动pip install influxdb # Debian Or Ubuntu系统上使用如下命令 sudo apt-get install python-influxdb第二步:连接GaussDB(for Influx)# Python from influxdb import InfluxDBClient ## 使用GaussDB(for Influx)的ELB IP或者实例节点的IP替换填写host,用户密码填写password, ## 并指定连接数据库database。 client = InfluxDBClient(host='localhost', port=8635, username='rwuser', password='password', database='telegraf', ssl=True, verify_ssl=False)第三步:数据写入json_body = [ { "measurement": "my_tab", "tags": { "host": "server01", "region": "us-west" }, "time": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.localtime()), "fields": { "used_cpu": cpu_used_rate, "used_mem": mem_used_rate } }] client.write_points(json_body)        Java语言的驱动程序,可以参考https://github.com/influxdata/influxdb-javaGrafana数据展示       Grafana是一个跨平台、开源的数据可视化平台。用户配置连接的数据源之后,Grafana可以在网络浏览器里显示数据图表和警告。服务端启动Grafana后,通过浏览器访问:## 这里的IP可以是云上服务器的弹性IP,也可以是本地自建服务器的Ip地址。 http://IP:3000登陆Grafana的首页如下图所示。1.展示数据第一步:创建数据源,点击如下图中的红框位置。选择InfluxDB,因为GaussDB(For Influx)完全兼容InfluxDB填写如下参数:URL :https://rwuser:password@IP:8635 。IP为数据库实例的内网ip(参考1步骤(1)), 用rwuser密码替换password(参考1.1步骤(6)),如果密码包含如下特殊字符,需换成 ASIIC 码形式输入。~ : %7E,! : %21,@ : %40,# : %23,$ : %24% : %25,^ : %5E,& : %26,* : %2A,? : %3F例如密码:“Huawei@123”,转换后为 “Huawei%40123”。Auth:打开选项Basic auth 和skip TSL Verify。Basic Auth Details:User:rwuserPassword:购买数据库实例时设置(参考1.1步骤(6)),如“nJa#w7f3”。InfluxDB Details:Database:telegraf(也可以填写其他自己创建的数据库)。User:rwuserPassword:购买数据库实例时设置(参考1.1步骤(6)),如“nJa#w7f3”。点击“保存”(save)。数据展示第二步:创建数据看板点击首页DASHBOARDS创建看板,或者侧边“+”快捷按钮。重点配置项(详细参见截图红框部分):Visualization:Graph展示时间范围:last 1 hour数据更新时间间隔:1m数据源名称:InfluxDB-DataSource查询语句配置如下(以展示服务器CPU利用率为例,从时序数据库的表cpu中查询usage_user,按1m的分组时间间隔求平均值,时间线是cpu=cpu-total):FROM autogen cpu Where cpu = cpu-total SELECT field (usage_user) mean () GROUP BY time (1m) fill (0) 面板中的每个图都是可以编辑的,也可以设置告警。总结 随着云计算和物联网的发展,数据规模急剧增加,监控系统的核心在于时序数据库,一个高可用、高性能、企业级的时序数据库对监控系统的稳定起决定性作用。 GaussDB(for Influx)是一个云原生存储与计算分离架构的时序数据库,支持亿级时间线,具备高可靠、高性能,非常适合DevOps场景下的海量时间线数据的存储,是监控系统最佳的选择。 作为华为ICT基础设施业务面向全球开发者的年度盛会,华为开发者大会2021(Cloud)将于2021年4月24日-26日在深圳举行。本届大会以#每一个开发者都了不起#为主题,将汇聚业界大咖、华为科学家、顶级技术专家、天才少年和众多开发者,共同探讨和分享云、计算、人工智能等最新ICT技术在行业的深度创新和应用。智能时代,每一个开发者都在创造一往无前的奔腾时代。世界有你,了不起! 点击链接,了解大会详细信息。https://developer.huaweicloud.com/HDC.Cloud2021.html
  • [其他] 【DWS】【故障】DWS快照删除有文件残留,残留文件长期堆积,导致obs空间被占满影响本服务和其他服务
    问题现象:     DWS桶中文件不断积压,导致obs空间被占满影响本服务和其他服务分析原因:     DWS快照删obs快照文件有残留,导致快照文件在桶中不断积压规避方案:手动删除残留的文件,具体操作如下    1.使用op_cdk_sso/xxxxxx 登录cloudscope查看dwscontroller服务获取obs服务的配置信息,筛选obs.endpoint     2.登录数据库获取obsBucket,ak,sk信息              a. select tenantId from rds_cluster  where name='集群名称'              b.select obsBucket,ak,sk from rds_restenant t where realDomainId={tenantId } \G;               c.其中sk问加密密文,需要使用java -jar AESTool.jar进行解 3.使用1,2获取的信息,补充登录信息,使用obs工具登录obs服务 4.参考运营面快照情况,对残留过期的快照文件进行删除 5.联系obs的同事,调整碎片收集的时间,可以为30分钟,保证空间可以尽快恢复可用//认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全
  • [其他] 【gsar】【网络监控】gsar网络监测工具使用及含义说明
    【功能描述】对指定网卡流量、重传、丢包等指标监测,以便快速定位网络问题。【实现效果】【参数说明】1. 网卡名(图中eth8):指定监测的网卡名称,可使用ifconfig命令根据相应ip找到网卡;2. 监控时间(图中5):gsar脚本每一秒钟打印一次监测结果,该参数可缺省,表示不停止;【结果说明】1. time:系统时间,每一秒打印一次;2. recv_kbyte:接收流量大小(老版本为byte);3. recv_pkg:接收包数量;4. ave_len:接收包平均长度(单位byte);5. recv_drop:接收丢包数量;6. drop_per:丢包率;7. send_kbyte:发送流量大小(老版本为byte);8. send_pkg:发送包数量;9. ave_len:发送包平均长度(单位byte);10. tcp_estab:tcp处于正常连接状态数量;11. tcp_send:tcp发包数量(8中为指定网卡);12. resend:tcp重传包数量;13. resend_per:tcp重传率;【结果应用】1. recv_kbyte/send_kbyte:接收/发送流量接近网卡上限,网络存在瓶颈;2. drop_per/resend_per:丢包/重传率超过0.05%,网络链路问题;3. ave_len:包长过大(通常小于1500),网卡参数排查;4. tcp_estab:连接数过多,排查并发、空闲连接;【存放位置】通常情况下在/opt/huawei/Bigdata/mppdb/core/bin/dfx_tool目录下
  • [维护宝典] 【目录】GaussDB DWS存储类问题汇总
    GaussDB DWS存储类问题汇总原理类行列存GaussDB(DWS)之数据库对象设计https://bbs.huaweicloud.com/blogs/195856GaussDB(DWS)&TD分区表设计原理和使用对比 https://bbs.huaweicloud.com/blogs/177226GaussDB(DWS)存储系列之行存表https://bbs.huaweicloud.com/blogs/207721Gauss行列存储压缩总结https://bbs.huaweicloud.com/blogs/233430HAGaussDB(DWS)高可用之数据复制https://bbs.huaweicloud.com/blogs/175234GaussDB(DWS)高可用之主备从HA技术https://bbs.huaweicloud.com/blogs/175249GaussDB(DWS)数据同步状态查看方法https://bbs.huaweicloud.com/blogs/198536事务GaussDB中两阶段事务的故障与恢复https://bbs.huaweicloud.com/blogs/201221等待事务synhttps://bbs.huaweicloud.com/blogs/195267GTMGaussDB(DWS)中GTM组件对sequence管理https://bbs.huaweicloud.com/blogs/193095数仓GaussDB(DWS)GTM总结https://bbs.huaweicloud.com/blogs/198243vacuumGaussDB(DWS) VACUUM总结https://bbs.huaweicloud.com/blogs/245835锁GaussDB(DWS) 锁管理介绍https://bbs.huaweicloud.com/blogs/228062GaussDB常规锁简介https://bbs.huaweicloud.com/blogs/228809GaussDB(DWS)之锁等待场景介绍https://bbs.huaweicloud.com/blogs/233114字符集GaussDB(DWS) 字符集浅谈https://bbs.huaweicloud.com/blogs/176354运维经验&&最佳实践磁盘使用空间磁盘使用率相关问题定位指南https://bbs.huaweicloud.com/blogs/174806GaussDB(DWS)运维的那些事?   ——关于释放磁盘异常占用空间的经验总结https://bbs.huaweicloud.com/blogs/245125vacuum fullDWS表对象VACUUM FULL实践https://bbs.huaweicloud.com/blogs/174978GaussDB(DWS)系统表清理指南https://bbs.huaweicloud.com/blogs/212723DWS数据脏页统计及空间回收介绍https://bbs.huaweicloud.com/blogs/213674关于DWS 空间释放(vacuum   full) 最佳实践https://bbs.huaweicloud.com/blogs/214160vacuum full执行慢怎么办?https://bbs.huaweicloud.com/blogs/222033vacuum full回收机制——oldestXminhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=90486HAGaussDB   (DWS)高可用问题定位指南https://bbs.huaweicloud.com/blogs/198733GaussDB(DWS)实例长期处于catchup问题分析https://bbs.huaweicloud.com/blogs/242269行列存GaussDB(DWS)创建行存表的最佳实践https://bbs.huaweicloud.com/blogs/238443数据恢复GaussDB(DWS)delete误删数据后如何恢复https://bbs.huaweicloud.com/blogs/197988GDSGaussDB(DWS)数据量太大?试试GDS并行导入https://bbs.huaweicloud.com/blogs/194902
总条数:2746 到第 页
上滑加载中