3、Hive基础

常用交互命令

  1. -e 不进入hive的交互窗口执行sql语句
    hive -e "select * from student;"
  2. -f 执行脚本中的sql语句
    (1). 创建hive.sql文件
    文件中正确输入sql语句
    select * from student;
    (2). 执行文件中的sql语句
    hive -f hive.sql
    (3). 将执行的结果追加到文件中
    hive -f hive.sql > hive_result.txt

其他常用命令操作

  1. 退出hive窗口
    exit:先隐性提交数据,再退出
    quit:不提交数据,退出
  2. 在hive命令行窗口中查看hdfs文件系统
    dfs -ls /;
  3. 在hive命令行窗口查看本地文件系统
    ! ls /
  4. 查看hive中输入的所有历史命令
    进去当前用户的跟目录,查看.hivehistory文件

使用jdbc连接hive

  1. 开启hiveserver2


    开启hiveserver2.png
  2. 新开窗口连接
    开启beeline
    !connect jdbc:hive2://hadoop-100:10000
    beeline.png

常见属性设置

Hive数据仓库位置配置

  1. default数据仓库的最原始位置是在hdfs上的,/user/hive/warehouse路径下
  2. 在数据仓库目录下,没有对默认的数据库default创建文件夹,如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹
  3. 修改default数据仓库原始位置
    将hive-default.xml.template如下配置信息拷贝到hive-site.xml文件中
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>

配置同组用户有执行权限
hdfs dfs -chmod g+w /user/hive/warehouse


hive默认数据库.png

default数据库下有张student表,test.db是自己创建的数据库,如上图


hive新建数据.png

test.db数据库下有张people表,如上图

查询后信息显示配置

实现显示当前数据库,以及查询表的头信息配置

  1. hive-site.xml文件中添加如下配置信息
<property>
    <name>hive.cli.print.header</name>
    <value>true</value>
</property>

<property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
</property>
  1. 重新启动hive
    配置前


    修改前.png

    配置后


    修改后.png

    修改后2.png

Hive运行日志信息配置

  1. Hive的log默认存放在(当前用户名下)/tmp/hadoop/hive.log文件下
  2. 修改hive的log存放位置
    修改/opt/module/hive/conf/hive-log4j.properties.template文件名称为hive-log4j.properties
    修改hive-log4j.properties文件中修改log存放位置
    hive.log.dir=/opt/module/hive/logs

参数配置方式

  1. 查看当前所有的配置信息
    set;
  2. 参数配置的三种方式
    (1). 配置文件方式
    默认配置文件:hive-default.xml
    用户自定义配置文件:hive-site.xml
    注意:用户自定义配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效。
    (2). 命令行参数方式
    启动Hive时,可以在命令行添加-hiveconf param=value来设定参数,仅对本次hive启动有效。
    如,hive -hiveconf mapred.reduce.tasks=10;
    查看,set mapred.reduce.tasks;


    命令行参数方式.png

    (3). 参数声明方式
    可以在HQL中使用SET关键字设定参数,仅对本次hive启动有效。
    如,set mapred.reduce.tasks=100;
    查看,set mapred.reduce.tasks;


    参数声明方式.png

    上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。注意某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。

Hive数据类型

基本数据类型

Hive数据类型 Java数据类型 长度 例子
TINYINT byte 1byte 有符号整数 20
SMALINT short 2byte 有符号整数 30
INT int 4byte 有符号整数 40
BIGINT long 8byte 有符号整数 50
BOOLEAN boolean 布尔类型,true、false true
FLOAT float 单精度浮点数 3.1415926
DOUBLE double 双精度浮点数 3.1415926
STRING string 字符系列。可以指定字符集。可以使用单引号或者双引号 ‘hello’,“world”
TIMESTAMP 时间类型
BINARY 字节数组

对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。

集合数据类型

数据类型 描述 语法示例
STRUCT 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。 struct()
MAP MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素 map()
ARRAY 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用 Array()

Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。ARRAY和MAP与Java中的Array和Map类似,而STRUCT与C语言中的Struct类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。

例子

有一个json格式的字符串

{
    "name": "ZJ",
    "parent": [
        "Z",
        "J"
    ],
    "score": {
        "语文": 80,
        "数学": 90,
        "英语": 100
    },
    "address": {
        "province": "河南",
        "city": "新乡"
    }
}

有一些数据

ZJ  Z_J 语文:80_数学:90_英语:100  河南_新乡
ZFH Z_FG    语文:100_数学:90_英语:180 河南_新乡

将这些数据保存在hive表中
首先创建表

create table student(
    name string,
    parents array<string>,
    score map<string, int>,
    address struct<province:string, city:string>
) row format delimited
fields terminated by '\t'
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';

创建表的相关语句解释
row format delimited
fields terminated by ',' 列分隔符
collection items terminated by '_' MAP STRUCT 和 ARRAY 的分隔符(数据分割符号)
map keys terminated by ':' MAP中的key与value的分隔符
lines terminated by '\n';行分隔符,默认\n,可不写
导入数据

load data local inpath '/opt/module/datas/student.txt' into table student;

查询数据

select * from student;
select name,parents[0],parents[1],score["语文"],address.province from student;

类型转化

Hive的原子数据类型是可以进行隐式转换的,类似于Java的类型转换,例如某表达式使用INT类型,TINYINT会自动转换为INT类型,但是Hive不会进行反向转化,例如,某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,它会返回错误,除非使用CAST操作

隐式类型转换规则如下

  1. 任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT。
  2. 所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。
  3. TINYINT、SMALLINT、INT都可以转换为FLOAT。
  4. BOOLEAN类型不可以转换为任何其它的类型。

可以使用CAST操作显示进行数据类型转换

例如CAST('1' AS INT)将把字符串'1' 转换成整数1;如果强制类型转换失败,如执行CAST('X' AS INT),表达式返回空值 NULL。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容