这个就没法演示了
数据太大了 几十兆 视频也没给
没法敲
看看截图吧
create external table if not exists log1(
id string comment 'this is id column',
phonenumber bigint,
mac string,
ip string,
url string,
tiele string,
column1 string,
column2 string,
column3 string,
upflow int,
downflow int
)
comment 'this is log table'
row format delimited fields terminated by '\t'
lines terminated by '\n'
stored as textfile;
load data local inpath '/home/olddata/flow1.log' overwrite into table log1;
select count(l.phonenumber)
from log1 l
group by l.phonenumber
;
建立索引之前的查询时间:
建立索引之后的查询时间:
.
然后建立索引
刚开始 没有索引
然后再查询
然后重新构建索引
重新构建索引也是比较耗时的
然后创建联合索引
然后可以测试一下 我们这里就不测了
然后创建bitmap索引
显示索引:
show index on log1;
创建compact索引:
create index idx_log1_phonenumber
on table log1(phonenumber)
as 'compact'
with deferred rebuild
;
重新构建索引:
alter index idx_log1_phonenumber
on log1 rebuild;
创建联合索引:
create index idx_log1_phonenumberAndId
on table log1(id,phonenumber)
as 'compact'
with deferred rebuild
;
select * from log1 l
where l.id = 18080
and l.phonenumber = 779797
;
创建bitmap索引:
create index idx_log1_upflow
on table log1(upflow)
as 'bitmap'
with deferred rebuild
;
删除索引:
drop index if exists idx_log1_upflow on log1;
Hive的视图
1.
2.
这还是索引的数据 所以这个视图这块只能截图了
创建视图
显示视图
show tables
这个源数据其实是有问题的
这样 我们看别的表u3
创建视图
然后 查询视图
描述视图
删除视图
删除对应表之后 视图不能进行查询了
Hive的执行方式
列与列之间的默认分隔符
create table if not exists aa7(
id int,
name string
)
row format delimited fields terminated by '\001'
;
load data local inpath '/home/olddata/aa' overwrite into table aa7;
为什么是空呢
因为 我使用的是tab键分隔的
所以需要修改
使用shell打开aa所在目录编辑
vi /home/olddata/aa
好像使用ctrl a 表示 但是我没敲出来
难受
改完后 重新加载数据 就有了
查看hive的所有变量
hive > set;
太多了 就截了一张图
好像是 只在当前session有效
hive --database olqf --hivevar min_limit=1 -e 'select * from aa7 limit ${hivevar:min_limit}';
hive --database olqf -S --hivevar min_limit=1 -e 'select * from aa7 limit ${hivevar:min_limit}';
hive --database olqf --hivevar min_limit=1 -hivevar t_n=aa7 -e 'select * from ${hivevar:t_n} limit ${hivevar:min_limit}';
加上-S就是不要打印与结果无关的信息
我的数据之前没有处理好 所以这里读不出来
换个表还是 rn表
3.带参数 加上 导出
3.带参数 加上 导出
vi /home/olddata/user.hql
insert overwrite local directory '/home/olddata/exp1'
row format delimited fields terminated by '\t'
select * from rn;
insert overwrite directory '/exp1'
row format delimited fields terminated by '\t'
select * from rn
where sno > 5
limit ${hivevar:m_1};
hive -f /home/olddata/user.hql
hive --hivevar m_1=1 -f /home/olddata/user.hql
1.我们先
创建一个文件
vi /home/olddata/user.hql
放入两个语句
2.这样如果查询的话 只能用第二句 因为上面的语句 有变量 需要赋值
hive -f /home/olddata/user.hql
hive --database olqf --hivevar m_1=2 -f /home/olddata/user.hql
我们可以提前看一下 /home/olddata/下面没有exp1这个文件 运行完第二句后就有了
没有
运行完后
有了
这样就把数据导出来来了
另外一种导出方式 使用>>来导出:
hive --database olqf -S --hivevar min_limit=1 -e 'select * from rn limit ${hivevar:min_limit}' > /home/olddata/exp3;