Hive编程指南学习笔记(1)

hive一次使用命令:

$ hive -e "select * from mytable limit 1;"
OK
name1 1
name2 2
Time taken: 3.935 seconds
$ hive -e "select * from mytable limit 1;" > /tmp/myfile
$ cat /tmp/myfile
OK
name1 1
name2 2
Time taken: 3.935 seconds

静默模式:

$ hive -S -e "select * from mytable limit 1;" > /tmp/myfile
$ cat /tmp/myfile
name1 1
name2 2

从文件中执行Hive查询:

$ hive -f /tmp/queries.hql

在Hive shell中可以使用source命令来执行一个脚本文件:

$ cat /tmp/queries.hql
select * from mytable limit 1;
$ hive
hive> source /tmp/queries.hql;
...

执行shell命令:

用户不需要退出hive cli就可以执行简单的bash shell命令。只要在命令前加上!并且以分号(;)结尾就可以。

hive> ! /bin/echo "hello, world!";
"hello, world";

hive cli中不能使用需要用户进行输入的交互式命令,而且不支持shell的管道功能和文件名的自动补全功能。例如,! ls *.hql; 这个命令表示的是查找名为*.hql的文件,而不是表示显示以.hql结尾的所有文件。

在hive内使用hadoop的dfs命令

用户可以在hive cli中执行hadoop的dfs命令,只需要将hadoop命令中的关键字hadoop去掉,然后以分号结尾就可以了。

hive> dfs -ls / ;
Found 2 items
drwxr-xr-x     -    root supergroup     0    2014-11-06     12:00     /flag
drwxr-xr-x     -    root supergroup     0    2014-11-07     15:00     /user

hive脚本中如何进行注释

用户可以使用以--开头的字符串来表示注释,例如:

-- Copyright 2012
-- This is a test
select * from mytable limit 1;

支持的数据类型:

数据类型    长度

tinyint   1byte有符号整数

smalint   2byte有符号整数

int       4byte有符号整数

bigint    8byte有符号整数

boolean   布尔类型

float     单精度浮点数

double    双精度浮点数

string    字符串

timestamp 整数,浮点数或字符串

binary    字节数组

timestamp

整数:距离1970-01-01 00:00:00的秒数

浮点数:1970-01-01 00:00:00的秒数,精确到纳秒(小数点后保留9位数)

字符串:YYYY-MM-DD hh:mm:ss.ffffffff

timestamp表示的是UTC时间,hive提供了不同时区相互转换的内置函数:to_utc_timestamp和from_utc_timestamp

binary可以在记录中包含任意字节,这样可以防止hive尝试将其作为数字、字符串等进行解析。

集合数据类型

1)struct

和c语言中的struct或对象类似。都可以通过"."符号访问元素内容。例如,如果某个列的数据类型是struct{first,last},那么第一个元素可通过字段名.first来引用。

2)map

例如,有一个map的键值对为‘first‘->‘name‘,可通过字段名[‘first‘]来访问该元素

3)array

例如,数组值为[‘name‘],那么第一个元素可通过数组名[0]来访问「

下面是一个创建表的语句示例:

create table employee (
     name    string,
     age     tinyint,
     salary    float,
     subordinates   array<string>,
     address   struct<country:string,province:string,city:string,street:string>
);

hive中默认的记录和字段分隔符

\n:每行都是一条记录

^A(Ctrl+A):用于分隔字段(列),在create table语句中可以使用八进制编码\001表示

^B:用于分隔array或struct中的元素,或用于map中键-值对之间的分隔。在create table语句中可以使用八进制编码\002表示

^C:用于map中键-值对之间的分隔。在create table语句中可以使用八进制编码\003表示

上面的建表语句和下面的是一样的:

create table employee (
     name    string,
     age     tinyint,
     salary    float,
     subordinates   array<string>,
     address   struct<country:string,province:string,city:string,street:string>
)
row format delimited
fields terminated by '\001'
collection items terminated by '\002'
map keys terminated by '\003'
lines terminated by '\n'
stored as textfile;

其中,row format delimited这组关键字必须要写在其他字句(除了stored as ...)之前。

HiveQL:数据定义

HiveQL是Hive查询语言,它不完全遵守任一种ANSI SQL标准的修订版。Hive不支持行级插入操作、更新操作和删除操作。Hive也不支持事务。

hive中数据库的概念本质上是表的一个目录或者命名空间。然而,对于有很多组和用户的大集群来说,这样可以避免表命名冲突。

如果用户没有显式的指定数据库,那么将会使用默认的数据库default。

下面展示如何创建一个数据库:

hive> create database financial;

如果数据库financial已经存在,将会抛出一个错误信息。使用下面的语句可以避免这种情况下抛出错误信息:

hive> create database financial if not exists financial;

可以通过下面语句来查看hive中包含的数据库:

hive> show databases;
default
financial

如果数据库很多,可以使用正则表达式来筛选需要的数据库名:

hive> show databases like 'f.*'
financial

上面的例子用来显示以f开头的那些数据库名。

hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储。唯一的例外是default数据库中的表,因为这个数据库本身没有自己的目录。

数据库所在目录位于属性"hive.metastore.warehouse.dir"所指定的为止。加入用户将这个属性的值设置为/user/hive/warehouse,那么当创建数据库financial时,hive将会对应的创建一个目录/user/hive/warehouse/financial.db。

请注意,数据库的文件目录名是以.db结尾的。

用户可以通过如下命令来修改这个默认的位置:

hive> create database financial location '/user/hive/mywarehouse';

用户也可以给这个数据库增加一个描述信息。语句如下:

hive> create databases financial comment 'Holds all financial tables';

可以通过如下语句来查看数据库的描述信息:

hive>describe database financial;
financial Holds all financial tables hdfs://master-server/user/hive/warehouse/financial.db

可以通过下面语句来切换数据库:

hive> use financial;
...
hive> use default;
...

可以删除数据库:

hive> drop database if exists financial;

默认情况下,hive不允许删除一个包含表的数据库,要么先删除数据库中所有的表,再删除数据库,要么在删除数据库的命令后面加上关键字cascade:

hive> drop database if exists financial cascade;

修改数据库:

用户可以使用alter database命令来为某个数据库的dbproperties设置键-值对属性值,来描述这个数据库的属性信息。但数据库的其他元数据都不可更改,包括数据库名和数据库所在目录位置:

hive> alter database financials set dbproperties('created by' = 'aaron')

创建表:

create table语句遵循sql语法惯例。例如:

create table if not exists financial.employee (
     name    string,
     age     tinyint,
     salary    float,
     subordinates   array<string>,
     address   struct<country:string,province:string,city:string,street:string>
);

显示数据库中的表:

hive> use financial;
hive> show tables;
employee

即使不在financial数据库下,也可以列举该数据库下的表:

hive> use default;
hive> show tables in financial;
employee

同样的,也可以使用正则表达式过滤出所需要的表名:

hive> use financial;
hive> show tables like 'emp.*';
employee

转载请注明出处:http://blog.csdn.net/iAm333

时间: 2024-10-24 22:00:16

Hive编程指南学习笔记(1)的相关文章

Hive编程指南学习笔记(2)

我们可以使用describe extended financial.employee命令来查看这个表的详细表结构信息(如果当前所处的工作数据库就是financial,那可以不佳finanacial). 如果使用formatted替代关键字extended的话,那可以得到更多的输出信息. 如果用户只想查看某一列的信息,那么只要在表名后增加这个字段的名称即可.这种情况下,使用extended关键字也不会增加更多的输出信息: hive> describe financial.employee.sala

Linux Unix shell 编程指南学习笔记(第一部分)

第一章:文件安全与权限: 1.文件和目录的权限 创建文件时系统保存了文件所有相关的信息,包括 文件的位置 . 文件类型 . 文件长度 . 哪位用户拥有该文件,哪些用户可以访问该文件 . i 节点 . 文件的修改时间 . 文件的权限位 . 文件类型: d: 目录 l : 符号链接(指向另一个文件) s: 套接字文件 b: 块设备文件 c: 字符设备文件 p: 命名管道文件 -: 不属于上述类型的文件 文件权限 XXX       XXX        XXX 最左边 XXX : 文件属主 权限位

hive编程指南——读书笔记(无知小点记录)

set hive.metastore.warehouse.dir=/user/myname/hive/warehouse; 用户设定自己的数据仓库目录.不影响其他用户.也在$HOME/.hiverc中设置,则每次启动hive自动加载 hive -(d,ef,H,h,i,p,S,v) 定义变量var,在hql中直接引用${var} set (显示或修改) set; (看所有变量) set env:HOME; set -V; 不加-V打印命名空间 hive --define foo=bar (-d简

Linux Unix shell 编程指南学习笔记(第四部分)

第十六章  shell脚本介绍 此章节内容较为简单,跳过. 第十七章   条件测试 test命令 expr命令 test  格式  test  condition     或者  [ condition ]  (注意: condition两侧有空格) 文件状态测试: - d 目录 : - s 文件长度大于0.非空 : - f 正规文件 - w 可写 : - L 符号连接 : - u 文件有s u i d位设置 - r 可读 : - x 可执行 测试的逻辑操作符: -a   :逻辑与,操作符两边均

Linux Unix shell 编程指南学习笔记(第三部分)

第十三章  登陆环境 登陆系统时,输入用户名和密码后,如果验证通过,则进入登录环境. 登录过程 文件/etc/passwd $HOME.profile 定制$HOME.profile /etc/passwd 文件解析(抽取其中的一行作为示例): 1 2 3 4 5 6 7 root: <span style="white-space:pre"> </span>x: 0: 0: root: <span style="white-space:pre&

Linux Unix shell 编程指南学习笔记(第二部分)

第七章  正则表达式介绍 匹配行首与行尾 匹配数据集 职匹配字母和数字 句点 "." 匹配任意单字符. ^,在行首 匹配字符串或字符序列,如查询当前目录下的所有目录: ls -l | grep "^d" 在行尾以 "$"匹配字符串或字符  , 匹配所有以sh结尾的行: sh$ 匹配所有的空行: ^$ 使用*匹配字符串中单字符或重复序列: skdf*jl 使用 \ 转义特殊字符的含义: 特殊字符:   $  .   ''  '   *  [  ]

JavaScript面向对象编程指南——学习笔记1

第1章 引言 1.1 回顾历史 1.2 变革之风 1.3 分析现状 1.4 展望未来 1.5 面向对象的程序设计 1.5.1 对象(属性和方法的集合) 1.5.2 类 (相似对象的共同特征,如麻雀.老鹰都是鸟类) 1.5.3 封装 (将属性和方法集合起来,也有封闭作用域的概念,如封装一个播放器对象) 1.5.4 聚合 (将几个对象合并成一个对象) 1.5.5 继承 (一个实例对象继承父级对象的一些属性和方法) 1.5.6 多态 (一个对象调用其他对象的方法,call和apply) 1.6 OPP

Linux Unix shell 编程指南学习笔记(第五部分)

第二十五章 深入讨论 << 当shell 看到 << 的时候,它知道下一个词是一个分界符,该分界符后面的内容都被当做输入,直到shell又看到该分界符(位于单独的一行).比如: cat >> tmpfile <<DOC > this is the first line > this is the second line > third > forth >..... >DOC 其中DOC就是分界符,再次在新的行中输入DOC时

Hadoop权威指南学习笔记一

Hadoop权威指南学习笔记一 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习参考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my_acm 1. 数据的增长远远超过了磁盘的读取速度,传统的数据存储方式和分析方式变得不再适用于大数据的处理. Hadoop分为两大核心技术,HDFS(HadoopDistributed File System-分布式hadoop文件处理系统)和MapReduce(分为Map-数据映射等