我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Hive语法及其进阶(一)

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Hive语法及其进阶(一)

Hive语法及其进阶(一)

1、Hive完整建表

 1 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name(
 2       [(col_name data_type [COMMENT col_comment], ...)]
 3       )
 4       [COMMENT table_comment]
 5       [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
 6       [CLUSTERED BY (col_name, col_name, ...) 
 7       [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
 8       [
 9        [ROW FORMAT row_format] 
10        [STORED AS file_format]
11        | STORED BY "storage.handler.class.name" [ WITH SERDEPROPERTIES (...) ]  (Note:  only available starting with 0.6.0)
12       ]
13       [LOCATION hdfs_path]
14       [TBLPROPERTIES (property_name=property_value, ...)]  (Note:  only available starting with 0.6.0)
15       [AS select_statement]  (Note: this feature is only available starting with 0.5.0.)

 

注意:
    []:表示可选
    EXTERNAL:外部表
    (col_name data_type [COMMENT col_comment],...:定义字段名,字段类型
    COMMENT col_comment:给字段加上注释
    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:指定Hive储存格式:textFile、rcFile、SequenceFile 默认为:textFile
    LOCATION hdfs_path:指定储存位置(默认位置在hive.warehouse目录下)
    TBLPROPERTIES (property_name=property_value, ...):跟外部表配合使用,比如:映射HBase表,然后可以使用HQL对hbase数据进行查询,当然速度比较慢
    AS select_statement:从别的表中加载数据 select_statement=sql语句

2、使用默认方式建表

1 create table students01
2         (
3             id bigint,
4             name string,
5             age int,
6             gender string,
7             clazz string
8         )
9         ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

注意:
分割符不指定,默认不分割
通常指定列分隔符,如果字段只有一列可以不指定分割符:

ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

 

3、建表2:指定location

 1 create table students02
 2         (
 3             id bigint,
 4             name string,
 5             age int,
 6             gender string,
 7             clazz string
 8         )
 9         ROW FORMAT DELIMITED FIELDS TERMINATED BY ","
10         LOCATION "data"; 

 

 

 

4、建表3:指定存储格式

 1  create table student_rc
 2         (
 3             id bigint,
 4             name string,
 5             age int,
 6             gender string,
 7             clazz string
 8         )
 9         ROW FORMAT DELIMITED FIELDS TERMINATED BY ","
10         STORED AS rcfile; 

注意:

    指定储存格式为rcfile,inputFormat:RCFileInputFormat,outputFormat:RCFileOutputFormat,如果不指定,默认为textfile

注意:

    除textfile以外,其他的存储格式的数据都不能直接加载,需要使用从表加载的方式。

 

 

 

 

 

 

 

 

 

5、建表4:从其他表中加载数据
  格式:
    create table xxxx as select_statement(SQL语句) (这种方式比较常用)

  例子:
     create table students4 as select * from students2;

 

 

 

 6、建表5:从其他表中获取表结构

  格式:
    create table xxxx like table_name 只想建表,不需要加载数据

  例子:

       create table student04 like students;

 

7.Hive加载数据

    1、使用```hadoop dfs -put "本地数据" "hive表对应的HDFS目录下

 

    2、使用 load data inpath(是对hdfs的文件移动,移动,移动,不是复制)

         3、使用load data local inpath(经常使用,从本地文件中上传)

   

    // overwrite 覆盖加载
    // 实际上就是hadoop执行了rmr然后put操作
    例如:load data local inpath"/usr/local/data/students.txt" overwrite into table student01;

 

 

 

方式1和方式2的区别:

          1.上传数据到hdfs目录和hive表没有任何关系(不需要数据格式进行匹配,hive读取数据还是需要数据格式的匹配)

          2.上传数据到hive表和hive表有关系(需要数据格式进行匹配)

8. 清空表
    truncate table student01;

注意: 清空代表清空数据,不是删除表

 

 

 

 

 

 

11. insert into table xxxx SQL语句 (没有as) 传输给别的格式的hive table

  例如:

    insert into table student04 select * from student01;

  覆盖插入 把into 换成 overwrite

    例如:

      insert overwrite table student04 select * from student01;

 

 

 

9、Hive 内部表(Managed tables)vs 外部表(External tables)

 

区别:

    内部表删除数据跟着删除
    外部表只会删除表结构,数据依然存在

 

注意:

    公司中实际应用场景为外部表,为了避免表意外删除数据也丢失
    不能通过路径来判断是目录还是hive表(是内部表还是外部表)

建表:

 1 内部表
 2 create table students_managed01
 3 (
 4     id bigint,
 5     name string,
 6     age int,
 7     gender string,
 8     clazz string
 9 )
10 ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

 

 1 //内部表指定location
 2 create table students_managed02
 3 (
 4     id bigint,
 5     name string,
 6     age int,
 7     gender string,
 8     clazz string
 9 )
10 ROW FORMAT DELIMITED FIELDS TERMINATED BY ","
11 LOCATION "/managed";

 

 

 1 // 外部表
 2 create external table students_external01
 3 (
 4     id bigint,
 5     name string,
 6     age int,
 7     gender string,
 8     clazz string
 9 )
10 ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

 

 

 1 // 外部表指定location
 2 create external table students_external02
 3 (
 4     id bigint,
 5     name string,
 6     age int,
 7     gender string,
 8     clazz string
 9 )
10 ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";
11 LOCATION "/external";

 

 上传数据:

hive> load data local inpath "/usr/local/data/students.txt"into table students_managed01;hive> load data local inpath "/usr/local/data/students.txt"into table students_managed02;
hive> load data local inpath "/usr/local/data/students.txt"into table students_external01;hive> load data local inpath "/usr/local/data/students.txt"into table students_external02;

 

 

 删除数据:

hive> drop table students_managed01;
hive> drop table students_managed02;
hive> drop table students_external01;
hive> drop table students_external02;

 

 

 

 外部表与内部表总结:

    可以看出,删除内部表的时候,表中的数据(HDFS上的文件)会被同表的元数据一起删除

    删除外部表的时候,只会删除表的元数据,不会删除表中的数据(HDFS上的文件)

    一般在公司中,使用外部表多一点,因为数据可以需要被多个程序使用,避免误删,通常外部表会结合location一起使用

    外部表还可以将其他数据源中的数据 映射到 hive中,比如说:hbase,ElasticSearch......

    设计外部表的初衷就是 让 表的元数据 与 数据 解耦

 

 

 10、Hive建立分区表

1.创建单级分区

 1 create table students_pt
 2 (
 3     id bigint,
 4     name string,
 5     age int,
 6     gender string,
 7     clazz string
 8 )
 9 PARTITIONED BY(month string)
10 ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

 

 2.加载数据

load data local inpath "/usr/local/data/students.txt" into table students_pt partition(month="2021-09-26");

 

 

3.分区查询

单分区查询

    select * from students_pt where month="2021-09-26";

多分区查询

    select * from students_pt where month="2021-09-26"or month="2021-09-24";

 

4.增加分区

创建单个分区

    alter table students_pt add partition(month="2021-09-25");

 

 

创建多个分区

    alter table students_pt add partition(month="2021-09-23") partition(month="2021-09-24");(注意中间没有逗号分割)

 

 

 

5.删除分区

删除单个分区

    alter table students_pt drop partition(month="2021-09-23");

 

 

删除多个分区

    alter table students_pt drop partition(month="2021-09-24"),partition(month="2021-09-25"); (注意中间有逗号分割)

 

 

6.查看分区表分区

    show partitions students_pt;

 

 

7.查看分区表结构

    desc formatted students_pt;

 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Hive语法及其进阶(一)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Hive语法及其进阶(一)

1、Hive完整建表 1 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name( 2 [(col_name data_type [COMMENT col_comment], ...)] 3
Hive语法及其进阶(一)
2021-04-17

Hive语法及其进阶(二)

1、使用JDBC连接Hive 1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.PreparedStatement; 4 import java.s
Hive语法及其进阶(二)
2016-12-30

C++ 递归进阶:理解尾递归优化及其应用

尾递归优化 (tro) 可提高特定递归调用的效率。它将尾递归调用转换为跳转指令,并将上下文状态保存在寄存器中,而不是堆栈上,从而消除对堆栈的额外调用和返回操作,提高算法效率。利用 tro,我们可以针对尾递归函数(例如阶乘计算)进行优化,通过
C++ 递归进阶:理解尾递归优化及其应用
2024-04-30

systemctl用法及其语法是什么

这期内容当中小编将会给大家带来有关systemctl用法及其语法是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.确定是否安装systemd及其版本# systemctl –version2.确定s
2023-06-05

阶乘相关的算法及其C++实现的示例分析

本篇文章为大家展示了阶乘相关的算法及其C++实现的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。C++中的阶乘亦是如此。有关阶乘的算法,不外乎
2023-06-17

Python 语法的进阶指南:从基础到精通

Python作为一种高级编程语言,其语法简洁清晰,易于学习。本文将提供一份进阶指南,从基础语法到高级特性,循序渐进地帮助您提升Python编程技能。
Python 语法的进阶指南:从基础到精通
2024-02-19

MySQL中JSON_CONTAINS用法、语法、示例及其应用场景

目录前言1. jsON_CONTAINS 函数的概述2. 基本用法2.1 检查简单值2.2 检查嵌套对象3. 实际应用场景3.1 过滤用户数据3.2 多条件查询3.3 与其他 JSON 函数结合使用4. 性能考虑5. 总结前言mysql
MySQL中JSON_CONTAINS用法、语法、示例及其应用场景
2024-10-23

VUE 模板语法实战宝典:解锁进阶技能

VUE 模板语法实战宝典:掌握进阶技巧,提升编码效率,打造动态且交互式应用程序。
VUE 模板语法实战宝典:解锁进阶技能
2024-03-04

HTML语法进阶指南:深入探索网页结构

HTML语法进阶指南:揭开网页结构的奥秘
HTML语法进阶指南:深入探索网页结构
2024-03-09

如何进行C++冒泡排序及其优化算法

这期内容当中小编将会给大家带来有关如何进行C++冒泡排序及其优化算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。冒泡排序极其优化算法步骤1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。2.对每
2023-06-21

编程热搜

目录