91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

比較 csv 文件中數據差異

發布時間:2020-08-02 21:32:03 來源:網絡 閱讀:361 作者:raqsoft 欄目:大數據

????????csv文件存儲數據時在結構上基本和一個數據庫表相當,不過因為讀寫方便,所以使用頻率很高,例如輸出一些臨時結果,或者持續記錄類似日志形式的數據。不過,當需要對這些數據進一步處理時,如果還要先導入數據庫,那么csv本身的便利性也就沒有了。

事實上,通過集算器,可以直接對csv文件進行處理,而且還可以進行一些“高級”操作,就像本文要介紹的比較兩個csv文件的差異。

???????? 假設在一個簡單的銷售系統中,前端系統只負責錄入,包括新增、修改和刪除訂單,同時,每天會把數據文件做一次備份歸檔。在后期分析中,需要查看某個時間段內的新增、取消和修改的訂單。下面就是不使用數據庫,直接比較csv文件的操作。

例子中使用了2015年3月的兩個文件,早一點的是old.csv,晚一點的是new.csv。文件中的邏輯主鍵是userName和date,需要分別找出新增的、刪除的、修改的數據行。源文件如下:


Old.csvNew.csv

?

1

2

3

4

5

6

7

8

9

userName,date,saleValue,saleCount

Rachel,2015-03-01,4500,9

Rachel,2015-03-03,8700,4

Tom,2015-03-02,3000,8

Tom,2015-03-03,5000,7

Tom,2015-03-04,6000,12

John,2015-03-02,4000,3

John,2015-03-02,4300,9

John,2015-03-04,4800,4

userName,date,saleValue,saleCount

Rachel,2015-03-01,4500,9

Rachel,2015-03-02,5000,5

Ashley,2015-03-01,6000,5

Rachel,2015-03-03,11700,4

Tom,2015-03-03,5000,7

Tom,2015-03-04,6000,12

John,2015-03-02,4000,3

John,2015-03-02,4300,9

John,2015-03-04,4800,4

???????? 直接觀察數據,可以看到new.csv中的第2、3行是新增的記錄,第4行是修改的記錄,old.csv中第3行是刪除的記錄。

???????? 集算器代碼如下:


AB
1=file("d:\\old.csv").import@t(;,",")=file("d:\\new.csv").import@t(;,",")
2=A1.sort(userName,date)=B1.sort(userName,date)
3=new=[B2,A2].merge@d(userName,date)
4=delete=[A2,B2].merge@d(userName,date)
5=diff=[B2,A2].merge@d(userName,date,saleValue,saleCount)
6=update=[A5,new].merge@d(userName,date)return update

???????? A1,B1:以逗號為分隔符讀入文件。

???????? A2,B2:將數據按照關鍵字排序。因為后面使用merge函數要求數據有序。

???????? A3:函數merge可進行多數據集歸并,使用選項@d表示歸并時找出差集。類似地還有并集選項@u,交集選項@i。新增記錄實際上就是較新的數據和較舊數據按關鍵字的差集,計算結果如下:

比較 csv 文件中數據差異

???????? A4:同樣的,較舊數據和較新數據按關鍵字的差集就是刪除的記錄,計算結果如下:

比較 csv 文件中數據差異

???????? A5:將關鍵字作為普通字段計算差集,找到修改過的所有記錄。計算結果如下:

比較 csv 文件中數據差異

???????? A6:要計算更新的記錄,把A5作為中間計算結果,計算A5和“新增”記錄之間的差集。計算結果如下:

比較 csv 文件中數據差異

?

???????? B6:將A6返回給JAVA或報表工具。

?

???????? 上述腳本完成了所有的數據處理工作,接下來還可以通過JDBC將集算器腳本集成在JAVA里。JAVA代碼如下:

???????? //建立esProc jdbc連接

???????? Class.forName("com.esproc.jdbc.InternalDriver");

???????? con= DriverManager.getConnection("jdbc:esproc:local://");

???????? //調用esProc,其中test是腳本文件名,可接收參數

???????? st =(com.esproc.jdbc.InternalCStatement)con.prepareCall("call test()");????????????? ????????

????????com.esproc.jdbc.InternalCStatement st = (com.esproc.jdbc.InternalCStatement)con.prepareCall("call test()");

???????? st.execute();//執行esProc存儲過程

???????? ResultSet set = st.getResultSet();//獲得計算結果

?

???????? 而如果要將多個數據集返回給JAVA,可以將B6的代碼改為:return new,delete,update。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

慈利县| 陆河县| 栾城县| 涟水县| 英吉沙县| 乌鲁木齐县| 新余市| 陆河县| 蓬安县| 太康县| 福安市| 宁河县| 贵州省| 平南县| 通榆县| 岳阳县| 鄂托克旗| 南投县| 建德市| 广河县| 兰溪市| 景泰县| 旌德县| 赤水市| 邢台县| 海安县| 射洪县| 桓仁| 新绛县| 芜湖县| 龙门县| 沾益县| 罗平县| 高要市| 海南省| 无棣县| 慈溪市| 门头沟区| 二手房| 吐鲁番市| 竹溪县|