impala基本命令操作和python调用样例

转载自 https://blog.csdn.net/qq_15174755/article/details/102557771

impala-shell

不得不说这个东西真的是用不习惯,感觉还是个不完全成熟的产品。和mysql还有差异,更新数据没有update函数。

支持命令

-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) 结果输出到指定文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

查询时间

select now()
select current_timestamp() 
  • 1
  • 2

结果
2019-10-14 17:32:22.712372

创建数据库

create database if not exists 库
  • 1

切换数据库

use 库
  • 1

时间字符串格式化为秒数

select unix_timestamp('20190909', 'yyyyMMdd')
  • 1

结果
1567987200

格式化为时间戳

select to_date('20190909', 'yyyyMMdd')
  • 1

结果
2019-09-09 00:00:00.000000

查看所有的表

show tables
  • 1

show语句可以配合like条件使用,但是不支持模糊匹配,查表名比较麻烦。

创建数据表

create table if not exists 库.表(
	   列1 数据类型,
	   列2 数据类型,
	   ………
	   列N 数据类型
	);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

删除数据库

drop database if exists 库
  • 1

删除数据表

drop table if exists 表
  • 1

将内容转化为小写

select lower(列) from 表
  • 1

最大和最小值

select max(列) from 表
select min(列) from 表
  • 1
  • 2

distinct

取列的唯一值集合。

select distinct 列 from 表
  • 1

limit

限制返回的结果数量,limit 10就只返回10个。测试时带上可以较快返回结果, 并减少资源消耗。

select * from 表 limit 10
  • 1

group by

分组函数,select时不能直接使用*选择全部,指定固定返回字段的一个值。

having

过滤约束,通常和group by连用。

select * from 表 group by 列 having 条件
  • 1

order by

排序,默认asc升序。desc为降序。

select * from 表 order by 列
  • 1

字符串替换函数

REPLACE(原始字符串,目标串,被替换的串)
  • 1

如果参数是支持的字符数据类型之一,并且在原始字符串中能够找到目标串,返回替换后的字符串;反之返回原始字符串;如果参数是支持的 binary 数据类型之一,则返回二进制数据。不支持 text,ntext类型字段的替换。

查看数据库表结构

DESCRIBE 表;
  • 1

返回数据表的字段名称和

插入数据

多条插入。这里没写单条插入的原因是单条插入的效率太低,各个数据库单条插入的性能都会表现得很差,不推荐。

insert into 表 (列1, 列2 , 列3, 列4 )values(200, 'h1' , 'de' , 'SZ'),(201, 'h2' , 'de' , 'GD'),(202, 'h3' , 'de' , 'BJ');
  • 1

最好在多条数据查询时一并插入,避免影响效率。

查所有表名

暂时没找到方法。最后使用编程语言调用impala返回结果,处理之后再二次查询。

数据导出

导出结果到csv

impala-shell -q "select * from test limit 10" -B --output_delimiter="\t" --print_header -o /var/db_bak.csv
  • 1

python接口impyla

安装

pip install impyla
  • 1

基本连接代码

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

也可以直接通过游标返回一个pandas的dataframe类型。

from impala.util import as_pandas
from impala.dbapi import connect


conn = connect(host='127.0.0.1', port=21050)
cur = conn.cursor()
cur.execute('SELECT * FROM table LIMIT 10')
df = as_pandas(cur)
df.describe()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值