更新时间:2024-05-28 GMT+08:00
分享

Hive应用开发建议

HQL编写之隐式类型转换

查询语句使用字段的值做过滤时,不建议通过Hive自身的隐式类型转换来编写HQL。因为隐式类型转换不利于代码的阅读和移植。

建议示例:

select * from default.tbl_src where id = 10001;
select * from default.tbl_src where name = 'TestName';

不建议示例:

select * from default.tbl_src where id = '10001';
select * from default.tbl_src where name = TestName;

表tbl_src的id字段为Int类型,name字段为String类型。

HQL编写之对象名称长度

HQL的对象名称,包括表名、字段名、视图名、索引名等,其长度建议不要超过30个字节。

Oracle中任何对象名称长度不允许超过30个字节,超过时会报错。PT为了兼容Oracle,对对象的名称进行了限制,不允许超过30个字节。

太长不利于阅读、维护、移植。

HQL编写之记录个数统计

统计某个表所有的记录个数,建议使用“select count(1) from table_name”。

统计某个表某个字段有效的记录个数,建议使用“select count(column_name) from table_name”。

JDBC超时限制

Hive提供的JDBC实现有超时限制,默认是5分钟,用户可以通过java.sql.DriverManager.setLoginTimeout(int seconds)设置,seconds的单位为秒。

UDF管理

建议由管理员创建永久UDF,避免每次使用时都去add jar,和重新定义UDF。

Hive的UDF会有一些默认属性,比如“deterministic”默认为“true”(同一个输入会返回同一个结果),“stateful”(是否有状态,默认为“true”)。当用户实现的自定义UDF内部实现了汇总等,需要在类上加上相应的注解,例如如下类:

@UDFType(deterministic = false)
Public class MyGenericUDAFEvaluator implements Closeable {

表分区优化建议

  1. 当数据量较大,且经常需要按天统计时,建议使用分区表,按天存放数据。
  2. 为了避免在插入动态分区数据的过程中,产生过多的小文件,在执行插入时,在分区字段上加上distribute by。

存储文件格式优化建议

Hive支持多种存储格式,比如TextFile,RCFile,ORC,Sequence,Parquet等。为了节省存储空间,或者大部分时间只查询其中的一部分字段时,可以在建表时使用列式存储(比如ORC文件)。

相关文档