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)
数据类型和文件格式
基本数据类型
数据类型 | 长度 | 例子 |
---|---|---|
TINYINT | 1byte有符号整数 | 20 |
SMALINT | 2byte有符号整数 | 20 |
INT | 4byte有符号整数 | 20 |
BIGINT | 8byte有符号整数 | 20 |
BOOLEAN | 布尔类型,true或false | TRUE,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’) |
MAP | MAP是一组键-值对元组集合,使用数组表示法(例如[‘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的主要内容,如果未能解决你的问题,请参考以下文章