-
如题,现网用户使用官方提供的ODBC包,在windows下cognos连接DWS时,报Out of memory while reading tuples. 使用其他工具连接,也报一样的错误,说明与cognos本身没关系。ODBC在输出大数据量结果时,会一次性将结果输出出来,而windows的内存量不足以处理这样大量的数据时就会报这样的错误,查询资料后,可以通过勾选odbc的选项"use Declare/Fetch",利用游标来缓存结果,这样就不会让输出结果集消耗完内存。修改odbc的选项路径为Options->Datasource->use Declare/Fetch
-
【表关联】行存表与列存表关联 和 列存表与列存表关联的性能是否差距很明显【操作步骤&问题现象】在GaussDB(DWS)中行存表天然的使用行执行引擎,列存表天然的使用列执行引擎。如果一个SQL语句涉及的表既有行存表又有列存表,系统会自动选择行执行引擎。由于列执行引擎的性能(除indexscan相关的算子)比行执行引擎性能要好很多【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
4月25日,在华为开发者大会(Cloud)“鹏城论剑,共话数据库前沿技术和趋势”峰会上,华为云数据库总裁苏光牛,中国信通院大数据与区块链副主任姜春宇,极数云舟创始人&CEO、ArKDB总架构师周彦伟,MongoDB中文社区主席&Tapdata CTO唐建法,openGauss技术委员会主席及首席架构师田文罡,华为云数据库首席架构师彭立勋等在内的数据库领域大咖,共同宣布了2021年第三届华为云GaussDB数据库挑战赛正式启动。与开发者同行,共促行业新发展苏光牛现场介绍道,数据库是典型的硬核科技,是企业核心系统的核心,系统、技术、理论、生态等元素缺一不可。华为十分重视数据库人才培养和生态建设,目前华为云GaussDB数据库已经和74所高校建立课程合作关系,课程共覆盖了5万+学生。开发者作为改变世界的重要一环,是企业创新和发展的源动力。华为每年组织的线下线上开发者技术交流活动有100+场,技术沙龙和培训赋能超过50场,通过技术赋能,不断提升开发者的开发能力,助其打造更具创新力、实践性的优秀产品。目前华为云数据库开发者数量累计已达10万,并在不断增加中。创办数据库挑战赛,搭建技术交流平台除了教育、培训,华为云数据库在2019年面向全行业首次发起华为云数据库挑战赛,旨在提供一个技术交流平台,与行业精英与数据库爱好者共同探索数据库领域的创新技术与工程实现。从2019到2021,华为云数据库挑战赛已经举办了三个年头。2019年,第一届华为云数据库挑战赛由近千人组成400多支队伍展开竞争,经过3个月激烈角逐,提交了近6000次作品。2020年,第二届华为云数据库挑战赛在开发者和伙伴们的高涨呼声中再次启动。近3000人参与竞赛,涵括250+高校、30+行业,同比首届人数增长了2倍多。第二届特设极客组和商业组两大赛道,秉承着“开发者改变世界,商业化加速前行”的理念,极客组面向全社会开放,聚焦工程型的问题,培养数据库工程类人才;商业组面向合作伙伴开放,聚焦工具、解决方案及应用,满足数据库领域商业需求。开放数据库生态,共创智能新未来生态开放对数据库发展至关重要,可以说代表了数据库的未来。因为开放的生态,可以让企业的业务具备更好的连续性,更好保护客户的投资,而封闭的数据库生态是没有活力的,因此,华为十分重视生态开放。华为云数据库一直致力于携手更多领域开发者共建一个开放、合作、共赢的产业生态,基于华为云数据库挑战赛为开发者提供一个技术交流、人才培养、机遇共创的平台,共研技术新方向,共创智能新未来。所以,华为把openGauss单机主备版本进行了开源,并鼓励广大开发者、数据库厂商深入了解和使用openGauss,也欢迎千行百业的客户使用基于openGauss的商业发行版,加速数字化转型进程。据悉,第三届华为云GaussDB数据库挑战赛将以GaussDB分布式数据库相关特性为重点课题,由华为资深专家团出题,面向全社会开放(包括企业、高校、创客团队、个人开发者),并准备了丰厚奖品池和云资源体验券。
-
【功能模块】GaussDB集群监控管理【操作步骤&问题现象】1、在GaussDB的CN节点可否通过运行shell或者python脚本的 方式来查询集群中正在运行SQL的资源消耗情况与SQL执行时长具体统计信息是否可以获取,获取路径可否告知【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】DMS【操作步骤&问题现象】1、打开告警管理2、进入查看告警3、配置默认资源池hang告警阈值【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】能否通过设置某项参数来达到自动检测执行计划中的cost 或者 是否产生笛卡尔积 来决定 该条SQL是否执行?【操作步骤&问题现象】1、在CN的SQL语句的优化阶段,能否根据设定的参数直接决定该条SQL语句是否能够执行【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
jdbc连接报错:Invalid or unsupported by client SCRAM mechanisms。怎么解决?
-
创建的列式表和索引create table test1( sfzh varchar(255), ……) with (orientation=column ,……)distribute by hash(sfzh).create index test1_sfzh on test1 using cbtree(sfzh)但是查询的时候select * from test1 where sfzh='XXXXX'看分析过程,并没有落在索引上查询。
-
函数名函数说明样例返回说明兼容对象语言位置ADD_MONTHS2(p1,p2) 当前日期 P1 增加 p2 个月的月末测试案例: select ADD_MONTHS2('2018-04-22',2); 输出: 20180630dateTDC语言https://bbs.huaweicloud.com/forum/thread-173862-1-1.htmlADD_MONTHS3(p1,p2)当前日期 P1 增加 p2 个月的月末测试案例: select ADD_MONTHS3(CAST('20180502' AS DATE FORMAT 'YYYYMMDD'),3)输出: 20180831dateTDC语言 DPT_MOB12(p1,p2)计算变量VAR514测试案例:select DPT_MOB12('1010101',30);输出: 1intergerTDC语言 edit_distance_similarity(p1,p2)比较两个字符串的相似度测试案例:select edit_distance_similarity('河北沧州东朔股份有限公司','河北沧州东朔股份有限公司')输出: 100select edit_distance_similarity('河北沧州东朔股份有限公司','沧州东朔房地产开发又发公司')输出: 50intergerORACLEC语言 max_col(p1,p2)计算浮点数最大值测试案例:select max_col(3.3,2.2);输出: 3.30floatTDC语言 min_col(p1,p2)计算浮点数最小值测试案例:select min_col(3.3,2.2);输出: 2.20floatTDC语言 month_between(p1,p2)间隔月份测试案例:select month_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: 7intergerTDC语言 month_between1(p1,p2) P1(YYYYMM)-P2(YYYYMM)的月份数测试案例:select month1_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: -8intergerTDC语言 month_between1(p1,p2) P1(YYYYMM)-P2(YYYYMM)的月份数测试案例:select month_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: 7intergeroracleC语言 specialdata(inputdata varchar,inputtype varchar)根据获取的时间类型,获取对应的时间本月初:specialdate('20190806',11),返回时间:20190801本月末:specialdate('20190806',12),返回时间:20190831上月初:specialdate('20190806',13),返回时间:20190701上月末:specialdate('20190806',14),返回时间:201907031本季初:specialdate('20190806',21),返回时间:20190701本季末:specialdate('20190806',22),返回时间:20190930上季初:specialdate('20190806',23),返回时间:20190301上季末:specialdate('20190806',44),返回时间:20190630本年初:specialdate('20190806',31),返回时间:20190101本年末:specialdate('20190806',32),返回时间:201901231上年初:specialdate('20190806',33),返回时间:20180101上年末:specialdate('20190806',34);返回时间:201801230dateTDplsql substring_index(str,delim,count)按关键字截取字符串 例:select substring_index('blog.jb51.net','.', 2) as abstract from my_content_t结果:blog.jb51 textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173882-1-1.htmlchar2hexint(text)GBK字符集下的字符的16进制select char2hexint('1中2文'); char2hexint -------------- 31D6D032CEC4textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173886-1-1.htmlchars(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select chars('1中2文'); chars------- 6integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173892-1-1.htmldaynumber_of_calendar(date)输入日期与'1900-01-01'相差的天数select daynumber_of_calendar(current_date); daynumber_of_calendar----------------------- 44508integerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173897daynumber_of_month(date)一个月的第几天select daynumber_of_month(date '2021-11-09'); daynumber_of_month-------------------- 9integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173900-1-1.htmldaynumber_of_week(date)一个周的第几天,在td中,周日为1,周六为7select daynumber_of_week(date '2021-11-07'); daynumber_of_week------------------- 1integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173909-1-1.htmldaynumber_of_year(date)一个年的第几天select daynumber_of_year(date '2021-11-06'); daynumber_of_year------------------- 310integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173911-1-1.htmllpad(character varying,integer,character varying)左边填充,td中1个中文占2个字符,导致td与dws结果不一样select public.lpad('1中2文',10,'#'); lpad ------------ ####1中2文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-174007-1-1.htmlmonthnumber_of_year(date)一个年的第几月select monthnumber_of_year(date '2021-11-10'); monthnumber_of_year--------------------- 11integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173927-1-1.htmlmonths_between(date,date)日期相差月份数量select months_between(date '2021-11-10',date '2021-09-20'); months_between---------------- 1.6774numericTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173935&page=1&authorid=&replytype=&extra=#pid1396442months_between_double(date,date)日期相差月份数量(中间函数),一般不使用,因此c函数只能返回double类型,但一般函数返回integer。 double precisionTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173936numtoyminterval(integer,character varying)数字转interval,与td保持一致,第二个参数输入只能是YEAR或者MONTHselect numtoyminterval(100, 'MONTH'); numtoyminterval----------------- 8 years 4 monsintervalTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173872-1-1.htmloadd_months(date,integer)获取多个月以后(以前)的同样的日期。若是月末取月末(区别与add_months)select oadd_months(date '2020-02-29',-1); oadd_months------------- 2020-01-31select oadd_months(date '2020-02-28',1); oadd_months------------- 2020-03-28dateTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173876quarternumber_of_year(date)一个年的第几个季度select quarternumber_of_year(date '2021-10-01'); quarternumber_of_year----------------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173879-1-1.htmlregexp_instr(text,text,integer)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:匹配的其实位置通过正则表达式搜索字符位置,需考虑中文字符select regexp_instr('中1文2','\d',1); regexp_instr-------------- 3intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173885-1-1.htmlregexp_similar(text,text,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写函数功能:判断输入的字符串是否满足输入的正则表达式select regexp_similar('12345678902','\d+','c'); regexp_similar---------------- 1(1 row)cmbgdw=> select regexp_similar('1234567890w','\d+','c'); regexp_similar---------------- 0select regexp_similar('1234567890W','\d+[a-z]','c'); regexp_similar---------------- 0(1 row)cmbgdw=> select regexp_similar('1234567890W','\d+[a-z]','i'); regexp_similar---------------- 1intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173888-1-1.htmlregexp_substr(text,text,integer,integer,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:搜索起始位置第四个参数:取匹配到的第几个组字符第五个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写,默认为c函数功能:通过正则表达式截取字符cmbgdw=> select regexp_substr('1中2文','\d',1,1,'i'); regexp_substr--------------- 1(1 row)cmbgdw=> select regexp_substr('1中2文','\d',1,2,'i'); regexp_substr--------------- 2(1 row)textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173890-1-1.htmlregexp_substr(text,text,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:是否区分大小写等作用同上面的regexp_substr(text,text,1,1,text)select regexp_substr('1中2文','\d','i'); regexp_substr--------------- 1textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173895-1-1.htmlround2(numeric,integer)td无该函数,用于适配td的奇进偶舍的进制,作用:对于小数需要进行round操作时,0.5这样的需要判断进位的前一位数字,若是奇数,则进一位,若是偶数,则舍弃 select round2(1.25,1); round2-------- 1.2(1 row)cmbgdw=> select round2(1.35,1); round2-------- 1.4numericTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173896-1-1.htmlstrtok(text,text,integer)适配td的strtok函数,作用是按指定分隔符切割字符串。第一个参数:输入的字符第二个参数:分隔符第三个参数:取第几位select strtok('a,b,c,d',',',3); strtok-------- ctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173899-1-1.htmltd_char(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_char('1中2文'); td_char--------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173902-1-1.htmltd_char_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_char_length('1中2文'); td_char_length---------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173904-1-1.htmltd_character(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_character('1中2文'); td_character-------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173983td_character_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_character_length('1中2文'); td_character_length--------------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173984td_day_of_calendar(date)输入日期与'1900-01-01'相差的天数select td_day_of_calendar(date '2021-11-10'); td_day_of_calendar-------------------- 44509intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173986td_day_of_month(date)一个月的第几天select td_day_of_month(date '2021-11-10'); td_day_of_month----------------- 10intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173987td_day_of_month(timestamp without time zone)一个月的第几天select td_day_of_month( '2021-11-10 10:01:01'); td_day_of_month----------------- 10intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173989td_day_of_week(date)一个周的第几天,在td中,周日为1,周六为7select td_day_of_week(date '2021-11-10'); td_day_of_week---------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173993td_day_of_week(timestamp without time zone)一个周的第几天,在td中,周日为1,周六为7select td_day_of_week( '2021-11-10 10:01:01'); td_day_of_week---------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173994td_day_of_year(date)一个年的第几天select td_day_of_year(date '2021-11-10'); td_day_of_year---------------- 314intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173996td_day_of_year(timestamp without time zone)一个年的第几天select td_day_of_year( '2021-11-10 10:10:10'); td_day_of_year---------------- 314intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173997td_instr(text,text,integer)返回某个字符的位置,第三个参数是指定搜索位置,类似instr,考虑td与dws字符集影响而新增select td_instr('1中2文','2',1); td_instr---------- 4(1 row)select instr('1中2文','2',1); instr------- 3(1 row)textTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174000td_left(text,integer)与left类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select td_left('1中2文',3); td_left--------- 1中select td_left('1中2文',2); td_left--------- 1\x0Fselect left('1中2文',2); left------ 1中textTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174003td_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_length('1中2文'); td_length----------- 6(1 row)cmbgdw=> select length('1中2文'); length-------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174009td_month_begin(date)获取当天月初日期select td_month_begin(date '2021-11-10'); td_month_begin---------------- 2021-11-01dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173937-1-1.htmltd_month_begin(timestamp without time zone) dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173939-1-1.htmltd_month_end(date)获取当天月末日期select td_month_end(date '2021-11-10'); td_month_end-------------- 2021-11-30dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173941-1-1.htmltd_month_end(timestamp without time zone) dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173942-1-1.htmltd_quarter_of_year(date)一个年的第几个季度select td_quarter_of_year(date '2021-10-01') ; td_quarter_of_year-------------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173943-1-1.htmltd_regexp_replace(text,text,text)因dws也有regexp_replace,此函数区别区别于dws,因此命名为td_regexp_replace第一个参数:输入的字符串第二个参数:输入的正则表达式第三个参数:匹配后替换的字符select td_regexp_replace('1a2b3c','\d','w'); td_regexp_replace------------------- wawbwctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173944-1-1.htmltd_regexp_replace(text,text,text,integer,integer,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:匹配到替换的字符第四个参数:搜索起始位置第五个参数:取匹配到的第几个组字符,输入0,则对所有匹配的都做替换,只接受0和1第六个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写,默认为c函数功能:通过正则表达式替换字符select td_regexp_replace('1a2b3c','\d','w',2,1,'i'); td_regexp_replace------------------- 1awb3c(1 row)cmbgdw=> select td_regexp_replace('1a2b3c','\d','w',2,0,'i'); td_regexp_replace------------------- 1awbwctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173945-1-1.htmltd_right(text,integer)与right类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select right('1中2文',2); right------- 2文(1 row)cmbgdw=> select td_right('1中2文',2); td_right---------- 文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173946-1-1.htmltd_substr(text,integer)与substr类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select td_substr('1中2文',4); td_substr----------- 2文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173954-1-1.htmltd_substr(text,integer,integer)select td_substr('1中2文',1,3); td_substr----------- 1中textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173959-1-1.htmltrunc(date,character varying)获取某些类型的日期select trunc(date '2021-11-10','iw'); trunc ------------ 2021-11-08dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173875-1-1.htmlweeknumber_of_calendar(date)输入日期与'1900-01-01'相差的周数select weeknumber_of_calendar(date '2021-11-10'); weeknumber_of_calendar------------------------ 6358intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173877-1-1.htmlweeknumber_of_year(date)当年的周数,考虑td的一周开始是周日select weeknumber_of_year(date '2021-11-10'); weeknumber_of_year-------------------- 45intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173883-1-1.htmlyearnumber_of_year(date)当年的年数select yearnumber_of_year(date '2021-11-10'); yearnumber_of_year-------------------- 2021intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173887-1-1.htmlzeroifnull(anyelement)如果输入是null值,则返回0select zeroifnull(null); zeroifnull------------ 0cmbgdw=> create temp table mytbl(col int);cmbgdw=> drop table mytbl;DROP TABLEcmbgdw=> create temp table mytbl(col int);NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'col' as the distribution column by default.HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.CREATE TABLEcmbgdw=> insert into mytbl select null;INSERT 0 1cmbgdw=> select zeroifnull(col) from mytbl; zeroifnull------------ 0analyelementTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173891-1-1.htmlzeroifnull(unknown) intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173891-1-1.html
-
函数名函数说明样例返回说明兼容对象语言位置ADD_MONTHS2(p1,p2) 当前日期 P1 增加 p2 个月的月末测试案例: select ADD_MONTHS2('2018-04-22',2); 输出: 20180630dateTDC语言https://bbs.huaweicloud.com/forum/thread-173862-1-1.htmlADD_MONTHS3(p1,p2)当前日期 P1 增加 p2 个月的月末测试案例: select ADD_MONTHS3(CAST('20180502' AS DATE FORMAT 'YYYYMMDD'),3)输出: 20180831dateTDC语言 DPT_MOB12(p1,p2)计算变量VAR514测试案例:select DPT_MOB12('1010101',30);输出: 1intergerTDC语言 edit_distance_similarity(p1,p2)比较两个字符串的相似度测试案例:select edit_distance_similarity('河北沧州东朔股份有限公司','河北沧州东朔股份有限公司')输出: 100select edit_distance_similarity('河北沧州东朔股份有限公司','沧州东朔房地产开发又发公司')输出: 50intergerORACLEC语言 max_col(p1,p2)计算浮点数最大值测试案例:select max_col(3.3,2.2);输出: 3.30floatTDC语言 min_col(p1,p2)计算浮点数最小值测试案例:select min_col(3.3,2.2);输出: 2.20floatTDC语言 month_between(p1,p2)间隔月份测试案例:select month_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: 7intergerTDC语言 month_between1(p1,p2) P1(YYYYMM)-P2(YYYYMM)的月份数测试案例:select month1_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: -8intergerTDC语言 month_between1(p1,p2) P1(YYYYMM)-P2(YYYYMM)的月份数测试案例:select month_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: 7intergeroracleC语言 specialdata(inputdata varchar,inputtype varchar)根据获取的时间类型,获取对应的时间本月初:specialdate('20190806',11),返回时间:20190801本月末:specialdate('20190806',12),返回时间:20190831上月初:specialdate('20190806',13),返回时间:20190701上月末:specialdate('20190806',14),返回时间:201907031本季初:specialdate('20190806',21),返回时间:20190701本季末:specialdate('20190806',22),返回时间:20190930上季初:specialdate('20190806',23),返回时间:20190301上季末:specialdate('20190806',44),返回时间:20190630本年初:specialdate('20190806',31),返回时间:20190101本年末:specialdate('20190806',32),返回时间:201901231上年初:specialdate('20190806',33),返回时间:20180101上年末:specialdate('20190806',34);返回时间:201801230dateTDplsql substring_index(str,delim,count)按关键字截取字符串 例:select substring_index('blog.jb51.net','.', 2) as abstract from my_content_t结果:blog.jb51 textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173882-1-1.htmlchar2hexint(text)GBK字符集下的字符的16进制select char2hexint('1中2文'); char2hexint -------------- 31D6D032CEC4textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173886-1-1.htmlchars(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select chars('1中2文'); chars------- 6integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173892-1-1.htmldaynumber_of_calendar(date)输入日期与'1900-01-01'相差的天数select daynumber_of_calendar(current_date); daynumber_of_calendar----------------------- 44508integerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173897daynumber_of_month(date)一个月的第几天select daynumber_of_month(date '2021-11-09'); daynumber_of_month-------------------- 9integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173900-1-1.htmldaynumber_of_week(date)一个周的第几天,在td中,周日为1,周六为7select daynumber_of_week(date '2021-11-07'); daynumber_of_week------------------- 1integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173909-1-1.htmldaynumber_of_year(date)一个年的第几天select daynumber_of_year(date '2021-11-06'); daynumber_of_year------------------- 310integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173911-1-1.htmllpad(character varying,integer,character varying)左边填充,td中1个中文占2个字符,导致td与dws结果不一样select public.lpad('1中2文',10,'#'); lpad ------------ ####1中2文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-174007-1-1.htmlmonthnumber_of_year(date)一个年的第几月select monthnumber_of_year(date '2021-11-10'); monthnumber_of_year--------------------- 11integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173927-1-1.htmlmonths_between(date,date)日期相差月份数量select months_between(date '2021-11-10',date '2021-09-20'); months_between---------------- 1.6774numericTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173935&page=1&authorid=&replytype=&extra=#pid1396442months_between_double(date,date)日期相差月份数量(中间函数),一般不使用,因此c函数只能返回double类型,但一般函数返回integer。 double precisionTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173936numtoyminterval(integer,character varying)数字转interval,与td保持一致,第二个参数输入只能是YEAR或者MONTHselect numtoyminterval(100, 'MONTH'); numtoyminterval----------------- 8 years 4 monsintervalTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173872-1-1.htmloadd_months(date,integer)获取多个月以后(以前)的同样的日期。若是月末取月末(区别与add_months)select oadd_months(date '2020-02-29',-1); oadd_months------------- 2020-01-31select oadd_months(date '2020-02-28',1); oadd_months------------- 2020-03-28dateTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173876quarternumber_of_year(date)一个年的第几个季度select quarternumber_of_year(date '2021-10-01'); quarternumber_of_year----------------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173879-1-1.htmlregexp_instr(text,text,integer)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:匹配的其实位置通过正则表达式搜索字符位置,需考虑中文字符select regexp_instr('中1文2','\d',1); regexp_instr-------------- 3intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173885-1-1.htmlregexp_similar(text,text,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写函数功能:判断输入的字符串是否满足输入的正则表达式select regexp_similar('12345678902','\d+','c'); regexp_similar---------------- 1(1 row)cmbgdw=> select regexp_similar('1234567890w','\d+','c'); regexp_similar---------------- 0select regexp_similar('1234567890W','\d+[a-z]','c'); regexp_similar---------------- 0(1 row)cmbgdw=> select regexp_similar('1234567890W','\d+[a-z]','i'); regexp_similar---------------- 1intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173888-1-1.htmlregexp_substr(text,text,integer,integer,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:搜索起始位置第四个参数:取匹配到的第几个组字符第五个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写,默认为c函数功能:通过正则表达式截取字符cmbgdw=> select regexp_substr('1中2文','\d',1,1,'i'); regexp_substr--------------- 1(1 row)cmbgdw=> select regexp_substr('1中2文','\d',1,2,'i'); regexp_substr--------------- 2(1 row)textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173890-1-1.htmlregexp_substr(text,text,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:是否区分大小写等作用同上面的regexp_substr(text,text,1,1,text)select regexp_substr('1中2文','\d','i'); regexp_substr--------------- 1textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173895-1-1.htmlround2(numeric,integer)td无该函数,用于适配td的奇进偶舍的进制,作用:对于小数需要进行round操作时,0.5这样的需要判断进位的前一位数字,若是奇数,则进一位,若是偶数,则舍弃 select round2(1.25,1); round2-------- 1.2(1 row)cmbgdw=> select round2(1.35,1); round2-------- 1.4numericTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173896-1-1.htmlstrtok(text,text,integer)适配td的strtok函数,作用是按指定分隔符切割字符串。第一个参数:输入的字符第二个参数:分隔符第三个参数:取第几位select strtok('a,b,c,d',',',3); strtok-------- ctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173899-1-1.htmltd_char(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_char('1中2文'); td_char--------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173902-1-1.htmltd_char_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_char_length('1中2文'); td_char_length---------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173904-1-1.htmltd_character(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_character('1中2文'); td_character-------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173983td_character_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_character_length('1中2文'); td_character_length--------------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173984td_day_of_calendar(date)输入日期与'1900-01-01'相差的天数select td_day_of_calendar(date '2021-11-10'); td_day_of_calendar-------------------- 44509intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173986td_day_of_month(date)一个月的第几天select td_day_of_month(date '2021-11-10'); td_day_of_month----------------- 10intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173987td_day_of_month(timestamp without time zone)一个月的第几天select td_day_of_month( '2021-11-10 10:01:01'); td_day_of_month----------------- 10intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173989td_day_of_week(date)一个周的第几天,在td中,周日为1,周六为7select td_day_of_week(date '2021-11-10'); td_day_of_week---------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173993td_day_of_week(timestamp without time zone)一个周的第几天,在td中,周日为1,周六为7select td_day_of_week( '2021-11-10 10:01:01'); td_day_of_week---------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173994td_day_of_year(date)一个年的第几天select td_day_of_year(date '2021-11-10'); td_day_of_year---------------- 314intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173996td_day_of_year(timestamp without time zone)一个年的第几天select td_day_of_year( '2021-11-10 10:10:10'); td_day_of_year---------------- 314intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173997td_instr(text,text,integer)返回某个字符的位置,第三个参数是指定搜索位置,类似instr,考虑td与dws字符集影响而新增select td_instr('1中2文','2',1); td_instr---------- 4(1 row)select instr('1中2文','2',1); instr------- 3(1 row)textTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174000td_left(text,integer)与left类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select td_left('1中2文',3); td_left--------- 1中select td_left('1中2文',2); td_left--------- 1\x0Fselect left('1中2文',2); left------ 1中textTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174003td_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_length('1中2文'); td_length----------- 6(1 row)cmbgdw=> select length('1中2文'); length-------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174009td_month_begin(date)获取当天月初日期select td_month_begin(date '2021-11-10'); td_month_begin---------------- 2021-11-01dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173937-1-1.htmltd_month_begin(timestamp without time zone) dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173939-1-1.htmltd_month_end(date)获取当天月末日期select td_month_end(date '2021-11-10'); td_month_end-------------- 2021-11-30dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173941-1-1.htmltd_month_end(timestamp without time zone) dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173942-1-1.htmltd_quarter_of_year(date)一个年的第几个季度select td_quarter_of_year(date '2021-10-01') ; td_quarter_of_year-------------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173943-1-1.htmltd_regexp_replace(text,text,text)因dws也有regexp_replace,此函数区别区别于dws,因此命名为td_regexp_replace第一个参数:输入的字符串第二个参数:输入的正则表达式第三个参数:匹配后替换的字符select td_regexp_replace('1a2b3c','\d','w'); td_regexp_replace------------------- wawbwctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173944-1-1.htmltd_regexp_replace(text,text,text,integer,integer,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:匹配到替换的字符第四个参数:搜索起始位置第五个参数:取匹配到的第几个组字符,输入0,则对所有匹配的都做替换,只接受0和1第六个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写,默认为c函数功能:通过正则表达式替换字符select td_regexp_replace('1a2b3c','\d','w',2,1,'i'); td_regexp_replace------------------- 1awb3c(1 row)cmbgdw=> select td_regexp_replace('1a2b3c','\d','w',2,0,'i'); td_regexp_replace------------------- 1awbwctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173945-1-1.htmltd_right(text,integer)与right类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select right('1中2文',2); right------- 2文(1 row)cmbgdw=> select td_right('1中2文',2); td_right---------- 文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173946-1-1.htmltd_substr(text,integer)与substr类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select td_substr('1中2文',4); td_substr----------- 2文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173954-1-1.htmltd_substr(text,integer,integer)select td_substr('1中2文',1,3); td_substr----------- 1中textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173959-1-1.htmltrunc(date,character varying)获取某些类型的日期select trunc(date '2021-11-10','iw'); trunc ------------ 2021-11-08dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173875-1-1.htmlweeknumber_of_calendar(date)输入日期与'1900-01-01'相差的周数select weeknumber_of_calendar(date '2021-11-10'); weeknumber_of_calendar------------------------ 6358intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173877-1-1.htmlweeknumber_of_year(date)当年的周数,考虑td的一周开始是周日select weeknumber_of_year(date '2021-11-10'); weeknumber_of_year-------------------- 45intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173883-1-1.htmlyearnumber_of_year(date)当年的年数select yearnumber_of_year(date '2021-11-10'); yearnumber_of_year-------------------- 2021intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173887-1-1.htmlzeroifnull(anyelement)如果输入是null值,则返回0select zeroifnull(null); zeroifnull------------ 0cmbgdw=> create temp table mytbl(col int);cmbgdw=> drop table mytbl;DROP TABLEcmbgdw=> create temp table mytbl(col int);NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'col' as the distribution column by default.HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.CREATE TABLEcmbgdw=> insert into mytbl select null;INSERT 0 1cmbgdw=> select zeroifnull(col) from mytbl; zeroifnull------------ 0analyelementTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173891-1-1.htmlzeroifnull(unknown) intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173891-1-1.html
-
>摘要:本文将详细介绍GaussDB(DWS)中共享消息队列的实现。本文分享自华为云社区[《GaussDB(DWS)CBB组件之共享消息队列介绍》](https://bbs.huaweicloud.com/blogs/317028?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=ei&utm_content=content),作者:疯狂朔朔。 ## 1)共享消息队列是什么? 在前文中,我们讲解了SysCache的实现原理,GaussDB(DWS)通过SysCache缓存表元数据,以加速查询,然而在并发查询过程中,不可避免地会出现需要同步元数据的情况,举个简单例子,假设存在以下语句执行流程: 1. Create table abc(会话1) 2. Select * from abc(会话1) 3. Drop table abc(会话2) 4. Select * from abc(会话1) 在会话1中,会连续两次执行Select表操作(b和d),在b语句执行后,会话1将对abc的元数据进行缓存,缓存到SysCache中,以备后续使用。然而,在c语句执行后,需要对会话1中的元数据进行失效,否则,会话1将在执行d语句过程中发生错误,读取已删除的数据。 那么,会话2如何“通知”会话1失效哪些数据呢?答案是共享消息队列。 ## 2)共享消息队列存储结构 如图所示,为共享消息队列数据结构  图示中主要包括两部分,下面部分为ThreadLocal结构,主要记录的是每个线程内部的数据,线程间数据是独立的,无法互相访问,上面部分为共享消息队列中的数据,共享消息队列存在于共享内存中,可同时被多个线程访问,共享消息队列的访问场景是典型的一写多读场景。 在共享消息队列中,核心变量有三个,nextMsgNum、minMsgNum、MaxMsgNum,其中nextMsgNum记录了每个线程消息读取到的位置,minMsgNum记录了共享消息队列中最早消息的位置,maxMsgNum记录了共享消息队列中最新消息的位置,对于每个线程而言,需要定期(在表加锁/事务开始/收到信号时触发)从共享消息队列中读取失效消息,利用失效消息(共享消息队列中的每个消息)更新线程内部数据,同时,若线程内部产生失效消息(通常DDL语句在事务提交时产生大量失效消息),则需要向共享消息队列中插入失效数据,供其他线程读取。另外,还有两个参数,hasMessages、resetState,其中hasMessages用于标记对应线程是否存在未读取的失效消息,resetState用于标记对应线程是否需要失效全部消息。 NOTE:失效数据有哪些?失效消息一共有六类(源自PG),有兴趣的同学可以研读PG源码,在此处我们不再展开,仅需知道线程需要从共享消息队列中读取/插入消息,以实现数据同步。 ## 3)共享消息队列接口实现 共享消息队列本质上对于外部接口只需要提供三个功能:读取共享消息队列中消息、向共享消息队列中写入消息、清理共享消息队列。 ### 3.1)读取共享消息队列  如图所示,为失效消息读取过程。在线程同步失效消息过程中,有几个关键点: - 若共享内存中线程对应的hasMessage为True,则表示有失效消息需要读取,否则直接返回,无新的失效消息。 - 读取失效消息过程中,需要持有读共享锁,以保证读取的消息不会被清理掉。 - 若读取失效消息过程中,发现resetState被置为True,说明该线程已经无法使用共享消息队列中的消息进行追增,需要对缓存进行全失效。缓存全失效相当于追增全部数据,需要将nextMsgNum置为maxMsgNum。缓存全失效将严重降低SQL执行性能,尽量减少缓存全失效的发生频率。 - 在追增数据过程中,会推进线程自身的nextMsgNum,以标记数据追增位置。 NOTE:在读取共享消息队列过程中,每个线程推进自己的nextMsgNum位置,以方便记录数据追增情况。 ### 3.2)向共享消息队列中写入消息  如图所示,为失效消息写入过程。有以下几个关键点: - 写入失效消息过程,需要调用清理共享消息队列接口,以保证有足够多的空位写入失效消息。 - 在写入失效消息过程中,会更新maxMsgNum。 - 写入失效消息完毕以后,需要将其他线程的hasMessage标记为True。 - 写入失效消息过程,需要持排他写锁,阻塞其他线程写操作,但不阻塞读。 NOTE:写入失效消息过程实际上是推进maxMsgNum的过程,同时告知其他线程有新的失效消息需要读取。 ### 3.3)清理共享消息队列  如图所示,清理共享消息队列过程中,有以下几个关键点: - 清理共享消息队列需要持有排他读锁和排他写锁,阻塞读过程。其主要原因是,清理共享消息队列会推进minMsgNum,若不持读锁,可能导致nextMsgNum读取过期数据。 - 清理共享消息队列会推进minMsgNum。 - 清理共享消息队列过程,会将所有没有及时追增失效消息的线程执行全失效。 - 在清理共享消息队列最后步骤,会对距离minMsgNum最近的线程,发送追增信号,以确保不会频繁发生全失效。该步骤主要考虑的情况是,若线程长时间处于idle状态,需要外部信号触发其及时追增消息。 NOTE:清理共享消息队列过程,实际上是推进minMsgNum的过程,同时对所有没有及时追增失效消息的线程执行全失效。 根据以上共享消息队列接口可知,读取共享消息队列主要负责推进各个线程自身的nextMsgNum;写入失效消息主要负责推进maxMsgNum;清理共享消息队列主要负责推进minMsgNum。通过共享消息队列,可有效实现各个线程之间的数据同步。
-
【功能模块】数据湖-DWS库【操作步骤&问题现象】1、更换办公地址,ip发生变化,登录DWS库,需要把IP地址添加至白名单公网IP : 123.139.92.65 内网IP 192.168.3.11【截图信息】【日志信息】(可选,上传日志内容或者附件)王斌国/18629429514/wangbinguo@chinasoftinc.com
-
FI 界面上主机的CPU、内存、磁盘等资源,如何做到实时监控的?调用的服务接口,还是查询的定期采集资源的系统表?如果调用的接口,在哪里可以看到?如果查询的系统表,请问是哪几张表?
-
记录每条sql的内存和cpu等资源的使用情况的视图;
-
【操作步骤&问题现象】Gaussdb A 8.0.0.1 数据节点重启后为什么会在/var/gaussdbsecboxchroot/omm下产生vmcore文件?是因为gaussdb服务引起的重启吗?
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签