Hive编程指南学习01

Posted Weikun Xing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive编程指南学习01相关的知识,希望对你有一定的参考价值。

hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。

文章目录

启动

cd hadoop-2.7.3/sbin
./start-all.sh
cd hive/bin
hive --service metastore &
hive
hive> show databases;
OK
default
law
test
Time taken: 1.435 seconds, Fetched: 3 row(s)

数据类型和文件格式

基本数据类型

数据类型长度例子
TINYINT1byte有符号整数20
SMALINT2byte有符号整数20
INT4byte有符号整数20
BIGINT8byte有符号整数20
BOOLEAN布尔类型,true或falseTRUE,FALSE
FLOAT单精度浮点数3.14159
DOUBLE双精度浮点数3.14159
STRING字符序列‘I LEARN HIVE’,“i will do it good”
TIMESTAMP(v0.8.0+)整数,浮点数或字符串1327882394(Unix新纪元秒) ,‘2012-02-03 12:34:56.123456789‘ (JDBC所兼容的java.sql.Timestamp时间格式)
BINARY(v0.8.0+)字节数组

将一个字符串类型的列转换为数值

...cast(s AS INT) ...;

集合数据类型

数据类型描述字面语法示例
STRUCT和C语言中的struct或者对象类似,都可以通过点符号访问元素内容。例如,如果某个列的数据是STRUCTfirst STRUCT,last STRING ,那么第一个元素可以通过 字段名.first来引用struct(‘John’,‘Doe’)
MAPMAP是一组键-值对元组集合,使用数组表示法(例如[‘key’])可以访问元素。例如,如果某个列的数据类型是MAP,其中键值对是’first’->‘John’和’last’->‘Doe’,那么可以通过 字段名[‘last’] 获取最后一个元素map(‘first’,‘JOIN’,‘last’,Doe’)
ARRAY第二个元素可以通过 数组名[1]进行引用Array(‘John’,‘Doe’)

HiveQL:数据定义

Hive中的数据库

hive> SHOW DATABASES;
OK
default
law
test
Time taken: 0.187 seconds, Fetched: 3 row(s)
hive> CREATE DATABASE human_resources;
OK
Time taken: 3.035 seconds
hive> SHOW DATABASES;
OK
default
human_resources
law
test
Time taken: 0.031 seconds, Fetched: 4 row(s)

列举出所有以字母h开头,以其它字符结尾的数据库名

hive> SHOW DATABASES LIKE 'h.*';
OK
human_resources
Time taken: 0.057 seconds, Fetched: 1 row(s)

Hive会为每一个数据库创建一个目录,默认存储路径应该为/user/hive/warehouse数据库的文件目录名是以.db结尾
可以通过如下命令来修改这个默认的位置:
注意这个存储路径是在HDFS上

hive> CREATE DATABASE test1
    > LOCATION '/home/xwk/software';
OK
Time taken: 0.191 seconds

为数据库增加一个描述信息

hive> DROP DATABASE test1;
OK
Time taken: 2.603 seconds
hive> CREATE DATABASE test1
    > COMMENT 'THIS IS A TEST DATABASE';
OK
Time taken: 0.148 seconds
hive> DESCRIBE DATABASE test1;
OK
test1	THIS IS A TEST DATABASE	hdfs://192.168.10.20:8020/user/hive/warehouse/test1.db	root	USER	
Time taken: 0.025 seconds, Fetched: 1 row(s)

还可以为数据库增加一些和其相关的键值对信息

hive> CREATE DATABASE test1
    > WITH DBPROPERTIES('creator'='Weikun Xing','date'='2022-03-29');
OK
Time taken: 0.121 seconds
hive> DESCRIBE DATABASE test1;
OK
test1		hdfs://192.168.10.20:8020/user/hive/warehouse/test1.db	root	USER	
Time taken: 0.023 seconds, Fetched: 1 row(s)
hive> DESCRIBE DATABASE EXTENDED test1;
OK
test1		hdfs://192.168.10.20:8020/user/hive/warehouse/test1.db	root	USER	date=2022-03-29, creator=Weikun Xing
Time taken: 0.022 seconds, Fetched: 1 row(s)

USE命令用于将某个数据库设置为用户当前的工作数据库,和在文件系统中切换工作目录是一个概念。

hive> USE test1;
OK
Time taken: 0.064 seconds

显示当前数据库下所有的表

hive> SHOW TABLES;
OK
Time taken: 0.317 seconds

因为我没有创建表,所以这里没有返回表。

可以设置一个属性值来在提示符里面显示当前所在的数据库

hive> set hive.cli.print.current.db=true;
hive (test1)> set hive.cli.print.current.db=false;
hive>

删除数据库

hive> DROP DATABASE IF EXISTS test1;
OK
Time taken: 0.134 seconds

IF EXISTS子句是可选的,加了这个子句就可以避免因数据库不存在而抛出警告信息。

默认情况下,Hive是不允许用户删除一个包含有表的数据库的,用户要么先删除数据库中的表,然后再删除数据库;要么在删除命令最后面加上关键字CASCADE,这样可以使Hive先自行删除数据库中的表:

hive> CREATE DATABASE test1;
OK
Time taken: 0.123 seconds
hive> USE test1;
OK
Time taken: 0.024 seconds
hive> CREATE TABLE People(id int,name string);
OK
Time taken: 2.476 seconds
hive> DROP DATABASE test1;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database test1 is not empty. One or more tables exist.)
hive> DROP DATABASE test1 CASCADE;
OK
Time taken: 1.41 seconds

修改数据库

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

hive> CREATE DATABASE test;
OK
Time taken: 0.047 seconds
hive> ALTER DATABASE test SET DBPROPERTIES('edit-by'='Weikun Xing')
    > ;
OK
Time taken: 0.2 seconds

创建表

hive> CREATE TABLE IF NOT EXISTS employees(
    > name STRING COMMENT 'Employee name',
    > salary FLOAT COMMENT 'Employee salary',
    > subordinates ARRAY<STRING> COMMENT 'Names of subordinates',
    > deductions MAP<STRING,FLOAT> COMMENT 'Keys are deductions names,values are percentages',
    > address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT> COMMENT 'Home address')
    > COMMENT 'Description of the table'
    > LOCATION '/user/hive/warehouse/mydb.db/employees'
    > TBLPROPERTIES ('creator'='me','created_at'='2022-03-29 20:14:00');
OK
Time taken: 0.353 seconds

用户还可以拷贝一张已存在的表的表模式(而无需拷贝数据)

hive> CREATE TABLE IF NOT EXISTS employees2
    > LIKE employees;
OK
Time taken: 0.273 seconds

这里还可以接受可选的LOCATION语句,但是其他属性,包括模式,都是不可能重新定义的,这些信息直接从原始表获得。

列举出数据库下所有的表

hive> SHOW TABLES;
OK
employees
employees2
Time taken: 0.041 seconds, Fetched: 2 row(s)
hive> USE test;
OK
Time taken: 0.024 seconds
hive> SHOW TABLES IN mydb;
OK
employees
employees2
Time taken: 0.047 seconds, Fetched: 2 row(s)

列出以2结尾的表

hive> SHOW TABLES IN mydb LIKE '*.2';
OK
employees2
Time taken: 0.048 seconds, Fetched: 1 row(s)

查看表的详细表结构信息

hive> DESCRIBE EXTENDED employees;

hive> DESCRIBE employees;
OK
name                	string              	Employee name       
salary              	float               	Employee salary     
subordinates        	array<string>       	Names of subordinates
deductions          	map<string,float>   	Keys are deductions names,values are percentages
address             	struct<street:string,city:string,state:string,zip:int>	Home address        
Time taken: 0.098 seconds, Fetched: 5 row(s)
hive> DESCRIBE FORMATTED employees;

删除表

hive> DROP TABLE employees2;
OK
Time taken: 15.599 seconds

修改表

表重命名

hive> ALTER TABLE employees RENAME TO emp;
OK
Time taken: 2.556 seconds

增加列

hive> ALTER TABLE emp ADD COLUMNS(
    > app_name STRING COMMENT 'App name');
OK
Time taken: 1.515 seconds
hive> DESCRIBE emp;
OK
name                	string              	Employee name       
salary              	float               	Employee salary     
subordinates        	array<string>       	Names of subordinates
deductions          	map<string,float>   	Keys are deductions names,values are percentages
address             	struct<street:string,city:string,state:string,zip:int>	Home address        
app_name            	string              	App name            
Time taken: 0.059 seconds, Fetched: 6 row(s)

删除或者替换列

hive> ALTER TABLE emp REPLACE COLUMNS(
    > name STRING COMMENT 'Employee name',
    > salary FLOAT COMMENT 'Employee salary');
OK
Time taken: 0.592 seconds
hive> DESCRIBE emp;
OK
name                	string              	Employee name       
salary              	float               	Employee salary     
Time taken: 0.046 seconds, Fetched: 2 row(s)

修改表属性
可以附加或者修改已存在的属性,但是无法删除属性

hive> ALTER TABLE emp SET TBLPROPERTIES(
    > 'creator'='Weikun Xing');
OK
Time taken: 0.231 seconds

以上是关于Hive编程指南学习01的主要内容,如果未能解决你的问题,请参考以下文章

Hive编程指南学习03

《hive编程指南》学习文档

《hive编程指南》学习文档

Hive编程指南学习02

《hive编程指南》学习文档

《hive编程指南》学习文档