Hive常用创删表SQL笔记

2020-07-05

从度小满来到京东后,逐渐从原来的数据挖掘工程师转变成了SQL工程师。相比而言,京东的中台基建要比度小满强太多了,优点是做数据挖掘的同学就可以专注业务本身,不需要太关注于数据库环境/操作系统环境/任务调度各种琐碎的工程细节;缺点就是对我个人而言,原来各种相对全栈的技能就退化成专心写SQL了(^_^)。

下面稍微整理下在公司内部天天用到的Hive SQL创删表的一些语句,这些创删表语句基本上在使用Hive的每个公司都是天天用的。虽然也可以在需要时直接Google下就出来了,但每次都需要搜索,索性就一次性把它整理下,下次用到时直接到笔记复制粘贴即可。

创建新表

USE test_tmp;

DROP TABLE IF EXISTS test_tmp.temporary_table;

CREATE TABLE IF NOT EXISTS test_tmp.temporary_table
(
    company_name STRING COMMENT '企业名称',
    company_id   STRING COMMENT '企业唯一标识'
)
COMMENT '临时测试表'
PARTITIONED BY 
(
    dt   STRING COMMENT '时间切片'
)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n' 
STORED AS textfile;

注:上面使用的partition,即时间切片,不需要partition去掉即可;

往表里载入文件

1.载入本地文件

LOAD DATA LOCAL INPATH '/path/to/local/file'
OVERWRITE INTO TABLE test_tmp.temporary_table
PARTITION (dt = '2020-07-05');

2.载入HDFS上文件

LOAD DATA INPATH 'hdfs://path/to/local/file'
OVERWRITE INTO TABLE test_tmp.temporary_table
PARTITION (dt = '2020-07-05');

注:1.文件需与表结构对应,即字段是以 \t 分隔,记录是以 \n 分隔;2.以上两种载入的区别在于 LOCAL 关键字;

从一张表写入另一张表

INSERT OVERWRITE TABLE test_tmp.temporary_table PARTITION (dt = '2020-07-05')
    
SELECT company_name,
       company_id
FROM  test_tmp.temporary_another_table;

分区处理

1.添加和删除分区

ALTER TABLE test_tmp.temporary_table DROP IF EXISTS PARTITION (dt = '2020-07-05');

ALTER TABLE test_tmp.temporary_table ADD IF NOT EXISTS PARTITION (dt = '2020-07-05');

参考文献

  1. Hive Sql官方语法指南