Impala——Impala原理知识以及与Hive的区别(持续更新中...)

Impala Metadata and the Metastore

Impala和Hive在底层是共用相同的元数据库的,比如MySQL或者PostgreSQL,所以,Impala才能被Hive定义加载的表,不过前提是表中的列要使用Impala支持的数据类型、文件格式和压缩编码。

对于那些大数据量多分区的表,要获取这些表的所有元数据可能是比较耗时的。因此,Impala为了后期重用同一张表的元数据,会提前将所有的元数据缓存到每一个Impala节点,以提升查询效率。但也因此带了一些不便,看下面refresh内容。

Impala Refresh

1. 为什么要执行refresh语句

从上面我们可以知道,Impala会缓存表的元数据,但是一旦表定义或者表数据发生了更新的话,再去查询表之前就要先更新元数据。Impala1.2及之后的版本,对于在Impala中执行的DDL和DML语句,catalogd 进程是会自动更新元数据,但是在Hive中执行的DDL和DML语句或者是手动变更HDFS文件的情况,还是要使用REFRESH语句或者INVALIDATE METADATA语句,才能使新的变更生效。

2. 如何执行refresh语句

  • 刷新指定表的元数据。
    刷新指定表执行如下语句:
    REFRESH table_name
    
    这种方式适用于有新数据添加到已存在表的情况。
  • 刷新所有表的元数据。
    刷新所有表执行如下语句:
    INVALIDATE METADATA
    
    这种方式适用于创建了新表、删除了表、执行了HDFS Rebalance操作和删除了数据文件等情况。

Impala与Hive在语法上的区别

1. Impala不支持Date类型

Impala是不支持Date数据类型的。

Hive支持Date数据类型。

2. union字段类型

Impala中两表union时,对应字段的数据类型必须一致(比如,int类型不能和空字符串""union。

而Hive中是允许的。

3. 中文占用的长度

Impala中一个中文占3位,

Hive中一个中文占1位。

4. 不兼容的函数

Hive中支持而Impala不支持的函数:

  • date_format()
  • current_date()

5. 数字的Int类型和String类型

在Hive中,比较同一个数字的int类型和String类型,结果是相等的。如下SQL结果返回true:

select 20000 = '20000';

而Impala不支持不同数据类型之间的比较。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值