Hive数据定义
数据定义
创建数据库
Hive不支持行级插入操作、更新操作和删除操作,也不支持事务。HiveQL和MySQL比较相似。
创建Hive的数据库,数据库的文件目录名以.db结尾。
CREATE DATABASE IF NOT EXISTS databasename;
SHOW DATABASES LIKE 'H.*';
可以通过以下命令来修改默认的位置:
CREATE DATABASES databasename LOCATION 'path';
查看数据库信息,会显示数据库文件目录位置路径
DESCRIBE DATABASE databasename;
创建表
创建表,COMMENT信息,LOCATION存储位置,TBLPROPERTIES文档说明
CREATE [EXTERNAL] TABLE [IF NOT EXSITS] tablename
[(col_name date_type)]//列名和类型
[COMMENT table_comment]//注释
[PARTITIONED BY (col_name date_type,...)]//分区信息,文件夹
[CLUSTER BY (cil_name,col_name)]//分桶,分文件
[SORTED BY (col_name)]
[ROW FORMAT row_format]//分隔信息
[STORED BY file+format]//存储格式
[LOCATION hdfs_path]//存储路径
CREATE TABLE IF NO EXISTS mydb.employees (
name STRING COMMENT 'Employee name',
salary FLOAT COMMENT 'Employee salary',
subordinates ARRAY<STRING> ,
deductions MAP<STRING, FLOAT> COMMENT 'Keys are deductions names,values are percentages',
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
COMMENT 'Description of the table'
TBLPROPERTIES ('creator'='me','created_at'='2012-01-02')
LOCATION 'usr/hive/warehouse/mydb.db/employee';
内部表和外部表
内部表删除时,也会删除数据,内部表不适合和其他工具共享数据。
外部表则不会,只会删除元数据信息。
CREATE EXTERNAL TABLE()//创建外部表
分区表
以column分区,相同column的一个目录。提高了搜索速度,缩小搜索范围。
CREATE TABLE employees (
)
PARTITIONED BY (country STRING, state STRING);
分区表加载数据时,要指定分区目录,否则加载失败
修改表,增加一个分区
ALTER TABLE log_messages ADD PARTITION(year = 2012, month = 1, day = 2)
LOCATION 'hdfs://data/log_messages/2012/01/02'
Hive不关心一个分区对应的分区目录是否存在或者分区目录下是否有文件。
三种上传数据方式:上传数据后修复;上传数据后添加分区;数据load到分区
msck repair table tablename;
//在hdfs上建立目录后,上传数据,修复后才能查询到
修改表
重命名
ALTER TABLE tablename RENAME TO tablename2;
增加、修改和删除表分区
ALTER TABLE tablename ADD/DROP/SET
修改列信息
ALTER TABLE log_messages
CHANGE COLUMN hms hours_minutes_seconds INT
AFTER severity;//字段转移到severity字段之后
修改表属性和存储属性
ALTER TABLE table1 SET TBLPROPERTIES();
ALTER TABLE table1 PARTITION() SET FILEFORMAT SEQUENCEFILE;//存储为sequencefile格式