基于postgresSQL的数据核查方案-一种基于OOSE方法

标签: postgressql 数据 oose | 发表时间:2014-10-31 09:50 | 作者:flyqantas
出处:http://www.iteye.com
最近基于postgresSQL的游标和临时表方案开发了一个数据完整率的核查工具。

5 SQL摘要
1、向result_table记录分vendor_name的记录总数
sql := 'insert into '||result_table||' (时间,vendor_name,记录总数)
select 时间,厂家名称,count(*) from '|| check_table || ' where 时间=' || '''' || time || '''' || ' group by  时间,厂家名称 ';

EXECUTE sql;

2、提取check_table表的所有字段名,存入tmp_check_col
sql := 'create temp table tmp_check_col as  SELECT a.attname
            FROM pg_class as c,pg_attribute as a
        where c.relname = '''||check_table||''' and a.attrelid = c.oid and a.attnum>0
        and a.attname not in ( ' ||''''||'时间'||''''||' ) ';

EXECUTE sql;

3、打开游标
        open datcheck_C   FOR
            SELECT  attname  from  tmp_check_col ;

4、读取游标,并循环逐个读出字段名
        FETCH datcheck_C INTO colname ;
        while (colname.attname is not null) loop 
       
5、循环体内,计算为空记录数 [num] 除以 步骤1中的记录总,得到 某字段的缺失率,并更新到对应的单元格内       
sql := 'update '||result_table||' b set '||colname.attname||'=(SELECT round(a.num::numeric/b.记录总数::numeric,4)  FROM  
        (
        select  时间,厂家名称,count(*) as num from '||check_table||'  where '||colname.attname||' is not null and 时间 ='''||time||''' group by 时间, 厂家名称
        ) a
       WHERE a.时间=b.时间  and a.厂家名称=b.vendor_name) where 时间='''||time||'''';

EXECUTE sql;
      
sql := 'update '||result_table||' set '||colname.attname||' =0 where 时间='''||time||''' and '||colname.attname||' is null';

EXECUTE sql;


        FETCH datcheck_C INTO colname;
        END loop;




1、提取check_table表的所有字段名,存入tmp_check_col
sql := 'create temp table tmp_check_col as  SELECT a.attname
            FROM pg_class as c,pg_attribute as a
        where c.relname = '''||check_table||''' and a.attrelid = c.oid and a.attnum>0
        and a.attname not in ( ''时间'' ) ';

EXECUTE sql;

2、打开游标
open datcheck_C   FOR
            SELECT  attname  from  tmp_check_col
           
3、读取游标,逐个读出字段名           
        FETCH datcheck_C INTO colname ;
        while (colname.attname is not null) loop
4、循环体内,向result_table插入某字段为空的记录
        sql :='insert into '||result_table||' select * from '||check_table||'  where '||colname.attname||' is  null and 时间 ='''||time||'''';
        EXECUTE sql;
5、循环体内,向check_table删除某字段为空的记录      
        sql :='delete from '||check_table||' b where '||colname.attname||' is  null and 时间 ='''||time||'''';
        EXECUTE sql;
     
        FETCH datcheck_C INTO colname;
END loop;

CLOSE datcheck_C;           








































已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [postgressql 数据 oose] 推荐:

基于postgresSQL的数据核查方案-一种基于OOSE方法

- - 研发管理 - ITeye博客
最近基于postgresSQL的游标和临时表方案开发了一个数据完整率的核查工具. 1、向result_table记录分vendor_name的记录总数. sql := 'insert into '||result_table||' (时间,vendor_name,记录总数). select 时间,厂家名称,count(*) from '|| check_table || ' where 时间=' || '''' || time || '''' || ' group by  时间,厂家名称 ';.

数据仓库

- Ran - [email protected]
翻译:马少兵、曾怀东、朱翊然、林业. 尽管服务器存储、处理能力得到有效的提高,以及服务器价格的降低,让人们能够负担起大量的服务器,但是商业软件应用和监控工具快速的增加,还是使得人们被大量的数据所困扰. 在数据仓库领域中的许多系统管理员、应用开发者,以及初级数据库管理员发现,他们正在处理“海量数据”-不管你准备与否-都会有好多不熟悉的术语,概念或工具.

数据抽取

- - 数据库 - ITeye博客
转自: http://wiki.mbalib.com/wiki/%E6%95%B0%E6%8D%AE%E6%8A%BD%E5%8F%96#.   数据抽取是指从源数据源系统抽取目的数据源系统需要的. 实际应用中,数据源较多采用的是. 数据迁移或数据复制,它将数据源中的表或视图的数据原封不动的从数 据库中抽取出来,并转换成自己的ETL 工具可以识别的格式.

数据库sharding

- - 数据库 - ITeye博客
当团队决定自行实现sharding的时候,DAO层可能是嵌入sharding逻辑的首选位置,因为在这个层面上,每一个DAO的方法都明确地知道需要访问的数据表以及查询参数,借助这些信息可以直接定位到目标shard上,而不必像框架那样需要对SQL进行解析然后再依据配置的规则进行路由. 另一个优势是不会受ORM框架的制约.

数据脱敏

- - IT瘾-bigdata
作者|李呈祥,其中部分内容由十一城补充. 数据脱敏(Data Masking),又称数据漂白、数据去隐私化或数据变形. 百度百科对数据脱敏的定义为:指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据 的可靠保护. 这样,就可以在开发、测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集.

数据分析之如何用数据?

- - 互联网分析沙龙
光知道怎么看数据,还是不成,你得熟悉这些数据拿到手上之后怎么去用它,怎么让数据显示出来它本身的威力来. 第一个部分,是看历史数据,发现规律. 以社区中的活动和电商中的促销为例,这些都是常见的活动,活动做得好的话有意想不到的效果. 在做这样的活动,最好是拿到前一个月或者两个月的历史数据. 对电商来说,从这里面要去分析各个品类的销售情况,那个品类销量最大,那个品类销量最小,每月或者每周的平均增长率和符合增长率是多少.

excel数据导入mysql数据库

- - 互联网 - ITeye博客
1、excel另存为txt.       选中将要导出的数据列,然后另存为选择其它格式=>文本文件(制表符分割). E:\项目\fblike\game_code_san.txt. 2、txt导入到mysql数据库. load data infile 'E:\\项目\\fblike\\game_code_san.txt' into table game_code_san(code).

数据批量导入Oracle数据库

- - Oracle - 数据库 - ITeye博客
今天学习了一个新的东西,觉得还挺有意思的,也是从别出COPY 的,. SQL*LOADER是大型数据. 仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL). 现在,我们抛开其理论不谈,用实例来使. 您快速掌握SQL*LOADER的使用方法.   首先,我们认识一下SQL*LOADER.

数据分析之如何用数据?

- - 人人都是产品经理
光知道怎么看数据,还是不成,你得熟悉这些数据拿到手上之后怎么去用它,怎么让数据显示出来它本身的威力来. 第一个部分,是看历史数据,发现规律. 以社区中的活动和电商中的促销为例,这些都是常见的活动,活动做得好的话有意想不到的效果. 在做这样的活动,最好是拿到前一个月或者两个月的历史数据. 对电商来说,从这里面要去分析各个品类的销售情况,那个品类销量最大,那个品类销量最小,每月或者每周的平均增长率和符合增长率是多少.

Solr从数据库导入数据

- - CSDN博客互联网推荐文章
一. 数据导入(DataImportHandler-DIH). DIH 是solr 提供的一种针对数据库、xml/HTTP、富文本对象导入到solr 索引库的工具包. apache-solr-dataimportscheduler-1.1.jar(增量导入使用). 数据库对应的jdbc驱动包这里使用的是Oracle oracle10g.ja放入Tomcat6.0.36/webapps/sol/WEB-INF/lib 中.