gp数据库函数
gp库计算小时差
![gp库计算小时差](https://img.taocdn.com/s3/m/d14eb1d105a1b0717fd5360cba1aa81144318f83.png)
gp库计算小时差当我们需要计算两个时间点之间的小时差的时候,可以借助Python中的gp库来实现。
gp库是Python中的一个内置模块,它提供了许多操作系统相关的功能,包括文件操作、进程管理、时间操作等等。
下面就是使用gp库计算小时差的步骤:第一步:导入gp库在Python程序中,我们需要先使用import语句将gp库导入进来,如下所示:import os第二步:获取时间信息要计算小时差,我们需要先获取两个时间点的时间信息。
使用gp 库获取当前时间可以借助time模块。
使用如下代码获取当前时间:now = time.time()如果要获取指定时间点的时间信息,需要通过time模块中的gmtime()函数来实现,如下代码所示:gmtime = time.gmtime(timestamp)其中,timestamp就是时间戳,表示从1970年1月1日起到当前时间的秒数。
第三步:计算时间差获取了两个时间点的时间信息之后,接下来就是计算它们之间的小时差。
可以使用gp库中的os.path.getctime()函数来获取指定文件的创建时间。
如下代码所示:time1 = os.path.getctime(filepath1)time2 = os.path.getctime(filepath2)接着,计算时间差可以使用如下代码:diff = (time1 - time2) / 3600其中,3600表示1个小时的秒数。
第四步:输出结果最后,将计算结果输出即可。
使用如下代码输出结果:print("The time difference is:", diff, "hours")至此,使用gp库计算小时差的步骤就完成了。
总结使用gp库计算小时差可以方便地获取两个时间点之间的时间差。
对于那些需要计算时间差的Python应用程序来说,gp库可以提供非常好的支持。
在实际应用中,我们可以根据具体需求进行适当的修改和扩展,以满足各种不同的计算需求。
gp数据库循环语句
![gp数据库循环语句](https://img.taocdn.com/s3/m/72b6b852a88271fe910ef12d2af90242a895aba7.png)
gp数据库循环语句GP数据库是一种关系型数据库管理系统,它可以通过循环语句来实现对数据库中数据的逐行处理。
下面列举了十个基于GP数据库的循环语句的示例。
1. 使用FOR循环语句遍历表中的所有记录```sqlFOR row IN SELECT * FROM table_name LOOP-- 处理每一行数据的逻辑-- 可以使用row.column_name来访问每一列的值END LOOP;```2. 使用WHILE循环语句实现条件控制的循环```sqlDECLAREcounter integer := 0;BEGINWHILE counter < 10 LOOP-- 处理逻辑counter := counter + 1;END LOOP;END;```3. 使用CURSOR循环语句遍历游标中的结果集```sqlDECLAREcursor_name CURSOR FOR SELECT * FROM table_name; row record;BEGINOPEN cursor_name;LOOPFETCH cursor_name INTO row;EXIT WHEN NOT FOUND;-- 处理每一行数据的逻辑-- 可以使用row.column_name来访问每一列的值END LOOP;CLOSE cursor_name;END;```4. 使用RECORD类型和FOREACH循环语句遍历表中的所有记录```sqlDECLARErow RECORD;BEGINFOREACH row IN ARRAY (SELECT * FROM table_name) LOOP-- 处理每一行数据的逻辑-- 可以使用row.column_name来访问每一列的值END LOOP;END;```5. 使用LOOP语句和EXIT条件语句实现循环的控制```sqlDECLAREcounter integer := 0;BEGINLOOP-- 处理逻辑counter := counter + 1;EXIT WHEN counter >= 10;END LOOP;END;```6. 使用FOR循环语句和RAISE NOTICE语句输出循环过程中的信息```sqlFOR i IN 1..10 LOOPRAISE NOTICE '当前循环次数:%', i;-- 处理逻辑END LOOP;```7. 使用FOR循环语句和CONTINUE条件语句实现循环的跳过```sqlFOR i IN 1..10 LOOPIF i % 2 = 0 THENCONTINUE;END IF;-- 处理逻辑END LOOP;```8. 使用FOR循环语句和EXIT条件语句实现循环的中止```sqlFOR i IN 1..10 LOOPIF i = 5 THENEXIT;END IF;-- 处理逻辑END LOOP;```9. 使用LOOP语句和RETURN NEXT语句返回逐行处理的结果集```sqlCREATE OR REPLACE FUNCTION function_name() RETURNS SETOF table_name AS $$DECLARErow record;BEGINFOR row IN SELECT * FROM table_name LOOP-- 处理每一行数据的逻辑-- 可以使用row.column_name来访问每一列的值RETURN NEXT row;END LOOP;END;$$ LANGUAGE plpgsql;```10. 使用FOR循环语句和UPDATE语句批量更新表中的数据```sqlFOR row IN SELECT * FROM table_name LOOPUPDATE table_name SET column_name = new_value WHERE id = row.id;END LOOP;```以上是十个基于GP数据库的循环语句的示例,可以根据实际需求进行灵活运用。
gp计算公式
![gp计算公式](https://img.taocdn.com/s3/m/2d47951076232f60ddccda38376baf1ffc4fe33e.png)
gp计算公式摘要:1.概述gp 计算公式2.gp 计算公式的组成部分3.如何使用gp 计算公式4.gp 计算公式的应用领域5.结论正文:1.概述gp 计算公式gp 计算公式,全称为Gaussian Process Calculation Formula,是一种用于预测和优化的数学模型。
它主要用于处理具有不确定性的数据,例如在机器学习、统计学和工程领域中。
gp 计算公式通过计算协方差函数和其逆矩阵来达到对数据的不确定性进行建模和预测的目的。
2.gp 计算公式的组成部分gp 计算公式主要包括两个部分:协方差函数和协方差矩阵。
(1) 协方差函数:协方差函数用于描述两个变量之间的关系。
在gp 计算公式中,协方差函数用于描述数据点之间的相似性。
常见的协方差函数有平方差(squared difference)和指数函数(exponential function)等。
(2) 协方差矩阵:协方差矩阵是协方差函数的推广,用于描述多个变量之间的关系。
在gp 计算公式中,协方差矩阵用于描述数据点之间的不确定性和相关性。
协方差矩阵的逆矩阵被称为协方差矩阵的逆,可以用于预测和优化。
3.如何使用gp 计算公式使用gp 计算公式进行预测和优化的一般步骤如下:(1) 定义协方差函数和协方差矩阵:根据数据的特点和需求,选择合适的协方差函数和协方差矩阵。
(2) 计算协方差矩阵的逆:通过计算协方差矩阵的逆矩阵,得到数据的不确定性和相关性信息。
(3) 预测和优化:利用协方差矩阵的逆矩阵,对新的数据点进行预测和优化。
4.gp 计算公式的应用领域gp 计算公式在许多领域都有广泛应用,例如:(1) 机器学习:在机器学习中,gp 计算公式可以用于非线性回归、分类和贝叶斯学习等任务。
(2) 统计学:在统计学中,gp 计算公式可以用于建模和预测具有不确定性的数据。
(3) 工程领域:在工程领域中,gp 计算公式可以用于优化设计、控制和调度等问题。
5.结论gp 计算公式是一种强大的数学工具,可以用于处理具有不确定性的数据。
gp数据库空值处理
![gp数据库空值处理](https://img.taocdn.com/s3/m/8fe57bcc70fe910ef12d2af90242a8956becaa8d.png)
gp数据库空值处理English Answer:## Null Value Handling in Greenplum Database.Greenplum, a massively parallel processing (MPP) database, offers robust capabilities for handling null values, enabling efficient data management and analysis in various scenarios. Null values, also known as missing values or unknown values, arise when data is incomplete, unavailable, or not applicable.### Key Considerations for Null Value Handling.Data Integrity: Null values can affect data integrity and validity, as they represent missing or incomplete information. Proper handling ensures the accuracy and reliability of analytical results.Query Optimization: Null values can impact queryperformance, as database systems need to handle them differently from non-null values. Efficient null value handling techniques can optimize query execution.Data Modeling: The way null values are defined and handled in the database schema can influence data modeling decisions and the choice of data types.### Approaches to Null Value Handling in Greenplum.Greenplum provides several approaches to manage null values effectively:1. Explicit Null Values:Null values are explicitly represented by the NULL keyword.They indicate that the value is unknown, missing, or not applicable.Explicit null values allow for precise handling andfiltering of missing data.2. Default Values:Default values are assigned to columns when no value is explicitly provided.They ensure that every row has a value, even if it is a placeholder or a known value.Default values help maintain data integrity and prevent null-related errors.3. Exclusion from Queries:Null values can be excluded from queries using the IS NOT NULL predicate.This approach ensures that only rows with non-null values are considered in the analysis.It can improve query performance and provide moreaccurate results.4. NULLIF Function:The NULLIF function returns a null value if two expressions are equal, and a non-null value otherwise.It allows for dynamic handling of null values based on specific conditions.5. COALESCE Function:The COALESCE function returns the first non-null value from a list of expressions.It provides a way to replace null values with alternative values, ensuring data completeness.### Best Practices for Null Value Handling.Define clear rules for handling null values in the database schema.Use explicit null values to represent missing or unknown data.Consider using default values to maintain data integrity.Optimize queries by excluding null values when appropriate.Utilize NULLIF and COALESCE functions for dynamic null value handling.Regularly monitor null value distribution and patterns to identify potential data quality issues.By following these best practices, organizations can effectively manage null values in their Greenplum databases, ensuring data accuracy, query optimization, and reliable analytical insights.Chinese Answer:## Greenplum 数据库中的空值处理。
gp计算公式
![gp计算公式](https://img.taocdn.com/s3/m/8e4b5ae1b1717fd5360cba1aa8114431b90d8ea7.png)
gp计算公式一、GP计算公式的原理GP是一种机器学习中常用的非参数统计模型,常用于回归和分类问题。
其核心思想是通过对已知数据进行高斯分布建模,从而对未知数据进行预测。
GP的计算公式如下所示:K(x,x') = σ^2 * exp(-||x-x'||^2 / (2 * l^2))其中,K(x,x')表示协方差矩阵,x和x'表示输入的数据点,σ^2表示噪声方差,l表示长度尺度。
通过调整σ^2和l的取值,可以对模型进行灵活的调整。
二、GP计算公式的应用GP在许多领域都有广泛的应用,以下是几个常见的应用场景:1. 回归分析GP可以用于回归问题,通过已知数据点的输入和输出,可以对未知数据点进行预测。
在回归问题中,GP可以根据已知数据点的分布情况,对未知数据点的输出进行估计。
2. 时间序列分析GP可以用于时间序列分析,通过对已知时间序列的建模,可以对未知时间点的值进行预测。
在时间序列分析中,GP可以根据已知数据点的时间间隔和取值,对未知时间点的取值进行预测。
3. 异常检测GP可以用于异常检测,通过对已知数据点的分布进行建模,可以对未知数据点进行异常检测。
在异常检测中,GP可以根据已知数据点的分布情况,对未知数据点进行判断,判断其是否为异常值。
4. 优化问题GP可以用于优化问题,通过对已知数据点的建模,可以对未知数据点进行优化。
在优化问题中,GP可以根据已知数据点的取值情况,对未知数据点的取值进行优化,以达到最优解。
三、总结GP计算公式是一种常用的机器学习模型,通过对已知数据点进行高斯分布建模,可以对未知数据点进行预测。
它在回归分析、时间序列分析、异常检测和优化问题等领域都有广泛的应用。
通过合理调整公式中的参数,可以对模型进行灵活的调整,以适应不同的应用场景。
因此,掌握GP计算公式的原理和应用,对于深入理解机器学习和数据分析算法具有重要意义。
Greenplum常用命令、函数
![Greenplum常用命令、函数](https://img.taocdn.com/s3/m/15648a23ec630b1c59eef8c75fbfc77da26997cf.png)
Greenplum常⽤命令、函数Greenplum常⽤查询命令#查看test_bd事务(即数据库)下的所有表名包含 user 的表信息SELECT UPPER(A.SCHEMANAME) AS SCHEMANAME, UPPER(A.TABLENAME) AS TABLENAME,D.ATTRELID,D.ATTRELID :: regclass,UPPER(D.ATTNAME) AS ATTNAME,REPLACE(REPLACE(REPLACE(FORMAT_TYPE(D.ATTTYPID, D.ATTTYPMOD),'numeric','NUMBER'),'character varying','VARCHAR2'),'date','DATE') AS DATA_TYPE,E.DESCRIPTIONFROM PG_TABLES AS AINNER JOIN PG_CLASS AS B ON A.TABLENAME = B.RELNAMELEFT JOIN PG_CATALOG.PG_DESCRIPTION AS E ON B.OID = E.OBJOIDLEFT JOIN PG_CATALOG.PG_ATTRIBUTE AS D ON D.ATTRELID = E.OBJOID AND D.ATTNUM = E.OBJSUBIDWHERE SCHEMANAME ='test_bd'AND A.TABLENAME LIKE'%user%'AND D.ATTNUM >0ORDER BY A .TABLENAME,D.ATTNUM select pg_size_pretty(pg_database_size('gp_db')); #查看gp数据库⼤⼩ select gp_segment_id,count(*) from db_name.tb_name group by gp_segment_id; #查看数据分布情况1.创建数据库 createdb test_db;2.删除数据库 dropdb test_db;3.创建模式 create schema myschema;4.删除模式 drop schema myschema;5.创建⽤户 create user user_name with password '123456' ;6.删除⽤户 drop user user_name;7.查看系统⽤户信息 select usename from pg_user;8.查看版本信息 select version();9.打开psql交互⼯具 psql name_db;10.执⾏sql⽂件 mydb=> \i basics.sql \i 命令从指定的⽂件中读取命令。
PostgreSQL各数据类型的内置函数
![PostgreSQL各数据类型的内置函数](https://img.taocdn.com/s3/m/e0b0ce7d571252d380eb6294dd88d0d233d43c21.png)
PostgreSQL各数据类型的内置函数参考《PostgreSQL实战》3.1.2 数字类型操作符和数学函数PostgreSQL 支持数字类型操作符和丰富的数学函数例如支持加、减、乘、除、模取取余操作符SELECT 1+2, 2*3, 4/2, 8%3;按模取余SELECT mod(8,3);结果:2四舍五入函数:SELECT round(10.4) , round(10.5);结果:10, 11返回大于或等于给出参数的最小整数SELECT ceil(3.6) , ceil(-3.6);结果:4, -3返回小于或等于给出参数的最小整数floor(3.6) 结果:33.2.2 字符类型函数PostgreSQL 支持丰富的字符函数,下面举例说明计算字符串中的字符数select char_length('abcd');结果: 4计算字符串占用的字节数select octet_length('abcd');结果: 4指定字符在字符串中的位置(首次出现)select position('a' in 'abcda')结果: 1select position('x' in 'abcda')结果: 0提取字符串中的子串select substring('hello' from 3 for 4)结果: lloselect substring('hello' from 4 for 1)结果: l拆分字符串split_part (string text, delimiter text,field int )根据delimiter 分隔符拆分字符串string,并返回指定字段,字段从1 开始select split_part('abc@def1@nb', '@',1)结果: abc3.3.2 时间/日期类型操作符时间、日期数据类型支持的操作符有加、减、乘、除,日期相加select date '2017-07-29' + interval'1days'结果: 2017-07-30 00:00:00日期相减select date '2017-07-29' - interval'1hour'结果: 2017-07-28 23:00:00日期相乘select 100* interval '1 second'结果: 00:01:40日期相除select interval '1 hour' / doubleprecision '3'结果: 00:20:003.3.3 时间/日期类型常用函数显示当前时间select current_date, current_time;结果: 2019-11-23,20:20:55.635115+08另一个非常重要的函数为 EXTRACT 函数,可以从日期、时间数据类型中抽取年、月、日、时、分、秒信息EXTRACT(field FROM source)field 值可以为century、year、month、day、hour 、minute、 second等, source类型为timestamp、 time、 interval的值的表达式。
gp函数
![gp函数](https://img.taocdn.com/s3/m/35125b1079563c1ec5da71c1.png)
add_months(date, integer)-- DROP FUNCTION add_months(date, integer);CREATE OR REPLACE FUNCTION add_months(date, integer)RETURNS date AS$BODY$ select cast(date_trunc('day',$1)+($2 || 'month')::interval as date) $BODY$LANGUAGE 'sql' VOLATILE;ALTER FUNCTION add_months(date, integer) OWNER TO odsusr;GRANT EXECUTE ON FUNCTION add_months(date, integer) TO public;GRANT EXECUTE ON FUNCTION add_months(date, integer) TO odsusr;convertstring(text, integer)-- Function: convertstring(text, integer)-- DROP FUNCTION convertstring(text, integer);CREATE OR REPLACE FUNCTION convertstring(text, integer)RETURNS text AS$BODY$DECLARE len INTEGER;DECLARE retval text;DECLARE tmp text;DECLARE asciival INT4;--全半角转换函数--text:转换源字符;--integer 1:全角转半角;-- 其它: 半角转全角;--作者: 何启平BEGIN--字符串字符个数SELECT textlen($1) INTO len;SELECT '' INTO retval;IF len>0 THEN--循环FOR i IN 1..len LOOP--取单个字符SELECT substring($1, i, 1) INTO tmp;SELECT ascii(tmp) INTO asciival;IF ($2 = 1) THENBEGIN--全角转半角IF (asciival = 12288) THEN --空格asciival = 32;END IF;IF (asciival> 65280) AND (asciival< 65375) THEN SELECT asciival-65248 INTO asciival;END IF;END;ELSEBEGIN--半角转全角IF (asciival = 32) THEN --空格asciival = 12288;END IF;IF (asciival< 127) THENSELECT asciival+65248 INTO asciival;END IF;END;END IF;SELECT chr(asciival) INTO tmp;SELECT textcat(retval, tmp) INTO retval;END LOOP;END IF;IF (len is null) or len=0 THENSELECT '' INTO retval;END IF;RETURN retval;END;$BODY$LANGUAGE 'plpgsql' VOLATILE;ALTER FUNCTION convertstring(text, integer) OWNER TO odsusr; GRANT EXECUTE ON FUNCTION convertstring(text, integer) TO public; GRANT EXECUTE ON FUNCTION convertstring(text, integer) TO odsusr;create_external_table-- Function: create_external_table(text, text, text, text, integer, text, text, text)-- DROP FUNCTION create_external_table(text, text, text, text, integer, text, text, text);CREATE OR REPLACE FUNCTION create_external_table(srctable text, exttable text, dname text, encodingstr text, limitcount integer, delim text, ghost text, gport text)RETURNS void AS$BODY$DECLAREsqlstr text;columnstr text;sname_ text;tname_ text;BEGINsqlstr:=E'CREATE EXTERNAL temp TABLE $exttable($columnstr)LOCATION (''gpfdist://$ghost:$gport/$datafile'')FORMAT ''TEXT''(DELIMITER ''$delim''NULL ''''ESCAPE ''OFF'')ENCODING ''$encodingstr''LOG ERRORS INTO error_table SEGMENT REJECT LIMIT 3;';columnstr:=fdmprd.get_table_column_and_type(srctable);sqlstr:=replace(sqlstr, '$columnstr', columnstr);sqlstr:=replace(sqlstr, '$exttable',exttable);sqlstr:=replace(sqlstr, '$datafile', dname);sqlstr:=replace(sqlstr, '$encodingstr', encodingstr);sqlstr:=replace(sqlstr, '$limitcount', limitcount::varchar);sqlstr:=replace(sqlstr, '$delim', delim);sqlstr:=replace(sqlstr, '$ghost', ghost);sqlstr:=replace(sqlstr, '$gport', gport);iflimitcount>=3 thensqlstr:=replace(sqlstr, '--', ' ');end if;execute sqlstr;END;$BODY$LANGUAGE 'plpgsql' VOLATILE;ALTER FUNCTION create_external_table(text, text, text, text, integer, text, text, text) OWNER TO odsusr;GRANT EXECUTE ON FUNCTION create_external_table(text, text, text, text, integer, text, text, text) TO public;GRANT EXECUTE ON FUNCTION create_external_table(text, text, text, text, integer, text, text, text) TO odsusr;get_gp_create_sql-- Function: get_gp_create_sql(text)-- DROP FUNCTION get_gp_create_sql(text);CREATE OR REPLACE FUNCTION get_gp_create_sql(tablename text)RETURNS text AS$BODY$try:table_name = tablename.lower().split('.')[1]table_schema = tablename.lower().split('.')[0]except (IndexError):return 'Please in put "tableschema.table_name" '#get table oidget_table_oid = " select oid,reloptions,relkind from pg_class where oid='%s'::regclass"%(tablename)try:rv_oid = plpy.execute(get_table_oid, 5)if not rv_oid:return 'Did not find any relation named "'+ tablename +'".'except (Error):return 'Did not find any relation named "'+ tablename +'".'table_oid = rv_oid[0]['oid']rv_reloptions = rv_oid[0]['reloptions']rv_relkind=rv_oid[0]['relkind']create_sql="";table_kind='table';ifrv_relkind!='r' and rv_relkind!='v':plpy.error('%s is not table or view'%(tablename));elifrv_relkind=='v':get_view_def="select pg_get_viewdef(%s,'t') as viewdef;"%(table_oid)rv_viewdef=plpy.execute(get_view_def);create_sql = 'create view %s as \n'%(tablename)create_sql += rv_viewdef[0]['viewdef']+'\n';table_kind='view'else:#get column name and column typeget_columns = "SELECT a.attname, pg_catalog.format_type(a.atttypid, a.atttypmod),\(SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128) \FROM pg_catalog.pg_attrdef d WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef) as default,\a.attnotnull as isnull \FROM pg_catalog.pg_attribute a \WHERE a.attrelid = %s AND a.attnum> 0 AND NOT a.attisdropped \ORDER BY a.attnum;" %(table_oid);rv_columns = plpy.execute(get_columns)#get distributed keyget_table_distribution1 = "SELECT attrnums FROM pg_catalog.gp_distribution_policy t WHERE localoid = '" + table_oid + "' "rv_distribution1 = plpy.execute(get_table_distribution1, 500)rv_distribution2 = ''if rv_distribution1 and rv_distribution1[0]['attrnums']:#(rv_distribution1[0]['attrnums'])get_table_distribution2 = "SELECT attname FROM pg_attribute WHERE attrelid = '" + table_oid + "' AND attnum in (" + str(rv_distribution1[0]['attrnums']).strip('[').strip(']') + ")"#get_table_distribution2 = "SELECT attname FROM pg_attribute WHERE attrelid = '" + table_oid + "' AND attnum in (" + rv_distribution1[0]['attrnums'] + ")"#(get_table_distribution2)rv_distribution2 = plpy.execute(get_table_distribution2, 500)#get index definecreate_sql = 'create table %s(\n'%(tablename)get_index = "select pg_get_indexdef(indexrelid) AS indexdef from pg_index where indrelid=%s"%(table_oid);rv_index = plpy.execute(get_index);#get partition infoget_parinfo1 = "select attname as columnname from pg_attribute where attnum = (select paratts[0] from pg_partition where parrelid=%s) and attrelid=%s;"%(table_oid,table_oid);get_parinfo2 ="""SELECT pp.parrelid,pr1.parchildrelid,CASEWHEN pp.parkind = 'h'::"char" THEN 'hash'::textWHEN pp.parkind = 'r'::"char" THEN 'range'::textWHEN pp.parkind = 'l'::"char" THEN 'list'::textELSE NULL::textEND AS partitiontype,pg_get_partition_rule_def(pr1.oid, true) AS partitionboundaryFROM pg_partition pp, pg_partition_rule pr1WHERE pp.paristemplate = false AND pp.parrelid = %s AND pr1.paroid = pp.oidorder by pr1.parname;"""%(table_oid);v_par_parent = plpy.execute(get_parinfo1);v_par_info = plpy.execute(get_parinfo2);max_column_len = 10max_type_len = 4max_modifiers_len = 4max_default_len=4fori in rv_columns:ifi['attname']:ifmax_column_len<i['attname'].__len__(): max_column_len = i['attname'].__len__()ifi['format_type']:ifmax_type_len<i['format_type'].__len__(): max_type_len = i['format_type'].__len__()ifi['default']:ifmax_type_len<i['default'].__len__(): max_default_len = i['default'].__len__()first = Truefori in rv_columns:if first==True:split_char=' ';first=Falseelse :split_char=',';ifi['attname']:create_sql += " " + split_char + i['attname'].ljust(max_column_len +6) + ''else:create_sql += " " + split_char + ' '.ljust(max_column_len + 6)ifi['format_type']:create_sql += ' ' + i['format_type'].ljust(max_type_len + 2)else:create_sql += ' ' + ' '.ljust(max_type_len + 2)ifi['isnull'] and i['isnull']:create_sql += ' ' + ' not null '.ljust(8)ifi['default']:create_sql += ' default ' + i['default'].ljust(max_default_len + 6)create_sql += "\n"create_sql += ")"ifrv_reloptions:#(str(rv_reloptions))create_sql+="with("+str(rv_reloptions).replace("'","").strip('[').strip(']') +")\n"if rv_distribution2:create_sql += 'Distributed by ('fori in rv_distribution2:create_sql += i['attname'] + ','create_sql = create_sql.strip(',') + ')'elif rv_distribution1:create_sql += 'Distributed randomly\n'ifv_par_parent:partitiontype = v_par_info[0]['partitiontype'];create_sql+='\nPARTITION BY ' + partitiontype + "("+v_par_parent[0]['columnname']+")\n(\n";fori in v_par_info:create_sql+=" "+i['partitionboundary']+',\n';create_sql = create_sql.strip(',\n');create_sql+="\n)"create_sql += ";\n\n"fori in rv_index:create_sql += i['indexdef']+';\n'create_sql+='\n'#get commentget_table_comment="select 'comment on %s %s is '''|| COALESCE(description,'')||'''' as comment from pg_description where objoid=%s and objsubid=0;"%(table_kind,tablename,table_oid)get_column_comment="select 'comment on column %s.'||b.attname ||' is ''' || COALESCE(a.description,'') ||''' ' as comment from pg_catalog.pg_descriptiona,pg_catalog.pg_attribute b where objoid=%s and a.objoid=b.attrelid and a.objsubid=b.attnum;"%(tablename,table_oid)rv_table_comment=plpy.execute(get_table_comment);rv_column_comment=plpy.execute(get_column_comment);fori in rv_table_comment:create_sql += i['comment']+';\n'fori in rv_column_comment:create_sql += i['comment']+';\n'returncreate_sql;$BODY$LANGUAGE 'plpythonu' VOLATILE;ALTER FUNCTION get_gp_create_sql(text) OWNER TO odsusr;get_table_column_and_type-- Function: get_table_column_and_type(text)-- DROP FUNCTION get_table_column_and_type(text);CREATE OR REPLACE FUNCTION get_table_column_and_type(srctable text)RETURNS text AS$BODY$DECLAREsqlstr text;mviews RECORD;columnstr text:='';indexsmallint:=0;sname text;tname text;BEGINsname:=lower(split_part(srctable,'.',1));tname:=lower(split_part(srctable,'.',2));sqlstr:='select a.attname, pg_catalog.format_type(a.atttypid, a.atttypmod) as type,a.attnotnullfrom pg_catalog.pg_attributea,pg_catalog.pg_class c, pg_catalog.pg_namespace n wherea.attrelid=c.oidand c.relname='''||tname||'''and a.attnum>0 AND NOT a.attisdroppedand n.oid = c.relnamespaceand n.nspname='''||sname||'''order bya.attnum';FOR mviews IN execute sqlstr LOOPif index=0 thencolumnstr :=columnstr||'"'||mviews.attname||E'"\t'||mviews.type;elsecolumnstr :=columnstr||E',\n"'||mviews.attname||E'"\t'||mviews.type;end if;index:=index+1;end loop;if index=0 thenRAISE EXCEPTION 'not exist %',sname||'.'||tname;end if;return columnstr;END;$BODY$LANGUAGE 'plpgsql' VOLATILE;ALTER FUNCTION get_table_column_and_type(text) OWNER TO odsusr;GRANT EXECUTE ON FUNCTION get_table_column_and_type(text) TO public;GRANT EXECUTE ON FUNCTION get_table_column_and_type(text) TO odsusr;getitemname-- Function: getitemname(character varying, character varying)-- DROP FUNCTION getitemname(character varying, character varying);CREATE OR REPLACE FUNCTION getitemname(pcodeno character varying, pitemno character varying)RETURNS character varying AS$BODY$declarepItemNamevarchar(200) ;BEGINselectItemName into pItemNamefrom fdmprd.fs_s04_Code_LibraryWHERE codeno=pcodeno AND ItemNo=pItemNo;ifpItemName is null thenreturnpItemNo;elsereturnpItemName;end if;exception when others then return pItemNo;end ;$BODY$LANGUAGE 'plpgsql' VOLATILE;ALTER FUNCTION getitemname(character varying, character varying) OWNER TO ex_sdbods; GRANT EXECUTE ON FUNCTION getitemname(character varying, character varying) TO public; GRANT EXECUTE ON FUNCTION getitemname(character varying, character varying) TO ex_sdbods;GRANT EXECUTE ON FUNCTION getitemname(character varying, character varying) TO odsusr;instr(character varying, character varying, integer, integer)-- Function: instr(character varying, character varying, integer, integer)-- DROP FUNCTION instr(character varying, character varying, integer, integer);CREATE OR REPLACE FUNCTION instr(string character varying, string_to_search character varying, beg_index integer, occur_index integer)RETURNS integer AS$BODY$DECLAREpos integer NOT NULL DEFAULT 0;occur_number integer NOT NULL DEFAULT 0;temp_strvarchar;beg integer;i integer;length integer;ss_length integer;BEGINIF beg_index> 0 THENbeg := beg_index;temp_str := substring(string FROM beg_index);FOR i IN 1..occur_index LOOPpos := position(string_to_search IN temp_str);IF i = 1 THENbeg := beg + pos - 1;ELSEbeg := beg + pos;END IF;temp_str := substring(string FROM beg + 1);END LOOP;IF pos = 0 THENRETURN 0;ELSERETURN beg;END IF;ELSEss_length := char_length(string_to_search);length := char_length(string);beg := length + beg_index - ss_length + 2;WHILE beg > 0 LOOPtemp_str := substring(string FROM beg FOR ss_length);pos := position(string_to_search IN temp_str);IF pos> 0 THENoccur_number := occur_number + 1;IF occur_number = occur_index THENRETURN beg;END IF;END IF;beg := beg - 1;END LOOP;RETURN 0;END IF;END;$BODY$LANGUAGE 'plpgsql' IMMUTABLE STRICT;ALTER FUNCTION instr(character varying, character varying, integer, integer) OWNER TO dmop; GRANT EXECUTE ON FUNCTION instr(character varying, character varying, integer, integer) TO public;GRANT EXECUTE ON FUNCTION instr(character varying, character varying, integer, integer) TO dmop;GRANT EXECUTE ON FUNCTION instr(character varying, character varying, integer, integer) TO ex_sdbods;GRANT EXECUTE ON FUNCTION instr(character varying, character varying, integer, integer) TO odsusr;instr(character varying, character varying, integer)-- DROP FUNCTION instr(character varying, character varying, integer);CREATE OR REPLACE FUNCTION instr(string character varying, string_to_search character varying, beg_index integer)RETURNS integer AS$BODY$DECLAREpos integer NOT NULL DEFAULT 0;temp_strvarchar;beg integer;length integer;ss_length integer;BEGINIF beg_index> 0 THENtemp_str := substring(string FROM beg_index);pos := position(string_to_search IN temp_str);IF pos = 0 THENRETURN 0;ELSERETURN pos + beg_index - 1;END IF;ELSEss_length := char_length(string_to_search);length := char_length(string);beg := length + beg_index - ss_length + 2;WHILE beg > 0 LOOPtemp_str := substring(string FROM beg FOR ss_length);pos := position(string_to_search IN temp_str);IF pos> 0 THENRETURN beg;END IF;beg := beg - 1;END LOOP;RETURN 0;END IF;END;$BODY$LANGUAGE 'plpgsql' IMMUTABLE STRICT;ALTER FUNCTION instr(character varying, character varying, integer) OWNER TO dmop;instr(character varying, character varying)-- DROP FUNCTION instr(character varying, character varying);CREATE OR REPLACE FUNCTION instr(character varying, character varying)RETURNS integer AS$BODY$DECLAREpos integer;BEGINpos:= instr($1, $2, 1);RETURN pos;END;$BODY$LANGUAGE 'plpgsql' IMMUTABLE STRICT;ALTER FUNCTION instr(character varying, character varying) OWNER TO dmop;last_day(date)-- DROP FUNCTION last_day(date);CREATE OR REPLACE FUNCTION last_day(date)RETURNS date AS$BODY$ select cast(date_trunc('month', $1) + '1 month'::interval as date) - 1 $BODY$LANGUAGE 'sql' VOLATILE;ALTER FUNCTION last_day(date) OWNER TO odsusr;GRANT EXECUTE ON FUNCTION last_day(date) TO public;GRANT EXECUTE ON FUNCTION last_day(date) TO odsusr;pro_fbs950_prepose(character varying)-- DROP FUNCTION pro_fbs950_prepose(character varying);CREATE OR REPLACE FUNCTION pro_fbs950_prepose(p_op_date character varying) RETURNS void AS$BODY$DECLAREl_Trans_Date DATE := coalesce(To_Date(p_Op_Date, 'yyyymmdd'), now());l_Sql_Err VARCHAR(100);l_Tab_Desc VARCHAR(100);l_Temp INT;l_rec VARCHAR(1);BEGINSELECT 'Y' into l_rec FROM PRO_PREPOSE_TRANS_CTL WHERE Op_Date = l_Trans_Date LIMIT 1;IF l_rec is null THENINSERT INTO PRO_PREPOSE_TRANS_CTL(OP_DATE, SYSTEM_ID, STAGE1, STAGE2, STAGE3)SELECT l_Trans_Date, 'FBS950', NULL, NULL, NULL FROM Dual;END IF;BEGIN --stage1 startSELECT Stage1 INTO l_Temp FROM PRO_PREPOSE_TRANS_CTL WHERE Op_Date = l_Trans_Date LIMIT 1;IF COALESCE(l_Temp, 0) = 0 THEN--清空表FS_TEMP_FBS_950和FS_FBS_950的数据EXECUTE 'truncate table FS_TEMP_FBS_950';EXECUTE 'truncate table FS_FBS_950';--正交易处理BEGINl_Tab_Desc := 'Insert Into FS_TEMP_FBS_950 from FS_FBS_FBS_VOITEMS ';--将FS_FBS_FBS_VOITEMS中数据插入临时表FS_TEMP_FBS_950中INSERT INTO FS_TEMP_FBS_950(SYSTEM_SOURCE_CD,HOST_ACCTS_DT,ACCT,CURR,DC_FLAG,AMT,TRAN_CODE,STRK_BAL_FLAG,BIZ_TYPE,SDB_BIZ_NO,CNTPTY_BIZ_NO,MEMO,MATCH_SIGN)SELECT 'FBS',T.TRAN_DT, --入账日期TRIM(T.ACCT_NO), --入账账号TRIM(T.CURR_CODE), --币种T.CR_DR, --借贷标志T.AMOUNT, --交易金额TRIM(T.TRAN_CODE), --交易编码'N' AS STRK_BAL_FLAG,--冲账标志'S' || TRIM(T.MT), --业务类型TRIM(T.REF_FIRST), --我行业务编号TRIM(T.REF_SECOND), --他行业务编号TRIM(T.REMARK),--备注Rank() Over(PARTITION BY T.TRAN_DT, T.ACCT_NO, T.CURR_CODE,T.CR_DR, T.REF_FIRST, T.TRAN_CODE, T.AMOUNT ORDER BY T.vch_no,T.AMOUNT) Match_SignFROM FS_FBS_FBS_VCHDATA TWHERE T.TRAN_DT = l_Trans_Date ;--T.TRAN_DT = TO_DATE(l_Trans_Date, 'yyyymmdd')EXCEPTION WHEN OTHERS THENl_Sql_Err = SQLERRM;RAISE EXCEPTION 'ERROR OCCUR -->stage1:[%]:%',l_Tab_Desc,l_Sql_Err;END;UPDATE Pro_Prepose_Trans_Ctl SET Stage1 = 1 WHERE Op_Date = l_Trans_Date;END IF;END; --stage1 completeBEGIN --stage2 startSELECT Stage2 INTO l_Temp FROM PRO_PREPOSE_TRANS_CTL WHERE Op_Date = l_Trans_Date LIMIT 1;IF COALESCE(l_Temp, 0) = 0 THENBEGINl_Tab_Desc := 'UPDATE FS_TEMP_FBS_950 from FS_FBS_FBS_VOITEMS';--用FS_FBS_FBS_VOITEMS表中GL_TRANS_NO字段来更新FS_TEMP_FBS_950表中主机流水号DROP TABLE IF EXISTS FS_TEMP_FBS_950_MID;create table FS_TEMP_FBS_950_MID asselectT.SYSTEM_SOURCE_CD,T.HOST_ACCTS_DT,SUBSTRING(R.GL_TRANS_NO, 1, 7) AS HOST_LOG_NO,T.DC_FLAG,T.STRK_BAL_FLAG,T.ACCT,T.CURR,T.AMT,_TYPE,TPTY_BIZ_NO,T.SDB_BIZ_NO,T.MEMO,T.MATCH_SIGN,T.ORIGINAL_TRAN_DT,T.ORIGINAL_GLNO,T.TRAN_CODEfrom FS_TEMP_FBS_950 T left join FS_FBS_FBS_VOITEMS R onR.TRAN_DT = T.HOST_ACCTS_DTAND R.ACCOUNT_NO = T.ACCTAND R.CURR = T.CURRAND R.CR_DR = T.DC_FLAGAND R.AMOUNT = T.AMTAND R.TRAN_CODE = T.TRAN_CODEAND R.REF_FIRST = T.SDB_BIZ_NOwhere T.MATCH_SIGN = '1'Union ALLselect * from FS_TEMP_FBS_950 where MATCH_SIGN <> '1'DISTRIBUTED BY (HOST_ACCTS_DT,HOST_LOG_NO,DC_FLAG);Drop table FS_TEMP_FBS_950;alter table FS_TEMP_FBS_950_MID rename to FS_TEMP_FBS_950;EXCEPTION WHEN OTHERS THENl_Sql_Err = SQLERRM;RAISE EXCEPTION 'ERROR OCCUR -->stage2:[%]:%',l_Tab_Desc,l_Sql_Err;END;UPDATE Pro_Prepose_Trans_Ctl SET Stage2 = 1 WHERE Op_Date = l_Trans_Date;END IF;END; --stage2 completeBEGIN --stage3 startSELECT Stage3 INTO l_Temp FROM PRO_PREPOSE_TRANS_CTL WHERE Op_Date = l_Trans_Date LIMIT 1;IF Nvl(l_Temp, 0) = 0 THENBEGINl_Tab_Desc := 'Insert Into fs_fbs_950 from FS_TEMP_FBS_950';--将FS_TEMP_FBS_950中MATCH_SIGN为1的数据,插入表FS_FBS_950中。
pg 的nvl 函数
![pg 的nvl 函数](https://img.taocdn.com/s3/m/fdc99b5bf4335a8102d276a20029bd64793e6272.png)
pg 的nvl 函数PG的NVL函数在PG数据库中,NVL是一个常用的函数,用来判断一个值是否为空,并在为空时返回一个指定的默认值。
NVL函数的使用非常灵活,可以用于各种场景,本文将介绍NVL函数的基本用法和一些常见应用。
一、NVL函数的基本用法NVL函数的语法如下:NVL(expression, default_value)其中,expression是待判断的值,default_value是当expression 为空时返回的默认值。
NVL函数的返回值类型与default_value相同。
下面是一个简单的例子,假设我们有一个表格students,其中包含学生的姓名(name)和年龄(age)两个字段。
现在我们想查询所有学生的姓名和年龄,如果年龄为空,则显示为“未知”。
可以使用NVL函数来实现这个需求,SQL语句如下:SELECT name, NVL(age, '未知') FROM students;二、NVL函数的常见应用除了上述基本用法外,NVL函数还可以在许多其他场景中发挥作用,下面将介绍几个常见应用。
1. 判断空值并替换在实际开发中,我们经常需要对数据进行处理,如果某个字段为空,则替换为指定的默认值。
例如,我们有一个表格products,其中包含产品的名称(name)和价格(price)两个字段。
现在我们想查询所有产品的名称和价格,如果价格为空,则显示为“暂无定价”。
可以使用NVL函数来实现这个需求,SQL语句如下:SELECT name, NVL(price, '暂无定价') FROM products;2. 判断空值并计算NVL函数不仅可以用于替换空值,还可以用于计算。
例如,我们有一个表格orders,其中包含订单的编号(order_id)和金额(amount)两个字段。
现在我们想查询所有订单的编号和金额,如果金额为空,则显示为0。
可以使用NVL函数来实现这个需求,SQL语句如下:SELECT order_id, NVL(amount, 0) FROM orders;3. 判断空值并进行条件判断在某些场景下,我们需要根据某个字段的值进行条件判断,但该字段可能为空。
postgresql 的 函数
![postgresql 的 函数](https://img.taocdn.com/s3/m/43c55f1c4a73f242336c1eb91a37f111f1850dbd.png)
postgresql 的函数PostgreSQL是一种开源的关系型数据库管理系统,它支持多种编程语言,包括C、C++、Java、Perl、Python等。
PostgreSQL的函数是一种可重用的代码块,它们可以接收参数并返回值。
在本文中,我们将深入了解PostgreSQL函数的概念、类型和使用方法。
一、函数概述1. 函数定义PostgreSQL函数是一组SQL语句或PL/SQL代码块,可以接收参数并返回结果。
它们通常用于简化复杂查询或实现自定义业务逻辑。
PostgreSQL支持多种类型的函数,包括内置函数(如数学和字符串函数)、用户自定义函数(UDF)和存储过程。
2. 函数类型PostgreSQL中的函数可以分为以下几类:(1)内置函数:这些是由数据库系统提供的固定功能集合。
这些功能包括数学运算、日期和时间处理、字符串操作等。
(2)用户自定义函数:这些是由用户编写的自定义功能。
它们可以使用PL/SQL或其他编程语言编写,并在需要时被调用。
(3)存储过程:这些是一组预先编译好的SQL语句或PL/SQL代码块,可以在需要时被调用。
存储过程通常用于执行特定任务或实现业务逻辑。
3. 函数用法使用PostgreSQL中的函数有以下几个步骤:(1)定义函数:使用CREATE FUNCTION语句定义函数。
(2)调用函数:使用SELECT语句调用函数。
(3)删除函数:使用DROP FUNCTION语句删除函数。
二、函数定义1. 函数语法PostgreSQL中的函数定义语法如下:CREATE [OR REPLACE] FUNCTION function_name (arguments) RETURNS return_type AS $$DECLARE-- 变量声明BEGIN-- 函数体END;$$ LANGUAGE language_name;其中,function_name是函数名称,arguments是参数列表,return_type是返回值类型,$$和$$之间的内容是函数体,language_name是编程语言名称。
GP常用命令整理
![GP常用命令整理](https://img.taocdn.com/s3/m/ba11556b0029bd64793e2c89.png)
Greenplum 日常简明维护手册1.数据库启动:gpstart常用参数: -a : 直接启动,不提示终端用户输入确认-m:只启动master 实例,主要在故障处理时使用访问单个数据实例:PGOPTIONS='-c gp_session_role=utility' psql template1 -p 5432启动某个segment instance : pg_ctl stop/start -D /datadir/取端口号:select * fromgp_segment_configuration启动以后会在/tmp/ 下生成一个.lock 隐藏文件,记录主进程号。
2.数据库停止:gpstop:常用可选参数:-a:直接停止,不提示终端用户输入确认-m:只停止master 实例,与gpstart –m 对应使用-f:停止数据库,中断所有数据库连接,回滚正在运行的事务-u:不停止数据库,只加载pg_hba.conf 和postgresql.conf中运行时参数,当改动参数配置时候使用。
连接数,重启3.查看实例配置和状态select * from gp_segment_configuration order by content ; select * from pg_filespace_entry ;主要字段说明:Content:该字段相等的两个实例,是一对P(primary instance)和M(mirror Instance)Isprimary:实例是否作为primary instance 运行Valid:实例是否有效,如处于false 状态,则说明该实例已经down 掉。
Port:实例运行的端口Datadir:实例对应的数据目录1.gpstate :显示Greenplum数据库运行状态,详细配置等信息常用可选参数:-c:primary instance 和 mirror instance 的对应关系-m:只列出mirror 实例的状态和配置信息-f:显示standby master 的详细信息该命令默认列出数据库运行状态汇总信息,常用于日常巡检。
gp存储过程写法
![gp存储过程写法](https://img.taocdn.com/s3/m/e416e4cfbdeb19e8b8f67c1cfad6195f302be85b.png)
gp存储过程写法在PostgreSQL中,存储过程通常使用PL/pgSQL语言编写。
以下是一个基本的PL/pgSQL 存储过程的示例:sqlCREATE OR REPLACE FUNCTION my_function(parameter1 INT, parameter2 VARCHAR)RETURNS INT AS$$DECLAREvariable1 INT;variable2 VARCHAR;BEGIN-- 在此处编写存储过程的逻辑-- 例如,设置变量值variable1 := parameter1;variable2 := parameter2;-- 进行一些操作,比如插入、更新或查询数据-- 示例:插入数据INSERT INTO my_table (column1, column2) VALUES (variable1,variable2);-- 返回结果RETURN variable1;END;$$LANGUAGE plpgsql;在这个例子中,my_function是存储过程的名称,parameter1和parameter2是传递给存储过程的参数,RETURNS INT表示存储过程将返回一个整数类型的结果。
DECLARE部分用于声明存储过程中使用的局部变量。
在BEGIN和END之间的部分是存储过程的主体,你可以在这里编写逻辑,比如设置变量值、执行SQL语句等。
LANGUAGE plpgsql指定了存储过程使用的语言,这里是PL/pgSQL。
请注意,这只是一个基本示例,实际的存储过程可能会更加复杂,并且可能会包含更多的逻辑和错误处理。
在编写存储过程时,请确保你熟悉PL/pgSQL的语法和特性,并根据你的具体需求进行适当的调整。
gpjyvalue函数的用法
![gpjyvalue函数的用法](https://img.taocdn.com/s3/m/71ffe9386fdb6f1aff00bed5b9f3f90f76c64da6.png)
gpjyvalue函数的用法
gpjyvalue函数:
gpjyvalue函数是GPPanel类库内一个可以用来获取界面参数值、设置参数值及追踪参数变化的内置函数。
它通常用于窗口控件和滑块控件,当使用这样的控件时,使用者可以通过gpjyvalue函数来查询用户设置的参数值,并根据不同的函数传入
参数值,以实现界面参数设定、获取及追踪的功能。
1、使用方法:
(1)通过gpjyvalue函数获取控件参数值:
gpjyvalue(控件参数代号, ”params”) - 该函数可以查询用户设置的参数值,返回该参
数值。
2、函数参数:
(1)控件参数代号:
控件参数代号是指控件中定义的各种参数,如“position”参数指控件位置,“font”参
数指控件字体等。
3、特点:
(1) gpjyvalue函数可以避免程序暴露的重要性参数的安全隐患。
(2) gpjyvalue函数可以灵活的设置参数值,可以动态更改参数值,减轻程序控制的困难度。
(3) gpjyvalue函数可以追踪控件参数变化,在参数改变时发出信号,通知相关模块进行数据处理。
GP数据库常用SQL语句
![GP数据库常用SQL语句](https://img.taocdn.com/s3/m/46b1912cabea998fcc22bcd126fff705cc175c2a.png)
GP数据库常⽤SQL语句GP数据库常⽤SQL语句--1,查看列名以及类型select upper(column_name) ,data_type from information_schema.columnswhere table_schema='ods_hs08'and lower(table_name)=lower('T_ods_hs08_secumreal');--2,查看表名剔除分区表名select a.tablename from pg_tables a where a.schemaname='ods_hs08'and a.tablename not in (select b.partitiontablename from pg_partitions b where b.schemaname='ods_hs08' ) ;--3,查分区表名select parentpartitiontablename,partitiontablename,*from pg_partitions ;--4,查看gpload错误记录表select*from gp_read_error_log('ext_gpload_reusable_2117d97e_5cf0_11e9_b169_2880239d54e8')where cmdtime > to_timestamp('1554971595.06');select gp_read_error_log('ext_gpload_4a33e352_5f20_11e9_8223_2880239d54e8 ');--5,修改主键alter table ods_htgs.ttrd_acc_balance_cashadd constraint ttrd_acc_balance_cash_pkey primary key (cash_ext_accid, accid, currency);--或者在建表语句列后⾯加CONSTRAINT ttrd_acc_balance_cash_pkey PRIMARY KEY (cash_ext_accid, accid, currency)--6,外键约束alter table ods_htgs.ttrd_acc_secuadd constraint fk_ttrd_acc_secu foreign key (cash_accid)references ods_htgs.ttrd_acc_cash (accid);--或者在建表语句列后⾯加CONSTRAINT fk_ttrd_acc_secu FOREIGN KEY (cash_accid)REFERENCES ods_htgs.ttrd_acc_cash (accid) MATCH SIMPLEON UPDATE NO ACTIONON DELETE NO ACTION--7,字符转⽇期转数字select*from ods_hs08.t_ods_hs08_his_entrustwhere to_number(to_char(to_date(init_date ||'','yyyyMMdd'),'yyyyMMdd'),'99999999') between20010101and20191201 --8,table_constraint语法:table_constraint is:[ CONSTRAINT constraint_name ]{ UNIQUE ( column_name [, ... ] ) [ USING INDEX TABLESPACE tablespace ]|PRIMARY KEY ( column_name [, ... ] ) [ USING INDEX TABLESPACE tablespace ]|CHECK ( expression ) |FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ][ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ][ ON DELETE action ][ ON UPDATE action ] }[ DEFERRABLE | NOT DEFERRABLE ][ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]--9,查看数据库、表占⽤空间:select pg_size_pretty(pg_relation_size('schema.tablename'));select pg_size_pretty(pg_database_size('databasename'));--10,查看schema占⽤的空间:select pg_size_pretty(pg_relation_size(tablename)) from pg_tables tinner join pg_namespase d on t.schemaname=d.nspname group by d.nspname;-- 必须在数据库锁对应的存储系统⾥,⾄少保留30%的⾃由空间,⽇常巡检,哟啊检查存储空间的剩余容量;--11,查看数据分布情况:select gp_segment_id,count(*) from tablename group by1;-- 如果数据分布不均匀,将发挥不了并⾏计算机的优势,严重影响性能;--12,查看锁信息:select locktype,database,c.relname,l.relation,l.transactionid,l.transaction,l.id,l.mode,l.granted,a.current_query from pg_locks l,pg_class c, pg_stat_activity awhere l.relation=c.oid and l.pid =a.procpidorder by c.relname;-- relname:表名-- locktype、mode:标识锁的类型--13,分区表信息select*from pg_partitions awhere a.schemaname='bib'and a.tablename='t_project_ibma1'。
gp函数——精选推荐
![gp函数——精选推荐](https://img.taocdn.com/s3/m/5d2c74eb0342a8956bec0975f46527d3240ca645.png)
gp函数add_months(date, integer)-- DROP FUNCTION add_months(date, integer);CREATE OR REPLACE FUNCTION add_months(date, integer)RETURNS date AS$BODY$ select cast(date_trunc('day',$1)+($2 || 'month')::interval as date) $BODY$ LANGUAGE 'sql' VOLATILE;ALTER FUNCTION add_months(date, integer) OWNER TO odsusr;GRANT EXECUTE ON FUNCTION add_months(date, integer) TO public; GRANT EXECUTE ON FUNCTION add_months(date, integer) TO odsusr; convertstring(text, integer)-- Function: convertstring(text, integer)-- DROP FUNCTION convertstring(text, integer);CREATE OR REPLACE FUNCTION convertstring(text, integer)RETURNS text AS$BODY$DECLARE len INTEGER;DECLARE retval text;DECLARE tmp text;DECLARE asciival INT4;--全半⾓转换函数--text:转换源字符;--integer 1:全⾓转半⾓;-- 其它: 半⾓转全⾓;--作者: 何启平BEGIN--字符串字符个数SELECT textlen($1) INTO len;SELECT '' INTO retval;IF len>0 THEN--循环FOR i IN 1..len LOOP--取单个字符SELECT substring($1, i, 1) INTO tmp;SELECT ascii(tmp) INTO asciival;IF ($2 = 1) THENBEGIN--全⾓转半⾓IF (asciival = 12288) THEN --空格asciival = 32;END IF;IF (asciival> 65280) AND (asciival< 65375) THEN SELECT asciival-65248 INTO asciival;END IF;END;ELSEBEGIN--半⾓转全⾓IF (asciival = 32) THEN --空格asciival = 12288;END IF;IF (asciival< 127) THENSELECT asciival+65248 INTO asciival;END IF;END;END IF;SELECT chr(asciival) INTO tmp;SELECT textcat(retval, tmp) INTO retval;END LOOP;END IF;IF (len is null) or len=0 THENSELECT '' INTO retval;END IF;RETURN retval;END;$BODY$LANGUAGE 'plpgsql' VOLATILE;ALTER FUNCTION convertstring(text, integer) OWNER TO odsusr; GRANT EXECUTE ON FUNCTION convertstring(text, integer) TO public; GRANT EXECUTE ON FUNCTION convertstring(text, integer) TO odsusr;create_external_table-- Function: create_external_table(text, text, text, text, integer, text, text, text)-- DROP FUNCTION create_external_table(text, text, text, text, integer, text, text, text);CREATE OR REPLACE FUNCTION create_external_table(srctable text, exttable text, dname text, encodingstr text, limitcount integer, delim text, ghost text, gport text)RETURNS void AS$BODY$DECLAREsqlstr text;columnstr text;sname_ text;tname_ text;BEGINsqlstr:=E'CREATE EXTERNAL temp TABLE $exttable($columnstr)LOCATION (''gpfdist://$ghost:$gport/$datafile'')FORMAT ''TEXT''(DELIMITER ''$delim''NULL ''''ESCAPE ''OFF'')ENCODING ''$encodingstr''LOG ERRORS INTO error_table SEGMENT REJECT LIMIT 3; ';columnstr:=fdmprd.get_table_column_and_type(srctable); sqlstr:=replace(sqlstr, '$columnstr', columnstr);sqlstr:=replace(sqlstr, '$exttable',exttable);sqlstr:=replace(sqlstr, '$datafile', dname);sqlstr:=replace(sqlstr, '$encodingstr', encodingstr);sqlstr:=replace(sqlstr, '$limitcount', limitcount::varchar); sqlstr:=replace(sqlstr, '$delim', delim);sqlstr:=replace(sqlstr, '$ghost', ghost);sqlstr:=replace(sqlstr, '$gport', gport);iflimitcount>=3 thensqlstr:=replace(sqlstr, '--', ' ');end if;execute sqlstr;END;$BODY$LANGUAGE 'plpgsql' VOLATILE;ALTER FUNCTION create_external_table(text, text, text, text, integer, text, text, text) OWNER TO odsusr; GRANT EXECUTE ON FUNCTION create_external_table(text, text, text, text, integer, text, text, text) TO public; GRANT EXECUTE ON FUNCTION create_external_table(text, text, text, text, integer, text, text, text) TO odsusr; get_gp_create_sql-- Function: get_gp_create_sql(text)-- DROP FUNCTION get_gp_create_sql(text);CREATE OR REPLACE FUNCTION get_gp_create_sql(tablename text)RETURNS text AS$BODY$try:table_name = tablename.lower().split('.')[1]table_schema = tablename.lower().split('.')[0]except (IndexError):return 'Please in put "tableschema.table_name" '#get table oidget_table_oid = " select oid,reloptions,relkind from pg_class where oid='%s'::regclass"%(tablename)try:rv_oid = plpy.execute(get_table_oid, 5)if not rv_oid:return 'Did not find any relation named "'+ tablename +'".'except (Error):return 'Did not find any relation named "'+ tablename +'".'table_oid = rv_oid[0]['oid']rv_reloptions = rv_oid[0]['reloptions']rv_relkind=rv_oid[0]['relkind']create_sql="";table_kind='table';ifrv_relkind!='r' and rv_relkind!='v':plpy.error('%s is not table or view'%(tablename));elifrv_relkind=='v':get_view_def="select pg_get_viewdef(%s,'t') as viewdef;"%(table_oid)rv_viewdef=plpy.execute(get_view_def);create_sql = 'create view %s as \n'%(tablename)create_sql += rv_viewdef[0]['viewdef']+'\n';table_kind='view'else:#get column name and column typeget_columns = "SELECT a.attname, pg_catalog.format_type(a.atttypid, a.atttypmod),\(SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128) \FROM pg_catalog.pg_attrdef d WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef) as default,\a.attnotnull as isnull \FROM pg_catalog.pg_attribute a \WHERE a.attrelid = %s AND a.attnum> 0 AND NOT a.attisdropped \ORDER BY a.attnum;" %(table_oid);rv_columns = plpy.execute(get_columns)#get distributed keyget_table_distribution1 = "SELECT attrnums FROM pg_catalog.gp_distribution_policy t WHERE localoid = '" + table_oid + "' "rv_distribution1 = plpy.execute(get_table_distribution1, 500)rv_distribution2 = ''if rv_distribution1 and rv_distribution1[0]['attrnums']:#/doc/82704e3654270722192e453610661ed9ad5155c7.html (rv_distribution1[0]['attrnums'])get_table_distribution2 = "SELECT attname FROM pg_attribute WHERE attrelid = '" + table_oid + "' AND attnum in (" +str(rv_distribution1[0]['attrnums']).strip('[').strip(']') + ")"#get_table_distribution2 = "SELECT attname FROM pg_attribute WHERE attrelid = '" + table_oid + "' AND attnum in (" +rv_distribution1[0]['attrnums'] + ")"#/doc/82704e3654270722192e453610661ed9ad5155c7.html (get_table_distribution2)rv_distribution2 = plpy.execute(get_table_distribution2, 500)#get index definecreate_sql = 'create table %s(\n'%(tablename)get_index = "select pg_get_indexdef(indexrelid) AS indexdef from pg_index where indrelid=%s"%(table_oid);rv_index = plpy.execute(get_index);#get partition infoget_parinfo1 = "select attname as columnname from pg_attribute where attnum = (select paratts[0] from pg_partition where parrelid=%s) and attrelid=%s;"%(table_oid,table_oid);get_parinfo2 ="""SELECT pp.parrelid,pr1.parchildrelid,CASEWHEN pp.parkind = 'h'::"char" THEN 'hash'::textWHEN pp.parkind = 'r'::"char" THEN 'range'::textWHEN pp.parkind = 'l'::"char" THEN 'list'::textELSE NULL::textEND AS partitiontype,pg_get_partition_rule_def(pr1.oid, true) AS partitionboundaryFROM pg_partition pp, pg_partition_rule pr1WHERE pp.paristemplate = false AND pp.parrelid = %s AND pr1.paroid = pp.oid order by pr1.parname;"""%(table_oid);v_par_parent = plpy.execute(get_parinfo1);v_par_info = plpy.execute(get_parinfo2);max_column_len = 10max_type_len = 4max_modifiers_len = 4max_default_len=4fori in rv_columns:ifi['attname']:ifmax_column_lenifi['format_type']:ifmax_type_lenifi['default']:ifmax_type_lenfirst = Truefori in rv_columns:if first==True:split_char=' ';first=Falseelse :split_char=',';ifi['attname']:create_sql += " " + split_char + i['attname'].ljust(max_column_len +6) + ''else:create_sql += " " + split_char + ' '.ljust(max_column_len + 6)ifi['format_type']:create_sql += ' ' + i['format_type'].ljust(max_type_len + 2)else:create_sql += ' ' + ' '.ljust(max_type_len + 2)ifi['isnull'] and i['isnull']:create_sql += ' ' + ' not null '.ljust(8)ifi['default']:create_sql += ' default ' + i['default'].ljust(max_default_len + 6)create_sql += "\n"create_sql += ")"ifrv_reloptions:#/doc/82704e3654270722192e453610661ed9ad5155c7.html (str(rv_reloptions))create_sql+="with("+str(rv_reloptions).replace("'","").strip('[').strip(']') +")\n"if rv_distribution2:create_sql += 'Distributed by ('fori in rv_distribution2:create_sql += i['attname'] + ','create_sql = create_sql.strip(',') + ')'elif rv_distribution1:create_sql += 'Distributed randomly\n'ifv_par_parent:partitiontype = v_par_info[0]['partitiontype'];create_sql+='\nPARTITION BY ' + partitiontype + "("+v_par_parent[0]['columnname']+")\n(\n";fori in v_par_info:create_sql+=" "+i['partitionboundary']+',\n';create_sql = create_sql.strip(',\n');create_sql+="\n)"create_sql += ";\n\n"fori in rv_index:create_sql += i['indexdef']+';\n'create_sql+='\n'#get commentget_table_comment="select 'comment on %s %s is '''|| COALESCE(description,'')||'''' as comment from pg_description where objoid=%s and objsubid=0;"%(table_kind,tablename,table_oid)get_column_comment="select 'comment on column %s.'||b.attname ||' is ''' || COALESCE(a.description,'') ||''' ' as comment from pg_catalog.pg_descriptiona,pg_catalog.pg_attribute b where objoid=%s and a.objoid=b.attrelid anda.objsubid=b.attnum;"%(tablename,table_oid)rv_table_comment=plpy.execute(get_table_comment);rv_column_comment=plpy.execute(get_column_comment);fori in rv_table_comment:create_sql += i['comment']+';\n'fori in rv_column_comment:create_sql += i['comment']+';\n'returncreate_sql;$BODY$LANGUAGE 'plpythonu' VOLATILE;ALTER FUNCTION get_gp_create_sql(text) OWNER TO odsusr;get_table_column_and_type-- Function: get_table_column_and_type(text)-- DROP FUNCTION get_table_column_and_type(text);CREATE OR REPLACE FUNCTION get_table_column_and_type(srctable text)RETURNS text AS$BODY$DECLAREsqlstr text;mviews RECORD;columnstr text:='';indexsmallint:=0;sname text;tname text;BEGINsname:=lower(split_part(srctable,'.',1));tname:=lower(split_part(srctable,'.',2));sqlstr:='select a.attname, pg_catalog.format_type(a.atttypid, a.atttypmod) as type,a.attnotnullfrom pg_catalog.pg_attributea,pg_catalog.pg_class c, pg_catalog.pg_namespace n wherea.attrelid=c.oid and c.relname='''||tname||'''and a.attnum>0 AND NOT a.attisdroppedand n.oid = c.relnamespaceand n.nspname='''||sname||'''order bya.attnum';FOR mviews IN execute sqlstr LOOPif index=0 thencolumnstr :=columnstr||'"'||mviews.attname||E'"\t'||mviews.type;elsecolumnstr :=columnstr||E',\n"'||mviews.attname||E'"\t'||mviews.type;end if;index:=index+1;end loop;if index=0 thenRAISE EXCEPTION 'not exist %',sname||'.'||tname;end if;return columnstr;END;$BODY$LANGUAGE 'plpgsql' VOLATILE;ALTER FUNCTION get_table_column_and_type(text) OWNER TO odsusr;GRANT EXECUTE ON FUNCTION get_table_column_and_type(text) TO public;GRANT EXECUTE ON FUNCTION get_table_column_and_type(text) TO odsusr;getitemname-- Function: getitemname(character varying, character varying)-- DROP FUNCTION getitemname(character varying, character varying);CREATE OR REPLACE FUNCTION getitemname(pcodeno character varying, pitemno character varying) RETURNS character varying AS$BODY$declarepItemNamevarchar(200) ;BEGINselectItemName into pItemNamefrom fdmprd.fs_s04_Code_LibraryWHERE codeno=pcodeno AND ItemNo=pItemNo;ifpItemName is null thenreturnpItemNo;elsereturnpItemName;end if;exception when others then return pItemNo;end ;$BODY$LANGUAGE 'plpgsql' VOLATILE;ALTER FUNCTION getitemname(character varying, character varying) OWNER TO ex_sdbods; GRANT EXECUTE ON FUNCTION getitemname(character varying, character varying) TO public; GRANT EXECUTE ON FUNCTION getitemname(character varying, character varying) TO ex_sdbods;GRANT EXECUTE ON FUNCTION getitemname(character varying, character varying) TO odsusr;instr(character varying, character varying, integer, integer)-- Function: instr(character varying, character varying, integer, integer)-- DROP FUNCTION instr(character varying, character varying, integer, integer);CREATE OR REPLACE FUNCTION instr(string character varying, string_to_search character varying, beg_index integer, occur_index integer)RETURNS integer AS$BODY$DECLAREpos integer NOT NULL DEFAULT 0;occur_number integer NOT NULL DEFAULT 0;temp_strvarchar;beg integer;i integer;length integer;ss_length integer;BEGINIF beg_index> 0 THENbeg := beg_index;temp_str := substring(string FROM beg_index);FOR i IN 1..occur_index LOOPpos := position(string_to_search IN temp_str);IF i = 1 THENbeg := beg + pos - 1;ELSEbeg := beg + pos;END IF;temp_str := substring(string FROM beg + 1);END LOOP;IF pos = 0 THENRETURN 0;ELSERETURN beg;END IF;ELSEss_length := char_length(string_to_search);length := char_length(string);beg := length + beg_index - ss_length + 2;WHILE beg > 0 LOOPtemp_str := substring(string FROM beg FOR ss_length);pos := position(string_to_search IN temp_str);IF pos> 0 THENoccur_number := occur_number + 1;IF occur_number = occur_index THENRETURN beg;END IF;END IF;beg := beg - 1;END LOOP;RETURN 0;END IF;END;$BODY$LANGUAGE 'plpgsql' IMMUTABLE STRICT;ALTER FUNCTION instr(character varying, character varying, integer, integer) OWNER TO dmop; GRANT EXECUTE ON FUNCTION instr(character varying, character varying, integer, integer) TO public;GRANT EXECUTE ON FUNCTION instr(character varying, character varying, integer, integer) TO dmop;GRANT EXECUTE ON FUNCTION instr(character varying, character varying, integer, integer) TO ex_sdbods;GRANT EXECUTE ON FUNCTION instr(character varying, character varying, integer, integer) TO odsusr;instr(character varying, character varying, integer)-- DROP FUNCTION instr(character varying, character varying, integer);CREATE OR REPLACE FUNCTION instr(string character varying, string_to_search character varying, beg_index integer) RETURNS integer AS$BODY$DECLAREpos integer NOT NULL DEFAULT 0;ss_length integer;BEGINIF beg_index> 0 THENtemp_str := substring(string FROM beg_index);pos := position(string_to_search IN temp_str);IF pos = 0 THENRETURN 0;ELSERETURN pos + beg_index - 1;END IF;ELSEss_length := char_length(string_to_search);length := char_length(string);beg := length + beg_index - ss_length + 2;WHILE beg > 0 LOOPtemp_str := substring(string FROM beg FOR ss_length);pos := position(string_to_search IN temp_str);IF pos> 0 THENRETURN beg;END IF;beg := beg - 1;END LOOP;RETURN 0;END IF;END;$BODY$LANGUAGE 'plpgsql' IMMUTABLE STRICT;ALTER FUNCTION instr(character varying, character varying, integer) OWNER TO dmop; instr(character varying, character varying)-- DROP FUNCTION instr(character varying, character varying);CREATE OR REPLACE FUNCTION instr(character varying, character varying) RETURNS integer ASBEGINpos:= instr($1, $2, 1);RETURN pos;END;$BODY$LANGUAGE 'plpgsql' IMMUTABLE STRICT;ALTER FUNCTION instr(character varying, character varying) OWNER TO dmop;last_day(date)-- DROP FUNCTION last_day(date);CREATE OR REPLACE FUNCTION last_day(date)RETURNS date AS$BODY$ select cast(date_trunc('month', $1) + '1 month'::interval as date) - 1 $BODY$LANGUAGE 'sql' VOLATILE;ALTER FUNCTION last_day(date) OWNER TO odsusr;GRANT EXECUTE ON FUNCTION last_day(date) TO public;GRANT EXECUTE ON FUNCTION last_day(date) TO odsusr;pro_fbs950_prepose(character varying)-- DROP FUNCTION pro_fbs950_prepose(character varying);CREATE OR REPLACE FUNCTION pro_fbs950_prepose(p_op_date character varying) RETURNS void AS $BODY$DECLAREl_Trans_Date DATE := coalesce(To_Date(p_Op_Date, 'yyyymmdd'), now());l_Sql_Err VARCHAR(100);l_Tab_Desc VARCHAR(100);l_Temp INT;l_rec VARCHAR(1);BEGINSELECT 'Y' into l_rec FROM PRO_PREPOSE_TRANS_CTL WHERE Op_Date = l_Trans_Date LIMIT 1;IF l_rec is null THENINSERT INTO PRO_PREPOSE_TRANS_CTL(OP_DATE, SYSTEM_ID, STAGE1, STAGE2, STAGE3) SELECT l_Trans_Date, 'FBS950', NULL, NULL, NULL FROM Dual;END IF;IF COALESCE(l_Temp, 0) = 0 THEN--清空表FS_TEMP_FBS_950和FS_FBS_950的数据EXECUTE 'truncate table FS_TEMP_FBS_950';EXECUTE 'truncate table FS_FBS_950';--正交易处理BEGINl_Tab_Desc := 'Insert Into FS_TEMP_FBS_950 from FS_FBS_FBS_VOITEMS '; --将FS_FBS_FBS_VOITEMS中数据插⼊临时表FS_TEMP_FBS_950中INSERT INTO FS_TEMP_FBS_950(SYSTEM_SOURCE_CD,HOST_ACCTS_DT,ACCT,CURR,DC_FLAG,AMT,TRAN_CODE,STRK_BAL_FLAG,BIZ_TYPE,SDB_BIZ_NO,CNTPTY_BIZ_NO,MEMO,MATCH_SIGN)SELECT 'FBS',T.TRAN_DT, --⼊账⽇期TRIM(T.ACCT_NO), --⼊账账号TRIM(T.CURR_CODE), --币种T.CR_DR, --借贷标志T.AMOUNT, --交易⾦额TRIM(T.TRAN_CODE), --交易编码'N' AS STRK_BAL_FLAG,--冲账标志'S' || TRIM(T.MT), --业务类型TRIM(T.REF_FIRST), --我⾏业务编号TRIM(T.REF_SECOND), --他⾏业务编号T.CR_DR, T.REF_FIRST, T.TRAN_CODE, T.AMOUNT ORDER BY T.vch_no,T.AMOUNT) Match_SignFROM FS_FBS_FBS_VCHDATA TWHERE T.TRAN_DT = l_Trans_Date ;--T.TRAN_DT = TO_DATE(l_Trans_Date, 'yyyymmdd')EXCEPTION WHEN OTHERS THENl_Sql_Err = SQLERRM;RAISE EXCEPTION 'ERROR OCCUR -->stage1:[%]:%',l_Tab_Desc,l_Sql_Err;END;UPDATE Pro_Prepose_Trans_Ctl SET Stage1 = 1 WHERE Op_Date = l_Trans_Date;END IF;END; --stage1 completeBEGIN --stage2 startSELECT Stage2 INTO l_Temp FROM PRO_PREPOSE_TRANS_CTL WHERE Op_Date = l_Trans_Date LIMIT 1; IF COALESCE(l_Temp, 0) = 0 THENBEGINl_Tab_Desc := 'UPDATE FS_TEMP_FBS_950 from FS_FBS_FBS_VOITEMS';--⽤FS_FBS_FBS_VOITEMS表中GL_TRANS_NO字段来更新FS_TEMP_FBS_950表中主机流⽔号DROP TABLE IF EXISTS FS_TEMP_FBS_950_MID;create table FS_TEMP_FBS_950_MID asselectT.SYSTEM_SOURCE_CD,T.HOST_ACCTS_DT,SUBSTRING(R.GL_TRANS_NO, 1, 7) AS HOST_LOG_NO,T.DC_FLAG,T.STRK_BAL_FLAG,T.ACCT,T.CURR,T.AMT,/doc/82704e3654270722192e453610661ed9ad5155c7.html _TYPE,/doc/82704e3654270722192e453610661ed9ad5155c7.html TPTY_BIZ_NO,T.SDB_BIZ_NO,T.MEMO,T.MATCH_SIGN,T.TRAN_CODEfrom FS_TEMP_FBS_950 T left join FS_FBS_FBS_VOITEMS R onR.TRAN_DT = T.HOST_ACCTS_DTAND R.ACCOUNT_NO = T.ACCTAND R.CURR = T.CURRAND R.CR_DR = T.DC_FLAGAND R.AMOUNT = T.AMTAND R.TRAN_CODE = T.TRAN_CODEAND R.REF_FIRST = T.SDB_BIZ_NOwhere T.MATCH_SIGN = '1'Union ALLselect * from FS_TEMP_FBS_950 where MATCH_SIGN <> '1'DISTRIBUTED BY (HOST_ACCTS_DT,HOST_LOG_NO,DC_FLAG);Drop table FS_TEMP_FBS_950;alter table FS_TEMP_FBS_950_MID rename to FS_TEMP_FBS_950;EXCEPTION WHEN OTHERS THENl_Sql_Err = SQLERRM;RAISE EXCEPTION 'ERROR OCCUR -->stage2:[%]:%',l_Tab_Desc,l_Sql_Err;END;UPDATE Pro_Prepose_Trans_Ctl SET Stage2 = 1 WHERE Op_Date = l_Trans_Date;END IF;END; --stage2 completeBEGIN --stage3 startSELECT Stage3 INTO l_Temp FROM PRO_PREPOSE_TRANS_CTL WHERE Op_Date = l_Trans_Date LIMIT 1; IF Nvl(l_Temp, 0) = 0 THENBEGINl_Tab_Desc := 'Insert Into fs_fbs_950 from FS_TEMP_FBS_950';--将FS_TEMP_FBS_950中MATCH_SIGN为1的数据,插⼊表FS_FBS_950中。
GP 常用数据库命令
![GP 常用数据库命令](https://img.taocdn.com/s3/m/21c392afbceb19e8b8f6ba3a.png)
Greenplum 日常简明维护手册1.数据库启动:gpstart常用参数:-a : 直接启动,不提示终端用户输入确认-m:只启动master 实例,主要在故障处理时使用访问单个数据实例:PGOPTIONS='-c gp_session_role=utility' psql template1 -p 5432启动某个segment instance :pg_ctl stop/start -D /datadir/取端口号:select * from gp_segment_configuration启动以后会在/tmp/ 下生成一个.lock 隐藏文件,记录主进程号。
2.数据库停止:gpstop:常用可选参数:-a:直接停止,不提示终端用户输入确认-m:只停止master 实例,与gpstart –m 对应使用-f:停止数据库,中断所有数据库连接,回滚正在运行的事务-u:不停止数据库,只加载pg_hba.conf 和postgresql.conf中运行时参数,当改动参数配置时候使用。
连接数,重启3.查看实例配置和状态select * from gp_segment_configuration order by content ;select * from pg_filespace_entry ;主要字段说明:Content:该字段相等的两个实例,是一对P(primary instance)和M(mirror Instance)Isprimary:实例是否作为primary instance 运行Valid:实例是否有效,如处于false 状态,则说明该实例已经down 掉。
Port:实例运行的端口Datadir:实例对应的数据目录4.gpstate :显示Greenplum数据库运行状态,详细配置等信息常用可选参数:-c:primary instance 和mirror instance 的对应关系-m:只列出mirror 实例的状态和配置信息-f:显示standby master 的详细信息该命令默认列出数据库运行状态汇总信息,常用于日常巡检。
gp round函数
![gp round函数](https://img.taocdn.com/s3/m/1d876a3f5bcfa1c7aa00b52acfc789eb162d9e58.png)
gp round函数GP Round函数是一种常用的数学函数,用于对实数进行四舍五入。
它的功能是将一个给定的实数值转换为最接近的整数。
在计算机编程和数据分析领域,GP Round函数被广泛应用。
GP Round函数的使用非常简单,只需要向函数传递一个实数值作为参数,函数将返回一个最接近的整数。
例如,调用GP Round函数将3.6作为参数,函数将返回4;调用GP Round函数将4.3作为参数,函数将返回4。
GP Round函数的实现原理是基于数学的四舍五入规则。
当需要将一个实数值转换为整数时,我们需要判断该实数值与它的下一个整数和上一个整数的距离。
如果距离相等,那么我们选择较大的整数作为结果;如果距离更接近下一个整数,我们选择下一个整数作为结果;如果距离更接近上一个整数,我们选择上一个整数作为结果。
GP Round函数在实际应用中有着广泛的用途。
在金融行业中,GP Round函数可以用于对股票价格进行四舍五入,以便进行交易。
在物流行业中,GP Round函数可以用于对货物的重量进行四舍五入,以便进行计费。
在数据分析领域中,GP Round函数可以用于对统计数据进行四舍五入,以便进行分析和报告。
除了常规的四舍五入功能,GP Round函数还可以进行更精确的舍入操作。
通过向GP Round函数传递一个可选的参数,我们可以指定要舍入的小数位数。
例如,调用GP Round函数将3.14159作为参数,并指定要舍入到小数点后两位,函数将返回 3.14;调用GP Round 函数将3.14159作为参数,并指定要舍入到小数点后三位,函数将返回3.142。
GP Round函数的使用需要注意一些细节。
首先,需要了解舍入规则对于负数和零的处理方式。
在舍入规则中,负数的舍入方式与正数相同,即距离相等时选择较大的整数。
而对于零的舍入方式,通常选择较小的整数作为结果。
其次,需要注意在使用GP Round函数时,可能会出现精度丢失的问题。
hologres 函数
![hologres 函数](https://img.taocdn.com/s3/m/17909c30fd4ffe4733687e21af45b307e971f97b.png)
hologres 函数Hologres 函数是一个高性能、分布式的云原生数据仓库系统,它提供了丰富的 SQL 函数,用于数据的汇总、分析和挖掘。
支持基于海量数据的分析查询、实时 OLAP 分析和数据挖掘等各种数据处理需求。
下面我们来分步骤阐述 Hologres 函数的使用:1. 创建 Hologres 数据库和表格首先,我们需要先创建一个 Hologres 数据库和相应的表格。
可以使用 Hologres 的控制台或者命令行工具来完成。
比如,下面的命令用于创建一个名为 test 的数据库:```createdb test -h x.x.x.x -p port -U user -W password```然后,我们可以使用 SQL 命令来创建一个名为 mytable 的表格:```CREATE TABLE mytable (id INTEGER , name TEXT)```2. 准备数据接下来,我们需要向 mytable 表格中插入一些数据。
可以使用INSERT 命令来完成,比如下面的代码向表格中插入 100 行数据:```INSERT INTO mytable (id, name)SELECT generate_series(1, 100), 'name'|| generate_series(1, 100)```3. hll_cardinality 函数hll_cardinality 函数用于计算基数(即不同值的数量),常用于数据去重、用户计数等场景。
下面是使用 hll_cardinality 函数查询 mytable 表格中不同 name 值的数量:```SELECT hll_cardinality(hll_agg(name)) FROM mytable```其中,hll_agg 函数用于将所有的 name 值进行聚合,以便使用hll_cardinality 函数计算基数。
4. hll_union_agg 函数hll_union_agg 函数用于将多个 HyperLogLog 结构进行合并,常用于多个数据源的去重计数。
greenplum分区表查看所占空间大小
![greenplum分区表查看所占空间大小](https://img.taocdn.com/s3/m/5e717f034b7302768e9951e79b89680203d86bc5.png)
greenplum分区表查看所占空间⼤⼩在使⽤greenplum数据库的时候,有的时候想要查看表所占⽤空间的⼤⼩,会使⽤如下⼆个函数pg_relation_size和pg_size_pretty.前者⽤来查看数据⼤⼩,后者是human readable的调整.⽅法如下:select pg_size_pretty(pg_relation_size('relation_name')) ;select pg_size_pretty(pg_relation_size(oid)) ;但是,对于分区表⽽⾔,这个⽅法就没有⽤了,会发现使⽤后表的⼤⼩为0bytes.原因在于:GP的分区表的主表只是⼀个表定义,其实际数据内容存储在继承⽗表的分区⼦表⾥⾯了.上⽹查了⼀下,没发现有相应的函数,⼲脆写了个函数来实现.-- Function: calc_partition_table(character varying, character varying)-- DROP FUNCTION calc_partition_table(character varying, character varying);CREATE OR REPLACE FUNCTION calc_partition_table(v_schemaname character varying, v_tablename character varying) RETURNS bigint AS$BODY$DECLAREv_calc BIGINT :=0;v_total BIGINT :=0;v_tbname VARCHAR(200);cur_tbname cursor for select schemaname||'.'||partitiontablename as tb from pg_partitionswhere schemaname=v_schemaname and tablename=v_tablename;BEGINOPEN cur_tbname;loopFETCH cur_tbname into v_tbname;if not found THENexit;end if;EXECUTE'select pg_relation_size('''||v_tbname||''')'into v_calc;v_total:=v_total+v_calc;end loop;CLOSE cur_tbname;RETURN v_total;end;$BODY$LANGUAGE plpgsql VOLATILE;ALTER FUNCTION calc_partition_table(character varying, character varying) OWNER TO gpadmin;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GP数据库函数
概述
GP数据库函数是指在GP(Greenplum)数据库中使用的函数。
GP数据库是一种分
布式关系型数据库,可用于大数据量的数据存储和处理。
它的函数库提供了各种功能强大的函数,可以帮助用户进行数据处理、转换和分析等操作。
在本文中,我们将深入探讨GP数据库函数的各种功能和用法,包括函数的分类、
常用函数示例和函数的编写等方面。
GP数据库函数的分类
GP数据库函数可以分为以下几类:
1. 数学函数
数学函数主要用于数值运算和计算。
它们可以执行常见的数学运算,如加法、减法、乘法和除法,还可以进行高级数值计算,如三角函数、指数函数和对数函数等。
以下是一些常用的数学函数示例:
•abs(): 返回一个数的绝对值。
•sqrt(): 返回一个数的平方根。
•sin(): 返回一个角的正弦值。
2. 字符串函数
字符串函数用于处理和操作字符串。
它们可以执行字符串的连接、截取、替换和格式化等操作。
以下是一些常用的字符串函数示例:
•concat(): 将两个或多个字符串连接起来。
•substring(): 返回一个字符串的子串。
•replace(): 替换一个字符串中的指定内容。
3. 日期和时间函数
日期和时间函数用于处理日期、时间和时间间隔。
它们可以执行日期的加减运算、格式化和比较等操作。
以下是一些常用的日期和时间函数示例:
•current_date(): 返回当前日期。
•date_part(): 返回日期的指定部分,如年、月、日等。
•interval(): 创建一个时间间隔。
4. 聚合函数
聚合函数用于计算数据的汇总值,如平均值、总和、最大值和最小值等。
它们通常用于与GROUP BY语句一起使用,对数据进行分组并计算每个分组的汇总值。
以下是一些常用的聚合函数示例:
•avg(): 计算一组数的平均值。
•sum(): 计算一组数的总和。
•max(): 返回一组数中的最大值。
5. 窗口函数
窗口函数用于在查询结果的窗口内执行计算。
它们可以对窗口内的数据进行排序、分组和计算等操作。
窗口函数通常与OVER子句一起使用,用于指定窗口的大小和范围。
以下是一些常用的窗口函数示例:
•row_number(): 返回结果集中每行的行号。
•rank(): 返回结果集中某列的排名。
常用函数示例
接下来,我们将通过一些示例来演示GP数据库函数的实际用法。
1. 计算员工平均工资
SELECT AVG(salary) FROM employees;
2. 拼接员工的姓和名
SELECT CONCAT(last_name, ' ', first_name) FROM employees;
3. 提取订单日期的年份
SELECT DATE_PART('year', order_date) FROM orders;
4. 计算每个部门的销售总额
SELECT department_id, SUM(sales_amount)
FROM sales
GROUP BY department_id;
5. 计算每个部门的销售排名
SELECT department_id, sales_amount,
RANK() OVER (PARTITION BY department_id
ORDER BY sales_amount DESC) AS sales_rank
FROM sales;
函数的编写
如果GP数据库的函数库中没有你需要的函数,你还可以自己编写函数。
编写函数
需要使用PL/pgSQL语言,它是GP数据库中的一种内置语言,类似于SQL语言,但更加强大和灵活。
以下是一个示例函数,用于计算两个数的平方和:
CREATE OR REPLACE FUNCTION square_sum(a INT, b INT)
RETURNS INT AS $$
DECLARE
result INT;
BEGIN
result := a * a + b * b;
RETURN result;
END;
$$ LANGUAGE plpgsql;
在上面的示例中,FUNCTION关键字用于定义一个函数。
square_sum是函数的名称,a和b是输入参数,result是函数的返回值。
在函数体中,我们使用:=操作符来计算两个数的平方和,并使用RETURN语句返回结果。
编写好的函数可以在查询中直接调用和使用。
总结
本文详细介绍了GP数据库函数的各种功能和用法。
我们讨论了函数的分类,包括数学函数、字符串函数、日期和时间函数、聚合函数和窗口函数等。
同时,我们还给出了常用函数的示例和函数的编写方法。
GP数据库函数是 GP 数据库的核心特性之一,它提供了丰富的功能和灵活的操作方式,帮助用户更好地处理和分析数据。
熟练掌握 GP 数据库函数的使用方法,可以提高数据处理和分析的效率,为业务决策提供有力支持。