« | October 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | |
| 公告 |
数据仓库&数据挖掘
对某一件事需要坚持方能真正完成这件事
薛 峰
2009.02.03 |
Blog信息 |
blog名称:数据仓库与数据挖掘 日志总数:85 评论数量:14 留言数量:0 访问次数:723661 建立时间:2005年3月17日 |

| |
[综合]ESQL/C资料(完全版)一 文章收藏, 网上资源
薛 峰 发表于 2005/7/18 10:31:58 |
第六章 嵌入式SQL(E-SQL)简介3 第一节 什么是嵌入SQL语言?3 1.1 嵌入SQL程序的组成元素3 1.2 什么是静态SQL和动态SQL?4 1.3 什么是SQLCA?4 1.4 什么是SQLDA?5 第二节 SYBASE SQL SERVER嵌入式SQL语言5 2.1 一个嵌入SQL语言的简单例子5 2.2 嵌入SQL的处理过程6 2.3 嵌入SQL语句总览7 2.3.1 宿主变量7 2.3.2 连接数据库12 2.3.3 数据的查询和修改13 2.3.4 游标的使用13 2.3.5 SQLCA15 2.3.6 WHENEVER16 2.3.7 批处理18 2.3.8 事务18 2.4动态SQL语句18 2.4 .1 动态修改19 2.4.2 动态游标20 2.4.3 SQLDA23 2.4.4 DESCRIBE语句27 2.5 两个例子程序27 2.5.1 TELECOM程序27 2.5.2 ADHOC程序29 第三节 IBM DB2嵌入SQL语言35 3.1 一个简单示例35 3.2 嵌入SQL语句37 3.2.1宿主变量37 3.2.2单行查询39 3.2.3多行查询39 3.2.4插入、删除和修改操作40 3.2.5 SQLCA43 3.2.6事务45 3.3 DB2的嵌入SQL程序处理过程46 3.4 DB2的动态SQL嵌入语句53 3.4.1 基本方法53 3.4.2 动态游标55 3.4.3 SQLDA55 第四节 ORACLE数据库的嵌入SQL语言66 4.1 基本的SQL语句66 4.1.1宿主变量和指示符66 4.1.2 查询68 4.1.3 修改数据68 4.1.4 游标68 4.2 嵌入PL/SQL71 4.3 动态SQL语句72 4.3.1 ORACLE动态SQL语句的一些特点72 4.3.2 使用动态SQL的四种方法72 4.3.3 SQLDA75 第五节INFORMIX的嵌入SQL/C语言89 5.1 一个简单的入门例子89 5.2 宿主变量91 5.3 嵌入SQL的处理过程96 5.4 动态SQL语言96 5.4.1 SQLDA97 第六节MICROSOFT SQL SERVER7嵌入式SQL语言105 6.1 一个嵌入SQL语言的简单例子105 6.2 嵌入SQL的处理过程106 6.3 嵌入SQL语句112 6.3.1 声明嵌入SQL语句中使用的C变量112 6.3.2 连接数据库115 6.3.3 数据的查询和修改115 6.3.4 游标的使用116 6.3.5 SQLCA117 6.3.6 WHENEVER118 6.4动态SQL语句119 6.4 .1 动态修改119 6.4.2 动态游标120 6.4.3 SQLDA122 6.4.4 DESCRIBE语句130 6.5 API130
第六章 嵌入式SQL(E-SQL)简介 第一节 什么是嵌入SQL语言? SQL是一种双重式语言,它既是一种用于查询和更新的交互式数据库语言,又是一种应用程序进行数据库访问时所采取的编程式数据库语言。SQL语言在这两种方式中的大部分语法是相同的。在编写访问数据库的程序时,必须从普通的编程语言开始(如C语言),再把SQL加入到程序中。所以,嵌入式SQL语言就是将SQL语句直接嵌入到程序的源代码中,与其他程序设计语言语句混合。专用的SQL预编译程序将嵌入的SQL语句转换为能被程序设计语言(如C语言)的编译器识别的函数调用。然后,C编译器编译源代码为可执行程序。 各个数据库厂商都采用嵌入SQL语言,并且都符合ANSI/ISO的标准。所以,如果采用合适的嵌入SQL语言,那么可以使得你的程序能够在各个数据库平台上执行(即:源程序不用做修改,只需要用相应数据库产品的预编译器编译即可)。当然,每个数据库厂商又扩展了ANSI/ISO的标准,提供了一些附加的功能。这样,也使得每个数据库产品在嵌入SQL方面有一些区别。本章的目标是,对所有的数据库产品的嵌入SQL做一个简单、实用的介绍。 当然,嵌入SQL语句完成的功能也可以通过应用程序接口(API)实现。通过API的调用,可以将SQL语句传递到DBMS,并用API调用返回查询结果。这个方法不需要专用的预编译程序。 1.1 嵌入SQL程序的组成元素 我们以IBM的DB2嵌入SQL为例,来看看嵌入SQL语句的组成元素。 例1、连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "util.h" #include <sqlca.h> EXEC SQL INCLUDE SQLCA; (1) main() { EXEC SQL BEGIN DECLARE SECTION; (2) char firstname[13]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO sample; (3) EXEC SQL SELECT FIRSTNME INTO :firstname (4) FROM employee WHERE LASTNAME = 'JOHNSON';(4) printf( "First name = %s\n", firstname ); EXEC SQL CONNECT RESET; (5) return 0; } 上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分: (1)中的include SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。 (2)在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。 (3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。 (4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句。 (5)最后断开数据库的连接。 从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。 1.2 什么是静态SQL和动态SQL? 嵌入SQL语言,分为静态SQL语言和动态语言两类。静态SQL语言,就是在编译时已经确定了引用的表和列。宿主变量不改变表和列信息。可以使用主变量改变查询参数值,但是不能用主变量代替表名或列名。 动态SQL语言就是:不在编译时确定SQL的表和列,而是让程序在运行时提供,并将SQL语句文本传给DBMS执行。静态SQL语句在编译时已经生成执行计划。而动态SQL语句,只有在执行时才产生执行计划。动态SQL语句首先执行PREPARE语句要求DBMS分析、确认和优化语句,并为其生成执行计划。DBMS还设置SQLCODE以表明语句中发现的错误。当程序执行完“PREPARE”语句后,就可以用EXECUTE语句执行执行计划,并设置SQLCODE,以表明完成状态。 1.3 什么是SQLCA? 应用程序执行时,每执行一条SQL语句,就返回一个状态符和一些附加信息。这些信息反映了SQL语句的执行情况,它有助于用户分析应用程序的错误所在。这些信息都存放在sqlca.h的sqlca结构中。如果一个源文件中包含SQL语句,则必须要在源程序中定义一个SQLCA结构,而且名为SQLCA。最简单的定义方法是在源文件中加入一些语句:EXEC SQL INCLUDE sqlca.h。每个数据库产品都提供了SQLCA结构。
1.4 什么是SQLDA? 我们知道,动态SQL语句在编译时可能不知道有多少列信息。在嵌入SQL语句中,这些不确定的数据是通过SQLDA完成的。SQLDA的结构非常灵活,在该结构的固定部分,指明了多少列等信息,在该结构的后面有一个可变长的结构,说明每列的信息。在从数据库获得数据时,就可以采用SQLDA来获得每行的数据。各个数据库产品的SQLDA结构都不完全相同。 第二节 SYBASE SQL Server嵌入式SQL语言 2.1 一个嵌入SQL语言的简单例子 我们首先来看一个简单的嵌入式SQL语言的程序(C语言):用sa(口令为password)连接数据库服务器,并将所有书的价格增加10%。这个例子程序如下: 例1、 /*建立通讯区域*/ Exec sql include sqlca; main() { /*声明宿主变量*/ EXEC SQL BEGIN DECLARE SECTION; char user[30],passwd[30]; EXEC SQL END DECLARE SECTION; /*错误处理*/ EXEC SQL WHENEVER SQLERROR CALL err_p(); /*连接到SQL SERVER服务器*/ printf("\nplease enter your userid "); gets(user); printf("\npassword "); gets(passwd); exec sql connect :user identified by :passwd; exec sql use pubs2; EXEC SQL update titles set price=price*1.10; EXEC SQL commit work; /*断开数据库服务器的连接*/ Exec sql disconnect all; return (0); } /*错误处理程序*/ err_p() { printf("\nError occurred: code %d.\n%s", \ sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc); } 从上面这个例子,我们看出嵌入SQL的基本特点是: 1、每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。
|
|
[综合]用Visual C#中实现DB2数据库编程 文章收藏, 网上资源
薛 峰 发表于 2005/7/15 10:53:09 |
在Visual Studio.NET Beta 1版本中访问IBM DB2等非SQL Server数据库通常是使用ADO.NET的ODBC方法,而在Beta 2中则改用OLE DB方式存取数据库。
Beta1中连接字符串主要需声明数据库的ODBC的DNS名字,但Beta 2中的OLE DB连接的字符串就较复杂了,使用的类也不相同。由于DB2等数据库在大型机等应用中使用非常广泛,.NET自然会全力支持此类编程开发,为此,下文将逐步阐述OLE DB的DB2开发。
OLE DB for DB2驱动 首先,Visual Studio.NET和Windows 2000 Server中并未直接提供DB2的OLE DB驱动,因此需下载Microsoft Host Integration Server 2000软件,该软件包中含OLE DB Provider and ODBC driver for DB2,需下载Server端软件包,并在安装时选择安装Data Integration,安装完成后就可使用其OLE DB的DB2驱动了。
设置数据库连接 首先,我们需配置好DB2的客户端设置,打开视图选单项中的服务器资源管理器,在其数据连接中新增一个连接,指定程序选项时选择Microsoft OLE DB Provider for DB2,下一步连接选项中,填写如下信息:
Data Source: QCDB(请酌情修改) Network:TCP/IP IP Address:数据库服务器地址 Network Port:DB2服务端口 Username:数据库访问权限的用户名 Password:该用户口令 Database initial Catalog:QCDB Package collection:QCDB default schema:Userid
下一步高级选项中选各自国家语言对应的code page及CCSID,最后按确认键完成创建连接。
假设QCDB这个DB2数据库中有一名为address的新数据表,其包含四个字段:name、email、age和address,我们可用服务器资源管理器打开上述连接及该数据表,可输入数条中文记录,确定中文字符能否正常显示。
为项目增加数据库连接 用Visual Studio新建一个ASP.NET项目,激活服务器资源管理器的上述连接,用鼠标将该连接拖至新建的Web Form上,则OLE DB需要的连接字符参数全部自动写入Web Form程序中,上述连接生成的语句如下:
this.oleDbConnection1.ConnectionString = @"Provider=DB2OLEDB; Cache Authentication=False; Integrated Security=""""; Password=freebsd9; Persist Security Info=True; User ID=userid;Initial Catalog=qcdb; Data Source=qcdb;Mode=ReadWrite; Extended Properties=""""; APPC Remote LU Alias=""""; APPC Local LU Alias=""""; APPC Mode Name=QPCSUPP; Network Transport Library=TCPIP; Host CCSID=37;PC Code Page=1282; Network Address=172.23.169.1; Network Port=4444;Package Collection=qcdb; Default Schema=userid;Alternate TP Name=""""; Process Binary as Character=False; Units of Work=RUW"
用服务器资源管理器工具生成连接可避免错写各种参数,从而可快速地实现数据库连接。
Web Form显示数据库数据 为Web Form新增一个OleDbDataAdapter类的对象oleDbDataAdapter1,为其选择数据连接时选上面建立的连接如:qcdb.qcdb.userid,选择使用SQL语句,生成SQL语句如:Select from address,最后提示完成。再为Web Form新增一个DataSet并命名为dataSet1用来放查询得到的数据。新增一个显示数据用的DataGrid命名为DataGird1,最后在Web Form的程序段中的Page_Init部分中增加如下代码:
oleDbConnection1.Open(); //打开数据库连接 oleDbDataAdapter1.Fill(dataSet1,"Address"); //将得来的数据填入dataSet DataGrid1.DataBind(); //绑定数据 oleDbConnection1.Close(); //关闭连接
< |
|
[金融行业]银行经营分析数据仓库模型的设计 网上资源
薛 峰 发表于 2005/7/12 14:33:30 |
一、引言 近年来,由于我行各项业务的迅速拓展,规模的扩大和客户的持续增加,加大了管理的难度。一方面,无法用量化的指标考核行员业绩,考核标准不统一,很大程度上挫伤了员工的积极性;另一方面,由于系统众多,数据分散,决策及管理部门无法及时准确地获取业务信息。因此,为了对行员(尤其是客户经理)绩效进行有效的监控和评价,强化内部竞争机制,更好地提高员工的积极性,我行决定建设一套科学化的业绩考核系统,同时建立一个集成的、逐步完善的决策分析平台,为以后其他分析管理提供基础,提升银行的科学经营管理水平。
二、数据仓库设计 1.主题需求 在银行日常经营管理中,管理人员迫切希望能够快速准确定位信贷业务等关键环节中所隐藏的问题和风险,了解客户行为和行员绩效,以便制订出科学有效的市场营销策略和激励机制,帮助企业在激烈的市场竞争中取得优势。为此,银行提出了客户交易、贷款和行员绩效三个分析主题。主题是数据仓库的灵魂,是纲;数据分析是目。纲举目张,三个主题都是决策人员提出分析的角度、方法和设想,然后希望数据仓库中的数据来验证结论。这是一种典型的验证性分析方法,它采用多维分析工具来实现。 2.数据仓库结构设计 源系统具有以账户为中心、系统众多、数据分散和平台多样的特点,为此,本文采用自顶向下的结构来构建数据仓库。该结构在建立数据仓库初期就从企业的整体上考虑数据仓库的需求,并建立一个能为企业所有部门决策提供数据支撑的企业数据仓库。数据源经过ETL程序进入企业数据仓库。在企业数据仓库的基础上,各个部门可以根据其特殊需求从数据仓库中获取数据建立数据集市,直接为部门决策服务。 该系统结构的主要特点有:①具有鲜明的层次结构,能很好地支持数据仓库信息处理、OLAP、数据挖掘等应用。②由于数据仓库将分散的业务数据进行了整合,可以在数据仓库上进行全局性的信息处理,例如建立整个企业的管理类报表系统。③先建立数据仓库再建立数据集市,可以使数据仓库集中精力解决数据整合和清理等问题,而数据集市则致力于为特定的决策过程提供服务。数据仓库在数据源和直接面对决策支持过程的数据集市之间形成了一个缓冲,数据集市可以面向一个优良的数据仓库来建设,数据源的变化可以不直接影响到数据集市。④以数据仓库为中心,不仅为分析服务提供基础数据,而且满足了数据挖掘的需求。 3.数据模型设计 数据模型就是对现实世界进行抽象的工具,抽象的程度不同,也就形成了不同抽象级别层次上的数据模型。数据仓库数据模型一般是根据操作数据模型建立起来的,但数据仓库模型并不等同于操作数据模型,而要经过相当多的改动。数据模型的主要工作有:①除去纯粹用于操作环境的数据。操作数据模型是为业务处理过程服务的,其中有很多数据专门用来支持操作环境,这类数据不应该包含在数据仓库中。②给键码增加时间元素。数据仓库中的数据一般必须有时间属性,以记录数据的历史信息。③在合适的地方增加导出数据。对于常用的一些统计信息等导出数据,为了减少重复计算,经常需要保存导出数据。④对数据的结构进行调整。例如,适当增加或减少数据属性列、在合适的情况下进一步分离或合并数据表等。 4.系统开发 建立数据仓库模型之后,接下来最重要的任务就是将数据源中的数据经过抽取、净化、转换和装载等步骤,转移到数据仓库中。在数据仓库建立后的工作是建立分析、决策应用系统,在应用系统完成后即可投入使用。 在系统的运行过程中,随着数据源中的数据不断变化,需要通过数据刷新操作来维护数据仓库中数据的一致性。根据数据的不同特点,我行采用了“时标方法”和“重读方法”对数据仓库中的数据进行刷新。
三、OLAP应用 数据仓库为企业的所有决策支持应用提供了一个良好的数据基础,但是数据仓库重点解决的是数据整合和清理问题,并不直接面向OLAP分析。OLAP的基本数据模型是多维模型,在数据仓库基础上建立OLAP应用需要经过生成OLAP立方体、进行数据展示等几个步骤。它通过多维分析工具对以多维形式组织起来的数据采取切片、切块、旋转等各种分析动作,对信息的多个角度、多个侧面进行快速、一致和交互的存取,从而使分析人员能够对数据进行深入地分析与观察。 下面简单介绍三个分析模型的应用情况。 1.交易数据分析模型 交易数据分析模型根据银行活期存款账户的流水账,统计业务的笔数、发生额,从资金流动等多角度分析客户账户,监控客户账户的资金变动情况,及时找出并跟踪那些资金存取过于频繁或者有异常情况的账户,发现账户的活动规律,防范账户风险。 2.贷款分析模型 贷款分析模型可以进行贷款发放分析、贷款规模分析、贷款投向分析、资产的风险权重分析和资产的流动性分析。 3.绩效分析主题 绩效分析主题帮助银行实现了全面的绩效管理。通过全面了解机构经营情况、整体收益结构,银行能把握业务发展状况,掌握市场发展规律,针对不同产品所产生的模拟利润,形成区别模拟利润价格,通过价格杠杆引导全行业务沿着目标轨道发展。
四、结束语 我行正在进行新一代综合业务系统的推广工作,新系统上线以后,数据源将发生变化,数据抽取工作将重新布置。由于本文数据仓库采用了自顶向下的结构,将有效地屏蔽这些变化给前端用户分析工作带来的不利影响。 综合业务系统是以客户为中心的、本外币一体化经营的、账务集中的新一代银行业务系统,系统的实施使得原本因条件所限而不能进行的客户主题的分析、信用卡主题的分析能够有条件开展。 本文提出的分析主题只是银行管理分析领域中很小的一部分,更多的OLAP应用将随着业务需求的提出纳入开发计划,以便更全面地对企业实施决策支持。 限于数据的时间轴深度不够,本文没有深入研究数据挖掘技术在银行中的应用。其实数据挖掘技术在银行数据仓库应用中有着广阔的发展前景,例如客户信用等级的评定、消费行为分析、反洗钱等都是数据挖掘技术应用活跃的领域。
编辑: 作者:浦东发展银行南京分行 侯 波 来源:《中国金融电脑》 |
|
[数据仓库]Essbase OLAP Server 特性介绍 文章收藏
薛 峰 发表于 2005/7/12 8:36:52 |
作者:陶陶 Hyperion Essbase解决方案与同类产品相比,具有以下几个明显优势: 1.高可用性和重用性 2.分析协作 3.可扩展性和高性能 4.执行强劲计算的能力 5.开放的平台 6.大量读/写控制能力
*强健的分析能力 分析应用要求有一个广泛的性能范围,包括从直观的数据探询到复杂的计算到丰富的查询。除了只读分析外,几乎半数的企业分析应用要求有强健的多用户更新能力。Hyperion Essbase 提供的分析能力足以使用户获得最广泛的分析应用。 Hyperion Essbase 能让企业在一个总的企业数据仓库结构中获取分析应用,或者直接从交易处理应用中,遗留下来的系统中以及外部的数据来源中获取分析应用。在数据仓库应用中,Hyperion Essbase 担当着这样的角色,就是通过基本的桌面工具例如电子表格,报表生成器,查询工具和web 浏览器来提供整个企业范围的数据访问和分析。Hyperion Essbase 提供的分析应用还包括市场销售分析,盈利分析,EIS,报表系统,财务报表合
(下面还有2193字) |
|
|