下文只描述不常见的Hive创建|删除|截断表的用法
指定数据库创建表
如果不指定数据库,hive会把表创建在default数据库下,假设有一个hive的数据库mydb,要创建表到mydb,如下:
CREATE TABLE mydb.pokes(foo INT,bar STRING);
或者是
use mydb; --把当前数据库指向mydb
CREATE TABLE pokes(foo INT,bar STRING);
create-table-as-select (CTAS)
CTAS创建的表是原子性的,这意味着,该表直到所有的查询结果完成后,其他用户才可以看到完整的查询结果表。
CTAS唯一的限制是目标表,不能是一个有分区的表,也不能是外部表。
简单的方式
CREATE TABLE new_key_value_store
AS
SELECT (key % 1024) new_key, concat(key, value) key_value_pair FROM key_value_store;
复杂的方式
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;
删除表
DROP TABLE table_name;
DROP TABLE IF EXISTS table_name;
删除表会移除表的元数据和数据,而HDFS上的数据,如果配置了Trash,会移到.Trash/Current目录下。
删除外部表时,表中的数据不会被删除。
截断表
从表或者表分区删除所有行,不指定分区,将截断表中的所有分区,也可以一次指定多个分区,截断多个分区。
TRUNCATE TABLE table_name;
TRUNCATE TABLE table_name PARTITION (dt='20080808');