Hive小结

(一).hive基本介绍

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能

其他知识:
DML(data manipulation language)数据操控语言
常用的select,update,insert,delete;主要用来对数据库的数据进行一些操作
DDL(data definition language)数据库定义语言
常用的create,alter,drop;主要是用在定义或改变表的结构,数据类型,表之间的链接和约束等初始化工作上
DCL(data control language)数据库控制语言
用来设置或更改数据库用户或角色权限的语句

###########################################
############hive常用命令##################

1.创建表

1.1建表语法
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name

[(col_name data_type [COMMENT col_comment], ...)]

[COMMENT table_comment]

[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]

[CLUSTERED BY (col_name, col_name, ...)

[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]

[ROW FORMAT row_format]

[STORED AS file_format]

[LOCATION hdfs_path]


1.2参数说明:
①EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据
②ROW FORMAT 用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive通过 SerDe 确定表的具体的列的数据
③STORED AS 指定用户源文件存储格式,常用的有以下几种: TEXTFILE, 默认格式,建表时不指定默认为这个格式;SEQUENCEFILE,一种Hadoop API提供的二进制文件,使用方便、可分割、可压缩等特点;RCFILE,一种行列存储相结合的存储方式; ORC,hive给出的新格式,属于RCFILE的升级版,性能有大幅度提升.



1.3样例:

CREATE EXTERNAL TABLE IF NOT EXISTS hive_table_user
(
userid STRING COMMENT '用户id'
,username STRING COMMENT '用户姓名'
,sex STRING COMMENT '用户性别'
,address STRING COMMENT '家庭地址'
)
COMMENT '用户表'
PARTITIONED BY (pt_d VARCHAR(8) COMMENT '天分区', pt_h VARCHAR(2) COMMENT '小时分区')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '01'
LINES TERMINATED BY ' '
STORED AS ORC
LOCATION 'hdfs://test01/test02/hive_table_user'
TBLPROPERTIES('orc.compress'='ZLIB');


2.常用的sql命令:
(1)show tables;
(2)use db2;
...

#################################################
############scala操作hive##################
import org.apache.spark.sql.{Dataset, SparkSession}

val ss = SparkSession.builder().getOrCreate()
val sc = ss.sparkContext
val sqlContext = ss.sqlContext
import sqlContext.implicits._

//读取hive表,获得 Dataset[ROW]
val contentDF = sqlContext.sql("select userid,mathscore,physicscore,address from user_table where pt_d=20190101").select("userid", "mathscore", "physicscore", "address")
.where("userid is not null")
.where("mathscore is not null")
.where("physicscore is not null")

原文地址:https://www.cnblogs.com/ShyPeanut/p/11265332.html