查看数据库
show databases;
创建数据库
create database sms_data;
删除数据库
DROP DATABASE IF EXISTS sms_data;
使用数据库
use 名称
显示数据库中的表
show tables;
显示表的详细信息
desc 名称;
describe 名称;
show create table t1;
详情
CREATE TABLE `t1`(
`id` int,
`name` string,
`hobby` array<string>,
`add` map<string,string>)
PARTITIONED BY (
`pt_d` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'colelction.delim'='-',
'field.delim'=',',
'mapkey.delim'=':',
'serialization.format'=',')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://hadooptest02:8020/user/hive/warehouse/database_name.db/t1'
TBLPROPERTIES (
'transient_lastDdlTime'='1565747871')
删除表语句
DROP TABLE IF EXISTS table_name PURGE;
PURGE: 直接删除,不移入回收站
简单的表创建
create table tb_test(name string, age int);
创建带分区表
CREATE TABLE if not exists test_partition ( id int,name string,age int)
PARTITIONED BY (date_id string)
设置分区命令
alter table t3 add partition(pt_d='201806');
查看分区
show partition t3
显示当前数据库
select current_database();
在命令行显示当前数据库
set hive.cli.print.current.db=true;
INSERT OVERWRITE TABLE employees
PARTITION (country = '中国', state = '北京')
SELECT * FROM staged_employees se
WHERE se.cnty = '中国' AND se.st = '北京';
由于使用了OVERWRITE关键字,目标表中原来相同partition中的所有数据被覆盖,如果目标表中没有partition,则整个表会被覆盖。
如果把OVERWRITE关键字删掉,或者替换成INTO,则hive会追加而不是替代原分区或原表中的数据,这个特性在Hive v0.8.0之后才支持。
获取表数据位置
desc formatted table_name;
获取表内容
desc 表名
插入数据
insert into t1(eid,name) values(1208,'jack')
这里插入的是data.txt文本中的内容
load data inpath '/data/data.txt' into table employee1;
data.txt文件内容
1206 tom 5000 Proof reader
插入partition数据
insert into test_partition partition(date_id="15785858585") values(1,"aaa",12);
动态分区表必须配置的参数
set hive.exec.dynamic.partition =true(默认false),表示开启动态分区功能
set hive.exec.dynamic.partition.mode = nonstrict(默认strict),表示允许所有分区都是动态的,否则必须有静态分区字段
动态分区相关的调优参数
set hive.exec.max.dynamic.partitions.pernode=100 (默认100,一般可以设置大一点,比如1000)
表示每个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错。
set hive.exec.max.dynamic.partitions =1000(默认值)
表示一个动态分区语句可以创建的最大动态分区个数,超出报错
set hive.exec.max.created.files =10000(默认) 全局可以创建的最大文件个数,超出报错。
根据设置的partition查询数据
select * from test_partition where date_id="15785858585";
date_id是我设置的partition,15785858585是我设置的partition值