# PIG指令大全 ## PIG ### FILTER > FILTER 變數 BY 欄位 條件 EX: - 顯示藥局為丁丁藥局 ``` a1 = FILTER data BY $1 == '丁丁藥局'; ``` - 顯示藥局不為丁丁藥局 ``` a1 = FILTER data BY $1 != '丁丁藥局'; ``` > FILTER 變數 BY 欄位 MATCHES .* EX: - 顯示地址有包含臺北市的資料 ``` a1 = FILTER data BY $2 MATCHES '臺北市.*'; ``` - 顯示地址有包含中正路的資料 ``` a1 = FILTER data BY $2 MATCHES '.*中正路.*'; ``` ### REPLACE > FOREACH 變數 GENERATE REPLACE(欄位,被替換的字,要替換的字) EX: - 替換第二個欄位桃園縣變桃園市 ``` a1 = FOREACH data GENERATE REPLACE($2,'桃園縣','桃園市'); ``` ### SUBSTRING > FOREACH 變數 GENERATE SUBSTRING(欄位2,起點位置,結束位置) EX: - 顯示地址的第1 ~ 3 個字 ``` a1 = FOREACH data GENERATE SUBSTRING($2,0,3); ``` - 顯示地址的第4 ~ 6 個字 ``` a1 = FOREACH data GENERATE SUBSTRING($2,3,6); ``` ### GROUP > GROUP 變數 ALL EX: - 將所有資料分在同一組 ``` a1 = GROUP data ALL; ``` ### COUNT > FOREACH 分組後的變數 GENERATE 分組條件, COUNT(被分組的變數) EX: - 計算資料總共有幾筆 ``` a2 = FOREACH a1 GENERATE $0, COUNT($1); ``` ### DISTINCT > DISTINCT 變數 EX: - 去除重複的資料 ``` a1 = DISTINCT data; ``` ### STRSPLIT > FOREACH 變數 GENERATE STRSPLIT($2,'-',2),$9; - 分割第三欄位,以 '-' 分割,分為兩欄 ``` foreach_farm = FOREACH farm GENERATE STRSPLIT($2,'-',2),$9; ((香水百合,香水百合),43) ((香水百合,多朵),12) ((香水百合,紅雙朵),44) ``` ### JOIN > JOIN 變數1 BY 變數1欄位, 變數2 BY 變數2欄位 EX: - 使用 JOIN 將縣市相同的資料合併, 輸出範例為 : (臺北市,614, 臺北市,1566182) ``` c1 = JOIN a2 BY $0, b2 BY $0; ``` ### STORE > STORE 變數 INTO 'new_csv.csv' using PigStorage(','); ## bash script ### --output-delimiter="," - tab分割檔案改用,分隔 > cat 檔案 | cut -d $'\t' -f1-10 --output-delimiter="," ### cut - 使用 cut命令取出每筆資料的前三個字 > cat twmask2.csv | cut -d',' -f3 | cut -c1-9 ### uniq - uniq 命令會檢查每一行與下一行是否重複,若重複則刪除一行 > cat twmask2.csv | cut -d',' -f3 | cut -c1-9 | uniq ### sort - 使用 sort 命令排序成人口罩剩餘數 > cat twmask2.csv |sort -t',' -k5