Hive SQL DML语句(操作表数据)

/*
HQL DML语句介绍:
    它指的是 数据操作语言, 主要是用来 操作表数据的, 对表数据进行 增删改操作, 这里特指的是: 如何往Hive表中新增数据.

    数据导入:
        流向:
            Linux, HDFS => Hive
        方式:
            1. 通过 load data方式实现.
            2. 通过 insert + select 方式实现, 相对更灵活.

        load data方式详解:
            格式:
                load data [local] inpath '源文件的路径' [overwrite] into table 表名;
            解释:
                1. 加local指的是本地路径, 即: Linux文件路径.  路径前缀要加 file:///  可以省略不写.
                   不加local指的是HDFS路径, 路径前缀要加 hdfs://node1:8020/  可以省略不写.
                2. 不写overwrite是追加写入, 如果写了(overwrite)则是覆盖写入.

        insert + select 方式详解:
            格式:
                insert [into | overwrite] table 表名 partition(分区字段=值)
                select 列1, 列2... from 表名;
            细节:
                1. into是追加写入, 后续的table可以省略.
                   overwrite是覆盖写入, 后续的table不能省略.
                2. 插入的时候, 要求和查询出的列的个数, 对应的数据类型必须保持一致, 至于列名, 表名无所谓.
                3. insert + select方式底层回转MR程序来执行.
    数据导出:
        格式:
            insert overwrite [local] directory '目的地目录的路径' row format delimited fields terminated by '行格式分隔符'
            select 列1, 列2... from 表名;
        细节:
            1. 加local是Linux路径, 不加则是HDFS路径.
            2. 导出时, 是覆盖导出, 可以指定字段分隔符.
*/
-- ----------------------------------- 场景1: 数据导入之 load方式 -----------------------------------
-- 0. 切库
use day06;
-- 1. 创建学生表.
create table stu(
    id int,
    name string,
    gender string,
    age int,
    sno string
) row format delimited fields terminated by ',';

create table stu_hdfs(
    id int,
    name string,
    gender string,
    age int,
    sno string
) row format delimited fields terminated by ',';

-- 2. 通过load方式加载数据到 stu表中.
-- 2.1 从Linux中加载数据到stu表中, 追加写入.
load data local inpath '/export/data/hivedata/students.txt' into table stu;     -- 不转MR, Linux的源文件还在, 相当于拷贝一份给HDFS.

-- 2.2 从Linux中加载数据到stu表中, 覆盖写入.
load data local inpath '/export/data/hivedata/students.txt' overwrite into table stu;     -- 不转MR, Linux的源文件还在, 相当于拷贝一份给HDFS.

-- 2.3 从HDFS中加载数据到stu表中. 追加写入 和 覆盖写入都一样, 就是看有没有写 overwrite单词.
load data inpath '/wordcount/students.txt' into table stu_hdfs;      -- 不转MR, HDFS的源文件不在了, 相当于: 剪切.

-- 3. 查询表数据.
select * from stu;
select * from stu_hdfs;

-- ----------------------------------- 场景2: 数据导入之 insert + select方式 ------------------------
-- 格式: insert into 表名 select 列1, 列2.. from 表名;
-- 总结: insert + select 方式要求 列的个数, 对应列的数据类型均要求一致, 对列名和表名无要求.
-- 1. 建表.
create table stu_insert(
    id int,
    name string,
    gender string,
    age int,
    sno string
) row format delimited fields terminated by ',';

-- 2. insert + select方式导入数据.
insert into table stu_insert select * from stu;   -- 会转MR程序, into方式是 追加写入, table可以省略.
insert overwrite table stu_insert select * from stu;   -- 会转MR程序, overwrite方式是 覆盖写入, table不可以省略.

insert overwrite table stu_insert
select hp_max, name, attack_range, mp_max, role_main from t_archer;   -- 因为列的个数, 对应的数据类型相同, 所以插入成功.

insert overwrite table stu_insert select * from t_archer;   -- 因为列的个数, 对应的数据类型不同, 所以插入失败.

-- 3. 查询表数据.
select * from stu_insert;


-- ----------------------------------- 场景3: 数据导出  --------------------------------------------
/*
数据导出:
    格式:
        insert overwrite [local] directory '目的地目录的路径' row format delimited fields terminated by '行格式分隔符'
        select 列1, 列2... from 表名;
    细节:
        1. 加local是Linux路径, 不加则是HDFS路径.
        2. 导出时, 是覆盖导出, 可以指定字段分隔符.
*/
-- 1. 查看表数据.
show tables;
select * from stu;      -- 44条数据.

-- 2. 将stu的表数据导出到 Linux目录中.
insert overwrite local directory '/export/data/hivedata' select * from stu;     -- 覆盖导出, 默认分隔符'\001'

insert overwrite local directory '/export/data/hivedata2' row format delimited fields terminated by '#'
select * from stu;     -- 覆盖导出, 指定分隔符为'#'

insert overwrite local directory '/export1/data2/hivedata3' row format delimited fields terminated by '!'
select * from stu;     -- 覆盖导出, 指定分隔符为'#'

-- 3. 将stu的表数据导出到 HDFS目录中.
insert overwrite directory '/wordcount' row format delimited fields terminated by '$'
select id, name, age from stu;


-- ----------------------------------- 场景4: hive第1代客户端的作用  --------------------------------------------
/*
Hive的第1代客户端指的是:  /export/server/hive/bin/hive, 它的作用有四个, 分别是:
    1. 充当客户端使用, 可以写Hive SQL
    2. 开启metastore 和 hiveserver2服务.
        nohup hive --service metastore &
        nohup hive --service hiveserver2 &
    3. 可以执行一次Hive SQL语句, 执行结束, 会自动断开会话.
        hive -e 'HQL语句;'
    4. 可以执行Hive SQL脚本.
        Hive SQL脚本解释: 可以是任意后缀名的文件, 文件中的内容必须符合HQL规范, 建议后缀名为 .sql
        hive -f 'HQL脚本'
*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值