本节介绍集群Hive 服务提供的增强特性,包括劣质 SQL 熔断、表最新访问时间、支持表字段多个分隔符以及支持外部表删除数据。
劣质SQL 熔断
熔断默认是关闭,若要使用熔断,hive-site.xml 配置 hive.support.block.inferior.sql 为 true,hiveserver2 如果要配置生效需要重启。熔断场景主要有 3 种:
1、单表查询数据量太大,默认是 10995116277760(10T),由参数 hive.query.one.table.file.max.byte.length 配置大小,这个内容是字节类型,不需要带单位;
2、单表查询的分区数太多,默认是 100,由参数 hive.query.one.table.partition.max.count 配置大小;
3、单表查询的文件数太多,默认是 10000,由参数 hive.query.one.table.file.max.count 配置大小。
| 参数名称 | 默认值 | 说明 |
|---|---|---|
| hive.support.block.inferior.sql | false | 劣质SQL熔断开关,开启需重启HiveServer2 |
| hive.query.one.table.file.max.byte.length | 10995116277760 | 单表查询数据量上限(字节),超限熔断 |
| hive.query.one.table.partition.max.count | 100 | 单表查询分区数上限,超限熔断 |
| hive.query.one.table.file.max.count | 10000 | 单表查询文件数上限,超限熔断 |
注意
上述三个阈值参数的值为纯数字,无需添加单位。
表最新访问时间
说明
hive、spark-sql、trino 访问都会更新。
最新访问时间维护默认是关闭,若要使用hive-site.xml 配置 hive.support.update.last.access.time 为 true,这个需要重启 metastore 才能生效。为了避免频繁的更新 metastore 元数据库,这个默认更新频率是 600(秒),由参数 hive.update.last.access.time.interval 配置大小。
注意
如果开启了,一次执行分区很多会导致SQL 执行慢。
支持表字段多个分隔符
引入时间:2024-5-6。
建表时通过MultiDelimitSerDe 可以支持表字段使用多个分隔符(多字符分隔符),建表案例:
CREATE TABLE test_field_special(
id int,
name string,
age int)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES (
'field.delim'='|@|')
stored as textfile;支持外部表删除数据
使用该特性需要设置表属性external.table.purge=true,此时,删除外部表同时会删除 HDFS 上的数据,创建新表的示例如下:
CREATE EXTERNAL TABLE test_external
(
k STRING,
v INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION 'hdfs://path/to/table'
TBLPROPERTIES ('external.table.purge' = 'true');对于已创建的表,需要修改表属性,其示例如下:
ALTER TABLE test_external
SET TBLPROPERTIES ('external.table.purge' = 'true');