Impala Shell 簡單命令
阿新 • • 發佈:2018-11-21
目錄
5.-p或者--show-profiles:顯示查詢的執行計劃(與EXPLAIN語句輸出相同)和每個查詢語句底層的執行步驟的詳細資訊.
1.更新元資料
invalidate metadata;
對於通過Hive載入,插入,改變的資料操作,或者通過hdfs命令對資料檔案進行的變更操作,
Impala都無法自動識別資料的變更情況.如果想讓Impala識別到這些變化,
在連線到impala-shell後,首先要做的操作就是REFRESH table_name,該語句會讓lmpala識別到資料的變更情況.
2.對查詢結果去格式化
> impala-shell -B
3.查詢結果儲存到檔案
- 使用 -o 將查詢結果儲存到txt檔案中後會提示編碼問題,如下
[[email protected] ~]$ impala-shell -o 0502.txt -q ' select * from sina_weibo limit 1;' Starting Impala Shell without Kerberos authentication Connected to test101:21000 Server version: impalad version 2.11.0-cdh5.14.0 RELEASE (build d68206561bce6b26762d62c01a78e6cd27aa7690) Query: select * from sina_weibo limit 1 Query submitted at: 2018-05-02 17:19:30 (Coordinator: http://test101:25000) Query progress can be monitored at: http://test101:25000/query_plan?query_id=2e4528016c46ebfa:4ce8e72a00000000 Unknown Exception : 'ascii' codec can't encode characters in position 1834-1835: ordinal not in range(128) Could not execute command: select * from sina_weibo limit 1
- 解決方案
1. 查詢我們執行的impala-shell具體內容
[[email protected] impala]# whereis impala-shell
impala-shell: /usr/bin/impala-shell
[[email protected] impala]# vim /usr/bin/impala-shell
2. 我們發現impala-shell會執行 impala_shell.py
PYTHONPATH="${EGG_PATH}${SHELL_HOME}/gen-py:${SHELL_HOME}/lib:${PYTHONPATH}" \
exec python ${SHELL_HOME}/impala_shell.py "[email protected]"
3. 查詢impala_shell.py ,設定編碼為utf-8
[[email protected] impala]# find / -name 'impala_shell.py'
/opt/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/impala-shell/impala_shell.py
> import sys
> reload(sys)
> sys.setdefaultencoding('utf-8')
4. 再次執行結果出來
4.去格式化後指定分隔符
--output delimiter-:該選項對使用-B選項去格式化輸出的查詢結果指定各欄位間的分,隔符.預設的分隔符為製表鍵('\t'),如果輸出欄位中包含了分隔符字元,這個欄位將使用/進行 轉義.
[test101:21000] > select uid,gender,city from offline_user2 limit 5;
Query: select uid,gender,city from offline_user2 limit 5
Query submitted at: 2018-05-04 20:23:52 (Coordinator: http://test101:25000)
Query progress can be monitored at: http://test101:25000/query_plan?query_id=254620554e7f3de7:3b47e8e600000000
5887898482,女,海口
6013580396,男,NULL
3485070663,男,NULL
6081748563,男,深圳
5903926726,男,商丘
Fetched 5 row(s) in 0.19s
5.-p或者--show-profiles:顯示查詢的執行計劃(與EXPLAIN語句輸出相同)和每個查詢語句底層的執行步驟的詳細資訊.
6.指定主機名連線 (-i)
-i或者-imapad-:後面接主機名用來指定連線到指定的impalad節點.
預設的連線埠為21000,我們可以使用該命令連線到叢集中任何一臺impalad節點上.
如果Impala啟動時使用了備用埠,則需要使用--fe-port選項標識.
7.執行查詢語句
-q或者-query-:該選項用於執行一個查詢語句或者shell命令.
Impala不必等待查詢或者shell執行結束即可返回.這裡的查詢僅限於像SELECT, CREATE TABLE, SHOW TABLES等單條的語句.
因為USE語句是一條單獨的SQL語句,而這個選項只能指定單條語句,
所以如果物件沒有字首只能訪問default資料庫,如果要訪問其他資料庫就必須指定資料庫名稱作為字首.
8.指定指令碼檔案執行SQL
-f或者-query-file-:這個選項後面可以跟一個SQL查詢指令碼檔案,
指令碼檔案中的SQL必須使用";"來分隔.
> cat query.sql
use default;
select from student;
select mf, count (*) from student group by mf;
> impala-shell -f query.sql
9.-r或者--refresh_after_connect
連線後重新整理Impala元資料資訊.效果和連線之後執行REFRESH語句相同.
10 -k或者-kerberos
該選項用來指定當shell連線到impalad節點時使用kerberos身份驗證.但是如果impalad節點本身沒有啟用kerberos,連線將會報錯.
11.-s或者-kerberos_service_name
該選項後面跟kerberos服務名稱讓impala-shell驗證一個特定的impalad服務.如果沒有指定kerberos服務名稱,將使用impala作為預設的名稱.如果
該選項用於一個不支援kerberos的連線,將會返回錯誤.
12.-V或者-verbose
啟用詳細資訊輸出.
13.-quiet
禁用詳細資訊輸出.
14.-v或者-version
顯示版本資訊.
15.-c:
如果查詢失敗繼續執行.
16.-d或者--database-
該選項後面跟上資料庫的名稱用於連線到指定的資料庫.該選項的效果和連線上之後執行USE的效果相同.如果不指定該選項,將連線到系統預設的default資料庫.
17.表的統計分析
[test03:21000] namespace1> show table stats tableName;
Query: show table stats tableName
+-----------------+----------------------------------+------------+----------+
| Region Location | Start RowKey | Est. #Rows | Size |
+-----------------+----------------------------------+------------+----------+
| test01 | | 1290769 | 833.00MB |
| test01 | 3c9f93135954c1c22bba09a549b9db4d | 1288975 | 904.00MB |
| test02 | 7ff81356e5d100ca91cda300bd4b11ed | 1191259 | 890.00MB |
| test03 | c1c3ace151cad4ebb62f55d952b17d83 | 1183541 | 855.00MB |
| Total | | 4954544 | 3.40GB |
+-----------------+----------------------------------+------------+----------+
Fetched 5 row(s) in 0.57s
18.欄位的統計分析