02-PDI(Kettle)导入与导出
文章目錄
- 02-PDI(Kettle)導入與導出
-
- 多個excel表格數據的合并
-
- 實驗步驟:
- 拓展 Excel介紹
- 基于文本的數據導入與導出
-
- 實驗步驟
- 擴展 回車與換行的區別
- 基于XML文本的數據導入導出
-
- 步驟設計
- 擴展 XML教程
- 基于JSON文本的數據導入導出
-
- 實驗步驟
- 拓展 JSON
- 基于數據庫的數據導入與導出
-
- 實驗步驟
- 拓展 kettle分享數據庫連接
02-PDI(Kettle)導入與導出
本文主要介紹基于Kettle的導入與導出,并針對每種文件特點進行相關介紹。
多個excel表格數據的合并
實驗步驟:
- 數據準備:
在課程信息表1.xlsx中的sheet1中提供如下數據,
將該文件復制幾份,放在不同的子目錄下,本文的目錄數據結果如下:
D:\kettle-XXX-data\多個Excel合并data>tree . /f /a
卷 軟件 的文件夾 PATH 列表
D:\KETTLE-REPOSITORY-DATA\CHAPTER03-1-02多個EXCEL合并DATA
| 課程信息表1.xlsx
| 課程信息表2.xlsx
| 課程信息表3.xlsx
|
\---子目錄課程信息表4.xlsx
-
設計轉換
-
命名參數的配置。
在畫布上點擊鼠標右鍵,在彈出的菜單中選擇“Properties”調出命名參數設置窗口。
選擇卡項“paramerers”配置命名參數,其中“Default Value”的值為待處理的輸入數據的實際存儲路徑。
-
““Microsoft Excel input”的配置:
Files選項設置:
數據源的 配置如下圖所示:(如果該文件夾下包含有子目錄,則“包含子目錄”配置為”Y”)
sheet選項設置:
數據表和數據行列的的選擇如下圖配置:
Fields選項設置:
重新配置數據的字段,如下圖所示。
-
“Microsoft Excel 輸出”的配置
配置輸出的文件名,Excel版本,sheet等,如下圖所示。
配置輸出的字段名,如下圖所示。
-
運行轉換
依次點擊菜單“Action->run”運行程序.運行完畢后,如下圖所示,
點擊“Preview data”瀏覽輸出數據,亦可在實驗輸出路徑上查看驗證輸出的Excel文件數據,已經合并成了一個Excel文件。
拓展 Excel介紹
最大行 1048576
最大列 列從A開始,Z結尾,XFD等同于26進制的O64 XFD是26進制的(24*26+6)*26+4=16384…也就是2^14 =16384
按住下鍵9小時得出的吧。其實用Ctrl+下,一次就到最后一行了。1048576好啊,這個數多整,1024x1024。對學計算機的人來說,256、1024、2^16=65536、1048576,這些都是很整很整的數。
Excel 規范與限制
https://support.microsoft.com/zh-cn/office/excel-%e8%a7%84%e8%8c%83%e4%b8%8e%e9%99%90%e5%88%b6-1672b34d-7043-467e-8e27-269d656771c3?ui=zh-cn&rs=zh-cn&ad=cn#ID0EDBD=Newer_versions
基于文本的數據導入與導出
文本文件是使用ETL工具處理的最簡單的一種數據。文本文件易于交換,壓縮比高,任何文本編輯器都可打開。總體來說,文本文件可分為分割符文件和固定寬度文件。
本實驗讀入student.csv文件,輸出固定寬度為15字節的student.txt文件。student.csv文件以逗號為分隔符。
實驗步驟
- 數據準備:
student.csv的內容
cat student.csv
學號,姓名,性別,班級,年齡,成績,身高,手機
1,張一,男,1701,16,78,170,18946554571
2,李二,男,1701,17,80,175,18946554572
3,謝遜,男,1702,18,95,169,18946554573
4,趙玲,女,1702,19,86,180,18956257895
5,張明,男,1704,20,85,185,18946554575
6,張三,女,1704,18,92,169,18946554576
- 設計轉換圖。
如下:
- “CSV file input”步驟的設置
(1)點擊“Browse(B)瀏覽”按鈕,選擇student.csv文件作為輸入文件來處理。
(2)“Delimiter列分隔符”選擇逗號(,),CSV文件默認是逗號分割。
(3)勾選“Header row present 包含列頭行”,表示此文件內含有文件頭(列名)
(4)中文亂碼可選擇“File encoding 文件編碼”為UTF-8
(5)點擊“Get Fields獲取字段”,在此步驟的字段列表中選擇出此文件的8個字段。
csv input 注意事項
如果輸出為等寬文本,需要在獲取字段后,修改所有字段的類型為string。
- “Text file output”步驟的設置
File選項設置:
(1)點擊“Browse(B)瀏覽”按鈕,選擇等寬文件的輸出路徑。
(2)文件的后綴名在“extension 擴展名”中指定txt。
Content選項設置:
(3)“separator分隔符”配置為空,因為我們需要輸出沒有分隔符的文件。
(4)“Format格式”選擇“LF terminated(Unix)”或“CR+LF terminated(window,DOS)”。
Fileds選項設置:
(5)點擊“Get Fields獲取字段”按鈕,在字段列表上選擇出此文件的所有字段。然后,在各個字段的“長度”中,輸入“15”,表示每個輸出字段的長度為15字節。
- 點擊運行按鈕運行轉換。
輸出文件輸出文件.txt內容如下:
擴展 回車與換行的區別
轉載于:http://www.pythontab.com/html/2017/linuxkaiyuan_0115/1116.html
關于換行和回車其實平時我們不太在意,所以關于兩者的區別也不太清楚,在平時開發時可能會遇到一些文件處理的問題,放到不同的操作系統上出現各種坑。那么回車和換行到底有哪些區別呢?今天咱們就來總結一下。
- 由來
在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33)的機械打字機,每秒鐘可以打10個字符。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字符。要是在這0.2秒里面,又有新的字符傳過來,那么這個字符將丟失。
于是,研制人員想了個辦法解決這個問題,就是在每行后面加兩個表示結束的字符。一個叫做“回車”,告訴打字機把打印頭定位在左邊界,不卷動滾筒;另一個叫做“換行”,告訴打字機把滾筒卷一格,不改變水平位置。
這就是“換行”和“回車”的由來。
- 使用
后來,計算機發明了,這兩個概念也就被般到了計算機上。那時,存儲器很貴,一些科學家認為在每行結尾加兩個字符太浪費了,加一個就可以。于是,就出現了分歧。
回車 \r 本義是光標重新回到本行開頭,r的英文return,控制字符可以寫成CR,即Carriage Return
換行 \n 本義是光標往下一行(不一定到下一行行首),n的英文newline,控制字符可以寫成LF,即Line Feed
符號 ASCII碼 意義
\n 10 換行NL (0x0A)
\r 13 回車CR (0x0D)
\r\n (0x0D,0x0A)
在不同的操作系統這幾個字符表現不同,比如在WIN系統下,這兩個字符就是表現的本義,在UNIX類系統,換行\n就表現為光標下一行并回到行首,在MAC上,\r就表現為回到本行開頭并往下一行,至于ENTER鍵的定義是與操作系統有關的。通常用的Enter是兩個加起來。
不同操作系統下的含義:
\n: UNIX 系統行末結束符
\r\n: window 系統行末結束符
\r: MAC OS 系統行末結束符
我們經常遇到的一個問題就是,Unix/Mac系統下的文件在Windows里打開的話,所有文字會變成一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號。
后來,Mac 改成跟Unix/Linux 一樣的“\n”
“first line\rsecond line” 的效果是:
“first line\nsecond line” 的效果是:
只有 “first line\r\nsecond line” 才能展示成:
計算機時代改用計算機之后,該怎么辦呢?早期的 ADM-3A 計算機的鍵盤有人覺得還是保留原來打字機的習慣,繼續用 CR LF (\r\n),例如 MS-DOS 操作系統,再比如網絡協議。 Windows 自然也是沿用 MS-DOS 的傳統。有人覺得計算機沒有必要保留打字機的舊習慣,留下一個就夠了。這其中又有人用 LF (\n),例如 Unix 也有人用 CR (\r),例如 Mac OS 經典操作系統(Mac OS 9 以及之前)。后來 Mac OS X 也把 Mac OS 9 的規矩廢除了,投奔Unix,所以改成用 LF (\n)。今天,我們看到的就是 Windows 與網絡協議都用 CR LF ,而類 Unix 操作系統都用 LF 。
- 軟回車和硬回車
再擴展一下回車的一些知識。
硬回車就是普通我們按回車產生的,它在換行的同時也起著段落分隔的作用。
軟回車是用 Shift + Enter 產生的,它換行,但是并不換段,即前后兩段文字在 Word 中屬于同一“段”。在應用格式時你會體會到這一點。
軟回車能使前后兩行的行間距大幅度縮小,因為它不是段落標記,要和法定的段落標記——硬回車區別出來。硬回車的html代碼是
…
,段落的內容就夾在里面,而軟回車的代碼很精悍:
。網頁的文字如果復制到word中,則硬回車變為彎曲的箭頭,軟回車變為向下的箭頭。
基于XML文本的數據導入導出
步驟設計
- 準備數據
<?xml version='1.0' encoding='UTF-8'?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
<CD>
<TITLE>Greatest Hits</TITLE>
<ARTIST>Dolly Parton</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>RCA</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1982</YEAR>
</CD>
<CD>
<TITLE>Still got the blues</TITLE>
<ARTIST>Gary Moore</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Virgin records</COMPANY>
<PRICE>10.20</PRICE>
<YEAR>1990</YEAR>
</CD>
</CATALOG>
- 轉換步驟設計如下:
- Get data from XML設置
將文件添加到選擇文件區域
選擇get xpath nodes
設置fileds
- Excel輸出設置
這里先不描述
- XML output設置
- 輸出的文件為:
<?xml version='1.0' encoding='UTF-8'?>
<CATALOG>
<CD><TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.9</PRICE> <YEAR>1985</YEAR></CD>
...
<CD><TITLE>Still got the blues</TITLE> <ARTIST>Gary Moore</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Virgin records</COMPANY> <PRICE>10.20</PRICE> <YEAR>1990</YEAR></CD>
</CATALOG>
擴展 XML教程
內容較多,參考
http://www.jk1123.com/?p=124
https://blog.csdn.net/L_ZG_/article/details/105363109
基于JSON文本的數據導入導出
實驗步驟
- 準備數據
本案例數據位于:XX\read-nested-fields.js
內容如下:
{"missions":[{"id": "59434767","timestamp": "2011-11-21 09:21:53","data": [{"field": "13776121","value": "Baylor Dallas"},{"field": "13776401","value": "CHF"},{"field": "13777966","value": "John Doe"},{"field": "13780027","value": "9999"} ]},{"id": "59474875","timestamp": "2011-11-21 17:01:22","data": [{"field": "13776121","value": "Healthsouth,"},{"field": "13776401","value": "Pneumonia"},{"field": "13777966","value": "Jane Doe"} ]}],"total": 2,"pages": 1}
- 步驟設計
轉換步驟設計如下:
- json input 設置
File選項設置:
設置文件地址:XX\read-nested-fields.js
content選項設置為默認設置
fields選項設置:
id $.missions…id 中$表示json數據,.missions…id表示獲取該文件中missions下的子元素的中的id子元素。
data $.missions…data 中$表示json數據,.missions…data表示獲取該文件中missions下的子元素的中的data子元素。
-
json input get -nested fields設置
File選項設置:
勾選source is from previous step,表示選擇讀取上一步驟的源字段
select field:會自動提示上一步驟中的data和id字段,這里勾選data字段。
fileds選項設置
-
excel output設置
與前面基本類似,重點在于設置字段選擇 -
json out put 設置
拓展 JSON
JSON格式相關
https://www.bejson.com/
基于數據庫的數據導入與導出
實驗步驟
當前,市場上主流的關系型數據庫有MySQL、Oracle、SQL Server、DB2等。面對這些類型的關系型數據庫,Kettle都可以使用“表輸入”“表輸出”這兩個步驟完成數據的導入與導出。
本實驗讀入student表數據,輸出滿足身高大于等于170,成績大于等于80的學生數據。輸出的數據存儲在StuOut表中。
1.在mysql命令行執行student.sql腳本腳本內容
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (`學號` int(11) NOT NULL,`姓名` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`性別` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`班級` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`年齡` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`成績` int(15) NULL DEFAULT NULL,`身高` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`手機` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`學號`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '張一', '男', '1701', '16', 78, '170', '18946554571');
INSERT INTO `student` VALUES (2, '李二', '男', '1701', '17', 80, '175', '18946554572');
INSERT INTO `student` VALUES (3, '謝遜', '男', '1702', '18', 95, '169', '18946554573');
INSERT INTO `student` VALUES (4, '趙玲', '女', '1702', '19', 86, '180', '18956257895');
INSERT INTO `student` VALUES (5, '趙明', '男', '1704', '20', 85, '185', '18946554575');
INSERT INTO `student` VALUES (6, '張三', '女', '1704', '18', 92, '169', '18946554576');SET FOREIGN_KEY_CHECKS = 1;
執行腳本
source /home/ubuntu/student.sql
2.新建轉換如下
- data grid設置
- table input設置
創建mysql_conn連接,并測試
測試完成后,執行Get SQL select statement
修改sql語句,添加
WHERE 身高>? AND 成績>?
這一步驟需要勾選Replace variables in,并選擇insert data from step選擇上一步驟的data grid。
完整SQL為:
SELECT學號
, 姓名
, 性別
, 班級
, 年齡
, 成績
, 身高
, 手機
FROM student
WHERE 年齡 >? AND 成績 > ?
- table output
選擇target后,可以執行下sql
執行sql后,可以映射字段
注意:這里可以多次嘗試,比如去掉specify database fields,get fields ,table field的字段可以手動選擇。
拓展 kettle分享數據庫連接
先在一個轉換中創建連接后,通過view – 》database connections --》 數據庫連接–》share就可以分享了
總結
以上是生活随笔為你收集整理的02-PDI(Kettle)导入与导出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: chrome浏览器表单自动填充默认样式-
- 下一篇: 邮件ICS文件详解