impala实操
impala操作环境 impala-shell kinit -kt /data/impala.keytab impala klist impala-shell
# 连接impala时指定impalad,-i参数指定impalad节点(可以是任意节点),-k参数是采用kerberos认证方式登录 impala-shell -i worker-2 -k
实际生产环境下-i参数至关重要,如果有多个并行任务,可以通过-i参数将任务均衡分发到不同的impalad节点上 hue操作impalahue创建impala用户
使用impala用户登录
-- 执行测试 select * from test; create table test2(id string);
在安全环境下需要kerberos安全认证与sentry授权,认证与授权参照kerberos+sentry实操
impala-shell实操 impala-shell实操与hue实操命令一致。
impala 基本语句与hive基本一致。 创建测试表并加载数据#-- 创建临时表 create table if not exists xinniu.tmp1( pk string, col1 int, col2 boolean, col3 timestamp, col4 varchar ) comment "临时加载表" row format delimited fields terminated by " " ; -- 加载数据 load data inpath "/user/impala/testfile" into table xinniu.tmp1; -- 创建parquet正式表 create table if not exists xinniu.hainiu1 stored as parquet tblproperties ("parquet.compress"="SNAPPY") as select * from xinniu.tmp1 where 1=0 ; -- 临时表加载数据到正式表 insert into table xinniu.hainiu1 select * from xinniu.tmp1;
数据导出#
impala不支持insert overwrite 的方式导出数据,需要使用-o outputpath的方式导出。 # 参数解释:-i 指定impalad节点 -k 使用kerberos认证方式 -q 查询语句(也可以使用-f sql文件的方式) -B --output_delimiter 指定输出文件分隔符 -o 输出文件 impala-shell -i worker-1 -k -q "select * from xinniu.hainiu1 limit 200;" -B --output_delimiter=" " -o /data/output.txt
查询语句#
查询语句与hive基本一致 -- 在排序语句中使用offset 即从offset位置开始输出 select * from xinniu.hainiu1 order by pk desc limit 10 offset 2;
union与union all#-- union去重 union all不去重 -- 查询hainiu1表,创建并插入到hainiu2表中 create table if not exists xinniu.hainiu2 as select * from xinniu.hainiu1; -- union create table if not exists xinniu.uniontable as select * from xinniu.hainiu1 union select * from xinniu.hainiu2; -- 验证uniontable表数量 select count(1) from xinniu.uniontable; -- union all create table if not exists xinniu.unionalltable as select * from xinniu.hainiu1 union all select * from xinniu.hainiu2;
日期类型#-- hive parquet格式不支持date类型,orc格式支持date类型 create table if not exists xinniu.testdatetype4hive( pk string, col2 date ) comment "test date type" stored as orc tblproperties ("orc.compress"="SNAPPY"); -- impala impala不支持date类型,什么格式都不支持date类型,统一使用timestamp create table if not exists testdatetype4impala( pk string, col2 timestamp ) comment "test date type" stored as parquet tblproperties ("parquet.compress"="SNAPPY"); -- 时间转换 select current_timestamp(); select from_unixtime(unix_timestamp(current_timestamp())); select unix_timestamp(current_timestamp()); select typeof(unix_timestamp(current_timestamp())); select typeof("yyyy-MM-dd HH"); select from_timestamp(cast(unix_timestamp(current_timestamp()) as timestamp),"yyyy-MM-dd");
转码函数#-- 加密 select base64encode("hainiu"); -- 解密 select base64decode("aGFpbml1");
拼接字符串#-- concat和hive没有区别,但是concat_ws没有hive强大,在impala中concat_ws(),有null出现则结果就为null select concat("hello","hainiu"); select concat_ws("_","hello","hainiu"); select concat("hello","hainiu",null); select concat_ws("_","hello","hainiu",null);
字符串查找#-- 查找bc在abcdefg中第一次出现的位置(以1起点) select instr("abcdefg","bc");
元数据同步#-- 在impala中执行ddl语句之后,并非所有impalad都会立刻感知到,有三种方式可以解决: -- 在ddl语句前开启sync_ddl参数,在ddl语句结束后关闭,当前session有效,优先使用 -- 使用refresh db.tablename 表级增量刷新,第二推荐 -- 使用invalidate metadata 全量刷新,使所有impalad上缓存的元数据无效,尽量少用或者不用,一般生产上不允许使用,即使非要用也是invalidate metadata tablename的方式使用 set SYNC_DDL=true; create table xinniu.synctable(id string); set SYNC_DDL=false; refresh xinniu.synctable; invalidate metadata xinniu.synctable;
解决中文注释乱码问题#-- 进入mysql元库查看建表语句 show create table metastore; -- 修改数据编码为latin1 alter database metastore default character set latin1; -- 修改表、列、分区、分区键、索引编码 alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8; alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8; alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
impala性能相关
impala关联操作左大右小,如果没有按照左大右小的规则写,impala会按照表统计信息进行优化,但是这么做是依赖历史表统计信息进行优化的,所以在遇到性能非常差的场景时可以从新刷一下表统计信息。
表统计信息的目的是叫plainner知道每张表的一些统计信息,如表大小,表结构等,便于在生成执行计划树是准确的并行下发执行计划树。 -- 刷新全表统计信息 compute stats db.tablename; -- 执行完dml语句时针对分区刷新表统计信息,此种方式只刷新了batch_date这个新增分区的信息到表统计信息中,相比compute stats效率要快 compute incremental stats db.tablename partition (pt in ($batch_date,""));
在执行大批量任务的时候通常会有非常多任务脚本,在任务提交的时候应该轮询发送到不同的imapad节点上进行,而不应该在同一个impalad节点上执行,会导致单一impalad节点的oom,也严重影响并发性能,在执行的过程中通过-i指定impalad的节点。 impala-shell -k -i worker-1(impalad节点) -q "查询语句" 或者 -f "sql文件"
impala执行计划解读 判断是否有表或者列统计信息#explain select straight_join t1.* from (SELECT pk,col1,col2 from xinniu.hainiu1) t1 join (select pk,col1,col2 from xinniu.hainiu2 limit 10) t2 on t1.pk=t2.pk;
在hue上可以查看执行计划树,并且可以直观的看到每个环节所用的时间。
海汼部落原创文章,原文链接:(http://hainiubl.com/topics/75547)
企业品牌公关危机产生,都有哪些原因大家好,我是只为用户提升品牌价值的时代达信企业的发展过程中,有些时刻避免不了品牌公关危机的产生,而公关对于一家企业来说必不可少的,像一些上市企业,很多都有自己的公关团队,来处理企业
鸿星尔克上演公关的最高境界近几年来,国内民众渐渐地发现了国家要强大起来,必须要支持国货,从芯片新疆棉到李宁再到现在火爆的鸿星尔克!鸿星尔克说到鸿星尔克年纪较小的朋友可以不太了解,但是这个品牌在零几年的时候,
初创型企业打造小众媒体品牌,三个关键环节不能少大家好,我是只为用户提升品牌价值的时代达信一家初创型的企业,想在市场获得一定的名气,有自身产品优势,结合品牌传播,通过时间的积累,品牌的名气也会随之提升,那这种品牌如何去传播呢,相
企业如何0基础做好品牌运营,有哪些品牌策略大家好,我是只为用户提升品牌价值的时代达信一家企业如何0基础打造成行业品牌,比如我们购买手机的时候,可能会想到华为VIVO苹果等,这些手机最初在市场上也是0基础,经过了漫长的发展期
摩拜单车的品牌公关策略,企业可以借鉴大家好,我是只为用户提升品牌价值的时代达信日常生活中共享产品,会经常用到的是什么,可能会第一时间想到共享单车共享充宝,共享单车在城市中上下班都有很多人在骑行,目前经常看到的就两家,
应对负面危机,企业危机公关预案4步法则如今互联网技术互联网大数据的情况下,企业不仅高度重视危机公关,并且还努力做到考虑周全。应对负面危机,企业危机公关预案是一个受关心的话题讨论,这就是不打没提前准备的仗危机公关那么我今
互联网时代,企业危机公关有哪些挑战和特点大家好,我是只为用户提升品牌价值的时代达信互联网的发展,信息的开放和传播迅速都是网络具备的特点,用户查找相关信息,可以在短时间内获取大量的信息,而这些信息好的坏的都有,而一家企业出
危机公关处理流程步骤解析危机公关不但肩负着商业服务行为主体的危机预警信息检测干预预防操纵解决修复调节等每日任务,也是周而复始的对危机智能管理系统提升的必然全过程,也是公司朝向群众新闻媒体政府部门,及其各种
深圳舆情公关公司告诉你什么叫舆情公关针对公司的品牌媒体公关而言,舆情是十分普遍而又关键的一个定义,舆情监管也是其媒体公关的关键层面之一,舆情代表什么意思?舆情媒体公关是干什么的?下边时期达信就给大伙儿讲下!舆情公关舆
危机公关说谎,这些才是关键很多人对公关有个误解,就是公关公司都是做骗人的勾当,遇到问题就想着逃避责任,其实并不是这样的,首先危机公关,本质上是大众情绪管理,比如说你开餐厅,有人在你的餐厅里打架,受伤了,虽然
品牌公关是骗子?每天要做什么?品牌公关到底是什么?很多人对自己所处的职责不清晰,每次要解释半天,而更有甚者会把公关等同于交际花,也该是时候给公关正正名。提升企业和个人的形象是品牌公关的目标,就是要让别人说你好,