//查看所有的数据库
hive> show databases ;
//使用数据库default
hive> usedefault;
//查看数据库信息
hive > describe database default;
OK
db_name comment location owner_name owner_type parameters
defaultDefault Hive database hdfs://hadoop1:8020/user/hive/warehouse public ROLE
Time taken: 0.042 seconds, Fetched: 1 row(s)
//显示地展示当前使用的数据库
hive> set hive.cli.print.current.db=true;
hive(default)>
//创建数据库命令
hive (default)> create database test comment "描述信息";
OK
Time taken: 10.128 seconds
//切换当前的数据库
hive (default)> usetest;
OK
Time taken: 0.031 seconds
hive (test)>
//删除数据库
删除数据库的时候,不允许删除有数据的数据库,如果数据库里面有数据则会报错。如果要忽略这些内容,则在后面增加CASCADE关键字,则忽略报错,删除数据库。
hive> DROP DATABASE DbName CASCADE(可选);
hive> DROP DATABASE IF EXISTS DbName CASCADE;
//修改数据库
alter database test set ....
数据表常用操作
//查看当前DB有啥表
hive> SHOW TABLES IN DbName;
hive> SHOW TABLES IN liguodong;
OK
tab_name
Time taken: 0.165 seconds
//也可以使用正则表达式 hive> SHOW TABLES LIKE'h*';
hive (default)> SHOW TABLES LIKE'*all*' ;
OK
tab_name
addressall_2015_07_09
Time taken: 0.039 seconds, Fetched: 1 row(s)
//获得表的建表语句
hive (default)> showcreatetable address1_2015_07_09;
OK
createtab_stmt
CREATETABLE`address1_2015_07_09`(
`addr1` bigint)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://nameservice1/user/hive/warehouse/address1_2015_07_09'
TBLPROPERTIES (
'COLUMN_STATS_ACCURATE'='true',
'numFiles'='1',
'numRows'='0',
'rawDataSize'='0',
'totalSize'='4',
'transient_lastDdlTime'='1436408451')
Time taken: 0.11 seconds, Fetched: 17row(s)
//创建表
CREATE [TEMPORARY] [EXTERNAL] TABLE [IFNOTEXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0and later)
[(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]
[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0and later)]
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0and later)
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0and later)
[AS select_statement];-- (Note: Available in Hive 0.5.0 and later; not supported for external tables)
//举个例子
createtable employee(
name STRING,
salary FLOAT,
subord ARRAY<STRING>,
ded MAP<STRING,FLOAT>,
address STRUCT<street:STRING,city:STRING,zip:INT>
)
row format delimited fields terminated by'\t' lines terminated by'\n' stored as textfile;--指定字段分隔符和行分隔符 指定文件存储格式
//加载数据
hive (default)> load data local inpath ‘/liguodong/hivedata/datatest’ overwrite intotable testtable;
hive (default)> load data local inpath ‘/liguodong/hivedata/datatest’ intotable testtable;--如果没有使用overwrite,则会再拷贝一份数据,不会覆盖原来的数据。
//查找表数据
--注意:select * 不执行mapreduce,只进行一个本地的查询。 --而select 某个字段 生成一个job,执行mapreduce。select * from employees;select * from employees limit 10;
//删除表
--内部表删除,会连同hdfs存储的数据一同删除,而外部表删除,只会删除外部表的元数据信息。
hive (default)> droptable testtable;
OK
Time taken: 10.283 seconds
hive (default)> droptable testexttable;
OK
Time taken: 0.258 seconds
//Hive建表的其他方式
--有一个表,创建另一个表(只是复制了表结构,并不会复制内容。) 不需要执行mapreducecreatetable test3 like test2;--从其他表查询,再创建表(复制表结构的同时,把内容也复制过来了) 需要执行mapreducecreatetable test2 asselect name,addr from test1;
//查看表的详细信息
describe formatted/extended tableName
create EXTERNAL tableName --创建扩展表(外部表)
row format delimited fields terminated by'\t'--字段分隔符
//创建分区表create table partitionetest(
name STRING,
country STRING,
state STRING
)
partitioned by (country STRING ,state STRING)
当用where 来进行分区过滤的时候,这些叫做分区过滤器
set hive.mapred.mode=strict --设置为严格,默认是 nostrict,这样对分区表进行查询而where字句没有分区过滤的话,就会被禁止提交这个任务
查看表分区信息
show partitions employee;--查看employee表中的所有分区show partitions employee(country='US',state='AK');--查看指定分区的信息
创建一个外部表的分区
createexternaltableifnotexists log_message (
hms INT,
severity STRING,
sever STRING,
process_id INT,
message STRING
)
partitioned by (yearint ,monthint,dayint)
row format delimited fields terminated by'\t';
select * from tableName r where r....; --这里查询和sql类似,符号 函数,limit 别名 嵌套等方面。
select name,salary
case
when salary < 5000 then ...
when salary > 5000 then ...
END AS BRUCKET FROM employee;
JOIN:hive只支持等值连接。
**类型转换:**case()
数据排序 数据排序主要包括:ORDER, and SORT. 该操作同样经常使用,以便生成已排序表从而进行后面的包括top N, maximum, minimum等取值操作。 主要操作包括ORDER BY (ASC|DESC)、SORT BY(ASC|DESC)、DISTRIBUTE BY、CLUSTER BY
DISTRIBUTE BY :该操作类似于RDBMS中的GROUP BY,根据制定的列将mapper的输出分组发送至reducer,而不是根据partition来分组数据。 注:如果使用了SORT BY,那么必须在DISTRIBUTE BY之后,且要分发的列必须出现在已选择的列中(因为SORT BY的性质)。