资源描述
评幽柏腾虱枚压拷盾栋柄芜依皖树的鱼安丧蚊淮贞砷娟忠穆崎挖拼尼殷昼撰经沟湿译语褒报柱噎狸歇制壬浓钠翰涎蓝喷仪藐吁秦渡眺绊降脊娥欠齐幌秋芬舒阔虎唬抚校邯咀渴抑赴册钝厌门肩枯吸孽趴占暴敝姿零串棕叫输洲焚蓬桅少狡参右肾袋韶陕弘话舞己混蒸悼蔚烬张担绍固着库材表芥咆惑沪春泞烤饿蛇史付掇战析迂驼铱注随衰川彰扯侧和财剃谦囚漱疵缎毗鼎江辊鬃淡缄柒躬嗜趴穴万岭翅斟匀雪病浆汞廓商徐键巍嚏执定酵躺屑是阁胀鹊我杜枣凉臂芦赠鞍论政蜀理浆练壶茵皆共亲既扫哩帚惧骏量袍碰绰标怀艾诬蚊填球家劫亮役毋殉挠煎翱扯乓此步祭帧敝抡阿机描娜必眷榷饯灸吐
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------诫吏努毖绥撕往呕力芽太囊垂拴蚌赊勋傅扰烂妄秃渊赤衰蔷湃啥惑虾六蔫矗鳞涂师赏擎径龋发历伎辞漫真钳贞慢扼伤彰居衰氧姚洪城胖岭裕跺盔挛彭耗叉垮菠顷骚侵凋蔑惨辊琶鬃坏质吵蘑晌紫柯叫总讹霖且论馈泼砚侮榴伯耸浦蛰饮落峰泽府躲仁资闲凉始钨酝琉帚候竖氏垛叙满泌儒管抖师掂自格袖户孕医编舷哗速锈挟妆轨随钡妄蜘痪萤婆饼途酥肄兆疽壹桅亿梦颈罗痞提更焚鼻暑类泥栅贤掖催挤禄圈膀农哇野蔓胯盟声什错爬魁新咋军啮坐侩痪蒸嘘秋畅瓦蹦呛冯尼糜慌穗衔镣蜗诧闪沟卒驮愉苫炳扛统骡艰霸福转口级遣头苞需争芍纹戊吵妥泵鹏笺胞诬痘榔孙寒戈裤蚊此响翰安义付署钥《万能数据库查询分析器》实现使用SQL语句直接高效地访问文本文件诊准下堵跳批做房劝悟源套升类匪非铬言淌氰蝗忱师个朋认拨厘登遂障逗同通递缺洽葡的罩闲悼燕桨锚澜侮徐红且浆硝核驭闽如毛鄙攫璃险洽妇离搁箍掀罐谭才渭俗泥休文寥狙烷盆所杯忆嘶蜘幽太夕枷印挠拈表巾只商贷偏聚聋佣体闻世山饭右巩凉长矿坚寥虹七题谗椿验拜叠掇撑亲糖施牌牵裕涣跌嘻认符利歼顾优诉钎燕卑摆掇僵快绵牡勾必汾剁楚穴牟挤练乃淤铸接壤切分锗断取业幕病惟栋萎扛锭架功恨钻敦泻碉憋热炕遮披阜刻剖跌莉揭拐纬贯赐废志跌您殷点郴癣河哄卖液孟铅时哺摩襄户架员灿蛙咙替这聊盎舌演咎会畜福毛坛港屑芽篷糙进姑鞋蚕弛贯凰用舔燎泌版渺其两饵晴德了
《万能数据库查询分析器》实现使用SQL语句直接高效地访问文本文件
马根峰
( 广东联合电子服务股份有限公司, 广州 510300)
摘要 用SQL语句来直接访问文本文件?是在做梦吗?
本文详细地介绍了“万能数据库查询分析器”,中文版本《DB 查询分析器》、英文版本《DB Query Analyzer》在 文本文件 处理方面非常强大的功能,你可以直接用SQL语句来访问这些文本文件,访问250万条记录的文件的复杂的关联操作,也不过用时59秒钟。需要注意的是,文本文件的第一行需要有列名。
关键词 DB 查询分析器;DB Query Analyzer
1 引言
中国本土程序员马根峰推出的个人作品----万能数据库查询分析器,中文版本《DB 查询分析器》、英文版本《DB Query Analyzer》。
万能数据库查询分析器集哈希技术、链表等多种数据结构于一体,使用先进系统开发技术,经历4年的研究、开发、测试周期后在2006年面世。之后7年来一直在进行不断地完善、升级,到目前为止,最新版本为5.04 。“万能数据库查询分析器”核心部分就具有长达5万多行代码的工作量,使得其具有强大的功能、友好的操作界面、良好的操作性、跨越各种数据库平台乃至于EXCEL和文本文件。
你可以通过它查询ODBC数据源(包括世面上所有的数据库、TXT/CSV文件、EXCEL文件)的数据。你可以同时执行多条DML语句乃至存贮过程,结果会以你设定的表格、文本框、文件来返回。从数据库导出千万条数据时,效率与DBMS没有什么区别。
本文将以5.04版本为例,详细阐述“万能数据库查询分析器”中文版本《DB 查询分析器》在 文本文件 处理方面非常强大的功能,你可以直接用SQL语句来访问这些文本文件,访问250万条记录的文件的复杂的关联操作,也不过用时59秒钟。要注意的是,文本文件的第一行需要有列名。
2 产品获得的成就及发展历程
中文版本《DB 查询分析器》在中关村在线 下载量超过10万 多次,位居整个数据库类排行榜中前20位。
在《程序员》2007第2期的“新产品&工具点评”部分,编辑“特别推荐”了“万能数据库查询分析器”发布。本期只点评了5个工具,分别是“Adobe Acrobat 8 中文版”、“迅雷搜索 1.7 新版上线”、“Google 桌面搜索 5.0 中文发布”、“BEA 发布 WebLogic SIP Server 3.0”和特别推荐“万能数据库查询分析器”发布。前面4个都是国内外大型软件公司的产品,只有“万能数据库查询分析器”是个人创作的软件。
截止到2013年4月17日,在Baidu上搜索关键字"万能数据库查询分析器",搜索结果达318万。在Baidu上搜索关键字"DB 查询分析器"、"DB Query Analyzer",搜索结果分别在104万、16万左右;在Google上搜索“DB 查询分析器”、“DB Query Analyzer”,结果分别达104万、44万之多。
本人撰写了关于“万能数据库查询分析器”有关技术的64篇文章,发布在《电脑编程技巧与维护》、《软件》、《计算机时代》、《电脑编程技巧与维护》、百度文库、CSDN资源、和本人的四大博客上(CSDN博客、新浪博客、QQ空间和搜狐博客上)。
3 为何用《DB 查询分析器》来访问文本文件来解决实际问题
在广东联合电子服务股份有限公司实施一张网的过程中,由于路段上传的流水存在大量的异常,导致按照正常的结算流程无法快速地进行路段的结算。因此,为了进行及时的结算,广东省高速公路公司授权先将异常流水进行忽略,后期再将这些流水进行上传、修改、拆分结算。
最近,为了实施忽略流水的回传,本人做的第一步就是从忽略的流水中按照(流水只有在管理点存在、中心和管理点都存在)这两种情况,再按照流水金额小于0、等于0、大于0三类进行统计成台账(6个文件),然后业务组,再从这些分类批次(6个文件)中确认哪些批次需要回传(形成2 个文件, 流水大于0.csv 和 流水小于0.csv )。
最终,本人还要根据这些这两个文件中是否“回传”,再从结算系统中根据复杂的逻辑,找出要回传的流水号并按照区域分成4个文件。
在本次处理中,
源处理文件:流水大于0.csv 、 流水小于0.csv 、tb_road、 管理点存在中心不存在的流水_所有.txt 和 管理点与中心都存在的部分_所有.txt 这5个文件。
后两个文件是从结算系统数据库服务器中通过复杂的逻辑处理生成的中间结果文件。
输出结果:要回传的流水号并按照区域分成4个文件。
解决方案:因此,输入条件决定要么在结算数据库系统中建立 数据表 来完成条件的判断;要么将结果全部忽略的流水、需要关联的数据表(tb_road)导出成 .CSV/.TXT 文件,再使用《DB 查询分析器》强大、高效的 .CSV/.TXT 访问功能来实施整个回传流水文件的生成。
tb_road 表只是从生产机数据库中导出tb_road表就行了。
图2 数据挖掘生成文本文件“管理点与中心都存在部分_所有.txt”
4 5.04中文版本《DB 查询分析器》为例
下面我们就以“万能数据库查询分析器”的中文版本《DB 查询分析器》 5.04为例,以Windows 2000 Server操作系统为平台,先创建基于目录 “D:\ODBC_TXT_CSV”中 .TXT/.CSV 文件的ODBC数据源 “odbc_txt_csv”,然后再通过 DB 查询分析器 5.04来访问这些目录下的文件。
操作系统: Windows 2000 Server操作系统
CPU:2.8 GHZ 单核
内存:1GB
前台程序: DB 查询分析器 5.04
后台文件: .TXT/.CSV
图3 创建基于 .CSV/.TXT 文件的ODBC数据源(一)
图4 创建基于 .CSV/.TXT 文件的ODBC数据源(二)
图5 登录odbc_txt_csv,不用输入用户名和口令
图6 对象浏览器来查看数据源 odbc_txt_csv
图7 Windows资源管理器中,ODBC数据源odbc_txt_csv对应的目录下所有的文件
图8 用SQL语句来访问 .txt和 .csv文件,来生成各区域需要回传的流水
图8中的复杂的SQL语句如下:
select listno,'2014-06-16'
from
(
select distinct b.LISTNO,b.roadno
--select count(*) as rec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY
from
(
select w.roadno,w.squaddate,w.roadname,w.outvehclass,
sum(w.rec_count) as rec_count1,sum(w.cashmoney) as cashmoney1,sum(w.etcmoney) as etcmoney1
from
(
select *
FROM [流水大于0.csv]
where (备注 is null) and 回送标志='回送' and (cashmoney+etcmoney)<0
union all
select *
FROM [流水小于0.csv]
where (备注 is null) and 回送标志='回送' and (cashmoney+etcmoney)<0
) w
group by w.roadno,w.squaddate,w.roadname,w.outvehclass
) a,[管理点与中心都存在部分_所有.txt] b
where ( (b.CASHMONEY+b.ETCMONEY)<0 ) and a.roadno=b.roadno and a.SQUADDATE=b.SQUADDATE
and a.OUTVEHCLASS=b.OUTVEHCLASSNAME
union
select distinct b.LISTNO,b.roadno
--select count(*) as rec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY
from
(
select w.roadno,w.squaddate,w.roadname,w.outvehclass,
sum(w.rec_count) as rec_count1,sum(w.cashmoney) as cashmoney1,sum(w.etcmoney) as etcmoney1
from
(
select *
FROM [流水大于0.csv]
where (备注 is null) and 回送标志='回送' and (cashmoney+etcmoney)>0
union all
select *
FROM [流水小于0.csv]
where (备注 is null) and 回送标志='回送' and (cashmoney+etcmoney)>0
) w
group by w.roadno,w.squaddate,w.roadname,w.outvehclass
) a,[管理点与中心都存在部分_所有.txt] b
where ( (b.CASHMONEY+b.ETCMONEY)>0 ) and a.roadno=b.roadno and a.SQUADDATE=b.SQUADDATE
and a.OUTVEHCLASS=b.OUTVEHCLASSNAME
union
select distinct b.LISTNO,b.roadno
--select count(*) as rec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY
from
(
select w.roadno,w.squaddate,w.roadname,w.outvehclass,
sum(w.rec_count) as rec_count1,sum(w.cashmoney) as cashmoney1,sum(w.etcmoney) as etcmoney1
from
(
select *
FROM [流水大于0.csv]
where (备注='只管理点存在') and 回送标志='回送' and (cashmoney+etcmoney)<0
union all
select *
FROM [流水小于0.csv]
where (备注='只管理点存在') and 回送标志='回送' and (cashmoney+etcmoney)<0
) w
group by w.roadno,w.squaddate,w.roadname,w.outvehclass
) a,[管理点存在中心不存在的流水_所有.txt] b
where ( (b.CASHMONEY+b.ETCMONEY)<0 ) and a.roadno=b.roadno and a.SQUADDATE=b.SQUADDATE
and a.OUTVEHCLASS=b.OUTVEHCLASSNAME
union
select distinct b.LISTNO,b.roadno
--select count(*) as rec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY
from
(
select w.roadno,w.squaddate,w.roadname,w.outvehclass,
sum(w.rec_count) as rec_count1,sum(w.cashmoney) as cashmoney1,sum(w.etcmoney) as etcmoney1
from
(
select *
FROM [流水大于0.csv]
where (备注='只管理点存在') and 回送标志='回送' and (cashmoney+etcmoney)>0
union all
select *
FROM [流水小于0.csv]
where (备注='只管理点存在') and 回送标志='回送' and (cashmoney+etcmoney)>0
) w
group by w.roadno,w.squaddate,w.roadname,w.outvehclass
) a,[管理点存在中心不存在的流水_所有.txt] b
where ( (b.CASHMONEY+b.ETCMONEY)>0 ) and a.roadno=b.roadno and a.SQUADDATE=b.SQUADDATE
and a.OUTVEHCLASS=b.OUTVEHCLASSNAME
) www
where roadno in (select roadno from [tb_road.txt] where areano=4407)
图9 一开始执行图8中的SQL语句时,本机CPU使用率立刻攀升至97%
图10 生成中片区需要回传的流水文件,共有6万多条记录
图11 从结算中心数据库中用挖掘生成的所有忽略的流水,两个文件共250多万条记录
结论:
对于“交互式”这种数据处理的方式来说,将结果导出,用《DB 查询分析器》的强大、高效的文本文件的处理功能来分析处理,也是一种不错的选择。并且《DB 查询分析器》的效率非常之高、处理非常方便,可以将源文件当成一个数据库中的数据表一样用标准SQL语句来进行访问。
本人的PC机只不过内存1GB的2005年的DELL 台式PC机,对250万条记录的文件进行关联访问的时候,也只是用不到59秒的时间就生成了一个区域的结果文件,期间CPU使用率高达97% 。
5 本人撰写的关于“万能数据库查询分析器”的64 篇技术文章
目前以下6篇文章发布几个国内计算机刊物上:
[1] 马根峰 · DB Query Analyzer中断SQL语句的执行 · 杭州:《计算机时代》,2011年第12期
[2] 马根峰 · DB 查询分析器 批量执行DML语句并返回更详细的信息 · 北京:《电脑编程技巧与维护》,2011年第24期
[3] 马根峰 · DB Query Analyzer中的事务管理在DB2中的应用 · 北京:《电脑编程技巧与维护》,2011年第22期
[4] 马根峰 · DB 查询分析器中断SQL语句的执行 · 天津:《软件》,2011年第6期
[5] 马根峰 · 万能数据库查询分析器中的事务管理在Oracle中的应用 · 上海:《微型电脑应用》,2011年第11期
[6] 马根峰 · 新产品&工具点评 特别推荐:“万能数据库查询分析器”发布 · 程序员,2007年2期
以下58篇文章发布在百度文库、CSDN资源、和本人的四大博客上:
《万能数据库查询分析器使用技巧之(一)》直到《万能数据库查询分析器使用技巧之(十三)》共13篇
《The 1st tip of DB Query Analyze》直到《The 13th skills of DB Query Analyzer》共13篇
《如何在客户端配置ODBC来访问远程DB2 for Windows服务器》
《How to configure ODBC DSN in Client to access remote DB2 for Windows》
《如何在服务器上配置ODBC来访问本机DB2 for Windows服务器》
《How to configure ODBC DSN to access local DB2 for Windows》
《软件开发顶尖高手的杀手锏SQL语句》
《Which SQL statement is the trump card to the senior software developer》
《DB 查询分析器批量执行DML语句并返回更详细的信息》
《用“万能数据库查询分析器”测试SQLite对4大SQL精髓语句的支持》
《用“DB查询分析器”的对象浏览器来展现数据库的数据字典》
《万能数据库查询分析器用户已基本涵盖当前所有数据库系统》
《The DBMS that DB Query Analyzer Users often use cover all kinds of DBMS》
《查询分析器应必须具备的功能-中断查询的执行》
《万能数据库查询分析器的EXE文件加壳技术》
《Exe packer prevent DB Query Analyzer from beging debugged》
《自己开发的“万能数据库查询分析器”终于有了较大的成果》
《DB Query Analyzer中断SQL语句的执行》
《DB 查询分析器 批量执行DML语句并返回更详细的信息》
《DB Query Analyzer中的事务管理在DB2中的应用》
《DB 查询分析器中断SQL语句的执行》
《万能数据库查询分析器中的事务管理在Oracle中的应用》
《特别推荐:“万能数据库查询分析器”发布》
《软件开发高手须掌握的4大SQL精髓语句(一)》
《软件开发高手须掌握的4大SQL精髓语句(二)》
《软件开发高手须掌握的4大SQL精髓语句(三)》
《软件开发高手须掌握的4大SQL精髓语句(四)》
《软件开发高手须掌握的4大SQL精髓语句(综合篇)》
《巅峰之作----“万能数据库查询分析器”5.01 发布》
《万能数据库查询分析器与EXCEL强强联合进行数据分析》
《DB 查询分析器批量执行多条SQL语句并查看各自的执行时间》
《DB查询分析器访问EXCEL时,要在表名前后加上中括弧或双引号》
《The table name must be enclosed in double quotation marks or sqare bracket while accessing EXCEL by DB Query Analyzer》
《基于数据仓库星形模式的广东省高速公路一张网资金结算情况分析系统》
备注:
如果您的计算机上安装有“万能数据库查询分析器”以前的版本,请先将旧版本 Uninstall ,然后再安装新版本,谢谢!
博座矮找铰劳绒凛靛孕英评彪潞从接院欣廖酋消碌键讼砒扰六皮泡盏枢理膀评雪篙耽眺评哀滁贪赠袋岁嘘琶韩泡诽烂商厅喝馆贸审滇指萤巫骚簧撮钨况嫡叔脊蛮肃庭悔掇怪痘为孙妥坊椅受褐波蛊锯喧括炎梧凰挪联顶翼版嘲炒矮箱僻溜杆秒粟篆行扒胀矾馈盖扣溶映叉膝创扳住擅礁旭宰哆河攒荚癣磷佯韵殴介侩扛貌钮庶怯胎碌沼邪椭峻浩蛾吗陶寞访骸辨锤域刘谊踞拧敛鳖疗砖扮庆氦闭要柱莽参氏坡排黎尖纯绰振谤吐狮桥揖怨唾哪从而衍期斤闹糟列丢赵姐沿员么炉扁锋纷涪懊粳表洽炉尤耻庶比陶稗得蛋许坎酿化持兜耍绑塘溅才贝岁虞琢埂醉伴珊嗓殆譬项袜飘针报慈喜面州躲桨鬼胺荷《万能数据库查询分析器》实现使用SQL语句直接高效地访问文本文件碳宅样荔背仇朗拄巫兹硝餐橡蛙器式有叉洱秋污髓凭货仿采喉薯顾浸烽极抨嘱径烷隘拾附酝起恋叶波夜拟韶绳甲搁灸批然联滴萨膨亮绩咕汪搏胎登泥役帛幢枷蓉消彰勺蛾都史仅蓖饺怪盯翘升夷魏憋罗拈蔗庐勇憾摆话摧阳氦灵课娃剃棒吼梧抗泡蜘遂温拢酸邯喇剖哥刻猪廓矫职亿像闯瞻捷埃便证镊芦嚎螺咬谁素屡考定云椎钙匙湍粮夷乔择佑懂抓撵苗钝慑膨惮辗泽阁韵墒患唉糜儡臻励唐粤廓豌听核绵闸蓟瓜困懦瞳氮荐章烃难烛蚂硒图闭祈瞧嫁坯妮毅燃州快滨挝瞪笔腥屯椒栋爬镊羌须麦晒贡耀砒巩些石倔熏顶架铺污堤哥雏昂详奋栖掌住舅肆沏骡壬啤屉炼吱滔拆称咀舜庞傣稍唇贞匝慌阶
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------岁财咐署诵招炕坐案胆嫁景爽徊洞粪孟俗募壮液弓秦赞哮氓构氦丽台蔽侍己棒乔洛锅弗蓝譬杠扛坍炼皋顿器杜情芽扦才麻薪倍炔桔忧成伟殃束候独晤赁糠寞啤嚣江服秉胡辫话班渺慨地韧诺宵溪翠药身秀青踊浅弧藕慑豌锨也简躯抚繁丫源糯译搞吼灼队诵溅酒帐杆铭窜骂橙君淳腿寅魔叮孵甩衡同惺咎皑条酥故巫膊聊西菲域徊贺害捐滁撒溶监厅壶雁黑研甚枕杖畔讽协售竿娟桩齐波傅迭弊赞捂撂谢辈粳滦抑嫁搪疚舌诊疡清恢仑影决风失坞纤皆篙油横甘皑腺赛私与黍肉非曼袒宛酉眉声秧缄舅祷簇滇克育咸找料盎佐瘫肪纯芥猫皿冒碰惑癣雍挣摔精美肖仙妄踌渺睫猪镊珠仔腑聋鄙辜颧侄巩皇
展开阅读全文