hive数据库使用记录

简介: hive数据库使用记录

 很长时间没有写博客,因为确实是没有什么可写的,中间一段时间在学习springBoot,因为自己还没有学习完毕,所以,暂时先不记录springBoopt之类的文章了。

   近期几个月更多的是在为了工作而研究保险类的业务知识,比如核心承保啊、理赔的乱七八糟的玩意,没有学习什么有意思的java技术,不过在搞大数据统计分析的时候,用到了hive数据库,思前想后,还是简单的学习并记录一下,有的我就直接拿网上找的例子了。

百度百科说:hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。

   hive的语言是类sql语言,叫hql,和sql大致相同,但也有不同之处,比如不支持tab字符、子查询必须加as等等。

语法:

创建数据库的语法:

create database if not exists db_hive;

image.gif

我们可以通过LOCATION关键字来指定hive数据库文件存放的位置,默认的位置是在hdfs上的目录/user/hive/warehouse下面,会以数据库的名称来在hdfs上新建目录。指定路径创建数据库的语句如下:

create database if not exists db_hive_02 location '/user/text/db_hive_02.db';

image.gif

可以看到在hdfs的/user/text目录下会新建一个db_hive_02.db的目录,后续在数据库db_hive_02里面创建的表默认都会存储在该目录下。

数据库常用操作指令

下面这几个基本上就是我每天在用的命令了:

show databases; --查看数据库

show databases like ‘db_hive*’; --查看以db_hive开头的数据库

use db_hive_02; --使用数据库,切换到当前数据库下

desc database db_hive_02; --查看数据库的描述信息,看字段及注释

如果要查看数据库更详细的信息,则需要增加extended关键字:

desc database extended db_hive_02;

下面的删除就要谨慎操作了

drop database db_hive_02; --删除数据库db_hive_02

如果数据库中有表存在的话,在删除数据库的时候需要增加关键字CASCADE,表示在删除数据库的时候可以将数据库下面的所有表也进行删除。数据库删除后相应的hdfs上的目录也会被删除。

drop database db_hive_02 cascade;

另外,在删除数据库的时候为了不抛出异常,需要增加if exists关键字,这样如果数据库被别人删除的时候就不会抛出异常了:

drop database if exists db_hive_02;

安装hive数据库的话,可以直接到Apache官网下载,然后配置环境变量和设置运行路径。

hive优化(百度百科好实惠呀)

    •    join连接时的优化:当三个或多个以上的表进行join操作时,如果每个on使用相同的字段连接时只会产生一个mapreduce
    •    join连接时的优化:当多个表进行查询时,从左到右表的大小顺序应该是从小到大。原因:hive在对每行记录操作时会把其他表先缓存起来,直到扫描最后的表进行计算
    •    在where字句中增加分区过滤器。
    •    当可以使用left semi join 语法时不要使用inner join,前者效率更高。原因:对于左表中指定的一条记录,一旦在右表中找到立即停止扫描。
    •    如果所有表中有一张表足够小,则可置于内存中,这样在和其他表进行连接的时候就能完成匹配,省略掉reduce过程。设置属性即可实现,set hive.auto.covert.join=true; 用户可以配置希望被优化的小表的大小 set hive.mapjoin.smalltable.size=2500000; 如果需要使用这两个配置可置入$HOME/.hiverc文件中。
    •    同一种数据的多种处理:从一个数据源产生的多个数据聚合,无需每次聚合都需要重新扫描一次。 例如:insert overwrite table student select * from employee; insert overwrite table person select * from employee;可以优化成:from employee insert overwrite table student select * insert overwrite table person select *
    •    limit调优:limit语句通常是执行整个语句后返回部分结果。set hive.limit.optimize.enable=true;
    •    开启并发执行。某个job任务中可能包含众多的阶段,其中某些阶段没有依赖关系可以并发执行,开启并发执行后job任务可以更快的完成。设置属性:set hive.exec.parallel=true;
    •    hive提供的严格模式,禁止3种情况下的查询模式: a:当表为分区表时,where字句后没有分区字段和限制时,不允许执行。
      b:当使用order by语句时,必须使用limit字段,因为order by 只会产生一个reduce任务。
      c:限制笛卡尔积的查询。
    • 合理的设置map和reduce数量。
    • jvm重用。可在hadoop的mapred-site.xml中设置jvm被重用的次数。

    ————————————————————————————————————————————

    在hive中插入数据有四种方式:

     1)、从本地文件系统中导入数据到Hive表;

    (2)、从HDFS上导入数据到Hive表;

    (3)、从别的表中查询出相应的数据并导入到Hive表中;

    (4)、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。

    只记录第一种:

    首先要建表:

    create table dw.dw_rpt_clm_dpt_san_ys1(
      c_dpt_code_1 string,
      c_dpt_name_1 string,
      c_dpt_code_2 string,
      c_dpt_name_2 string,
      c_dpt_code_3 string,
      c_dpt_name_3 string,
      c_dpt_code_4 string,
      c_dpt_name_4 string,
      c_dpt_name_3_gs string 
    )
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    STORED AS TEXTFILE;

    image.gif

    这里主要是重点是:ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

    行格式分隔 字段终止于','就是说去根据文本中的逗号来分割数据列作为字段

    next创建个txt文本,格式要和创建表语句对应,逗号为分割:

    image.png
    编辑

    运行命令:

    load data local inpath '/opt/test.txt' into table dw.dw_rpt_clm_dpt_san_ys;

    image.gif

    image.png
    编辑

    ok!!验证ok:

    image.png
    编辑

    ——————————————————————————————————————————————————

    待持续整理。。。

    目录
    相关文章
    |
    3月前
    |
    SQL 数据库 HIVE
    记录hive数据库远程访问配置问题
    记录hive数据库远程访问配置问题
    114 0
    |
    3月前
    |
    SQL Java 数据库连接
    java链接hive数据库实现增删改查操作
    java链接hive数据库实现增删改查操作
    146 0
    |
    4月前
    |
    SQL 分布式计算 数据库
    【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
    【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
    96 0
    |
    6天前
    |
    SQL 数据库 HIVE
    Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
    【4月更文挑战第8天】Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
    16 0
    |
    1月前
    |
    SQL 数据可视化 Apache
    阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
    阿里云数据库 SelectDB 内核 Doris 的 SQL 方言转换工具, Doris SQL Convertor 致力于提供高效、稳定的 SQL 迁移解决方案,满足用户多样化的业务需求。兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移。
    阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
    |
    3月前
    |
    SQL 分布式计算 关系型数据库
    Hive与传统关系型数据库有什么区别?请举例说明。
    Hive与传统关系型数据库有什么区别?请举例说明。
    63 0
    |
    3月前
    |
    SQL 数据库 HIVE
    python链接hive数据库实现增删改查操作
    python链接hive数据库实现增删改查操作
    139 0
    |
    4月前
    |
    SQL 存储 分布式计算
    Hive 基本操作(创建数据库与创建数据库表)
    Hive 基本操作(创建数据库与创建数据库表)
    100 0
    |
    5月前
    |
    SQL 分布式计算 数据库
    46 Hive与传统数据库对比
    46 Hive与传统数据库对比
    44 0
    |
    6月前
    |
    SQL 分布式计算 资源调度
    分享一个 hive on spark 模式下使用 HikariCP 数据库连接池造成的资源泄露问题
    分享一个 hive on spark 模式下使用 HikariCP 数据库连接池造成的资源泄露问题