impala-shell
不得不說這個東西真的是不用習慣,感覺還是個不完全成熟的產品。
支持命令
-q query (--query=query) 一次查詢,不進入impala-shell
-d default_db (--database=default_db) 指定數據庫
-B(--delimited)去格式化輸出
--output_delimiter=character 指定分隔符
--print_header 打印列名
-f query_file(--query_file=query_file)執行查詢文件,以分號分隔
-o filename (--output_file filename) 結果輸出到指定文件
查詢時間
select now()
或者
select current_timestamp()
結果
2019-10-14 17:32:22.712372
創建數據庫
create database if not exists 庫
切換數據庫
use 庫
時間字符串格式化爲秒數
select unix_timestamp('20190909', 'yyyyMMdd')
結果
1567987200
格式化爲時間戳
select to_date('20190909', 'yyyyMMdd')
結果
2019-09-09 00:00:00.000000
查看所有的表
show tables
show語句可以配合like條件使用,但是不支持模糊匹配。
創建數據表
create table if not exists 庫.表(
列1 數據類型,
列2 數據類型,
………
列N 數據類型
);
刪除數據庫
drop database if exists 庫
刪除數據表
drop table if exists 表
將內容轉化爲小寫
select lower(列) from 表
最大和最小值
select max(列) from 表
select min(列) from 表
distinct
取列的唯一值集合。
select distinct 列 from 表
limit
限制返回的結果數量,limit 10就只返回10個。測試時帶上可以較快返回結果, 並減少資源消耗。
select * from 表 limit 10
group by
分組函數
having
過濾約束,通常和group by連用。
select * from 表 group by 列 having 條件
order by
排序,默認asc升序。desc爲降序。
select * from 表 order by 列
字符串替換函數
REPLACE(原始字符串,目標串,被替換的串)
如果參數是支持的字符數據類型之一,並且在原始字符串中能夠找到目標串,返回替換後的字符串;反之返回原始字符串;如果參數是支持的 binary 數據類型之一,則返回二進制數據。不支持 text,ntext類型字段的替換。
查看數據庫表結構
DESCRIBE 表
插入數據
insert into 表
(列1, 列2 , 列3, 列4 )
values
(200, 'h1' , 'de' , 'SZ'),
(201, 'h2' , 'de' , 'GD'),
(202, 'h3' , 'de' , 'BJ');
最好在多條數據查詢時一併插入,避免影響效率。
查所有表名
暫時沒找到方法。最後使用編程語言調用impala返回結果,處理之後再二次查詢。
數據導出
導出結果到csv
impala-shell -q "select * from test limit 10" -B --output_delimiter="\t" --print_header -o /var/db_bak.csv
python接口impyla
安裝
pip install impyla
基本連接代碼
from impala.dbapi import connect
conn = connect(host='127.0.0.1', port=21050)
cursor = conn.cursor()
cursor.execute('SELECT * FROM table LIMIT 10')
results = cursor.fetchall()
print(results)
也可以返回一個pandas的dataframe類型。
from impala.util import as_pandas
df = as_pandas(cur)