一文在手,全部都有 : 大資料命令全集2.0升級版

碼農談IT發表於2022-12-09

前言

上一版大資料命令發表將近快一年了,發表完到現在的時間,一直在收集和補充中,現 2.0版本分享給大家,方便在學習與開發過程中使。

Linux

1. vi/vim

一般模式

語法功能描述
yy複製游標當前一行
y數字y複製一段(從第幾行到第幾行)
p箭頭移動到目的行貼上
u撤銷上一步
dd刪除游標當前行
d數字d刪除游標(含)後多少行
x刪除一個字母,相當於del
X刪除一個字母,相當於Backspace
yw複製一個詞
dw刪除一個詞
shift+^移動到行頭
shift+$移動到行尾
1+shift+g移動到頁頭,數字
shift+g移動到頁尾
數字N+shift+g移動到目標行

編輯模式

按鍵功能
i當前游標前
a當前游標後
o當前游標行的下一行
I游標所在行最前
A游標所在行最後
O當前游標行的上一行

指令模式

命令功能
:w儲存
:q退出
:!強制執行
/要查詢的詞n 查詢下一個,N 往上查詢
? 要查詢的詞n是查詢上一個,shift+n是往下查詢
:set nu顯示行號
:set nonu關閉行號

2. RPM

RPM查詢命令:rpm -qa |grep firefox

RPM解除安裝命令:

rpm -e xxxxxx

rpm -e --nodeps xxxxxx(不檢查依賴)

RPM安裝命令:

rpm -ivh xxxxxx.rpm

rpm -ivh --nodeps fxxxxxx.rpm(--nodeps,不檢測依賴進度)

選項功能
-i-i=install,安裝
-v-v=verbose,顯示詳細資訊
-h-h=hash,進度條
--nodeps--nodeps,不檢測依賴進度

3. 登入與登出

命令描述
sudo useradd lilei新增使用者 (不能被立即使用,需設定密碼 sudo passwd lilei)
sudo adduser lilei新增使用者
login登入或切換使用者
logout登出使用者(命令列)  exit(shell-退出控制檯)
shutdown -h 1010分鐘後自動關機 shutdown -c  //取消
halt(root使用者)關閉所有程式後自動關機
poweroff同上
shutdown -r 10十分鐘後自動重啟
init 6重啟 (0-停機,1-單使用者,2-多使用者,3-完全多使用者,4-圖形化,5-安全模式,6-重啟)
reboot重啟

4. 目錄與檔案

命令描述
cat > myfile建立檔案並編輯內容(ctrl+D結束編輯)
cat -n myfile檢視檔案
chmod [u/g/o/a][+/-/=][r/w/x] myfile更改檔案許可權 u-user,g-group,o-others,a-all  .   +-新增,--刪除,=-重置   .r-read讀(4),w-write寫(2),x-execute執行(1)
more myfile分頁往後顯示檔案(Space空格)
less myfile分頁自由顯示檔案(Page Down / Page Up)
head (-10) myfile指定顯示檔案前若干行(預設前10)
tail (-10) myfile指定顯示檔案後若干行(預設後10)

5. 檔案內容處理

命令描述
sort myfile對檔案內容進行排序
sort -r myfile逆序
uniq myfile檢查檔案中的重複內容
grep (-c)‘a’ myfile在檔案中查詢指定內容 (顯示行號)
diff myfile01 myfile02對不同檔案進行比較
diff3 myfile01 myfile02 myfile03三個檔案
sdiff myfile01 myfile02合併
cmp myfile01 myfile02透過位元組對不同檔案進行比較
omm myfile01 myfile02對有序檔案進行比較
cut -b(-c)(-d) 2(3) myfile對檔案內容進行剪下
paste myfile02 myfile01對檔案內容進行貼上 02-)01
wc (-引數) myfile對檔案內容進行統計 (c-字元數,w-單詞數,l-行數)

6. 檔案搜尋

命令描述
find / -name file1從 '/' 開始進入根檔案系統搜尋檔案和目錄
find / -user user1搜尋屬於使用者 'user1' 的檔案和目錄
find /home/user1 -name *.bin在目錄 '/ home/user1' 中搜尋帶有'.bin' 結尾的檔案
find /usr/bin -type f -atime +100搜尋在過去100天內未被使用過的執行檔案
find /usr/bin -type f -mtime -10搜尋在10天內被建立或者修改過的檔案
find / -name *.rpm -exec chmod 755 '{}'搜尋以 '.rpm' 結尾的檔案並定義其許可權 ^
find /tmp -name *.hprof -exec rm -f {}批次刪除java堆疊.hprof檔案
find / -xdev -name *.rpm搜尋以 '.rpm' 結尾的檔案,忽略光碟機、捷盤等可移動裝置
locate *.ps尋找以 '.ps' 結尾的檔案 - 先執行 'updatedb' 命令
whereis halt顯示一個二進位制檔案、原始碼或man的位置
which halt顯示一個二進位制檔案或可執行檔案的完整路徑
grep -rn "query_string" *Linux目錄下全域性查詢所有檔案中是否包含指定字串(-r:遞迴;-n:顯示行號)

7. 壓縮

命令描述
zip myfile.zip myfile壓縮
zip -d myfile.zip myfile新增
zip -m myfile.zip myfile刪除
unzip -o myfile.zip解壓(覆蓋)
unzip -n myfile.zip解壓(不覆蓋)
zipinfo myfile.zip列出壓縮檔案資訊

8. 磁碟空間

命令描述
df -h顯示已經掛載的分割槽列表
ls -lSr |more以尺寸大小排列檔案和目錄
du -sh dir1估算目錄 'dir1' 已經使用的磁碟空間'
du -sk * | sort -rn以容量大小為依據依次顯示檔案和目錄的大小

9. 系統負載

命令描述
top -d 20 -p 1303將程式號1303的系統負載,每隔20秒重新整理一次
top -d 20 -n 3 -b > test.txt每隔20秒,一共執行3次, 將統計結果匯入到test.txt檔案中。

Shell

輸入/輸出重定向

命令功能說明
command > file將輸出重定向到 file
command < file將輸入重定向到 file
command >> file將輸出以追加的方式重定向到 file
n > file將檔案描述符為 n 的檔案重定向到 file
n >> file將檔案描述符為 n 的檔案以追加的方式重定向到 file
n >& m將輸出檔案 m 和 n 合併
n <& m將輸入檔案 m 和 n 合併
<< tag將開始標記 tag 和結束標記 tag 之間的內容作為輸入

指令碼編輯

快捷方式功能說明
shift引數左移
$@所有的引數
$#引數的個數

Git

基本命令

命令說明
git init初始化倉庫
git clone複製一份遠端倉庫,也就是下載一個專案
git add新增檔案到暫存區
git status檢視倉庫當前的狀態,顯示有變更的檔案
git diff比較檔案的不同,即暫存區和工作區的差異
git commit提交暫存區到本地倉庫
git reset回退版本
git rm刪除工作區檔案
git mv移動或重新命名工作區檔案
git log檢視歷史提交記錄
git blame以列表形式檢視指定檔案的歷史修改記錄
git remote遠端倉庫操作
git fetch從遠端獲取程式碼庫
git pull下載遠端程式碼併合並
git push上傳遠端程式碼併合並

分支管理命令

命令說明
git branch列出分支
git branch (branchname)建立分支命令
git branch -d (branchname)刪除分支
git checkout (branchname)切換分支
git merge合併分支

Hadoop

啟動類命令

功能說明命令指令碼
啟動hdfs叢集sbin/start-dfs.sh
啟動yarnsbin/start-yarn.sh

hadoop fs/hdfs dfs 命令

功能說明命令
建立目錄hdfs dfs -mkdir -p /data/flink
顯示目錄hdfs dfs -ls /
從HDFS複製到本地hdfs dfs -copyToLocal /data/data.txt ./
檔案上傳到叢集(從本地)hhdfs dfs -copyFromLocal data.txt /
檔案下載hdfs dfs -get /data/flink
刪除叢集的檔案hdfs dfs -rm /data/flink
刪除資料夾hdfs dfs -rm -r -skipTrash /data
從本地剪下貼上到HDFShdfs dfs  -moveFromLocal data.txt /data/
追加一個檔案到已經存在的檔案末尾hdfs dfs -appendToFile data1.txt /data/data.txt
顯示檔案內容hdfs dfs -cat data.txt
修改檔案所屬許可權hdfs dfs  -chmod  777 xxx.sh
修改檔案所屬使用者組hdfs dfs  -chown  root:root data.txt
從HDFS的一個路徑複製到HDFS的另一個路徑hdfs dfs -cp data.txt /data1.txt
在HDFS目錄中移動檔案hdfs dfs -mv data.txt /opt/
合併下載多個檔案hdfs dfs  -getmerge /data/* ./data_merge.txt
hadoop fs -put等同於copyFromLocal
顯示一個檔案的末尾hdfs dfs -tail data.txt
刪除檔案或資料夾hdfs dfs -rm /data/data.txt
刪除空目錄hdfs dfs -rmdir /data
統計資料夾的大小資訊hdfs dfs -s -h /data
統計資料夾下的檔案大小資訊hdfs dfs  -h /data
設定HDFS中檔案的副本數量hdfs dfs -setrep 3 /data/data.txt

yarn命令

功能說明命令
檢視正在執行的yarn任務列表yarn application -list appID
kill掉指定id的yarn任務yarn application -kill appID
檢視任務日誌資訊yarn logs -applicationId appID

Zookeeper

啟動命令

功能說明命令指令碼
啟動zookeeper服務zkServer.sh start
檢視zookeeper狀態zkServer.sh status
停止zookeeper服務zkServer.sh stop
啟動zookeeper客戶端zkCli.sh -server 127.0.0.1:2181
退出zookeeper客戶端quit

基本操作

功能說明命令指令碼
當前znode中所包含的內容ls /
建立普通節點(前面是節點的路徑,後面是值)create /bigdata/flink "flink"
獲取節點的值get /bigdata
修改節點的值set /bigdata/flink "flinksql"
刪除節點delete /bigdata/flink
遞迴刪除節點rmr /bigdata

四字母命令

命令功能說明例子
confzk服務配置的詳細資訊echo conf | nc 127.0.0.1 2181
stat客戶端與zk連線的簡要資訊參考上面
srvrzk服務的詳細資訊參考上面
cons客戶端與zk連線的詳細資訊參考上面
mntrzk服務目前的效能狀況參考上面
crst重置當前的所有連線、會話參考上面
dump列出未經處理的會話和連線資訊參考上面
envi列出zk的版本資訊、主機名稱、Java版本、伺服器名稱等等參考上面
ruok測試伺服器是否正在執行,如果在執行返回imok,否則返回空參考上面
srst重置Zookeeper的所有統計資訊參考上面
wchs列出watch的總數,連線數參考上面
wchp列出所有watch的路徑及sessionID參考上面
mntr列出叢集的關鍵效能資料,包括zk的版本、node數量、臨時節點數等等參考上面

Kafka

注: 這裡機器我只寫一個。命令你們也可使用 ./bin/xx.sh (如:./bin/kafka-topics.sh)

檢視當前伺服器中的所有topic

kafka-topics --zookeeper xxxxxx:2181 --list --exclude-internal 

說明:

exclude-internal:排除kafka內部topic

比如: --exclude-internal  --topic "test_.*"

建立topic

kafka-topics --zookeeper xxxxxx:2181  --create 
--replication-factor 
--partitions 1 
--topic topic_name

說明:

--topic 定義topic名

--replication-factor  定義副本數

--partitions  定義分割槽數

刪除topic

注意: 需要server.properties中設定delete.topic.enable=true否則只是標記刪除

kafka-topics --zookeeper xxxxxx:2181 --delete --topic topic_name

生產者

kafka-console-producer --broker-list xxxxxx:9092 --topic topic_name

可加:--property parse.key=true(有key訊息)

消費者

kafka-console-consumer --bootstrap-server xxxxxx:9092 --topic topic_name

注:可選

--from-beginning:會把主題中以往所有的資料都讀取出來

--whitelist '.*' :消費所有的topic

--property print.key=true:顯示key進行消費

--partition 0:指定分割槽消費

--offset:指定起始偏移量消費

檢視某個Topic的詳情

kafka-topics --zookeeper xxxxxx:2181 --describe --topic topic_name

修改分割槽數

  kafka-topics --zookeeper xxxxxx:2181 --alter --topic topic_name --partitions 6

檢視某個消費者組資訊

kafka-consumer-groups --bootstrap-server  xxxxxx:9092  --describe --group group_name

刪除消費者組

kafka-consumer-groups --bootstrap-server  xxxxxx:9092  ---delete --group group_name

重置offset

kafka-consumer-groups --bootstrap-server  xxxxxx:9092  --group group_name

--reset-offsets --all-topics --to-latest --execute

leader重新選舉

指定Topic指定分割槽用重新PREFERRED:優先副本策略 進行Leader重選舉

kafka-leader-election --bootstrap-server xxxxxx:9092 
--topic topic_name --election-type PREFERRED --partition 0

所有Topic所有分割槽用重新PREFERRED:優先副本策略 進行Leader重選舉

kafka-leader-election --bootstrap-server xxxxxx:9092 
--election-type preferred  --all-topic-partitions

查詢kafka版本資訊

kafka-configs --bootstrap-server xxxxxx:9092 --describe --version

增刪改配置

功能說明引數
選擇型別--entity-type (topics/clients/users/brokers/broker- loggers)
型別名稱--entity-name
刪除配置--delete-config k1=v1,k2=v2
新增/修改配置--add-config k1,k2

topic新增/修改動態配置

kafka-configs --bootstrap-server xxxxxx:9092
--alter --entity-type topics --entity-name topic_name 
--add-config file.delete.delay.ms=222222,retention.ms=999999

topic刪除動態配置

kafka-configs --bootstrap-server xxxxxx:9092 
--alter --entity-type topics --entity-name topic_name 
--delete-config file.delete.delay.ms,retention.ms

持續批次拉取訊息

單次最大消費10條訊息(不加引數意為持續消費)

kafka-verifiable-consumer --bootstrap-server xxxxxx:9092 
--group group_name
--topic topic_name --max-messages 10

刪除指定分割槽的訊息

刪除指定topic的某個分割槽的訊息刪除至offset為1024

json檔案offset-json-file.json

{
    "partitions": [
        {
            "topic""topic_name",
            "partition": 0,
            "offset": 1024
        }
    ],
    "version": 1
}
kafka-delete-records --bootstrap-server xxxxxx:9092 
--offset-json-file offset-json-file.json

檢視Broker磁碟資訊

查詢指定topic磁碟資訊

kafka-log-dirs --bootstrap-server xxxxxx:9090 
--describe --topic-list topic1,topic2

查詢指定Broker磁碟資訊

kafka-log-dirs --bootstrap-server xxxxxx:9090 
--describe --topic-list topic1 --broker-list 0

Hive

啟動類

功能說明命令
啟動hiveserver2服務bin/hiveserver2
啟動beelinebin/beeline
連線hiveserver2beeline> !connect jdbc:hive2://hadoop102:10000
metastroe服務bin/hive --service metastore

hive 啟動後設資料服務(metastore和hiveserver2)和優雅關閉指令碼

啟動: hive.sh start
關閉: hive.sh stop
重啟: hive.sh restart
狀態: hive.sh status

指令碼如下

#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs

mkdir -p $HIVE_LOG_DIR

#檢查程式是否執行正常,引數1為程式名,引數2為程式埠
function check_process()
{
    pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
    ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
    echo $pid
    [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}

function hive_start()
{
    metapid=$(check_process HiveMetastore 9083)
    cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
    cmd=$cmd" sleep4; hdfs dfsadmin -safemode wait >/dev/null 2>&1"
    [ -z "$metapid" ] && eval $cmd || echo "Metastroe服務已啟動"
    server2pid=$(check_process HiveServer2 10000)
    cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
    [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2服務已啟動"
}

function hive_stop()
{
    metapid=$(check_process HiveMetastore 9083)
    [ "$metapid" ] && kill $metapid || echo "Metastore服務未啟動"
    server2pid=$(check_process HiveServer2 10000)
    [ "$server2pid" ] && kill $server2pid || echo "HiveServer2服務未啟動"
}

case $1 in
"start")
    hive_start
    ;;
"stop")
    hive_stop
    ;;
"restart")
    hive_stop
    sleep 2
    hive_start
    ;;
"status")
    check_process HiveMetastore 9083 >/dev/null && echo "Metastore服務執行正常" || echo "Metastore服務執行異常"
    check_process HiveServer2 10000 >/dev/null && echo "HiveServer2服務執行正常" || echo "HiveServer2服務執行異常"
    ;;
*)
    echo Invalid Args!
    echo 'Usage: '$(basename $0)' start|stop|restart|status'
    ;;
esac

常用互動命令

功能說明命令
不進入hive的互動視窗執行sqlbin/hive -e "sql語句"
執行指令碼中sql語句bin/hive -f hive.sql
退出hive視窗exit 或 quit
命令視窗中檢視hdfs檔案系統dfs -ls /
命令視窗中檢視hdfs檔案系統! ls /data/h

SQL類(特殊的)

說明語句
檢視hive中的所有資料庫show databases
用default資料庫use default
查詢表結構desc table_name
檢視資料庫show databases
重新命名錶名alter table table1 rename to table2
修改表中欄位alter table table_name change name user_name String
修改欄位型別alter table table_name change salary salary Double
建立外部表create external table ....
查詢外部表資訊desc formatted outsidetable
建立檢視create view view_name as select * from table_name .....
新增資料load data local inpath 'xxx'  overwrite into table table_name partition(day='2021-12-01')

內建函式

(1) NVL

給值為NULL的資料賦值,它的格式是NVL( value,default_value)。它的功能是如果value為NULL,則NVL函式返回default_value的值,否則返回value的值,如果兩個引數都為NULL ,則返回NULL

select nvl(column, 0) from xxx;

(2)行轉列

函式描述
CONCAT(string A/col, string B/col…)返回輸入字串連線後的結果,支援任意個輸入字串
CONCAT_WS(separator, str1, str2,...)第一個引數引數間的分隔符,如果分隔符是 NULL,返回值也將為 NULL。這個函式會跳過分隔符引數後的任何 NULL 和空字串。分隔符將被加到被連線的字串之間。
COLLECT_SET(col)將某欄位的值進行去重彙總,產生array型別欄位
COLLECT_LIST(col)函式只接受基本資料型別,它的主要作用是將某欄位的值進行不去重彙總,產生array型別欄位。

(3)列轉行(一列轉多行)

Split(str, separator): 將字串按照後面的分隔符切割,轉換成字元array。

EXPLODE(col):將hive一列中複雜的array或者map結構拆分成多行。

LATERAL VIEW

用法:

LATERAL VIEW udtf(expression) tableAlias AS columnAlias

解釋:lateral view用於和split, explode等UDTF一起使用,它能夠將一行資料拆成多行資料,在此基礎上可以對拆分後的資料進行聚合。

lateral view首先為原始表的每行呼叫UDTF,UDTF會把一行拆分成一或者多行,lateral view再把結果組合,產生一個支援別名表的虛擬表。

準備資料來源測試

moviecategory
《功勳》記錄,劇情
《戰狼2》戰爭,動作,災難

SQL

SELECT movie,category_name 
FROM movie_info 
lateral VIEW
explode(split(category,",")) movie_info_tmp  AS category_name ;

測試結果

《功勳》      記錄
《功勳》      劇情
《戰狼2》     戰爭
《戰狼2》     動作
《戰狼2》     災難

視窗函式

(1)OVER()

定分析函式工作的資料視窗大小,這個資料視窗大小可能會隨著行的變而變化。

(2)CURRENT ROW(當前行)

n PRECEDING:往前n行資料

n FOLLOWING:往後n行資料

(3)UNBOUNDED(無邊界)

UNBOUNDED PRECEDING 前無邊界,表示從前面的起點

UNBOUNDED FOLLOWING後無邊界,表示到後面的終點

SQL案例:由起點到當前行的聚合

select 
    sum(money) over(partition by user_id order by pay_time rows between UNBOUNDED PRECEDING and current row) 
from or_order;

SQL案例:當前行和前面一行做聚合

select 
    sum(money) over(partition by user_id order by pay_time rows between 1 PRECEDING and current row) 
from or_order;

SQL案例:當前行和前面一行和後一行做聚合

select 
    sum(money) over(partition by user_id order by pay_time rows between 1 PRECEDING AND 1 FOLLOWING )
from or_order;

SQL案例:當前行及後面所有行

select 
    sum(money) over(partition by user_id order by pay_time rows between current row and UNBOUNDED FOLLOWING  )
from or_order;

(4)LAG(col,n,default_val)

往前第n行資料,沒有的話default_val

(5)LEAD(col,n, default_val)

往後第n行資料,沒有的話default_val

SQL案例:查詢使用者購買明細以及上次的購買時間和下次購買時間

select 
 user_id,,pay_time,money,
 
 lag(pay_time,1,'1970-01-01') over(PARTITION by name order by pay_time) prev_time,
 
 lead(pay_time,1,'1970-01-01') over(PARTITION by name order by pay_time) next_time
from or_order;

(6)FIRST_VALUE(col,true/false)

當前視窗下的第一個值,第二個引數為true,跳過空值。

(7)LAST_VALUE (col,true/false)

當前視窗下的最後一個值,第二個引數為true,跳過空值。

SQL案例:查詢使用者每個月第一次的購買時間 和 每個月的最後一次購買時間

select
 FIRST_VALUE(pay_time) 
     over(
         partition by user_id,month(pay_time) order by pay_time 
         rows between UNBOUNDED PRECEDING and UNBOUNDED FOLLOWING
         ) first_time,
 
 LAST_VALUE(pay_time) 
     over(partition by user_id,month(pay_time) order by pay_time rows between UNBOUNDED PRECEDING and UNBOUNDED FOLLOWING
     ) last_time
from or_order;

(8)NTILE(n)

把有序視窗的行分發到指定資料的組中,各個組有編號,編號從1開始,對於每一行,NTILE返回此行所屬的組的編號。(用於將分組資料按照順序切分成n片,返回當前切片值)

SQL案例:查詢前25%時間的訂單資訊

select * from (
    select User_id,pay_time,money,
    
    ntile(4) over(order by pay_time) sorted
    
    from or_order
) t
where sorted = 1;

4個By

(1)Order By

全域性排序,只有一個Reducer。

(2)Sort By

分割槽內有序。

(3)Distrbute By

類似MR中Partition,進行分割槽,結合sort by使用。

(4) Cluster By

當Distribute by和Sorts by欄位相同時,可以使用Cluster by方式。Cluster by除了具有Distribute by的功能外還兼具Sort by的功能。但是排序只能是升序排序,不能指定排序規則為ASC或者DESC。

在生產環境中Order By用的比較少,容易導致OOM。

在生產環境中Sort By+ Distrbute By用的多。

排序函式

(1)RANK()

排序相同時會重複,總數不會變

1
1
3
3
5

(2)DENSE_RANK()

排序相同時會重複,總數會減少

1
1
2
2
3

(3)ROW_NUMBER()

會根據順序計算

1
2
3
4
5

正規表示式

符號功能
/做為轉義,即通常在“/”後面的字元不按原來意義解釋,如/b/匹配字元“b”,當b前面加了反斜槓後//b/,轉義為匹配一個單詞的邊界。-或-對正規表示式功能字元的還原,如““匹配它前面元字元0次或多次,/a/將匹配a,aa,aaa,加了"/"後,/a//將只匹配”a“。
^匹配一個輸入或一行的開頭 ,/^a/匹配”an A“,而不匹配”An a“
$匹配一個輸入或一行的結尾,/a$/匹配”An a“,而不匹配”an A“
*匹配前面原字元0次或多次,/ba*/將匹配b,ba,baa
+匹配前面元字元1次或多次,/ba*/將匹配ba,ba,baaa
?匹配前面元字元0次或1次,/ba?/將匹配b,ba
(x)匹配x儲存x在名為9的變數中
{n}精確匹配n次
{n,}匹配n次以上
{n,m}匹配n-m次
[xyz]字符集(character set),匹配這個集合中任一一個字元(或元字元)
[^xyz]不匹配這個集合中的任何一個字元
[/b]匹配一個退格符
/b匹配一個單詞的邊界
/B匹配一個單詞的非邊界
/d匹配一個數字字元,//d/=/[0-9]/
/D匹配一個非數字字元,//D/=/[^0-9]/
/n匹配一個換行符
/r匹配一個換行符
/S匹配一個空白字元,包括/n,/r,/f,/t,/v等
/w匹配一個可以組成單詞的字元,包括下劃線,如[/w]匹配”$5.98“中的5,等於[a-zA-Z0-9]
/W匹配一個不可以組成單詞的字元,如[/W]匹配”5.98“中的$,等於[^a-zA-Z0-9]
select regexp_extract('x=a3&x=18abc&x=2&y=3&x=4','x=([0-9]+)([a-z]+)',2)

得到結果:abc

日期函式

datediff:返回結束日期減去開始日期的天數

datediff(string enddate, string startdate) 

select datediff('2021-11-20','2021-11-22')

date_add:返回開始日期startdate增加days天后的日期

date_add(string startdate, int days) 

select date_add('2021-11-20',3)

date_sub:返回開始日期startdate減少days天后的日期

date_sub (string startdate, int days) 

select date_sub('2021-11-22',3)

trunc 函式的用法

函式/方法返回資料
trunc(add_months(current_date(),-1),'MM')上月1號
trunc(current_date(),'MM')本月1號
trunc(add_months(current_date(),1),'MM')下月1號
trunc(current_date(),'YYYY')今年年初日期

時間相關函式處理案例

1. 取得當前日期時間:

--取得當前日期:
select current_date();
輸出:2021-08-14
--取得當前日期時間:
select current_timestamp();
輸出:2021-08-14 13:14:57
--hive取得當前時間戳:
select unix_timestamp();
輸出:1628911641

2. 日期時間轉日期函式,返回日期時間欄位中的日期部分,

-- 說明:字串必須為:yyyy-MM-dd格式。

select to_date('2021-08-14 13:34:12');
輸出:2021-08-14

3. 時間戳到轉時間格式

--說明: 轉化UNIX時間戳(從1970-01-01 00:00:00 UTC到指定時間的秒數)到當前時區的時間格式

select from_unixtime(1323308945,’yyyy-MM-dd’);
輸出:2011-12-08
select from_unixtime(1323308945,’yyyyMMdd’);
輸出:20111208
--取得當前時間,相當於select current_timestamp();
select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:dd:ss');
輸出:2021-08-14 03:14:57

4. 日期、時間戳、字串型別格式化輸出標準時間格式

select date_format(current_timestamp(),'yyyy-MM-dd HH:mm:ss');
輸出:2021-08-14 11:14:46
select date_format(current_date(),'yyyy-MM-dd');
輸出:2021-08-14
select date_format('2021-08-14','yyyy-MM-dd HH:mm:ss'); 
輸出:2021-08-14 00:00:00

5. 獲取當前時間的unix時間戳和日期轉UNIX時間戳函式

select unix_timestamp();
輸出:1628906623
select unix_timestamp('2021-08-14 10:05:20');
輸出:1628935520

6. utc時間轉換:

select from_utc_timestamp(current_timestamp(),8);
輸出:2021-08-14 11:10:27.762
select to_utc_timestamp(current_timestamp(),8);
輸出:2021-08-14 11:10:56.085

7. 日期轉unix時間戳

select to_unix_timestamp('2021-08-14 11:10:27','yyyy-MM-dd HH:dd:ss');
輸出:1628593227

8.  返回日期中的年/季度/月/日

select year('2021-08-14 10:05:20');
輸出:2021
select quarter('2021-08-14 10:05:20');
輸出:3
select month('2021-08-14 10:05:20');
輸出:8
select day('2021-08-14 10:05:20');
輸出:14

9. 返回日期中的時/分/秒

select hour('2021-08-14 10:05:20');
輸出:10
select minute('2021-08-14 10:05:20');
輸出:5
select second('2021-08-14 10:05:20');
輸出:20

10. 返回日期在當年的第幾周

select weekofyear('2021-08-14 10:05:20');
輸出:32

11. 返回日期在當前周的第幾天(注:週日為第1天)

select dayofweek('2021-08-14 10:05:20');  --週六
輸出:7

12. 日期比較函式,返回開始日期減去結束日期的天數

說明:前者大於後者,返回值為正,否則,返回值為負。

select datediff('2021-08-14','2021-08-08');
輸出:6
select datediff(current_date(),date_add(current_date(),-10));
輸出:10
select datediff(current_date(),date_add(current_date(),10));
輸出:-10

13. 日期減少函式,返回日期前n天的日期

select date_sub('2021-08-14',6);
輸出:2021-08-08

14. 日期增加函式,返回日期後n天的日期

select date_add('2021-08-14',6);
輸出:2021-08-20
--取得昨天日期:
select date_add(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-1);
select date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),1);
-- 取得明天日期:
select date_add(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),1);
select date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-1);

15. 返回兩個日期之間包含的月數(結果為double型別)

select months_between('2021-10-14','2021-05-04');
輸出:5.32258065

16. 獲取日期月初(引數MM),年初日期(引數YY)

select trunc(current_date(),'MM');
輸出:2021-08-01
select trunc(current_date(),'YY');
輸出:2021-01-01

17. 獲取日期當月最後一天

select last_day(current_date());
輸出:2021-08-31

18. 返回當前日期之後的下個星期幾的日期

說明:引數為MO,TU,WE,TH,FR,SA,SU,也可以是兩個縮寫字母可以是三個可以是全名。

select next_day('2021-08-14''TU'); --得到021-08-14後的下個週二
輸出:2021-08-17
select next_date('2020-01-01','Fri');  --得到2020-01-01後的下個週五
輸出:2020-01-03

19. yyyymmdd和yyyy-mm-dd日期間切換

思路:先轉換成時間戳,再由時間戳轉換為對應格式。

select from_unixtime(unix_timestamp('20210814','yyyymmdd'),'yyyy-mm-dd');
輸出:2021-08-14
select from_unixtime(unix_timestamp('2021-08-14','yyyy-mm-dd'),'yyyymmdd') ;
輸出:20210814

20. 取最近30天資料

seelct * from table where datediff(current_timestamp(),create_time)<=30;
--要從表中執行

21. 兩個日期相差多少小時

select (unix_timestamp('2021-08-14 10:18:54')-unix_timestamp('2021-08-14 08:18:54'))/3600;
輸出:2.0

22. 兩個日期相差多少分鐘

select (unix_timestamp('2021-08-14 10:18:54')-unix_timestamp('2021-08-14 08:18:54'))/60
輸出:120.0

23. 返回上個月第一天和最後一天

--上個月第一天
select trunc(add_months(current_timestamp(),-1),'MM');
select concat(substr(add_months(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-1),1,7),'-01');
select trunc(add_months(current_timestamp(),-1),'MM');
輸出:2021-07-01

--上個月最後一天
select last_day(add_months(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-1)) ;
select date_sub(trunc(current_timestamp(),'MM'),1);
輸出:2021-07-31

-- 獲取當月第一天
select trunc(current_timestamp(),'MM');
select from_unixtime(unix_timestamp(),'yyyy-MM-01');
輸出:2021-08-01

-- 獲取當月最後一天
select last_day(current_timestamp());
select  last_day(current_date());
輸出:2021-08-31

Impala(時間處理,可類比到hive可用)

1. 獲取當前時間

timestamp 樣式2021-12-10 04:36:48.147046000

bigint 樣式 1639110956

函式/方法輸出型別說明/樣式
current_timestamp()timestamp所在時區的當前時間
now()timestamp所在時區的當前時間
unix_timestamp()bigint所在時區的當前時間戳
utc_timestamptimestampUTC時區的當前時間
timeofday()stringFri Dec 10 12:39:46 2021 CST

2. 獲取時間指定單位函式

序號函式/方法輸出型別說明/樣式
1year(timestamp/date)int獲取年 yyyy
2quarter(timestamp/date)int獲取季度(1,2,3,4)
3month(timestamp/date)int獲取月
4monthname(timestamp/date)string獲取月份名稱 December
5week(timestamp/date)int獲取周(1-53)
6weekofyear(timestamp/date)int獲取周(1-53)
7dayofweek(timestamp/date)int獲取天(本週第多少天,週日算第一天)
8dayname(timestamp/date)string獲取天(星期幾)Friday
9next_day(timestamp/date, 10day(string))timestamp/date
11day(timestamp/date)int獲取天(本月第多少天)
12dayofmonth(timestamp/date)int獲取天(本月第多少天)
13last_day(timestamp/date)timestamp/date獲取天(本月的最後一天日期)
14dayofyear(timestamp/date)int獲取天(本年第多少天)
15hour(timestamp/date)int獲取小時
16minute(timestamp date)int獲取分鐘
17second(timestamp date)int獲取秒
18millisecond(timestamp date)int獲取毫秒
19extract (YEAR FROM timestamp)bigint獲取引數指定的時間單位 YEAR MONTH DAY  HOUR MINUTE SECOND
20date_part('year',timestamp)bigint獲取引數指定的時間單位 YEAR MONTH DAY  HOUR MINUTE SECOND
21trunc(timestamp/date,unit)timestamp/date獲取截斷為指定單位的時間
unit擷取說明
SYYYY,YYYY,YEAR,SYEAR,YYY,YY,Y
Q季節
MONTH,MON,MM,RM
WW最近的日期是與一年中的第一天相同的日期
W最近的日期是與該月的第一天相同的星期幾
DDD,DD,J
DAY,DY,D星期幾(星期一)的開始
HH,HH12,HH24小時
MI分鐘

3. 時間比較函式

序號函式/方法輸出型別說明/樣式
1datediff(timestamp enddate,startdate)int返回endDate比startDate多多少天
2int_months_between(timestamp t1,t2)int返回兩個日期相差的整數月份個數
3months_between(timestamp t1,t2)double返回浮點數的月數相差的數
4date_cmp(DATE date1, DATE date2)int比較是否相等,返回-1,0,1,null四種數值
5timestamp_cmp(timestamp t1,timestamp t2)int比較是否相等,返回-1,0,1,null四種數值

4. 時間格式轉換函式

序號函式/方法輸出型別說明/樣式
1to_date(timestamp date)string返回時間戳對應的date
2to_timestamp(bigint unixtime)timestamp返回整數對應的timestamp值
3to_timestamp(string date,string pattern)timestamp返回字串對應的timestamp值
4to_utc_timestamp(timestamp t,string timezone)timestamp指定時區的時間戳轉化為UTC時區的時間戳
5from_timestamp(timestamp t,string pattern)string把timestamp按照pattern進行格式化
6from_timestamp(string date,string pattern)string把date按照pattern進行格式化
7from_unixtime(bigint unixtime)string把時間戳秒數轉化為本地地區中的字串
8from_unixtime(bigint unixtime,string pattern)string時間戳轉化為本地時區字串,pattern格式
9from_utc_timestamp(timestamp t,string timezone)timestampUTC時區指定時間戳轉化為指定時區時間戳
10unix_timestamp(string datetime)bigint把string型別的date或日期轉化成時間戳Unix
11unix_timestamp(timestamp datetime)bigint把string型別的timestamp轉化成時間戳Unix
12unix_timestamp(string datetime,string pattern)bigint日期按pattern轉化成時間戳Unix

5. 時間計算函式

序號函式/方法輸出型別說明/樣式
1years_add(timestamp/date date, int/bigint years)timestamp/date增加指定年數
2years_sub(timestamp/date date, int/bigint years)timestamp/date減少指定年數
3months_add(timestamp/date date, int/bigint months)timestamp/date增加指定月數
4months_sub(timestamp/date date, int/bigint months)timestamp/date減少指定月數
5add_months(timestamp/date date, int/bigint months)timestamp/date增加指定月數
6weeks_add(timestamp/date date, int/bigint weeks)timestamp/date增加指定週數
7weeks_sub(timestamp/date date, int/bigint weeks)timestamp/date減少指定週數
8days_add(timestamp/date startdate, int/bigint days)timestamp/date增加指定天數
9days_sub(timestamp/date startdate, int/bigint days)timestamp/date減少指定天數
10date_add(timestamp/date startdate, int/bigint days)timestamp/date增加指定天數
11date_sub(timestamp/date startdate, int/bigint days)timestamp/date減少指定天數
12adddate(timestamp/date startdate, int/int days)timestamp/date增加指定天數
13subdate(timestamp/date startdate,bigint/int days)timestamp/date減少指定天數
14hours_add(timestamp date, int/bigint hours)timestamp增加指定小時
15hours_sub(timestamp date, int/bigint hours)timestamp減少指定小時
16minutes_add(timestamp date, int/bigint minutes)timestamp增加指定分鐘
17minutes_sub(timestamp date, int/bigint minutes)timestamp減少指定分鐘
18seconds_add(timestamp date, int/bigint seconds)timestamp增加指定秒數
19seconds_sub(timestamp date, int/bigint seconds)timestamp減少指定秒數
20milliseconds_add(timestamp t, int/bigint s)timestamp增加指定毫秒數
21milliseconds_sub(timestamp t, int/bigint s)timestamp減少指定毫秒數
22microseconds_add(timestamp t, int/bigint s)timestamp增加指定微秒數
23microseconds_sub(timestamp t, int/bigint s)timestamp減少指定微秒數
24nanoseconds_add(timestamp t, int/bigint s)timestamp增加指定納秒數
25nanoseconds_sub(timestamp t, int/bigint s)timestamp減少指定納秒數
26date_add(timestamp/date startdate, interval_expression)timestamp/date使用引數計算日期增量值(增加)
27date_sub(timestamp/date startdate, interval_expression)timestamp/date使用引數計算日期增量值(減少)

Redis

啟動類

key

命令功能說明
keys  *檢視當前庫的所有鍵
exists判斷某個鍵是否存在
type檢視鍵的型別
del刪除某個鍵
expire為鍵值設定過期時間,單位秒
ttl檢視還有多久過期,-1表示永不過期,-2表示已過期
dbsize檢視當前資料庫中key的數量
flushdb清空當前庫
Flushall通殺全部庫

String

命令功能說明
get查詢對應鍵值
set新增鍵值對
append將給定的追加到原值的末尾
strlen獲取值的長度
setnx只有在key 不存在時設定key的值
incr將key中儲存的數字值增1只能對數字值操作,如果為空,新增值為1
decr將key中儲存的數字值減1只能對數字之操作,如果為空,新增值為-1
incrby /decrby  步長將key中儲存的數字值增減,自定義步長
mset同時設定一個或多個key-value對
mget同時獲取一個或多個value
msetnx同時設定一個或多個key-value對,當且僅當所有給定的key都不存在
getrange  <起始位置> <結束位置>獲得值的範圍,類似java中的substring
setrange  <起始位置>用覆蓋所儲存的字串值,從<起始位置>開始
setex  <過期時間>設定鍵值的同時,設定過去時間,單位秒
getset以新換舊,設定了新值的同時獲取舊值

List

命令功能說明
lpush/rpush從左邊/右邊插入一個或多個值。
lpop/rpop從左邊/右邊吐出一個值。值在鍵在,值光鍵亡。
rpoplpush從列表右邊吐出一個值,插到列表左邊
lrange按照索引下標獲得元素(從左到右)
lindex按照索引下標獲得元素(從左到右)
llen獲得列表長度
linsert   before在的後面插入 插入值
lrem從左邊刪除n個value(從左到右)

Set

命令功能說明
sadd      ....將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略。
smembers取出該集合的所有值。
sismember判斷集合是否為含有該值,有返回1,沒有返回0
scard返回該集合的元素個數。
srem    ....刪除集合中的某個元素。
spop隨機從該集合中吐出一個值。
srandmember隨機從該集合中取出n個值。不會從集合中刪除
sinter返回兩個集合的交集元素。
sunion返回兩個集合的並集元素。
sdiff返回兩個集合的差集元素。

Hash

命令功能說明
hset給集合中的  鍵賦值
hget從集合 取出 value
hmset      ...批次設定hash的值
hexists key檢視雜湊表 key 中,給定域 field 是否存在。
hkeys列出該hash集合的所有field
hvals列出該hash集合的所有value
hincrby為雜湊表 key 中的域 field 的值加上增量 increment
hsetnx將雜湊表 key 中的域 field 的值設定為 value ,當且僅當域 field 不存在

zset(Sorted set)

命令功能說明
zadd       ...將一個或多個 member 元素及其 score 值加入到有序集 key 當中
zrange      [WITHSCORES]返回有序集 key 中,下標在 之間的元素帶WITHSCORES,可以讓分數一起和值返回到結果集。
zrangebyscore key min max [withscores] [limit offset count]返回有序集 key 中,所有 score 值介於 min 和 max 之間(包括等於 min 或 max )的成員。有序整合員按 score 值遞增(從小到大)次序排列。
zrevrangebyscore key max min [withscores] [limit offset count]同上,改為從大到小排列。
zincrby為元素的score加上增量
zrem刪除該集合下,指定值的元素
zcount統計該集合,分數區間內的元素個數
zrank返回該值在集合中的排名,從0開始。

Flink

啟動

./start-cluster.sh

run

./bin/flink run [OPTIONS]

./bin/flink run -m yarn-cluster -c com.wang.flink.WordCount /opt/app/WordCount.jar
OPTIONS功能說明
-ddetached 是否使用分離模式
-mjobmanager 指定提交的jobmanager
-yat–yarnapplicationType 設定yarn應用的型別
-yD使用給定屬性的值
-yd–yarndetached 使用yarn分離模式
-yh–yarnhelp yarn session的幫助
-yid–yarnapplicationId 掛到正在執行的yarnsession上
-yj–yarnjar Flink jar檔案的路徑
-yjm–yarnjobManagerMemory jobmanager的記憶體(單位M)
-ynl–yarnnodeLabel 指定 YARN 應用程式 YARN 節點標籤
-ynm–yarnname 自定義yarn應用名稱
-yq–yarnquery 顯示yarn的可用資源
-yqu–yarnqueue 指定yarn佇列
-ys–yarnslots 指定每個taskmanager的slots數
-ytyarnship 在指定目錄中傳輸檔案
-ytm–yarntaskManagerMemory 每個taskmanager的記憶體
-yz–yarnzookeeperNamespace 用來建立ha的zk子路徑的名稱空間
-z–zookeeperNamespace 用來建立ha的zk子路徑的名稱空間
-p並行度
-yn需要分配的YARN容器個數(=工作管理員的數量)

info

./bin/flink info [OPTIONS]
OPTIONS功能說明
-c程式進入點,主類
-p並行度

list

./bin/flink list [OPTIONS]
OPTIONS功能說明
-a–all 顯示所有應用和對應的job id
-r–running 顯示正在執行的應用和job id
-s–scheduled 顯示排程的應用和job id
-m–jobmanager 指定連線的jobmanager
-yid–yarnapplicationId 掛到指定的yarn id對應的yarn session上
-z–zookeeperNamespace 用來建立ha的zk子路徑的名稱空間

stop

./bin/flink stop  [OPTIONS] <Job ID>
OPTIONS功能說明
-d在採取儲存點和停止管道之前,傳送MAX_WATERMARK
-psavepointPath 儲存點的路徑 'xxxxx'
-m–jobmanager 指定連線的jobmanager
-yid–yarnapplicationId 掛到指定的yarn id對應的yarn session上
-z–zookeeperNamespace 用來建立ha的zk子路徑的名稱空間

cancel(弱化)

./bin/flink cancel  [OPTIONS] <Job ID>
OPTIONS功能說明
-s使用 "stop "代替
-D允許指定多個通用配置選項
-m要連線的JobManager的地址
-yid–yarnapplicationId 掛到指定的yarn id對應的yarn session上
-z–zookeeperNamespace 用來建立ha的zk子路徑的名稱空間

savepoint

./bin/flink savepoint  [OPTIONS] <Job ID>
OPTIONS功能說明
-d要處理的儲存點的路徑
-jFlink程式的JAR檔案
-m要連線的JobManager的地址
-yid–yarnapplicationId 掛到指定的yarn id對應的yarn session上
-z–zookeeperNamespace 用來建立ha的zk子路徑的名稱空間


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2927527/,如需轉載,請註明出處,否則將追究法律責任。

相關文章