1.查看表结构字段
hive>desc tablename;
hive>desc formatted tablename;//显示tablename的详细表结构信息
当使用formatted时,用于可以看到该表是外部表还是内部表(管理表)
如果是内部表,则输出Table Type: MANAGED_TABLE
如果是外部表,则输出Table Type: EXTERNAL_TABLE
2.在Hive中执行Hadoop的dfs命令
只需要将hadoop命令中的关键字'hadoop','hdfs'等去掉,如
hive>dfs -ls /;
3.创建表
hive默认是创建内部表(也称为管理表),即表的存放位置是在hive.metastore.warehouse.dir属性指定的地方。对于本地模式,该属性默认值是file:////user/hive/warehouse,对于其他模式,默认存储路径是hdfs://namenoe_server/user/hive/warehouse。
(1)创建内部表
hive>create table tablename(字段1 数据类型,字段2 数据类型,字段3 数据类型,......,字段n 数据类型);
其中基本数据类型如下:
数据类型 | 长度 | 例子 |
tinyint | 1byte有符合整数 | 20 |
smalint | 2byte有符合整数 | 20 |
int | 4byte有符合整数 | 20 |
bigint | 8byte有符合整数 | 20 |
boolean | 布尔类型,true或者false | true |
float | 单精度浮点数 | 3.14159 |
double | 双精度浮点数 | 3.14159 |
string | 字符串,可以使用单引号或者双引号 | 'now is the time',“for all good men” |
timestamp(v0.8.0+) | 整数,浮点数或者字符串 | 1327882394, 1327882394.123456789,和'2012-02-03 12:34:56.123456789' |
binary(v0.8.0+) | 字节数组 |
(2)创建外部表
a.指定hdfs路径
hive>create external table test(id int,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION ‘/test/hello′;
b.指定本地路径
hive>create external table test(id int,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION ‘file:///home/test′;
注意:当使用like拷贝一张已经存在的表的表模式时:
如hive>create table tablename1 like tablename2;如果tablename2(源表)是内部表,则tablename1也是内部表,如果tablename2是外部内,则tablename1也是外部表。
如hive>create external tablename1 like tablename2,则生成的tablename1是外部表。
4.查看Hive中所包含的数据库
hive>show databases;
hive>show databases like 'abc.*';显示以abc开头的所有数据库
5.创建数据库
hive>create database if not exists databasename;
hive>create database databasename comment 'my database';//comment用于添加数据库的描述信息
6.删除数据库
hive>drop database if exists databasename;
7.切换数据库
hive>use databasename;
8.查看数据库信息
hive>desc database databasename;
9.显示所有表
hive>show tables;
hive>show tables like 'abc.*';//显示以abc开头的所有表
hive>show tables in databasename;//用于显示指定数据库中的所有表
10.删除表
hive>drop table if exists tablename;
对于管理表,表的元数据信息和表内的数据都会被删除。
对于外部表,Hive并非认为其完全拥有这份数据。因此,删除该表并不会删除掉这份数据,但是描述表的元数据信 息会被删除掉。
11.修改表
大多数的表属性可以通过alter table语句来进行修改。alter table仅仅会修改表元数据,表数据本身不会有任何修改。
11.1表重命名
hive>alter table old-tablename rename to new_tablename;
11.2添加列
hive>alter table tablename add columns(字段1 数据类型,字段2 数据类型,......,字段n 数据类型);
11.3修改列信息
alter table tablename change
column old_colname new_colname col_type
[first|after col_name]
a.修改列名
hive>alter table tablename change column old_colname new_colname string;//将列old_name修改为new_colname,类型为string
b.修改列位置
hive>alter table tablename change column col1_name col1_name string after col2_name;//将列col1_name移到 列col2_name后面
注意:修改列信息的时候,即使字段名或者字段类型没有改变,用户也需要完全指定旧的字段名,并给处新的字段名及新的字段类型。
11.4删除列
hive>desc student;
OK
name string
age int
sex string
grade string
address string
现在删除grade列,执行:
hive> alter table student replace columns(name string,age int,sex string,address string);
OK
Time taken: 4.003 seconds
hive> desc student;
OK
name string
age int
sex string
address string
Time taken: 0.78 seconds, Fetched: 4 row(s)
12.删除表数据
hive>truncate table tablename;//删除内部表所有数据
hive>insert overwrite table t_table1 select * from t_table1 where XXXX;
其中xxx是需要保留的数据的查询条件。
如果清空表,如下:
insert overwrite table t_table1 select * from t_table1 where 1=0;