Hive数据库和表操作

在进行数据库或者表操作时,需要注意以下事项
- 注意基本语法中()表示必须参数,[]表示可选参数
- 各种语法中,若执行失败,除了检查语法正确与否之外,还需注意版本是否支持
- 在进行删除、清空等操作时,需要考虑一旦操作失误造成的影响
- 数据库命令规则:ods/dws/等
- 表格命名规则:库名_主题域_主题_主体_后缀,如dws_trade_user_refund_y
数据库操作
  • 数据库创建
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
eg:
	create database hive_test;
  • 数据库使用
USE database_name;
eg:
	use hive_test;
  • 数据库修改
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);

ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role;
 
ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path;
eg:
	alter database hive_test set dbproperties ("update"="Tom");
	alter database hive_test set owner user hadoop;
  • 数据库删除
    • 默认是restrict模式,即数据库中存在表是无法删除数据库
    • 若要强制删除数据库,可选择cascade模式
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
eg:
	drop databse if exists hive_test cascade;
表操作
  • 表创建方式
    • 直接建表
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name  
[(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] -- 分桶
[ROW FORMAT row_format] 
[STORED AS file_format];

-- 常用参数说明
array_type
  : ARRAY < data_type >

map_type
  : MAP < primitive_type, data_type >

struct_type
  : STRUCT < col_name : data_type [COMMENT col_comment], ...>

union_type
   : UNIONTYPE < data_type, data_type, ... >

row_format
  : DELIMITED 
  [FIELDS TERMINATED BY char [ESCAPED BY char]] 
  [COLLECTION ITEMS TERMINATED BY char]
        [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
        [NULL DEFINED AS char]
  | SERDE serde_name 
  [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

file_format:
  : SEQUENCEFILE
  | TEXTFILE    
  | RCFILE      
  | ORC         
  | PARQUET     
  | AVRO        
  | JSONFILE    
  | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname


default_value:
  : [ LITERAL|CURRENT_USER()|CURRENT_DATE()|CURRENT_TIMESTAMP()|NULL ]  

 eg:
	CREATE TABLE apachelog (
	host STRING,
	identity STRING,
	user STRING,
	time STRING,
	request STRING,
	status STRING,
	size STRING,
	referer STRING,
	category array<string>,
	agent map<string,string>
	) 

	row format delimited 
	fields terminated by "\t" 	       -- 指定字段分隔符
	collection items terminated by ',' -- 指定array类型的数据分隔符
	map keys terminated by ':'         -- 指定map类型的数据分隔符
	stored as textfile;                -- 指定保存的文件格式

- 查询建表
CREATE TABLE new_key_value_store
   ROW FORMAT SERDE "org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe"
   STORED AS RCFile
   AS
SELECT (key % 1024) new_key, concat(key, value) key_value_pair
FROM key_value_store
SORT BY new_key, key_value_pair;
- like建表
  CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
  LIKE existing_table_or_view_name
  [LOCATION hdfs_path];
  • 表分类
    • 内部表
CREATE TABLE apachelog (
host STRING,
identity STRING,
user STRING,
time STRING,
request STRING,
status STRING,
size STRING,
referer STRING
) 
row format delimited 
fields terminated by "\t"
stored as textfile;                
- 外部表
CREATE EXTERNAL TABLE page_view(
viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User',
country STRING COMMENT 'country of origination')
COMMENT 'This is the staging page view table'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
STORED AS TEXTFILE
LOCATION '<hdfs_location>';
- 分区表
CREATE TABLE page_view(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
STORED AS SEQUENCEFILE;
- 分桶表
CREATE TABLE page_view(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
STORED AS SEQUENCEFILE;
- 倾斜表
-- 单字段
CREATE TABLE list_bucket_single (key STRING, value STRING)
SKEWED BY (key) ON (1,5,6) [STORED AS DIRECTORIES];

-- 双字段
CREATE TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING)
SKEWED BY (col1, col2) ON (('s1',1), ('s3',3), ('s13',13), ('s78',78)) [STORED AS DIRECTORIES];
- 临时表
CREATE TEMPORARY TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING);
- 事务表
-- Hive 4.0
CREATE TRANSACTIONAL TABLE transactional_table_test(key string, value string) 
PARTITIONED BY(ds string) STORED AS ORC;
- 约束表
create table pk(id1 integer, id2 integer,
primary key(id1, id2) disable novalidate);

create table fk(id1 integer, id2 integer,
constraint c1 foreign key(id1, id2) references pk(id2, id1) disable novalidate);
  • 表删除
DROP TABLE [IF EXISTS] table_name [PURGE];
eg:
	drop table hive_test;
  • 表数据清空
TRUNCATE TABLE table_name [PARTITION partition_spec];
 
partition_spec:
  : (partition_column = partition_col_value, partition_column = partition_col_value, ...)

 eg:
 	truncate table hive_test;
  • 表修改
    • 修改表名
ALTER TABLE table_name RENAME TO new_table_name;
eg:
	alter table hive_test rename to hive_demo;
- 修改表属性
ALTER TABLE table_name SET TBLPROPERTIES table_properties;
 
table_properties:
  : (property_name = property_value, property_name = property_value, ... )
eg
  ALTER TABLE hive_demo SET TBLPROPERTIES ('comment' = "hive demo");
- 增加表分区
ALTER TABLE table_name ADD [IF NOT EXISTS] 
PARTITION partition_spec 
[LOCATION 'location']
[, PARTITION partition_spec [LOCATION 'location'], ...];
 
partition_spec:
  : (partition_column = partition_col_value, partition_column = partition_col_value, ...)
eg:
ALTER TABLE page_view ADD PARTITION (dt='2008-08-08', country='us') 
location '/path/to/us/part080808' 
PARTITION (dt='2008-08-09', country='us') 
location '/path/to/us/part080809';
- 重命名分区
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
- 删除分区
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]
  [IGNORE PROTECTION] [PURGE];  
eg:
	ALTER TABLE page_view DROP PARTITION (dt='2008-08-08', country='us');
- 修改列
ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type
  [COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];
eg:	
	CREATE TABLE test_change (a int, b int, c int);
	ALTER TABLE test_change CHANGE a a1 INT;
	-- 将a1列名称改为a2,数据类型为字符串,并将字段放在b后面
	ALTER TABLE test_change CHANGE a1 a2 STRING AFTER b;
	-- 将c列改名为c1,并放到第一列
	ALTER TABLE test_change CHANGE c c1 INT FIRST;
	-- 向a1增加注释
	ALTER TABLE test_change CHANGE a1 a1 INT COMMENT 'this is column a1';
- 增加或替换列
ALTER TABLE table_name 
  [PARTITION partition_spec]
  ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
  [CASCADE|RESTRICT]     
eg:
	alter table hive_demo add columns (city string);
发布了5 篇原创文章 · 获赞 0 · 访问量 189

猜你喜欢

转载自blog.csdn.net/qq_36160283/article/details/105380465
今日推荐