「從零單排canal 01」 canal 10分鐘入門(基於1.1.4版本)

1.簡介

canal [kə’næl],譯意為水道/管道/溝渠,主要用途是基於 MySQL 數據庫增量日誌解析,提供增量數據 訂閱 和 消費。應該是阿里雲DTS(Data Transfer Service)的開源版本。

2.提供的能力

Canal與DTS提供的功能基本相似:

1)基於Mysql的Slave協議實時dump binlog流,解析為事件發送給訂閱方。

2)單Canal instance,單DTS數據訂閱通道均只支持訂閱一個RDS,提供給一個消費者。

3)可以使用canal-client客戶端進行消息消費。

4)也可以通過簡單配置,也可以不需要自行使用canal-client消費,可以選擇直接投遞到kafka或者RocketMQ集群,用戶只需要使用消息隊列的consumer消費即可。

5)成功消費消息后需要進行Ack,以確保一致性,服務端則會維護客戶端目前的消費位點。

3.工作原理

MySQL的主從複製分成三步:

  • master將改變記錄到二進制日誌(binary log)中(這些記錄叫做二進制日誌事件,binary log events,可以通過show binlog events進行查看);
  • slave將master的binary log events拷貝到它的中繼日誌(relay log);
  • slave重做中繼日誌中的事件,將改變反映它自己的數據。

 

canal 就是模擬了這個過程。

  • canal模擬 MySQL slave 的交互協議,偽裝自己為 MySQL slave ,向 MySQL master 發送 dump 協議;
  • MySQL master 收到 dump 請求,開始推送 binary log 給 slave (即 canal );
  • canal 解析 binary log 對象(原始為 byte 流);

 

4. canal 架構

4.1 admin版本整體架構

canal 1.1.4開始支持admin管理,通過canal-admin為canal提供整體配置管理、節點運維等面向運維的功能,提供相對友好的WebUI操作界面,方便更多用戶快速和安全的操作,替代了過去繁瑣的配置文件管理。

整體部署架構如下。

 

  • 多個canal-server可以組成集群模式,每個instance任務通過zookeeper在集群中實現高可用
  • 通過多個集群,可以實現同步資源的物理隔離
  • 可以直接抓取消費投遞MQ,可以實現生產/消費解耦、消息堆積、消息回溯
  • 可以抓取消費投遞給canal-client,在用戶的服務中進行消息處理,減少中間過程

4.2 canal-server架構

 

說明:

  • server代表一個canal-server運行實例,對應於一個jvm
  • instance對應於一個數據隊列,是真正的變更抓取的實體 (1個server可以對應多個instance)

Instance模塊

  • EventParser :數據源接入,模擬slave協議和master進行交互,協議解析
  • EventSink :Parser和Store鏈接器,進行數據過濾,加工,分發的工作
  • EventStore :數據存儲
  • MetaManager:增量訂閱&消費信息管理器

1)EventParser子模塊

EventParser模塊的類圖設計如下

 

每個EventParser都會關聯兩個內部組件:CanalLogPositionManager , CanalHAController

  • CanalLogPositionManager:記錄binlog最後一次解析成功位置信息,主要是描述下一次canal啟動的位點
  • CanalHAController:支持Mysql主備,判斷當前該連哪個mysql(基於Heartbeat實現,主庫失去心跳則連備庫)

EventParser根據HAController獲知連到哪裡,通過LogPositionManager獲知從哪個位點開始解析,之後便通過Mysql Slave協議拉取binlog進行解析,推入EventSink

2)EventSink子模塊

目前只提供了一個帶有實際作用的實現:GroupEventSink

GroupEventSink用於將多個instance上的數據進行歸併,常用於分庫后的多數據源歸併。

3)EventStore子模塊

EventStore的類圖如下

 

官方提供的實現類是
MemoryEventStoreWIthBuffer,內部採用的是一個RingBuffer:

 

  • Put : Sink模塊進行數據存儲的最後一次寫入位置
  • Get : 數據訂閱獲取的最後一次提取位置
  • Ack : 數據消費成功的最後一次消費位置

這些位點信息通過MetaManager進行管理。這也解釋了為什麼一個canal instance只能支撐一個消費者:EventStore的RingBuffer只為一個消費者維護信息。

4.3 客戶端使用

數據格式已經在前文給出,Canal和DTS客戶端均採取:

拉取事件 -> 消費 -> 消費成功后ACK

這樣的消費模式,並支持消費不成功時進行rollback,重新消費該數據。

下面是一段簡單的客戶端調用實例(略去異常處理):

// 創建CanalConnector, 連接到localhost:11111

CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(AddressUtils.getHostIp(),11111), destination, "", "");

connector.connect(); // 連接

connector.subscribe(); // 開始訂閱binlog

// 開始循環拉取

while (running) {

Message message = connector.getWithoutAck(1024); // 獲取指定數量的數據

long batchId = message.getId();

for (Entry entry : message.getEntries()){

// 對每條消息進行處理

}

connector.ack(batchId); // ack

}

5.總結分析

5.1 優點

1)性能優異、功能全面

  • canal 1.1.x 版本(release_note),性能與功能層面有較大的突破,重要提升包括:
  • 整體性能測試&優化,提升了150%. #726
  • 原生支持prometheus監控 #765
  • 原生支持kafka消息投遞 #695
  • 原生支持aliyun rds的binlog訂閱 (解決自動主備切換/oss binlog離線解析) (無法拒絕它的理由!)
  • 原生支持docker鏡像 #801

2)運維方便

  • canal 1.1.4版本,迎來最重要的WebUI能力,引入canal-admin工程,支持面向WebUI的canal動態管理能力,支持配置、任務、日誌等在線白屏運維能力
  • Standalone的一體化解決方案,無外部服務依賴,運維更簡單,在某種程度上也意味着更穩定。
  • 開箱即用,節約開發與定製成本。
  • 有良好的管理控制平台與監控系統(如果你已經有promethus監控,可以秒接canal監控)

3)多語言支持

  • canal 特別設計了 client-server 模式,交互協議使用 protobuf 3.0 , client 端可採用不同語言實現不同的消費邏輯
  • canal 作為 MySQL binlog 增量獲取和解析工具,可將變更記錄投遞到 MQ 系統中,比如 Kafka/RocketMQ,可以藉助於 MQ 的多語言能力

5.2 缺點

  • 單instance/訂閱通道只支持訂閱單個數據庫,並只能支持單客戶端消費。每當我們需要新增一個消費端->MySQL的訂閱:對於Canal而言,就要給MySQL接一個“Slave”,可能會對主庫有一定影響。
  • 消息的Schema很弱,所有消息的Schema均相同,客戶端需要提前知道各個表消息的Schema與各字段的上下文才能正確消費。

好了,花了10分鐘應該對canal有大致了解了,下一期,阿丸計劃手把手教你搭建canal集群和admin管理平台,記得關注哦。

 

都看到最後了,原創不易,點個關注,點個贊吧~

知識碎片重新梳理,構建Java知識圖譜: github.com/saigu/JavaK…(歷史文章查閱非常方便)

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※推薦台中搬家公司優質服務,可到府估價

Shell中傻傻分不清楚的TOP3

Shell中傻傻分不清楚的TOP3
發布文章

近來小姐姐又犯憨憨錯誤,問組內小夥伴export命令不會持久化環境變量嗎?反正我是問出口了。。然後小夥伴就甩給了我一個《The Linux Command Line》PDF鏈接。感謝老大不殺之恩~

Shell是命令解釋器,它會接受用戶輸入的各種命令,並傳遞給操作系統執行。它的作用類似於Windows系統的命令行。在UNIX或Linux系統中,Shell即是用戶交互的界面,也是控制系統的腳本語言。當然現在用戶也可以選擇圖形化界面做一些和操作系統的交互。層次示意圖如下:

對於初學者來說,可能搞不清楚Shell怎麼會有那麼多分類,Shell的語法怎麼那麼隨便…

小姐姐結合自己初學Shell傻傻分不清的問題點,主要從Shell的種類,變量的分類,條件測試的表達三個部分來介紹。

Shell的種類

shell程序有shbash,zsh等分類,我從網上找到一張圖可以看出shell程序的發展史。

對於這些Shell程序,其語法或多或少有一些差異,不過我們通常使用的都是bash。

  • Shell程序信息

在Linux系統我們可以通過一些命令查看或修改當前Shell程序信息。

一般發行版的Linux系統中,默認的shell程序就是bash。我們在寫shell腳本時,通常也會在腳本文件頭部指定bash作為腳本解釋器。

這裏多說一句,zsh有時也作為猿媛們的默認shell。zsh語法大多是和bash匹配的,也不會影響shell腳本的執行(因為腳本頭部指定bash就還是bash:),也不會影響像小姐姐這樣的渣渣使用。用它是因為它有神奇的開源框架 Oh My God.. 哦不,是 Oh My Zsh !!!

後面的內容我們還是以Linux系統中的bash為例來介紹:)

變量的分類

Shell是一門動態類型語言和弱類型語言,我們可以把變量理解為KV對,key是變量名,value是變量值。變量大體可以分為環境變量系統變量用戶定義的變量三類。

  • 環境變量

比如我們經常配置的JAVA_HOME就屬於環境變量,這些變量是所有Shell程序運行時都可以使用的變量。關於環境變量的操作命令舉例如下:

使用export命令定義的環境變量只在當前運行的shell進程中有效,結束進程就沒了。所以我們要將配置變量定義在令小姐姐懵逼的一系列配置文件中,持久化下來。

說起配置文件,又不得不先提下shell程序和用戶的Interactive和Login模式:)

  • Interactive & Non-Interactive`

Interactive通常是指讀入寫出數據都是從用戶的terminal,也就是我們平時用命令行打開終端就是Interactive模式,而執行一個shell腳本就是Non-interactive模式。怎麼檢驗當前shell運行的模式是不是Interactive呢?小姐姐從GNU網站拷貝了一段裝X腳本:

case "$-" in
*i*)	echo This shell is interactive ;;
*)	echo This shell is not interactive ;;
esac

結果如上所述。

  • Login & Non-Login`

Login模式指的是用戶成功登錄后開啟的shell進程,這時候會讀取/etc/passwd下用戶所屬的shell去執行。

Non-login模式指的是非登錄用戶狀態下開啟的shell進程,我們可以通過echo $0區分。

扯這麼多是因為配置文件的加載順序和shell進程是否運行在Interactive和Login模式有關係:D

這是阿姨從網上粘的圖。bash支持的配置文件有/etc/profile,~/.bashrc等。

當調用一個Interactive&Login模式的shell進程時,配置文件的加載順序為:

/etc/profile —>( ~/.bash_profile, ~/.bash_login, ~/.profile)其中之一 —>~/.bash_loginout(退出shell時調用)

當調用一個Interactive&non-Login模式的shell進程時,配置文件的加載順序為:

/etc/bash.bashrc —> ~/.bashrc
當調用一個non-nteractive模式的shell進程時,通常是執行腳本時,此時配置項是從環境變量中讀取和執行的,也就是env命令輸出的配置項。

另外,在開啟一個shell進程中,有一些參數的值也會影響到配置文件的加載。如–rcfile ,–norc等。這些參數的含義值可以使用 man bash進一步了解。只要保持默認值,其實就是我們上面介紹的配置文件加載順序。

還有,在發行版的Linux系統中,Interactive&Login模式下的~/.bash_profile,
~/.bash_login, ~/.profile並不一定是三選一,看一下這三個腳本的內容會發現他們會繼續調用下一個它想調用的配置文件,這樣就可以避免配置項可能需要在不同的配置文件多次配置的弊端了。如centos7.2 中 ~/.bash_profile文件中實際調用了 ~/.bashrc文件。

按照模式和參數設置啟動的shell程序的配置文件加載流程圖如下:

好了,到目前我們總算把環境變量中配置文件的加載順序理清了。下面列舉一些常用的Shell環境變量吧。

  • 系統變量
    Shell中系統變量主要在對參數判斷和命令返回值判斷時使用,包括腳本和函數的參數和返回值判斷。沒啥可說的,主要難記且腳本中經常出現:

  • 用戶自定義的變量
    是指我們在使用命令或腳本時定義的變量,因為shell是弱類型語言且語法XX,這裏主要談談初學時的幾個坑爹點:

  • “=” 左右兩邊不能有空格

    你懂我說的意思了吧。。

  • 引用
    所謂引用,指的是將字符串用引用符號包括起來,以防止其中的特殊符號被Shell解釋為其他涵義。

常用的引用符號如下:

  • $

前面我們其實一直在用 “ $變量名 ” 來表示某個 變量名的值,這其實也正是 $ 的作用。

  • shell中變量名的大小寫是敏感的

好了就這麼多吧。

條件測試的表達

shell腳本中除了變量,還經常出現的語法就是條件測試的判斷。不會寫腳本的開發小姐姐不是好運維,我們來一起侃侃吧。

  • 基本語法

在Shell程序中,當指定的條件為真時,整個條件測試的返回值為 0;反之,如果指定的條件為假時,整個條件測試的返回值為 非0。

條件測試表達式的書寫有test expression[ expression ]兩種形式,注意後者的空格一定不能省!!

腳本中經常出現的有字符串測試、整數測試、文件測試、邏輯操作符測試。我們一起看下:)

  • 字符串測試

注意:這裏運算符 左右兩邊又一定要有空格了(下同),這樣shell才能將之當成命令執行。

  • 整數測試

  • 文件測試

邏輯操作符測試

收藏在看轉發起來,小姐姐就算你條件測試過關了>_<

感謝大佬這麼優秀還關注我~

參考資料:
[1].《Shell從入門到精通》
[2].https://www.edureka.co/blog/types-of-shells-in-linux/
[3].http://www.penguintutor.com/linux/basic-shell-reference
[4].https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences-between-bash-and-zsh
[5].https://sunlightmedia.org/bash-vs-zsh/
[6].https://unix.stackexchange.com/questions/439042/debian-read-order-of-bash-session-configuration-files-inconsistent
[7].https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html
[8].http://howtolamp.com/articles/difference-between-login-and-non-login-shell/
[9].https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/

Shell中傻傻分不清楚的TOP3
同步滾動:

近來小姐姐又犯憨憨錯誤,問組內小夥伴export命令不會持久化環境變量嗎?反正我是問出口了。。然後小夥伴就甩給了我一個《The Linux Command Line》PDF鏈接。感謝老大不殺之恩~

Shell是命令解釋器,它會接受用戶輸入的各種命令,並傳遞給操作系統執行。它的作用類似於Windows系統的命令行。在UNIX或Linux系統中,Shell即是用戶交互的界面,也是控制系統的腳本語言。當然現在用戶也可以選擇圖形化界面做一些和操作系統的交互。層次示意圖如下:

對於初學者來說,可能搞不清楚Shell怎麼會有那麼多分類,Shell的語法怎麼那麼隨便…

小姐姐結合自己初學Shell傻傻分不清的問題點,主要從Shell的種類,變量的分類,條件測試的表達三個部分來介紹。

Shell的種類
shell程序有sh,bash,zsh等分類,我從網上找到一張圖可以看出shell程序的發展史。

對於這些Shell程序,其語法或多或少有一些差異,不過我們通常使用的都是bash。
Shell程序信息
在Linux系統我們可以通過一些命令查看或修改當前Shell程序信息。

一般發行版的Linux系統中,默認的shell程序就是bash。我們在寫shell腳本時,通常也會在腳本文件頭部指定bash作為腳本解釋器。

這裏多說一句,zsh有時也作為猿媛們的默認shell。zsh語法大多是和bash匹配的,也不會影響shell腳本的執行(因為腳本頭部指定bash就還是bash:),也不會影響像小姐姐這樣的渣渣使用。用它是因為它有神奇的開源框架 Oh My God.. 哦不,是 Oh My Zsh !!!

後面的內容我們還是以Linux系統中的bash為例來介紹:)

變量的分類
Shell是一門動態類型語言和弱類型語言,我們可以把變量理解為KV對,key是變量名,value是變量值。變量大體可以分為環境變量,系統變量,用戶定義的變量三類。

環境變量
比如我們經常配置的JAVA_HOME就屬於環境變量,這些變量是所有Shell程序運行時都可以使用的變量。關於環境變量的操作命令舉例如下:

使用export命令定義的環境變量只在當前運行的shell進程中有效,結束進程就沒了。所以我們要將配置變量定義在令小姐姐懵逼的一系列配置文件中,持久化下來。

說起配置文件,又不得不先提下shell程序和用戶的Interactive和Login模式:)

Interactive & Non-Interactive`
Interactive通常是指讀入寫出數據都是從用戶的terminal,也就是我們平時用命令行打開終端就是Interactive模式,而執行一個shell腳本就是Non-interactive模式。怎麼檢驗當前shell運行的模式是不是Interactive呢?小姐姐從GNU網站拷貝了一段裝X腳本:

case “$-” in
i) echo This shell is interactive ;;
*) echo This shell is not interactive ;;
esac
結果如上所述。

Login & Non-Login`
Login模式指的是用戶成功登錄后開啟的shell進程,這時候會讀取/etc/passwd下用戶所屬的shell去執行。

Non-login模式指的是非登錄用戶狀態下開啟的shell進程,我們可以通過echo $0區分。

扯這麼多是因為配置文件的加載順序和shell進程是否運行在Interactive和Login模式有關係:D

這是阿姨從網上粘的圖。bash支持的配置文件有/etc/profile,~/.bashrc等。

當調用一個Interactive&Login模式的shell進程時,配置文件的加載順序為:

/etc/profile —>( ~/.bash_profile, ~/.bash_login, ~/.profile)其中之一 —>~/.bash_loginout(退出shell時調用)

當調用一個Interactive&non-Login模式的shell進程時,配置文件的加載順序為:

/etc/bash.bashrc —>~/.bashrc
當調用一個non-nteractive模式的shell進程時,通常是執行腳本時,此時配置項是從環境變量中讀取和執行的,也就是env命令輸出的配置項。

另外,在開啟一個shell進程中,有一些參數的值也會影響到配置文件的加載。如–rcfile ,–norc等。這些參數的含義值可以使用man bash進一步了解。只要保持默認值,其實就是我們上面介紹的配置文件加載順序。

還有,在發行版的Linux系統中,Interactive&Login模式下的~/.bash_profile,
~/.bash_login, ~/.profile並不一定是三選一,看一下這三個腳本的內容會發現他們會繼續調用下一個它想調用的配置文件,這樣就可以避免配置項可能需要在不同的配置文件多次配置的弊端了。如centos7.2 中 ~/.bash_profile文件中實際調用了 ~/.bashrc文件。

按照模式和參數設置啟動的shell程序的配置文件加載流程圖如下:

好了,到目前我們總算把環境變量中配置文件的加載順序理清了。下面列舉一些常用的Shell環境變量吧。

系統變量
Shell中系統變量主要在對參數判斷和命令返回值判斷時使用,包括腳本和函數的參數和返回值判斷。沒啥可說的,主要難記且腳本中經常出現:

用戶自定義的變量
是指我們在使用命令或腳本時定義的變量,因為shell是弱類型語言且語法XX,這裏主要談談初學時的幾個坑爹點:

“=” 左右兩邊不能有空格

你懂我說的意思了吧。。

引用
所謂引用,指的是將字符串用引用符號包括起來,以防止其中的特殊符號被Shell解釋為其他涵義。

常用的引用符號如下:

$
前面我們其實一直在用 “ 變量名 ” 來表示某個 變量名的值,這其實也正是 的作用。

shell中變量名的大小寫是敏感的
好了就這麼多吧。

條件測試的表達
shell腳本中除了變量,還經常出現的語法就是條件測試的判斷。不會寫腳本的開發小姐姐不是好運維,我們來一起侃侃吧。

基本語法
在Shell程序中,當指定的條件為真時,整個條件測試的返回值為 0;反之,如果指定的條件為假時,整個條件測試的返回值為 非0。

條件測試表達式的書寫有test expression 和 [ expression ]兩種形式,注意後者的空格一定不能省!!

腳本中經常出現的有字符串測試、整數測試、文件測試、邏輯操作符測試。我們一起看下:)

字符串測試

注意:這裏運算符 左右兩邊又一定要有空格了(下同),這樣shell才能將之當成命令執行。

整數測試

文件測試

邏輯操作符測試

收藏在看轉發起來,小姐姐就算你條件測試過關了>_<

感謝大佬這麼優秀還關注我~

參考資料:
[1].《Shell從入門到精通》
[2].https://www.edureka.co/blog/types-of-shells-in-linux/
[3].http://www.penguintutor.com/linux/basic-shell-reference
[4].https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences-between-bash-and-zsh
[5].https://sunlightmedia.org/bash-vs-zsh/
[6].https://unix.stackexchange.com/questions/439042/debian-read-order-of-bash-session-configuration-files-inconsistent
[7].https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html
[8].http://howtolamp.com/articles/difference-between-login-and-non-login-shell/
[9].https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※超省錢租車方案

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

※推薦台中搬家公司優質服務,可到府估價

Hive的基本介紹以及常用函數

一、Hive的簡介:

  Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張表,並提供類SQL查詢功能。

優點:

1) 操作接口採用類SQL語法,提供快速開發的能力(簡單、容易上手)。

2) 避免了去寫MapReduce,減少開發人員的學習成本。

3) Hive的執行延遲比較高,因此Hive常用於數據分析,對實時性要求不高的場合。

4) Hive優勢在於處理大數據,對於處理小數據沒有優勢,因為Hive的執行延遲比較高。

5) Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。

缺點:

1)Hive的HQL表達能力有限
2)Hive的效率比較低

 

二、Hive的架構圖

          

三、Hive的數據類型

基本數據類型:
  Hive數據類型    Java數據類型 
  TINYINT       byte    
  SMALINT       short    
  INT            int    
  BIGINT       long    
  BOOLEAN       boolean  
  FLOAT        float    
  DOUBLE        double    
  STRING         string   
  TIMESTAMP      時間類型    
  BINARY         字節數組    
集合
  STRUCT  和c語言中的struct類似,都可以通過“點”符號訪問元素內容。例如,如果某個列的數據類型是STRUCT{first STRING, last STRING},那麼第1個元素可以通過字段.first來引用。    
      struct() 例如struct<street:string, city:string>   MAP MAP是一組鍵-值對元組集合,使用數組表示法可以訪問數據。例如,如果某個列的數據類型是MAP,其中鍵->值對是’first’->’John’和’last’->’Doe’,那麼可以通過字段名[‘last’]獲取最後一個元素
      map() 例如map
<string, int>   ARRAY 數組是一組具有相同類型和名稱的變量的集合。這些變量稱為數組的元素,每個數組元素都有一個編號,編號從零開始。例如,數組值為[‘John’, ‘Doe’],那麼第2個元素可以通過數組名[1]進行引用。
      Array() 例如array
<string>

 

四、管理表和外部表

  默認創建的表為管理表,有時也被稱為內部表。當我們刪除一個管理表時,Hive也會刪除這個表中數據。管理表不適合和其他工具共享數據。  

  添加關鍵字external創建的表是外部表,所以Hive並非認為其完全擁有這份數據。刪除該表並不會刪除掉這份數據,不過描述表的元數據信息會被刪除掉。

#查詢表的類型
desc formatted stu;
#修改內部表stu為外部表
alter table stuset tblproperties('EXTERNAL'='TRUE');
#修改外部表stu為內部表
alter table stuset tblproperties('EXTERNAL'='FALSE');
注意:('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')為固定寫法,區分大小寫!

清空表數據:

 管理表:truncate table stu;

 外部表:alter table stuset tblproperties(‘EXTERNAL’=’FALSE’); 先改成內部表再執行清空:truncate table stu;

  場景:每天將收集到的網站日誌定期流入HDFS文本文件。在外部表(原始日誌表)的基礎上做大量的統計分析,用到的中間表、結果表使用內部表存儲,數據通過SELECT+INSERT進入內部表。

 

五、查詢常用函數

1,空字段賦值

  NVL( value,default_value)

2,when

  case 字段 when 值 then 替換值 else 替換值 end 同 if(boolean,值,另外值)

3,行轉列

CONCAT(string A/col, string B/col…):返回輸入字符串連接后的結果,支持任意個輸入字符串; 
CONCAT_WS(separator, str1, str2,...):它是一個特殊形式的 CONCAT()。第一個參數剩餘參數間的分隔符。分隔符可以是與剩餘參數一樣的字符串。如果分隔符是 NULL,返回值也將為 NULL。這個函數會跳過分隔符參數后的任何 NULL 和空字符串。分隔符將被加到被連接的字符串之間;
COLLECT_SET(col):函數只接受基本數據類型,它的主要作用是將某字段的值進行去重匯總,產生array類型字段。

4,列轉行

EXPLODE(col):將hive一列中複雜的array或者map結構拆分成多行。
LATERAL VIEW
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解釋:用於和split, explode等UDTF一起使用,它能夠將一列數據拆成多行數據,在此基礎上可以對拆分后的數據進行聚合。

5,窗口函數

OVER():指定分析函數工作的數據窗口大小,這個數據窗口大小可能會隨着行的變而變化。
CURRENT ROW:當前行
n PRECEDING:往前n行數據
n FOLLOWING:往後n行數據
UNBOUNDED:起點,UNBOUNDED PRECEDING 表示從前面的起點, UNBOUNDED FOLLOWING表示到後面的終點
LAG(col,n,default_val):往前第n行數據
LEAD(col,n, default_val):往後第n行數據
NTILE(n):把有序分區中的行分發到指定數據的組中,各個組有編號,編號從1開始,對於每一行,NTILE返回此行所屬的組的編號。注意:n必須為int類型。

6,Rank

RANK() 排序相同時會重複,總數不會變
DENSE_RANK() 排序相同時會重複,總數會減少
ROW_NUMBER() 會根據順序計算

7,時間

#均只適合yyyy-MM-dd HH:mm:ss格式的時間,當然時分秒可以省略
date_format:格式化時間select date_format('2020-06-04','yyyy-MM');2020-06
date_add:   時間跟天數相加select date_add('2020-06-04',5);2020-06-09
date_sub:   時間跟天數相減select date_sub('2020-06-04',5);2020-05-30
datediff:   兩個時間相減select datediff('2020-06-04','2020-05-10');25
year:       獲取年select year('2020-06-04');2020
month:      獲取月份select month('2020-06-04');04
day:        獲取日select day('2020-06-04');04

格式轉換
regexp_replace: 字段,原格式,替換的格式;select regexp_replace('2020/05/04','/','-');2020-05-04

 

 

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※回頭車貨運收費標準

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

波札那數百頭大象離奇死亡 查明是藍綠藻毒素作祟

摘錄自2020年9月22日中央社報導

非洲國家波札那(Botswana)官員今(21日)說,波札那今年數百頭大象死亡讓環境保護人士感到困惑和震驚,最後發現是由水中細菌藍綠藻(cyanobacteria)產生的毒素引起。

路透社報導,波札那野生動物和國家公園部副主任陶洛(Cyril Taolo)在記者會說,死亡大象的數量已從7月的281頭上升到330頭。

野生動物和國家公園部首席獸醫魯賓(Mmadi Reuben)在記者會表示:「我們的最新檢測發現,藍綠藻神經毒素是造成(大象)死亡的原因。這些是在水中發現的細菌。」

他又說:「(大象)死亡是由藍綠藻造成中毒引起,藍綠藻在窪地或水坑中生長。」另外,大象的死亡「在2020年6月底已經停止,正是窪地枯乾的時候」。

由於盜獵,非洲大象整體數量正在下降,但是波札那大象數量已經增加到約13萬頭,是非洲大陸近1/3大象的家。

生物多樣性
國際新聞
波札那
大象
動物死亡
藍綠藻

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※回頭車貨運收費標準

墨西哥居民死守水壩 不讓政府輸水給美國

摘錄自2020年9月21日中央社報導

群眾今(20日)聚集在乾旱成災的墨西哥北部示威,試圖保住一座位於美墨邊界的水壩控制權。向來致力與美國總統川普維持良好關係的墨西哥總統羅培茲歐布拉多(Andres Manuel Lopez Obrador)18日表示,墨西哥必須善盡義務。

根據1944年的條約,墨西哥必須在5年內把175萬英畝呎(acre-feet)的水輸給美國,墨西哥也會拿到美國科羅拉多河(Colorado River)的水源。

美國德州州長艾波特(Greg Abbott)上週促請國務院協助落實協議。墨西哥還差近一年的水量才能達到條約要求,10月24日前,必須還完近1年量的水債。

但墨西哥民眾拒絕輸水給美國,群眾9月間在與美國新墨西哥州接壤的奇瓦瓦州(Chihuahua)波基亞水壩(La Boquilla dam)附近示威,奪得水壩控制權,但示威期間卻發生濺血事件,一個星期前,一名民眾在示威時遭砲火波及,死在墨西哥國民兵的子彈之下。

墨西哥國家水務委員會(National Water Commission of Mexico)發布的旱情監測顯示,奇瓦瓦州大片地區已有超過6個月出現中度和重度乾旱,鄰州索諾拉(Sonora)與科阿韋拉州(Coahuila)也受乾旱影響。

國際新聞
墨西哥
水壩
輸水
抗議

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

※產品缺大量曝光嗎?你需要的是一流包裝設計!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

逾70頭鯨魚擱淺澳洲海灣沙洲 海洋專家設法救援

摘錄自2020年9月21日中央社報導

澳洲官員今(21日)表示,有超過70頭鯨魚擱淺在澳洲島嶼塔斯馬尼亞的海灣,海洋專家現正動員,評估救援的可能性。

那些鯨魚擱淺在麥夸利港(Macquarie Harbour),據信受困在沙洲上。麥夸利港位於塔斯馬尼亞(Tasmania)地形崎嶇且人煙稀少的西岸地區。

塔斯馬尼亞掌管環境的部門表示,警方已趕赴事發現場,海洋專家也正在評估狀況。

擱淺的鯨魚據信為領航鯨,但實際物種尚未獲得確認。塔斯馬尼亞相對常發生大批鯨魚擱淺事件,然而擱淺鯨魚為數眾多,使救援情況不甚樂觀。

海洋
國際新聞
澳洲
沙洲
鯨魚擱淺

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※推薦台中搬家公司優質服務,可到府估價

空巴發表3款氫動力零碳排概念機 目標2035年問世

摘錄自2020年9月21日中央社巴黎報導

航空業造成的碳排放占全球總量的3%,法國等歐洲國家投資數以10億計歐元發展環保氫,主要希望應用在高度污染的運輸業。歐洲飛機製造商空中巴士(Airbus)21日發表3款以氫氣為動力的零排放概念機,宣示要在2035年前,讓全球第一架氫動力商用客機投入使用。

路透社與美國有線電視新聞網(CNN)報導,空巴零排放概念機計畫ZEROe共包括3款飛機,其中兩款外型較為傳統,包括一款使用渦輪扇噴射發動機的客機,可搭載120至200名乘客,航程超過2000浬(3700公里),另一款則使用渦輪螺旋槳發動機,最多可搭載100名乘客,航程可達1000浬。第3款概念機外型較為前衛,採「翼身融合」(blended wing body)設計,將機身和機翼融為一體,類似2月間發表的機型。

空巴執行長佛喜(Guillaume Faury)表示,脫碳氫燃料的研發是空巴研發的優先軸心。空巴早已在該公司研發的衛星和阿利安火箭(Ariane rocket)上使用了氫氣科技。生產技術仍需大約5年才能成熟,此外,還需再多花2年時間,才能讓供應商和工業場所做好準備,因此可能會在2028年執行這項計畫。

氣候變遷
能源轉型
國際新聞
碳排放量
氫燃料
航空

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

網頁設計最專業,超強功能平台可客製化

政府串通黑手黨 疫情遮掩下 柬埔寨森林的悲傷敘事

環境資訊中心綜合外電;黃鈺婷 翻譯;林大利 審校;稿源:Mongabay

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※超省錢租車方案

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

※推薦台中搬家公司優質服務,可到府估價

IKEA推廣循環經濟 將在27國回購舊家具

摘錄自2020年10月13日中央社報導

瑞典連鎖家具家飾品零售商宜家家居(IKEA)今(13日)表示,將在27國提供回購數以千計舊家具服務,並進行轉售、回收或捐贈給社區計畫。

美聯社報導,宜家家居今天表示,這個從11月24日開始到12月3日為止的黑色星期五活動,將是「藉由為循環經濟做出貢獻,滿足顧客需求的一個機會」。出售宜家家居舊家具的消費者,將能獲得高達原價50%的折價券,用來購買新品。

循環經濟
國際新聞
IKEA
回收
家具

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※回頭車貨運收費標準

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

Redmi K40 / K40 Pro、小米10 新版本外觀認證照曝光

不久前, Redmi K40 終於宣佈將在春節新年後的 2 月 25 日正式發表,近期也有 Redmi K40 系列以及全新處理器更新的小米10 的新機現身中國工信部資料庫提前洩漏外觀照片。 Redmi K40 系列在機身背面設計與之前工程樣機有些不同,尤其主相機設計與小米11 有著相似的設計風格。
另外,傳聞將換上高通 Snapdragon 870 處理器的小米10 系列新機則與小米10 至尊紀念版(小米10 Ultra)設計相似。

▲圖片來源:TENAA

Redmi K40 / K40 Pro、小米10 新版本外觀認證照曝光

除了華為已經確定將在 2 月 22 日發表全新摺疊螢幕手機 Mate X2 ,日前 Redmi K40 也確定在 2 月 25 日發表。這次 Redmi K40 系列價格已確定為人民幣 2,999 元起(約合新台幣 12,912 元起),不過究竟 25 日發表會這天除了 Redmi K40 標準版,是否還會推出 K40 Pro 甚至是 Redmi 品牌首款電競手機,或許也要等到發表當天才能確定。

▲圖片來源:盧偉冰(微博)

不過在這之前, Redmi K40 系列也終於外觀認證照片在有中國工信部曝光。首先是 Redmi K40(型號 M2012K11AC),在螢幕正面採用 120Hz AMOLED 平面的居中挖孔全螢幕,傳聞前置鏡頭開孔口徑僅有 2.8mm ,比目前市面上最小的 2.98mm 還小(預計 2.8mm)。 Redmi K40 主相機模組設計和小米11 有些相似,不過排列方式變得更為「修長」,預計接下來今年 Redmi 未來更多款中階、入門新機也會採用類似的設計和居中挖孔螢幕。

▲圖片來源:TENAA

在機身側邊較大的電源鍵設計,傳聞 Redmi K40 將電源鍵將結合側邊指紋辨識:

▲圖片來源:TENAA

另外一款疑似為 Redmi K40 Pro(型號 M2012K11C),在機身整體的設計幾乎相同,不過在相機規格部分升級為 1.08 億像素主相機:

▲圖片來源:TENAA

另外,傳聞小米接下來除了小米11 系列,還將推出搭載高通 Snapdragon 870 處理器的全新小米10 系列新機,目前機身外觀照片也在中國工信部資料庫曝光。這款改版的小米10 系列新機目前還未確定名稱,不過螢幕採用左上角單挖孔的曲面螢幕,機身背面主相機設計和小米10 至尊紀念版(小米10 Ultra)相同。

▲圖片來源:TENAA

延伸閱讀:
小米MIX系列「可量產」新機確認將在今年即將回歸,另有小米平板也將登場

小米11 國際版正式發表:盒裝標配 55W GaN 氮化鎵充電器、售價約 25,150 元

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※別再煩惱如何寫文案,掌握八大原則!

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※回頭車貨運收費標準

台中搬家公司費用怎麼算?