《萬能數據庫查詢分析器》實現使用SQL語句直接高效地訪問文本文件

 

《萬能數據庫查詢分析器》實現使用SQL語句直接高效地訪問文本文件html

                           馬根峯數據庫

                (廣東聯合電子服務股份有限公司廣州 510300)編程

 

摘要    SQL語句來直接訪問文本文件?是在作夢嗎?瀏覽器

本文具體地介紹了「萬能數據庫查詢分析器」,中文版本號《DB 查詢分析器》、英文版本號《DB Query Analyzer》在 文本文件處理方面很強大的功能,你可以直接用SQL語句來訪問這些文本文件,訪問250萬條記錄的文件的複雜的關聯操做,也只是用時59秒鐘。需要注意的是,文本文件的第一行需要有列名。數據結構

關鍵詞   DB 查詢分析器;DB Query Analyzer 工具

 

 

1       引言  post

中國本土程序猿馬根峯推出的我的做品----萬能數據庫查詢分析器,中文版本號《DB 查詢分析器》、英文版本號《DB Query Analyzer》。spa

萬能數據庫查詢分析器集哈希技術、鏈表等多種數據結構於一體。使用先進系統開發技術,經歷4年的研究、開發、測試周期後在2006年面世。操作系統

以後7年來一直在進行不斷地無缺、升級,到眼下爲止。最新版本號爲5.04 。「萬能數據庫查詢分析器」核心部分就具備長達5萬多行代碼的工做量,使得其具備強大的功能、友好的操做界面、良好的操做性、跨越各類數據庫平臺乃至於EXCEL和文本文件.net

你可以經過它查詢ODBC數據源(包含世面上所有的數據庫、TXT/CSV文件、EXCEL文件)的數據。你可以同一時候運行多條DML語句乃至存貯過程。結果會以你設定的表格、文本框、文件來返回。從數據庫導出千萬條數據時,效率與DBMS沒有什麼差異。

本文將以5.04版本號爲例,具體闡述「萬能數據庫查詢分析器」中文版本號《DB 查詢分析器》在 文本文件 處理方面很強大的功能,你可以直接用SQL語句來訪問這些文本文件,訪問250萬條記錄的文件的複雜的關聯操做,也只是用時59秒鐘。要注意的是,文本文件的第一行需要有列名。

 
 

2    產品得到的成就及發展歷程  

中文版本號《DB 查詢分析器》在中關村在線 下載量超過10 屢次,位居整個數據庫類排行榜中前20位

在《程序猿》20072期的「新產品&工具點評」部分,編輯「特別推薦」了「萬能數據庫查詢分析器」公佈。本期僅僅點評了5個工具。各自是「Adobe Acrobat 8 中文版」、「迅雷搜索 1.7 新版上線」、「Google 桌面搜索 5.0 中文公佈」、「BEA 公佈 WebLogic SIPServer 3.0和特別推薦「萬能數據庫查詢分析器」公佈。前面4個都是國內外大型軟件公司的產品,僅僅有「萬能數據庫查詢分析器」是我的創做的軟件。

截止到2013417,在Baidu上搜索keyword"萬能數據庫查詢分析器",搜索結果達318萬。在Baidu上搜索keyword"DB查詢分析器""DBQuery Analyzer",搜索結果分別在104萬、16萬左右。在Google上搜索「DB 查詢分析器」、「DBQuery Analyzer」。結果分別達104萬、44萬之多。

本人撰寫了關於「萬能數據庫查詢分析器」有關技術的64文章,公佈在《電腦編程技巧與維護》、《軟件》、《計算機時代》、《電腦編程技巧與維護》、百度文庫、CSDN資源、和本人的四大博客上(CSDN博客、新浪博客、QQ空間和搜狐博客上)。

 

 

3   爲什麼用《DB 查詢分析器》來訪問文本文件來解決實際問題

在廣東聯合電子服務股份有限公司實施一張網的過程當中,由於路段上傳的流水存在大量的異常,致使依照正常的結算流程沒法快速地進行路段的結算。

所以,爲了進行及時的結算,廣東省快速公路公司受權先將異常流水進行忽略。後期再將這些流水進行上傳、改動、拆分結算。

近期,爲了實施忽略流水的回傳。本人作的第一步就是從忽略的流水中依照(流水僅僅有在管理點存在、中心和管理點都存在)這兩種狀況。再依照流水金額小於0、等於0、大於0三類進行統計成臺帳(6個文件),而後業務組,再從這些分類批次(6個文件)中確認哪些批次需要回傳(造成個文件。 流水大於0.csv  流水小於0.csv )。

最終,本人還要依據這些這兩個文件裏是否「回傳」,再從結算系統中依據複雜的邏輯,找出要回傳的流水號並依照區域分紅4個文件。

在本次處理中,

源處理文件:流水大於0.csv  流水小於0.csv tb_road 管理點存在中心不存在的流水_所有.txt  管理點與中心都存在的部分_所有.txt 5個文件。

後兩個文件是從結算系統數據庫server中經過複雜的邏輯處理生成的中間結果文件。

輸出結果:要回傳的流水號並依照區域分紅4個文件。

 

解決方式:所以,輸入條件決定要麼在結算數據庫系統中創建 數據表 來完畢條件的推斷;要麼將結果所有忽略的流水、需要關聯的數據表(tb_road)導出成.CSV/.TXT 文件,再使用《DB 查詢分析器》強大、高效的.CSV/.TXT 訪問功能來實施整個回傳流水文件的生成。




 
 

      tb_road 表僅僅是從生產機數據庫中導出tb_road表便可了。

 



圖2  數據挖掘生成文本文件「管理點與中心都存在部分_所有.txt

 

 

4    5.04中文版本號《DB 查詢分析器》爲例  

       下面咱們就以「萬能數據庫查詢分析器」的中文版本號《DB 查詢分析器》 5.04爲例,以Windows 2000Server操做系統爲平臺,先建立基於文件夾 D:\ODBC_TXT_CSV」中 .TXT/.CSV 文件的ODBC數據源 odbc_txt_csv」,而後再經過 DB 查詢分析器 5.04來訪問這些文件夾下的文件。

     操做系統: Windows2000 Server操做系統

     CPU2.8 GHZ 單核
   
內存:1GB

     前臺程序: DB 查詢分析器 5.04

     後臺文件: .TXT/.CSV



圖3  建立基於 .CSV/.TXT 文件的ODBC數據源(一)

 



圖4  建立基於 .CSV/.TXT 文件的ODBC數據源(二)



圖5  登陸odbc_txt_csv。不用輸入username和口令

 


圖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(*) asrec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY

    from

    ( 

        selectw.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 nulland 回送標誌='回送and(cashmoney+etcmoney)<0

           union all

           select *

           FROM  [流水小於0.csv] 

           where (備註 is nulland 回送標誌='回送and(cashmoney+etcmoney)<0

        ) w

        group byw.roadno,w.squaddate,w.roadname,w.outvehclass

   

    ) a,[管理點與中心都存在部分_所有.txt] b

    where  ( (b.CASHMONEY+b.ETCMONEY)<0 ) and a.roadno=b.roadno anda.SQUADDATE=b.SQUADDATE

          anda.OUTVEHCLASS=b.OUTVEHCLASSNAME

    union

    select distinct b.LISTNO,b.roadno

    --select count(*) asrec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY

    from

    ( 

        selectw.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 nulland 回送標誌='回送and(cashmoney+etcmoney)>0

           union all

           select *

           FROM  [流水小於0.csv] 

           where (備註 is nulland 回送標誌='回送and(cashmoney+etcmoney)>0

        ) w

        group byw.roadno,w.squaddate,w.roadname,w.outvehclass

   

    ) a,[管理點與中心都存在部分_所有.txt] b

    where  ( (b.CASHMONEY+b.ETCMONEY)>0 ) and a.roadno=b.roadno anda.SQUADDATE=b.SQUADDATE

          anda.OUTVEHCLASS=b.OUTVEHCLASSNAME  

    union

    select distinct b.LISTNO,b.roadno

    --select count(*) asrec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY

    from

    ( 

        selectw.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 byw.roadno,w.squaddate,w.roadname,w.outvehclass

   

    )  a,[管理點存在中心不存在的流水_所有.txt] b

    where ((b.CASHMONEY+b.ETCMONEY)<0 ) and a.roadno=b.roadno anda.SQUADDATE=b.SQUADDATE

          anda.OUTVEHCLASS=b.OUTVEHCLASSNAME

    union

    select distinct b.LISTNO,b.roadno

    --select count(*) asrec_num,sum(b.CASHMONEY)/100 as CASHMONEY,sum(b.ETCMONEY)/100 as ETCMONEY

    from

    ( 

        selectw.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 byw.roadno,w.squaddate,w.roadname,w.outvehclass

   

    )  a,[管理點存在中心不存在的流水_所有.txt] b

    where ((b.CASHMONEY+b.ETCMONEY)>0 ) and a.roadno=b.roadno anda.SQUADDATE=b.SQUADDATE

          anda.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 QueryAnalyzer中斷SQL語句的運行 · 杭州:《計算機時代》,2011年第12

[2] 馬根峯· DB查詢分析器 批量運行DML語句並返回更具體的信息 · 北京:《電腦編程技巧與維護》,2011年第24

[3] 馬根峯· DBQuery Analyzer中的事務管理在DB2中的應用 · 北京:《電腦編程技巧與維護》,2011年第22

[4] 馬根峯· DB查詢分析器中斷SQL語句的運行· 天津:《軟件》,2011年第6

[5] 馬根峯· 萬能數據庫查詢分析器中的事務管理在Oracle中的應用 · 上海:《微型電腦應用》,2011年第11

       [6] 馬根峯 · 新產品&工具點評 特別推薦:「萬能數據庫查詢分析器」公佈 · 程序猿,20072

 

下面58篇文章公佈在百度文庫、CSDN資源、和本人的四大博客上:

《萬能數據庫查詢分析器使用技巧之(一)》直到《萬能數據庫查詢分析器使用技巧之(十三)》共13

《The 1st tip ofDB Query Analyze》到《The 13th skills of DB Query Analyzer》13

怎樣在client配置ODBC來訪問遠程DB2 for Windowsserver》

How to configure ODBC DSN in Client toaccess remote DB2 for Windows

《怎樣在server上配置ODBC來訪問本機DB2 forWindowsserver》

How to configure ODBC DSN to access localDB2 for Windows

《軟件開發頂尖高手的殺手鐗SQL語句》

Which SQL statement is the trump card tothe senior software developer

DB 查詢分析器批量運行DML語句並返回更具體的信息》

《用「萬能數據庫查詢分析器」測試SQLite4SQL精髓語句的支持》

《用「DB查詢分析器」的對象瀏覽器來展示數據庫的數據字典》

《萬能數據庫查詢分析器用戶已基本涵蓋當前所有數據庫系統》

The DBMS that DB Query Analyzer Users oftenuse cover all kinds of DBMS

《查詢分析器應必須具有的功能-中斷查詢的運行》

《萬能數據庫查詢分析器的EXE文件加殼技術》

Exe packer prevent DB Query Analyzer frombeging debugged

《本身開發的「萬能數據庫查詢分析器」最終有了較大的成果》

DB Query Analyzer中斷SQL語句的運行

DB 查詢分析器 批量運行DML語句並返回更具體的信息

DB Query Analyzer中的事務管理在DB2中的應用

DB 查詢分析器中斷SQL語句的運行

萬能數據庫查詢分析器中的事務管理在Oracle中的應用

特別推薦:「萬能數據庫查詢分析器」公佈》

《軟件開發高手須掌握的4SQL精髓語句(一)》

《軟件開發高手須掌握的4SQL精髓語句(二)》

《軟件開發高手須掌握的4SQL精髓語句(三)》

《軟件開發高手須掌握的4SQL精髓語句(四)》

《軟件開發高手須掌握的4SQL精髓語句(綜合篇)》

《巔峯之做----「萬能數據庫查詢分析器」5.01公佈》

《萬能數據庫查詢分析器與EXCEL強強聯合進行數據分析》

DB 查詢分析器批量運行多條SQL語句並查看各自的運行時間》

DB查詢分析器訪問EXCEL時。要在表名先後加上中括弧或雙引號》

The table name must be enclosed in double quotation marks or sqarebracket while accessing EXCEL by DB Query Analyzer

   《基於數據倉庫星形模式的廣東省快速公路一張網資金結算狀況分析系統》

 

 

 

 

 

 

DB查詢分析器 5.04  中關村在線下載地址:

http://xiazai.zol.com.cn/detail/27/264455.shtml

 

 

DBQuery Analyzer 5.04中關村在線下載地址: 

http://xiazai.zol.com.cn/detail/43/420901.shtml

 

  

 

 

備註:

 假設您的計算機上安裝有「萬能數據庫查詢分析器」曾經的版本號。請先將舊版本號 Uninstall。而後再安裝新版本號。謝謝!

 

 

 

做者簡單介紹:

馬根峯,碩士,研究方向:數據庫應用。

我的開發了萬能數據庫查詢分析器。中文版本號《DB 查詢分析器》、英文版本號《DB Query Analyzer》。它具備強大的功能、友好的操做界面、良好的操做性、跨越各類數據庫平臺乃至於EXCEL和文本文件。

我的還開發了完全刪除文件(File Delete Absolutely)。用以將Windows系統上的文件完全刪除,不會被其餘軟件恢復。

這兩個軟件均無償使用,在各內幾大軟件下載站點中關村在線、天空軟件站、華軍軟件園、太平洋電腦、非凡軟件站、綠色聯盟等均有下載。

 

 

做者博客:

CSDN博客:http://blog.csdn.net/magenfeng

新浪博客:  http://blog.sina.com.cn/magenfeng

QQ空間:  http://user.qzone.qq.com/630414817

相關文章
相關標籤/搜索