Impala和Inceptor的区别

# Impala和Inceptor的区别

Inceptor是一种交互式分析引擎,本质是一种SQL翻译器。Inceptor中一共可以操作五种类型的表结构:
	1. 普通文本表(TXT表)
	2. 分区表(分单值分区和范围分区)
	3. 分桶
	4. ORC表(Hive ORC格式)
	5. ORC事务表(可进行增删改查操作,必须建立分桶表和外表,且两个表的表格式要和源数据字段一一对应起来)
	注意:一般来说分区和分桶是结合来使用的,例如先将一个大表按照时间进行分区,再对每个分区进行分桶。

Impala:
	Cloudera公司推出,提供对HDFS、HBase数据的高性能、低延迟的交互式SQL查询功能。
	基于Hive,使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点。是CDH平台首选的PB级大数据实时查询分析引擎。

优点:
	基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销
	无需转换为MapReduce,直接访问存储在HDFS,HBase中的数据进行作业调度,速度快
	使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销
	支持各种文件格式,如TEXTFILE 、SEQUENCEFILE、RCFile、Parquet
	可以访问Hive的metastore,对Hive数据直接做数据分析
	
缺点:
	对内存的依赖大,且完全依赖于Hive
	实践中,分区超过1万,性能严重下降
	只能读取文本文件,而不能直接读取自定义二进制文件
	每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新

# 1、Impala建表时存储方式是parquet,Inceptor建表时的存储方式是ORC

# Impala建表:
drop table if exists dsc_bas.t_bjhg_dymx;
create table dsc_bas.t_bjhg_dymx
(
    `khh` string comment '客户号',
    `jys` string comment '交易所',
    `gdh` string comment '股东号',
    `xwdm` string comment '席位号',
    `zyq` string comment '质押券',
    `dysl` decimal(22,2) comment '质押数量',
    `zt` string comment '状态',
    `cjrq` int comment '成交日期',
    `cjbh` string comment '成交编号',
    `sjlx` string comment '数据类型',
    `yyb` string comment '营业部'
)comment '报价回购_抵押明细'
clustered by (khh) sorted by (khh asc) into 4 buckets
stored as parquet;

# Inceptor建表:
drop table if exists dsc_bas.t_bjhg_dymx;
create table dsc_bas.t_bjhg_dymx
(
    `khh` string comment '客户号',
    `jys` string comment '交易所',
    `gdh` string comment '股东号',
    `xwdm` string comment '席位号',
    `zyq` string comment '质押券',
    `dysl` decimal(22,2) comment '质押数量',
    `zt` string comment '状态',
    `cjrq` int comment '成交日期',
    `cjbh` string comment '成交编号',
    `sjlx` string comment '数据类型',
    `yyb` string comment '营业部'
)comment '报价回购_抵押明细'
clustered by (khh) sorted by (khh asc) into 4 buckets
stored as ORC;

#2、插入方式的不同
# insert overwrite时,Inceptor需要加上关键字table,Impala不需要

Impala插入数据:
insert overwrite dsc_cfg.t_zqdm
(jys,jyzt,bz,gt_zqlb)
select udfs.f_get_etl_tran_dicval
     (dsc_cfg,t_zqdm,jys,1,1,a.jys) as jys,
      cast(jyzt as string) as jyzt,
      udfs.f_get_etl_tran_dicval(dsc_cfg,t_zqdm,bz,1,1,a.bz) as bz,
      zqlb as gt_zqlb
from src_aboss.tzqdm a;

Inceptor插入数据:
insert overwrite table dsc_cfg.t_zqdm
(jys,jyzt,bz,gt_zqlb)
select udfs.f_get_etl_tran_dicval
     (dsc_cfg,t_zqdm,jys,1,1,a.jys) as jys,
      cast(jyzt as string) as jyzt,
      udfs.f_get_etl_tran_dicval(dsc_cfg,t_zqdm,bz,1,1,a.bz) as bz,
      zqlb as gt_zqlb
from src_aboss.tzqdm a;


#3、udf函数的使用方式不同
Inceptor中不需要udfs.前缀,单个查询时需要指定from system.dual

Impala使用udf函数:
select udfs.f_get_jyr_date(20180102,-1);

Inceptor使用udf函数:
select .f_get_jyr_date(20180102,-1) from system.dual;


#4、变量传递方式不同
Inceptor在脚本中传递变量通过-hivevar name=value,Impala通过-var=“name=value”

Impala:
impala-shell -i 10.2.1.55 -l -udingdian \
-- ldap_password_cmd="echo -n dingdian_123" \
-- auth_creds_ok_in_clear -f p_stat_kh_yjfl.sql \
-- var="RQ=20180731"
SQL:${VAR:RQ}

Inceptor:
beeline -u jdbc:hive2://192.168.166.237:10000/default \
-n dingdian -p 123456 -f p_tran_zqhq_his.sql \
--hivevar rq=20180628
SQL:${hivevar:rq}

#5、分区表插入方式不同
插入分区时:Inceptor中partition 需要紧跟在表名后面,之后再指定列名,而Impala则是表名后面跟列名,再跟partition

Impala:
insert overwrite table dsc_bas.t_zqhq_his(jys) partition (rq=${var:rq})
select udfs.f_get_etl_tran_dicval('dsc_bas','t_zqhq_his','jys',1,1,a.jys) as jys
from src_aboss.tzqhq a
where a.rq=${VAR:RQ};

Inceptor:
insert overwrite table dsc_bas.t_zqhq_his partition (rq=${hivevar:rq}) (jys)
select udfs.f_get_etl_tran_dicval('dsc_bas','t_zqhq_his','jys',1,1,a.jys) as jys
from src_aboss.tzqhq a
where a.rq=${hivevar:RQ};

#6、with...as用法不同
Impala 用insert后接with..as中间可以写字段名,也可以省略,而Inceptor用insert后接with..as 中间不可以写字段名

impala:
insert into table temp.tmp_stat_nonekh_zb_yyb_fwkhs_01(u_id,sjdw,sjz,zbdm,zbz,ys_id,cj)
with temp_yyb_fwkhs_R as (select....) select ....

Inceptor:
insert into table temp.tmp_stat_nonekh_zb_yyb_fwkhs_01
with temp_yyb_fwkhs_R as (select....) select ....
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值