Hive建库
建库语法
CREATE DATABASE [IF NOT EXISTS] database_name
#database_name :库名
#IF NOT EXISTS :如果没有该字段库存在则报错。如果有该字段库存在则不报错。
[COMMENT database_comment]
#database_comment :库的描述信息
[LOCATION hdfs_path]
#hdfs_path :库的地址(默认在配置文件hive.metastore.warehouse.dir设置的路径)
[WITH DBPROPERTIES ('属性的名字'='属性的值', ...)];
#WITH DBPROPERTIES :给库设置属性
对库的操作
--1.查看所有的库(like :模糊查询)
show databases [like '匹配的字符'];
--2.查看库的详情(extended :可以查看库的属性)
desc database [extended] 库名;
--3.选库
use 库名;
--4.修改库:只能改库的属性
alter database 库名 set dbproperties('key'='值');
--5.删库
#if exists :如果不加该字段库不存在则报错。加上该字段库不存在不报错。
#cascade :用来删除非空的库。
drop database [if exists] 库名 [cascade];
--6.查看建库的语句
show create database 库名;
Hive建表
Hive建表语法:
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later)
[(col_name data_type [column_constraint_specification] [COMMENT col_comment], ... [constraint_specification])]
[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]
[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)]
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
--行格式 ,指定字段分割符
[ROW FORMAT row_format]
-- 字段分割符 delimited fields terminate by ','
-- 集合类型分割符(array,map,struct) collection items terminated by '_'
--存储格式 默认是
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later)
]
--数据存储hdfs上位置 TextFile ,还可以是orc parquet
[LOCATION hdfs_path]
--表属性 ,没用过
[TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later)
--将查询结果作为一张新表,不支持外部表
[AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)
EXTERNAL关键字创建外部表。
外部表在进行表删除时,只删除元数据,表数据不会删除。
内部表进行表删除时,元数据和表数据都会被删除。
通过已经存在的表创建Hive表语法:
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path];
集合数据类型创建表示例:
create table person(
name string, #String类型
friends array<string>, #数组类型
children map<string,int>,#map类型
address struct<street:string,city:string,email:int> #struct类型
)
row format
#字段按照什么字符分隔开
delimited fields terminate by ','
#集合数据类型(array,map,struct)型用什么分隔开
collection items terminated by '_'
#map的k,v用什么分隔开
map keys terminated by ':'
#每条数据用什么分隔开--(可以不写默认的)
lines terminated by '\n'
集合数据类型的表查询
select friends[0],children['xiao song'],address.city from test;
#数组类型的字段名[索引值]
#map类型的字段名[key的名字]
#struct类型的字段名.字段名
对表的操作
--1.查看所有的表
show tables;
--2.查看表结构(fromatted :查看表更详细的信息)
desc [fromatted] 表名;
--3.删除表
drop table 表名;
数据导入
1.文件方式导入数据
# LOCAL表示导入本地文件,否则为HDFS上的文件
# OVERWRITE 覆盖写入
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] [INPUTFORMAT 'inputformat' SERDE 'serde'] (3.0 or later)
2.直接插入数据
# insert into追加写
# insert overwrite 覆盖写
insert into|overwrite table tableName values(col1_valuse,col2_valuse),(col1_valuse,col2_valuse).......;
3.将查询的结果插入表中
insert into table tableName query_sql;
4.通过查询结果创建一张表
create table if not exists tableName as query_sql;
5.创建表时,指定数据存储位置为已经存在数据文件的路径
create table stu( id int, name string ) row format delimited fields terminated by '\t' location '/stu';
6.Import导入
#Import导入的数据必须是Export导出的数据
#将数据导入的表必须是不存在的
import table tableName from 'hdfs_path'