Hive基础:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
无编辑摘要
无编辑摘要
第83行: 第83行:


==== 索引 ====
==== 索引 ====
Hive从0.7.0版本开始加入了索引,0.8版本后增加 bitmap 索引。
Hive从0.7.0版本开始加入了索引,0.8版本后增加 bitmap 索引。索引表不会自动 rebuild,如果表有数据新增或删除,那么必须手动 rebuild 索引表数据


==== 分区 ====
==== 分区 ====

2023年2月10日 (五) 16:55的版本

参数设置

优先级: 配置文件 < 命令行参数 < 终端里输入命令

注意某些系统级的参数, 例如 log4j 的设定必须用前两种方式设定, 因为那些参数的读取在会话建立以前已经完成了。

  • 配置文件方式 hive-default.xml 和 hive-site.xml
  • 命令行参数方式 启动 Hive 时,hive -hiveconf mapred.reduce.tasks=10
  • 终端里输入命令

set 查看所有配置

set xxx 查看xxx参数的值

set xxx 1 设置xxx参数的值

基础命令

hive -e “sql语句”

hive -f “sql文件路径”

分割符

Hive中默认的分割符为:

  列:^A

  行:\n

在数据文件中显示为:"1000^AHello, World!\n",数据中如果包含:"\001","\n"等分隔符,需要提前处理掉。

如果需要自定义分隔符,需要设置:

ROW FORMAT DELIMITED

  FIELDS TERMINATED BY '\t'

  LINES TERMINATED BY '\n'

数据类型

基本数据类型

Hive 数据类型 Java 数据类型
TINYINT byte
SMALINT short
INT int
BIGINT long
BOOLEAN boolean
FLOAT float
DOUBLE double
STRING string

TIMESTAMP

String 类型相当于数据库的 varchar 类型, 该类型是一个可变的字符串,理论上它可以存储 2GB 的字符数

集合数据类型

  • STRUCT struct<street:string, city:string>
  • MAP map<string, int>
  • Array array<string>

索引、分区与分桶

索引

Hive从0.7.0版本开始加入了索引,0.8版本后增加 bitmap 索引。索引表不会自动 rebuild,如果表有数据新增或删除,那么必须手动 rebuild 索引表数据

分区

表分区是指将数据按照物理分层的方式进行区分开,加快查询的速度,同时也起到数据快照的作用。可以指定单个字段也可以指定多个字段;

  • 静态分区是在创建表时手动指定
  • 动态分区是通过数据来进行判断,只有在 SQL 执行时才能确定。动态分区不能使用 load 加载数据,需要使用insert into

默认创建的分区是静态分区,如果要指定动态分区需要配置系统参数。

当单个分区或者表中的数据量越来越大,当分区不能更细粒的划分数据时,采用分桶技术将数据更细粒度的划分和管理。

分桶关键字:BUCKET

指定分桶的字段:clustered by (uid)

区别

  • 分区使用的是表外字段,分桶使用的是表内字段
  • 分桶是更细粒度的划分、管理数据,更多用来做数据抽样、JOIN操作
  • 分区是粗粒度的将数据隔离,分桶是更加细粒度的将数据隔离

注意

  • order by 中的字段, 必须在 select 中出现
  • 子查询表必须有别名