hive 订阅
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。 [1] 展开全文
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。 [1]
信息
外文名
hive
兼容性
hadoop生态圈
定    义
在Hadoop上的数据仓库基础构架
依    赖
jdk,hadoop
所属学科
大数据、数据分析
hive简介
hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据:可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能;可以将SQL语句转换为MapReduce任务运行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL,使不熟悉mapreduce的用户可以很方便地利用SQL语言‘查询、汇总和分析数据。而mapreduce开发人员可以把自己写的mapper和reducer作为插件来支持hive做更复杂的数据分析。它与关系型数据库的SQL略有不同,但支持了绝大多数的语句如DDL、DML以及常见的聚合函数、连接查询、条件查询。它还提供了一系列的1:具进行数据提取转化加载,用来存储、查询和分析存储在Hadoop中的大规模数据集,并支持UDF(User-Defined Function)、UDAF(User-Defnes AggregateFunction)和USTF(User-Defined Table-Generating Function),也可以实现对map和reduce函数的定制,为数据操作提供了良好的伸缩性和可扩展性。 [2]  hive不适合用于联机(online)事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。hive的特点包括:可伸缩(在Hadoop的集群上动态添加设备)、可扩展、容错、输入格式的松散耦合。 [2] 
收起全文
精华内容
参与话题
问答
  • Hive

    千次阅读 2018-10-11 22:37:21
    Hive是什么? Hive是构建在hadoop之上的数据仓库 Hive是一个基于hadoop的数据仓库,可以通过类似于SQL语句来进行对数据的读写管理(元数据)等操作 Hive定义了一种类似于SQL的查询语言,叫做HQL类似于SQL,但是不完全...

    Hive是什么?
    Hive是构建在hadoop之上的数据仓库

    Hive是一个基于hadoop的数据仓库,可以通过类似于SQL语句来进行对数据的读写管理(元数据)等操作

    Hive定义了一种类似于SQL的查询语言,叫做HQL类似于SQL,但是不完全相同,通常用于离线数据处理(采用的方式是MapReduce)

    Hive的底层支持不同的执行引擎(Hive on MapReduce Hive on Spark Hive on Tez)
    支持多种不同压缩格式,存储格式以及自定义函数

    Hive的特点:
    1.Hive是一种易于对数据实现提取转换加载的工具(ETL数据清洗),可以理解为数据清洗分析
    2.它有一种大量格式化数据集强加上结构的机制
    3.它可以分析处理直接存储在HDFS中的数据,或者别的和数据存储中的数据例如:HBASE

    4.查询的执行是MapReduce完成的
    5.Hive可以使用存储过程
    6.YARN和Slider实现秒级查询搜索

    Hive的架构:
    在这里插入图片描述

    用户接口主要有三个:
    CLI(命令行接口)JDBC/ODBC和WEBUI,其中最常用的是CLI,CLI 启动的时候同时启动一个Hive副本,Client是Hive客户端,用户会连接至Hive Server在定Client模式的时候,需要指出Hive Server所在的节点
    并且在该节点启动Hive Server
    WebUI是通过浏览器访问Hive,使用三方thirdServer:(JDBC/ODBC)

    2.hive将元数据存储在数据库中–derby,mysql等等,Hive的元数据包括表的名字,包括分区,分桶等相关属性,hive中的表属性分为外部表和内部表,表的数据所在的目录等等。

    ps:元数据里面不存储真正的数据,它是描述数据的,真正的数据是具体存储的值,
    hive提供的数据存储在HDFS上,建表的信息在数据库,Hive本身存储不了数据,靠的是HDFS存储数据

    3.Driver:解释器,编译器,优化器的作用是完成HQL查询语句从词法分析—语法分析–编译—优化以及查询计划的生成,生成的查询计划存储在HDFS上,并在随后的MapReduce中执行,
    ps:driver解释器,将HQL语句生成一个抽象的表达式树,
    编译器:对HQL语句进行词法分析,雨衣分析,语义编译(此时需要联系元数据),编译完成后会生成一个“有向无环”的执行计划
    ps:有向无环—>有执行方向,但是不能成为一个环状结构

    优化器:将执行计划进行优化,减少不必要的列,使用的分区等等
    执行器:将优化后的执行计划交给hadoop的MapReduce来执行

    4.hive:的数据存在HDFS上,大部分的查询和计算都是有MapReduce完成的,
    select * from table 的查询不会生成MapReduce
    在这里插入图片描述

    ps:编译器将HiveQL,再转换成操作符,操作符是Hive中的最小处理单元,每一个操作符代表HDFS的一个操作或一个MapReduce的作业

    Hive和Hadoop的关系
    hive基于Hadoop
    hive本身没有存储和分析的功能,hive是建立在hadoop之上的一个工具
    hive的存储是基于HDFS(HBASE),hive的分析依赖于MapReduce

    Hive和传统数据库相比
    在这里插入图片描述

    ps:hive是具有sql数据库的外表,但应用场景完全不同,还不适合用来做批量数据统计分析

    详细说明:
    1.查询语言,由于SQL被广泛的用用在数据仓库中,一次专门针对Hive的特性设计了类SQL的查询语言HQL。熟悉SQL开发的开发者可以很方便的使用hive 进行开发。

    展开全文
  • hive

    万次阅读 多人点赞 2019-10-15 15:38:09
    Hive 一 . hive1. 概述1.2. 组成架构(运行流程)1.3. 特点4. Hive和数据库的区别二、Hive的搭建2.1. 版本的选择2.2. 步骤2.3. 软件的基本操作2.3.1. 进入hive2.3.2. 操作2.3.3. 退出2.3.4. hive对本地文件数据进行...

    Hive

    一 . hive

    1. 概述

    数据仓库(Data Warehouse)工具
    基于Hadoop的
    将  结构化的数据文件  映射成一张表
    提供了类SQL的HQL的查询功能
    
    本质:将sql语句转换为MapReduce任务进行运行( 记住 ),本质上就是MapReduce
    作用: 对海量的大数据(结构化)  数据进行分析和统计
    
    HQL:HQL是Hibernate Query Language的缩写,提供更加丰富灵活、更为强大的查询能力;
    HQL更接近SQL语句查询语法。
    数据仓库: 英文名称为Data Warehouse ,存储各种类型的数据,面向主体(分类存储),
              存储大量的数据,数据的不可以更新,可以一直追加数据
    

    1.2. 组成架构(运行流程)

    在这里插入图片描述

    1. 用户使用命令行工具或者JDBC发送HQL
    2. 使用Driver驱动结合MetaStore元数据,将指定翻译成MapReduce
    3. 首先使用SQL Parser解释器进行HQL的翻译
    4. 使用编译器对解释结果进行编译
    5. 使用优化器对编译结果进行优化
    6. 最后将优化的结果使用执行器进行执行操作(本质上就是在Hadoop集群上使用MapReduce操作)
    7. 将处理结果返回给客户端用户
    
    
    组成:客户端接口、Hive的引擎(驱动)、元数据、Hadoop
    
    说明:
        元数据(数据的描述信息:表的名称,数据库的名称,权限,所有者,组成字段等等)
            默认情况下存储在hive内部自带的derby数据库中
            问题:derby数据库,在同一时刻,只允许一个线程操作
            建议:使用MySQL对元数据进行存储
    
        Hive的引擎:
            解释器、编译器、优化器、执行器 (顺序)
    
        Hadoop:
            执行Hive
    
        Client 接口:用户操作、访问Hive 的方式(jdbc,cli... ...)
    

    1.3. 特点

    Hive使用HQL实现对数据的操作,操作方便简单(比MapReduce操作方便)
    Hive处理大数据(比MySQL/Oracle强大)
    Hive提供的大量的工具
    Hive支持自定义函数,使用自定义需求
    Hive实现离线数据分析
    
    
    Hive使用类SQL语句实现功能,处理业务的范围受限(SQL语法所能表达的业务受限)
    Hive运行效率较低(延迟高,离线数据分析)
        Hive ----> MapReduce (效率低)(机器转换的)
    
    hadoop  mr    离线
            hive  离线
            hbase 离线 实时
            spark 实时
    

    4. Hive和数据库的区别

    Hive不是数据库
    能够使用类SQL对数据进行查询操作(和数据库的相同点)
    
    Hive中没有索引(暴力扫描整张表 , 访问数据延迟高;使用MR,并行访问数据) 
    
    Hive操作的数据是在分布式文件系统(HDFS)上的数据
    
    Hive使用类SQL语言,功能更加的强大(分布式集群数据)
    
    Hive不支持数据的修改
    
    ... ...
    
    
    索引的使用场景:
        税务局:
            白天查询数据
            晚上添加新的数10000条数据据
    
        提高效率:
            白天查询:给表建立索引
            晚上:创建临时表,没有索引的(索引需要动态维护的),向此表中追加数据
                 删除主表的索引,追加新的数据,建立索引
    
    oracle: select * from teacher  where age = 10 and id >10;   
        where后的条件语句的顺序是:从右向左
    

    二、Hive的搭建

    2.1. 版本的选择

    建议使用 1.x 版本

    只需要在一个节点上安装(Master节点)

    2.2. 步骤

    1. 下载
      hive.apache.org

    2. 拷贝到linux
      winscp
      设置共享文件夹

    3. 解压
      tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/programfile/

    4. 配置环境变量(/etc/profile)

        export HIVE_HOME=/opt/programfile/hive
        export PATH= $PATH:$HIVE_HOME/bin
      

      使新的配置生效:source /etc/profile

    5. 配置hive

      1. 改名
        cp hive-env.sh.template hive-env.sh

      2. 修改配置(指定hadoop的路径,因为hive基于Hadoop运行的)
        HADOOP_HOME=/opt/programfile/hadoop
        export HIVE_CONF_DIR=/opt/programfile/hive/conf

      3. 开启集群
        start-dfs.sh
        start-yarn.sh

      4. 配置数据仓库的存储路径(数据最终存储在HDFS上)(在HDFS上配置的路径)
        注意:此路径需要具有写权限

        创建数据存储目录:
        hdfs dfs -mkdir /tmp
        hdfs dfs -mkdir -p /user/hive/warehouse

        修改权限:
        hdfs dfs -chmod 777 /tmp
        hdfs dfs -chmod 777 /user/hive/warehouse

    2.3. 软件的基本操作

    2.3.1. 进入hive

    [root@localhost ~] hive  回车
    

    2.3.2. 操作

        show databases;
        use databaseName;
        show tables;
        create table...
        insert into ...
        select ....
    

    2.3.3. 退出

    ctrl+c
    exit;
    quit;
    

    2.3.4. hive对本地文件数据进行表的映射操作

    hive> load data local inpath   '/home/zhangsan/cat.txt 文件路径'   into table  表名称 ;
    
    添加失败:当前表没有指定数据属性的分割符好
    
    解决:指定属性间的分隔符
        create table dog(did int ,name string)  
            ROW FORMAT DELIMITED FIELDS  TERNIBATED BY  ',';  //分隔符
    

    2.3.5. 转移元数据的存储路径

    问题:derby数据库,在同一时刻,只允许一个进程操作(连接数据库,访问数据库derby)
    建议:使用MySQL对元数据进行存储
    

    2.3.6. metastore的设置方式 :元数据

    内嵌方式:
        使用derby数据库作为内嵌的metastore数据库(用于测试),在同一时刻,只允许一个进程操作
    
    外嵌方式(远程方式):
        使用第三方数据库存储metastore
    

    2.3.7. 设置metastore的存储路径(选择MySQL数据库进行存储)实现多客户端范文hive

    2.3.7.1 安装MySQL数据库(在线安装模式,请保持外网络畅通 )

    使用root用户登录系统,并切换到根目录
    进入opt文件下,创建文件目录mysql57,并进入)

    1. 再次切换到/opt/mysql57目录下,执行下载命令:
      wget http://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm

    2. 如果提示wget命令未找到,则在保持外网网络畅通下执行命令:
      cd /
      yum install wget -y
      在这里插入图片描述

    3. 再次切换到/opt/mysql57目录下,执行下载命令:
      wget http://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm

    4. 下载完毕之后,执行如下命令:
      sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm

    5. 执行如下命令,安装mysql数据库
      安装过程中提示如下信息,输入y,然后回车即可
      sudo yum install mysql-server
      在这里插入图片描述
      至此,mysql基本安装已经成功,接下来配置mysql一些相关信息

    6. 输入如下命令,登录数据库客户端
      mysql -u root
      提示如下信息:
      在这里插入图片描述
      是因为此目录,没有对应的操作权限问题,执行如下命令修改目录权限
      sudo chown -R root:root /var/lib/mysql
      重新启动数据库,执行如下命令:
      service mysqld restart

    7. 再次登录,执行如下命令:
      mysql -u root -p
      初始化密码查看:
      通过命令:more /var/log/mysqld.log 获取:1#;htwi(e>Bw
      在这里插入图片描述

    8. 再次登录,执行如下命令
      mysql -u root -p 1#;htwi(e>Bw

    9. 修改登录密码
      alter user user() identified by ‘12345678’;

    10. 提示密码安全问题
      执行如下命令,修改密码安全策略后,再次修改密码
      set global validate_password_policy=0;

    重启mysql数据库,测试密码登录
    service mysqld restart
    在这里插入图片描述
    至此,centos下,mysql安装成功

    2.3.7.2远程连接配置

    如果此时需要远程客户端访问数据库,则还需要进行如下配置 :

    1. 开启3306默认端口,并保存
      /sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

    2. 设置远程连接信息

       mysql -u root -p
       use mysql;
       update user set host='%' where user ='root' and host='localhost';
       select host,user from user;
       set global validate_password_policy=0;
       grant all privileges on *.* to root@'%' identified by 'Likang123qwe' with grant option
      
    3. 重启mysql服务
      service mysqld restart

    4. 其他配置
      取消mysql默认分区表、字段的大小写
      修改配置文件/etc/my.conf

       lower_case_table_names=1 不区分大小写
       lower_case_table_names=0 默认、区分大小写
      

    2.3.7.3MySQL管理

    1. 查看mysql服务是否启动
      ps -ef|grep mysqld

    2. 启动、关闭mysql服务
      service mysqld restart 重启
      service mysqld start 启动
      service mysqld stop 停止

    3. 配置文件
      /etc/my.cnf

    4. 常见管理命令

       USE 数据库名 使用数据库
       SHOW DATABASES 列出 MySQL 数据库管理系统的数据库列表
       SHOW TABLES 显示指定数据库的所有表
       SHOW COLUMNS FROM 数据表 显示数据表的属性
       SHOW INDEX FROM 数据表 显示数据表的详细索引信息
       SHOW TABLE STATUS LIKE [FROM db_name] [LIKE 'pattern'] \G: 该命令将输出Mysql数据库管理系统
       的性能及统计信息。
      

    2.3.7.4 Hive元数据存到到MySQL的参数配置

        目的:hive如何能连接上mysql
        
        步骤:
            1. 驱动
                mv /opt/software/mysql-connection-java-xxx.jar  /opt/programfile/hive/lib/
    
            2. 连接mysql参数配置:user  password  driver  url
                hive-default.xml.template ,  hive的配置文件模板    
    
            3. 创建一个配置文件:hive-site.xml
                <?xml version="1.0" encoding="UTF-8" standalone="no"?>
                <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
                <configuration>
    
                          <property>
                            <name>javax.jdo.option.ConnectionPassword</name>
                            <value>root</value>
                          </property>
    
                         <property>
                            <name>javax.jdo.option.ConnectionDriverName</name>
                            <value>com.mysql.jdbc.Driver</value>
                          </property>
    
                          <property>
                            <name>javax.jdo.option.ConnectionUserName</name>
                            <value>root</value>
                          </property>
    
                         <property>
                            <name>javax.jdo.option.ConnectionURL</name>
                            <value>jdbc:mysql://192.168.175.200:3306/metastore?createDatabaseIfNotExist=true</value>
                          </property>
    
                </configuration>
    

    2.3.8. Hive的基本配置

    2.3.8.1 配置日志的存储位置

        日志文件默认存储位置:/tmp/zhangsan/hive.log
    
        设置用户自定义的存储位置:
            1. 创建   hive-log4j.properties   
                cp hive-log4j.properties.template  hive-log4j.properties    
    
            2. 修改参数
                hive.log.dir=/opt/programfile/hive/logs
    
            3. 重新进入hive,当前日志文件所在的路径发生的变更
    

    2.3.8.2 hive-site.xml中进行配置

        配置数据仓库的位置:
             <property>
                <name>hive.metastore.warehouse.dir</name>
                <value>/user/hive/warehouse</value>
              </property>
    
        配置当前数据库提示信息:
              <property>
                <name>hive.cli.print.current.db</name>
                <value>false</value>
              </property>
    
        配置查询结果的字段提示信息:
              <property>
                <name>hive.cli.print.header</name>
                <value>true</value>
              </property>
    

    2.3.9. 特有的操作

    2.3.9.1. 将文件中的数据存储到数据表中:指定分隔符

        hive> load data local inpath  "路径" into table 表名称 (在创建表时,指定了分隔符)
    
        注意:create table(字段列表... ...)  row format delimited fields terminated "分隔符"
    

    2.3.9. 2. 不进入hive,执行sql语句

        hive -e  select * from teacher;
            -e 直接在命令行编写sql语句,执行sql语句,不需要进入hive中
    
        hive -f 文件名称
            -f 直接在文件中编写sql语句,执行sql语句,不需要进入hive中
    
        hive -f 文件名称     > 结果数据的存储路径  
            将hive命令的结果数据,指定存储到一个文件中
    

    2.3.9.3. 在hive查看hdfs文件系统

        hive (default)> dfs ls /;
    
        hive (default)> dfs ls /user/hive/;
    
        hive (default)> ! ls /home/zhangsan;     //查看本地的文件系统
    

    2.3.9.4. 查看hive操作的历史记录

        [zhangsan@master /home/zhangsan]$ cat .hivehistory
    

    2.3.10. 配置文件的修改(优先级)

    默认的配置、用户编写hive-site.xml配置文件、用户通过命令行实现参数的配置
    
    优先级:从小到大的顺序
    

    2.3.11. hive 元数据存储到MySQL(初始化)

    schematool -dbType mysql -initSchema
    

    2.4 Hive的数据类型

    2.4.1. 基本数据类型

    int float double  string boolean  timestamp
    
    在hive中使用string来表示字符串类型的数据,存储数据量为:2G左右       
    

    2.4.2. 复杂数据类型

    array、map、struct
    

    2.4.2.1 Array

        create table arr_tb(name string,score Array<double>)
            row format delimited fields terminated by '\t'  # 设置每行中的每一个属性间的分隔符
            collection items terminated by '_'              # 设置一个数组类型的数据项间的分隔符     
            lines terminated by '\n';                       # 设置多行间的分隔符
    

    2.4.2.2 Map

        create table hash_tb(name string ,score map<string,double>)
            row format delimited fields terminated by '\t' 
            collection items terminated by '_'
            map keys terminated by ':'          # map中一个数据项的kv的分隔符
            lines terminated by '\n';   
    

    2.4.2.3 Struct

        create table struct_tb(name string ,score struct<java:double,bigdata:double,mysql:double>)
            row format delimited fields terminated by '\t' 
            collection items terminated by '_'
            lines terminated by '\n';
    

    2.4.3. hive数据类型向上转型

    小的数据类型可以转换成大的数据类型       
    所有的数据类型类型都可以转成double类型
    boolean类型无法转换
    

    三.Hive数据的DDL,DML

    SQL:数据库的核心语言,采纳为操作关系型数据库的国际标准语言( ISO )
    非关系型数据库引入此语言( hive : HQL 额外的功能 )

    分类:
    数据定义语言 :Data definition language DDL ,create /drop /alter
    数据操作语言 :Data manipulation language DML ,update /delete /insert
    数据查询语言 :Data Query language DQL , select

    1. DDL(和数据无关)

    1.1 针对数据库

    1.1.1. 创建数据库

    语法:create database  [if not exists]   dbName  [location  path];
    
    例如:
        create database db1;  //    /user/hive/warehouse/
        create database db1;//报错 
        create database if not exists db1;
    
        create database  db2 location '/user/db2.db';
    

    1.1.2. 查看数据库

    使用某一个数据库:use databaseName;
    
    查看所有的数据库:show databases;
    
    查看某一个数据库的详细信息:desc database [extended]  dbName
    

    1.1.3. 修改数据库

    只能修改数据库的描述信息
    
    语法:alter database  dbName  set dbproperties('desc'='ceshi db');
    

    1.1.4. 删除数据库

    语法:
        drop database [if exists] dbName
    

    1.2 针对数据表

    1.2.1. 创建表

    完整版的建表语句:
    
    create [external] table [if not exists] tbName
        (col definiton [comment 字段的描述信息] ... ... ...)
        [comment 表的描述信息]
    
        [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] # 创建分区
        [CLUSTERED BY (col_name, col_name, ...)  ]                       # 创建分桶表
        [row format ... ... ...] # 指定表的分隔符
        [location path] # 指定表的存储位置
    
    
        [AS select_statement]               # 创建表的方式
        LIKE existing_table_or_view_name    # 创建表的方式
    
    创建表方式一:直接创建
        create table tbName (col  type... ...)
    
    创建表方式二:查询建表法     , AS  (复制表结构,和表中所有数据到新的表中)
        create table tbName 
                    as  
                select * from tbName2 ;
    
    创建表方式三:like建表法 , LIKE (只复制表结构,不复制表中所有数据到新的表中)
        create table tbName 
                    like
                    tbName2;
    

    1.2.2. 查看表

    show tables;  查看当前库中的所有的表
    show create table tbName;  查看某一个表的具体的建表语句(获取当前表设置的分隔符信息)
    
    show tables in dbName;  指定查看某一个数据库中的所有的表
    show tables like 'stu*' ;  模糊查询多个表
    
    desc tbName; 查看表中的具体的字段信息
    desc extended tbName ; 查看表的详情 (查看外部表)
    desc formatted tbName ; 查看表的详情 (查看内部表和外部表)
    

    1.2.3. 修改表

    1. 修改表的名称
        alter table tbName  rename to newTbName ;
    
    2. 修改表字段的定义
        添加新的列:
            alter table tbName add columns(colName type... ....)
    
        修改列定义:change可以修改  列名称 / 列类型 /  列的位置
            alert table tbName change  oldColName  newColName newType  [first|after colName]
    
        表结构替换: 替换调原来的表结构
            alert table tbName replace  columns(colName type... ....)
    
    
    注意:hive2.0+版本中,对类型转换进行限制
            小类型 》大类型 ---> 运行
            大类型 》小大类型 ---> 运行
    

    1.2.4. 删除表

    1. 删除内部表
        drop table tbName;
        truncate table tbName;
    
    
        注意:更换mysql驱动包的版本
    
    2. 删除外部表
        方式一:
            alter table  tbName set tblproperties('external'='false');  
            drop table tbName;
    
        方式二:
            hdfs dfs -rm -r -f /user/hive/warehouse/tbName
    

    2. DML

    数据仓库

    四、表的分类(内部表、外部表、分区表)

    1. 内部表(管理表)

    概述:
    默认创建的所有表
    当前用户对其拥有所有的操作权限(删除,修改… …)
    删除内部表,数据仓库存储的数据被删除,元数据中的内容也被删除

    查看表的类型:desc formatted tbName ;
    Table Type: MANAGED_TABLE

    删除表:
    drop table tbName;

    注意:删除管理表,将所有数据全部删除

    2. 外部表

    概述:
    在创建表时使用external关键字创建的表时外部表
    当前用户其拥有部分的操作权限(删除,修改… …)
    删除外部表,数据仓库存储的数据不会被删除,元数据中的内容会被删除
    适合存储被共享的数据

    创建表:
    使用关键字 : external

    查看表的类型:desc formatted tbName ;
    desc extended tbName;
    desc tbName;

            Table Type:             EXTERNAL_TABLE
    

    删除表: 除的删是当前表的元数据
    drop table tbName;

    注意:删除外部表,不会将所有数据全部删除
    创建新的同名称表,数据会进行自动的管理操作

    3. 分区表

    概述:
    分区表对当前数据进行划分并存储不同的分区中( 文件夹 )
    分区表对当前的数据所在的分区进行单独的管理
    提高查询效率

    创建表:partitioned by

    create table tbName(col type... ...)
        partitioned by (pCol type)  # 按照什么字段进行分区
        row format delimited fields terminated by ',';
    

    例如:创建订单表,order

    create table partition_tb(id int ,name string)
        partitioned by (year string)  # 按照什么字段进行分区
        row format delimited fields terminated by ',';      
    

    导入数据:将一个文件中的所有数据全部加载到一个分区中

        load data local inpath ' asdsad' into table partition_tb  
                partition(k=v);
    

    查询分区数据:

    select * from tbName where k=v ; 查询 k所在分区   
    
    select * from tbName where k=v 
        union
        select * from tbName  where k =v2 ; 查询 多个分区 
    

    查看表的分区信息:

    show partitions tbName;
    

    删除分区:

    alter table tbName drop  parititon(k='v') [,parititon(k='v'),parititon(k='v')... ...]           
    

    添加分区:一次添加多个分区时,分区间不需要添加逗号

    alter table tbName add  parititon(k='v') [parititon(k='v') parititon(k='v')... ...]     
    

    多级分区表:(本质上就是多层级目录)

    partitioned by(year string ,month string)  //按照多个字段分区
    

    多级分区表查询指定分区的数据:

    select * from tbName where year=2019 and  month=6
    

    4. 分区表的数据的上传方式

    方式一:用户自定义分区目录,上传数据

    hive (default)> dfs -mkdir -p /user/hive/warehouse/partition_tb2/year=2019/month=7;
    hive (default)> dfs -put /home/zhangsan/partition.sql  /user/hive/warehouse/partition_tb2/year=2019/month=7;
    
    修复表上的分区的元数据
        msck repair table partition_tb2; 
    

    方式二:用户自定义分区目录

    hive (default)> dfs -mkdir -p /user/hive/warehouse/partition_tb2/year=2019/month=1;
    hive (default)> dfs -put /home/zhangsan/partition.sql  /user/hive/warehouse/partition_tb2/year=2019/month=1;
    
    show partitions partition_tb2 ;//查看此表的分区信息
    
    手动的给表添加用户的自定义的分区路径:
        alter table partition_tb2 add partition(year='2019',month='1');
    

    方式三:

    hive (default)> dfs -mkdir -p /user/hive/warehouse/partition_tb2/year=2019/month=2;
    hive (default)> load data local inpath '/home/zhangsan/partition.sql' into table partition(year='2019',month='2')   
    

    五、数据的导入导出

    1. 导入数据

    方式一:load方式

    语法:load data [local] inpath  数据源路径 into table tbName [overwrite] [partition(k=v)]
    
    说明:local表示从本地文件系统中导入数据
         不加local 默认从HDFS文件系统中导入数据
    
    情况一:数据从本地导入
        本质:将数据从本地上传到HDFS的数据仓库中
    
    情况二:数据从hdfs加载
        本质:在HDFS上进行数据的移动(不是复制)
    
        注意:数据源一定需要在hdfs上存在
    

    方式二:insert语句 (使用少)

    语法:insert into  table  tbName   [partition(k=v)]    values(v,v,v,v)
    
    此方式底层:将insert语句转换成MR任务执行
              效率较低
    

    补充:创建表时,直接导入HDFS上数据, location 指定数据表加载数据的路径
    create table tbName(…)
    location ‘hdfs path’

    例如:
        create table load_tb2(id int ,name string)
              > row format delimited fields terminated by '@'
              > location '/home/zhangsan/';
    

    2导出数据

    方式一:将数据仓库中的数据表的数据导出到HDFS

    export table  tbName to 'hdfs path'
    

    方式二:将数据仓库中的数据表的数据导出到本地

    dfs -get hiveDataPath  localPath
    

    方式三:insert overwrite 命令

    语法格式:insert overwrite [local] directory  path  selectExpr
    
    说明:local表示从本地文件系统中导入数据
         不加local 默认从HDFS文件系统中导入数据   
    
         path 本地或者HDFS的具体导出路径
    
    例如:insert overwrite local directory /home/zhangsan select * from tbName
    

    六、数据的查询( 重点 )

    语法:
        select  [ all | distinct] expr | 字段列表
             [
                from  tableName
                where 条件
                group by 分组条件 
                having 过滤
                order by 排序条件
                limit 启动,数量
             ]
    
    模糊查询:like  , not like , rlike
    
    多表查询:
        连接查询:join 
            右连接: 
            左连接:
        合并查询:union
    
        子查询:
    
        自连接:
    
    常用的聚合/分组函数:
        max(字段)
        min(字段)
        sum(字段)
        avg(字段)
        count(*|字段)
    

    七. Hive的DQL

    1. 语法

    select [distinct|all] expr,expr... ...
        from tbName
        where whereCondition
        group by colList
        having havingCondition
        order by colList
        cluster by colList 
        limit num
    

    2. where子句

    is null
    is not null
    between...and...
    in(v1,v2,v3,... ...) | not in( v1,v2,v3,... ...)
    and
    or
    like | rlike
            %  通配符
            _  占位符
    

    3. group by 子句

    概述:
    按照某些字段的值进行分组,有相同值的放置到一起
    通常和聚合函数一起使用

    SQL案例:
    select c1 ,c2
    where condition ------>map端执行
    group by c1,c2 ------>reduce端执行
    having condition ------>reduce端执行

    3.1 案例:

    1. 建表
        create table order_tb(oid int ,num int ,pname string ,uid int)
            row format delimited fields terminated by ',';
    
        导入数据:
            load data local inpath '/home/zhangsan/order.txt' into table order_tb;
    
    
        create table user_tb(uid int ,name string ,addr string)
            row format delimited fields terminated by ',';
    
        导入数据:
            load data local inpath '/home/zhangsan/user.txt' into table user_tb;
    2. 注意
        select 后面非聚合列,必须要出现在group by 中
        可以使用as对表和列设置别名
    
        having和where的区别:
            位置,condition使用的过滤字段,针对的数据(单位:一条数据;单位:一组数据)
    
    3. 按照用户id分组查询订单表
        select o.uid from order_tb as o group by o.uid 
    
        使用分组函数|聚合函数:查询用户购买商品数量
            select o.uid , count(o.num) from order_tb as o group by o.uid 
    
        使用分组函数|聚合函数:查询用户购买商品数量,显示数量大于2的信息
            select  o.uid , count(o.num) from order_tb as o group by o.uid having count(o.num) >2;
    
    4. 常见的聚合参数
        count()         
        max()1
        min()
        sum()
        avg()
    

    4. order by 子句

    1. 概述
      按照某些字段进行排序

      现象:order by 可以使用多列进行排序(全局排序),此操作在reduce阶段进行,只有一个reduce
      问题:数据量很大

    2. 全局排序:order by
      asc|desc

    3. 案例
      select * from order_tb order by num desc;

      select * from order_tb order by num ,oid asc ; // 多字段排序

    5. sort by 排序

    在mapreduce内部的排序,不是全局排序
    
    1. 设置reduce的个数
        默认 < 配置文件 < 命令行 
    
        set key=value 设置属性
        set key 获取属性
    
        set mapreduce.job.reduces=3; 设置属性值
        set mapreduce.job.reduces  ; 查看属性值
    
    
    2. 执行排序
        select * from order_tb sort by num;
    
    3. 查看reduce中各个阶段输出的结果数据(将结果导出到本地查看)
        insert overwrite local directory '/home/zhangsan/sortbyResult' 
            select * from order_tb sort by num desc;
    
    总结:只对当前的分区进行内容的排序
    

    6. distribute by 分区

    mapreduce中的partition操作,进行分区,结果sort by使用
    
    distribute by字句需要写在sort by之前(先分区,在排序)
    
    案例:sql转成mr时,内部使用oid字段进行分区,使用num字段进行排序
        insert overwrite local directory '/home/zhangsan/distributebyResult'
            select * from order_tb distribute by oid  sort by num desc;
    

    7. cluster by 分区并排序

    insert overwrite local directory '/home/zhangsan/clusterbyResult'
            select * from cluster by num ;  
    
    注意:分区和排序的字段需要一致
         不可以指定排序的方向
    

    8. join 子句(多表连接查询)(子查询)

    1. 概述
      两张表m,n之间可以按照on的条件进行连接,m中的一条记录和n表中的一条记录组成一个新的记录。

      join 等值连接(内连接):只有某个值在m和n中同时存在时,才连接。
      left outer join (左外连接) :左表中的值无论在右表中是否存在,都输出;右表中的值只有在左表中存在才输出
      right outer join (右外连接) :相反
      mapjoin (map端完成连接): 在map端进行表的连接操作,基于内存(优化的方式)

    2. 案例
      等值连接:
      select from user_tb u join order_tb o ; // 笛卡尔积现象
      select u.name,o.num,o.pname from user_tb u join order_tb o on u.uid=o.uid ; //添加过滤条件避免,笛卡尔积现象

      左外连接:(和右外连接相对的)
      insert into user_tb values(10004,‘xiaoliu’,‘beijing’);
      select u.name,o.num,o.pname from user_tb u
      left join order_tb o on u.uid=o.uid ;

      注意:表和表的一次连接,代表一个MapReduce 作业job
      如果sql语句中存在多个表之间的连接,会创建多个job作业,连接的顺序就是job执行的顺序

    3. 子查询
      SQL语句的嵌套查询

       select * from (select * from ...)
       selct * from tbName  where col = (select * from ...)
      

      嵌套的SQL语句中,子SQL语句的结果 可以作为查询的数据源,也可以作为查询的条件

      统计汽车类型的分布:
      商用 n1/count
      个人 n2/count

      hive:
      select 汽车的类型 , count() from cart group by 汽车类型
      select count(
      ) from cart

       select 汽车类型 , 当前类型数量/ (select count(*) from cart )  from    
           (select 汽车的类型 , count(*) from cart group by 汽车类型)
      

    八、Hive中的分桶

    分区:将文件切割成多个子目录
    select * from partition(k=v) ;//减少数据量

    分桶:将文件切割成多个小文件
    采集数据,按照桶采集 //减少数据量
    桶中数据的join操作,效率更高 //减少数据量

    原理:
    MR中:按照key的hash值对reducetask个数求模
    Hive中:按照分桶字段的hash值对分桶的个数求模

    分桶:
    方便抽样(采用数据)
    提高join的查询效率

    案例:

    1. 创建表,设置分桶字段
        create table cluster_tb(id int ,name string) 
            clustered by(id) into 4 buckets
            row format delimited fields terminated by ',';
    
        创建普通表:
            create table cluster_tb2(id int ,name string)
                row format delimited fields terminated by ',';
    
            load data local inpath '/home/zhangsan/cluster.txt' into table cluster_tb2;
    
    2. 配置属性
        set hive.enforce.bucketing=true
        set mapreduce.job.reduces=-1
    
    
    3. 使用子查询的方式,将数据添加到cluster_tb中
        insert into table cluster_tb
            select id,name from cluster_tb2 cluster by(id); 
    

    数据的采集:
    select * from tbName tablesample (bucket startNum out of sizeNum on colName)

    从startNum开始抽取数据,采取bucketSize/sizeNum的数据
    

    九、自定义函数

    1. 查看系统提供的函数列表
        show functions;
    
    2. 查看具体某一个函数的描述信息
        desc function  [extended] 函数名称;
    
    3. 自定义函数User defined function  / UDF    
        3.1 创建一个java项目,导入hive的libs
    
        3.2 创建类,继承org.apache.hadoop.hive.ql.exec.UDF
            public class FirstChar extends UDF {
            }
        3.3 业务代码
            public String evaluate(final String s) { # 重写此方法 evaluate
                    if (s == null) {
                        return null;
                    }
                    return s.charAt(0)+"";
                }
    
        3.4 将当前项目打包成jar包,将jar包移动linux上
    
        3.5 将jar包添加hive的classpath下
            hive> add jar  /opt/software/FirstChar.jar
    
        3.6 创建临时函数和自定义class 的关联
            hive> create [temporary] function my_func3 as 'cn.xdl.hanshu.FirstChar';
    
        3.7 HQL中使用自定义函数
            select my_func3(name) from user_tb;
                z
                w
                ...
                ...
    

    十、优化

    1. 数据倾斜

    maptask和reducetask的个数

    1.1 maptask的个数: 文件的大小、文件的个数、集群上blocksize的大小

    问题:小文件过多的问题 ( maptask并不是越多越好 )
    在map执行前进行合并,减少maptask的个数

    //配置文件修改配置
          <property>
             <name>hive.input.format</name>
             <value>org.apache.hadoop.hive.ql.io.CombineHiveInputFormat</value>
          </property>
    
    
    //命令行修改配置
        set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
    

    问题:字段少,数据量,大小于128M的文件数据处理,造成一个maptask压力过大
    添加maptask的个数( 127.999M<128M — maptask )

        computeSpliteSize(){                 50     128
            return Math.max( 0,   Math.min(maxSize,blockSize))
        }
    
    //命令行修改配置
        set mapreduce.input.fileinputformat.split.maxsize=50  #  默认是256M
    
    127.999  50     ----maptask
             50     ----maptask
             27.999 ----maptask
    

    1.2 reducetask的个数,合理的设计

    设置reduce的个数:
    set mapreduce.job.reduces=10; # 一个job中的

    reduce的个数决定的输出文件的个数,参考当前环境下的数据量和数据分布

    2. JVM的重用(性能提升的力度很大50%)

    在hadoop的配置文件mapred-site.xml,添加jvm配置:

    mapreduce.job.jvm.numtasks
    15

    JVM的创建和启动会消耗大量的性能,不建议频繁的创建和启动
    重用:一个jvm实例在同一个job作业中重用15次。

    3.Fetch 抓取

    Hive对某些操作不执行MapReduce计算
    select * from user_tb; //查询语句没有必要去开启mr运算

    配置文件:hive-site.xml
         <property>
            <name>hive.fetch.task.conversion</name>
            <value>more</value>
            <description>
              0. none : 所有操作都执行mr
              1. minimal : 全表查询,字段查询,limit,分区等操作
              2. more    : 查询和limit语句不走mr (不需要执行mr计算)
            </description>
          </property>   
    

    命令行修改:

    set hive.fetch.task.conversion ; 查看默认值
    set hive.fetch.task.conversion = more ; 查看默认值
    
    select * from tbName;//不需要使用mr计算
    

    4.本地模式

    处理数据量非常小,hive可以在本地模式下的一台机器上处理当前job的所有的任务,减少执行时间。

    开启本地模式:

     //开启本地模式
          <property>
            <name>hive.exec.mode.local.auto</name>
            <value>true</value>
          </property>
    
     //设置本地模式下能够处理的数据的数量规模  128M
          <property>  
            <name>hive.exec.mode.local.auto.inputbytes.max</name>
            <value>134217728</value>
          </property>
    
     //设置本地模式下能够处理的数据的个数
          <property>
            <name>hive.exec.mode.local.auto.input.files.max</name>
            <value>4</value>
          </property>
    

    命令行:

    set hive.exec.mode.local.auto=true|false;
    

    5. 并发执行

    Hive将命令划分成多个阶段执行,默认hive一次只执行一个阶段,减少执行时间

    设置Hive的并发操作:

     //是否并发的执行一个job作业
         <property>
            <name>hive.exec.parallel</name>
            <value>false</value>
          </property>
    
     //一个job的并发度,默认 8  (此大小的设置和当前机器的硬件配置有关)
          <property>
            <name>hive.exec.parallel.thread.number</name>
            <value>8</value>
          </property>
    

    命令行:

    set hive.exec.parallel = true; //开启任务的并发执行
    set hive.exec.parallel.thread.number = 10; //设置一个job的并发度
    

    6.表的设计和查询优化

    在这里插入图片描述
    mapjoin:在map阶段进行数据的合并
    默认情况下,join操作在reduce阶段完成。

    开启Mapjoin:
            //开启mapjoin
               <property>
                 <name>hive.auto.convert.join</name>
                 <value>true</value>
                </property>
    
            //如果文件小于25M则是要被合并小表
              <property>
                <name>hive.mapjoin.smalltable.filesize</name>
                <value>25000000</value> 
              </property>
    
        set hive.auto.convert.join = true;
        set hive.mapjoin.smalltable.filesize = 20000000;
    
    案例:
        order_tb   join   user_tb
    
    总结:在map阶段进行合并操作,避免reduce数据的倾斜和压力
    
    group by:
        map阶段切割的同一个key------------->一个reduce处理----------->outputFile  (数据倾斜)
            同一个key的数量级大           默认聚合操作在reduce端处理
         在map阶段对key进行聚合操作   
    
    实现:在map端开启聚合操作
    
         //开启map阶段聚合操作
          <property>
            <name>hive.map.aggr</name>
            <value>true</value>
          </property>
    
    
        //map阶段能够聚合的数据量
          <property>
                <name>hive.groupby.mapaggr.checkinterval</name>
                 <value>100000</value> //十万条
          </property>
    
    
        //如果存在数据倾斜,启动均衡负载   ,默认是关闭
         <property>
            <name>hive.groupby.skewindata</name>
            <value>true</value> 
          </property>
    
        启动均衡负载原理:
            job-----添加一个新的MR JOB,在当前job的map中将处理结果  随机  交给reduce,避免数据发生倾斜
            然后使用第二个MR JOB实现对结果数据的分组在合并。
    
        总结:使用两个job,一个实现负载均衡,一个实现最终数据的聚合操作。
    

    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    展开全文
  • Hive学习3:Hive三种建表语句详解

    万次阅读 多人点赞 2017-10-29 11:29:47
    Hive学习3:Hive三种建表语句详解

    注:hive其他语法在hive官网有说明,建议初学者,去官网学习一手的资料,
    官网:https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentation

    Create Table

    官网说明

    Hive建表方式共有三种:

    • 直接建表法
    • 查询建表法
    • like建表法

    首先看官网介绍
    ’[]’ 表示可选,’|’ 表示二选一

    CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name    -- (Note: TEMPORARY available in Hive 0.14.0 and later)
      [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
      [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]
      [SKEWED BY (col_name, col_name, ...)                  -- (Note: Available in Hive 0.10.0 and later)]
         ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
         [STORED AS DIRECTORIES]
      [
       [ROW FORMAT row_format] 
       [STORED AS file_format]
         | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  -- (Note: Available in Hive 0.6.0 and later)
      ]
      [LOCATION hdfs_path]
      [TBLPROPERTIES (property_name=property_value, ...)]   -- (Note: Available in Hive 0.6.0 and later)
      
    
    
    [AS select_statement];   -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)
     
    
    
    CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
      LIKE existing_table_or_view_name
      [LOCATION hdfs_path];
     
    data_type
      : primitive_type
      | array_type
      | map_type
      | struct_type
      | union_type  -- (Note: Available in Hive 0.7.0 and later)
     
    primitive_type
      : TINYINT
      | SMALLINT
      | INT
      | BIGINT
      | BOOLEAN
      | FLOAT
      | DOUBLE
      | DOUBLE PRECISION -- (Note: Available in Hive 2.2.0 and later)
      | STRING
      | BINARY      -- (Note: Available in Hive 0.8.0 and later)
      | TIMESTAMP   -- (Note: Available in Hive 0.8.0 and later)
      | DECIMAL     -- (Note: Available in Hive 0.11.0 and later)
      | DECIMAL(precision, scale)  -- (Note: Available in Hive 0.13.0 and later)
      | DATE        -- (Note: Available in Hive 0.12.0 and later)
      | VARCHAR     -- (Note: Available in Hive 0.12.0 and later)
      | CHAR        -- (Note: Available in Hive 0.13.0 and later)
     
    array_type
      : ARRAY < data_type >
     
    map_type
      : MAP < primitive_type, data_type >
     
    struct_type
      : STRUCT < col_name : data_type [COMMENT col_comment], ...>
     
    union_type
       : UNIONTYPE < data_type, data_type, ... >  -- (Note: Available in Hive 0.7.0 and later)
     
    row_format
      : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
            [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
            [NULL DEFINED AS char]   -- (Note: Available in Hive 0.13 and later)
      | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
     
    file_format:
      : SEQUENCEFILE
      | TEXTFILE    -- (Default, depending on hive.default.fileformat configuration)
      | RCFILE      -- (Note: Available in Hive 0.6.0 and later)
      | ORC         -- (Note: Available in Hive 0.11.0 and later)
      | PARQUET     -- (Note: Available in Hive 0.13.0 and later)
      | AVRO        -- (Note: Available in Hive 0.14.0 and later)
      | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
     
    constraint_specification:
      : [, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE ]
        [, CONSTRAINT constraint_name FOREIGN KEY (col_name, ...) REFERENCES table_name(col_name, ...) DISABLE NOVALIDATE
    

    观察可发现一共有三种建表方式,接下来我们将一一讲解。

    1.直接建表法:

    create table table_name(col_name data_type);
    

    这里我们针对里面的一些不同于关系型数据库的地方进行说明。

    row format

    row_format
      : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
            [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
            [NULL DEFINED AS char]   -- (Note: Available in Hive 0.13 and later)
      | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
    
    

    Hive将HDFS上的文件映射成表结构,通过分隔符来区分列(比如’,’ ‘;’ or ‘^’ 等),row format就是用于指定序列化和反序列化的规则。
    比如对于以下记录:

    1,xiaoming,book-TV-code,beijing:chaoyang-shagnhai:pudong
    2,lilei,book-code,nanjing:jiangning-taiwan:taibei
    3,lihua,music-book,heilongjiang:haerbin
    

    逗号用于分割列,即FIELDS TERMINATED BY char,分割为如下列 IDnamehobby(该字段是数组形式,通过 ‘-’ 进行分割,即COLLECTION ITEMS TERMINATED BY '-’)、address(该字段是键值对形式map,通过 ‘:’ 分割键值,即 MAP KEYS TERMINATED BY ':');
    LINES TERMINATED BY char用于区分不同条的数据,默认是换行符;

    file format(HDFS文件存放的格式)

    默认TEXTFILE,即文本格式,可以直接打开。

    如下:根据上述文件内容,创建一个表t1

    create table t1(
        id      int
       ,name    string
       ,hobby   array<string>
       ,add     map<String,string>
    )
    row format delimited
    fields terminated by ','
    collection items terminated by '-'
    map keys terminated by ':'
    ;
    

    这里写图片描述
    2. 查看表的描述:desc t1;
    这里写图片描述

    1. 下面插入数据
      注:一般很少用insert (不是insert overwrite)语句,因为就算就算插入一条数据,也会调用MapReduce,这里我们选择Load Data的方式。
    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
    

    创建一个文件粘贴上述记录,并上载即可,如下图:
    这里写图片描述
    然后上载

    load data local inpath '/home/hadoop/Desktop/data' overwrite into table t1;
    

    别忘记写文件名/data,笔者第一次忘记写,把整个Desktop上传了,一查全是null和乱码。。。。
    查看表内容:

    select * from t1;
    

    这里写图片描述

    external

    未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
    区别:
    内部表数据由Hive自身管理,外部表数据由HDFS管理;
    内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
    删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
    对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

    创建一个外部表t2

    create external table t2(
        id      int
       ,name    string
       ,hobby   array<string>
       ,add     map<String,string>
    )
    row format delimited
    fields terminated by ','
    collection items terminated by '-'
    map keys terminated by ':'
    location '/user/t2'
    ;
    

    这里写图片描述

    装载数据
    load data local inpath '/home/hadoop/Desktop/data' overwrite into table t2;
    

    这里写图片描述

    查看文件位置

    如下图,我们在NameNode:50070/explorer.html#/user/目录下,可以看到t2文件
    这里写图片描述

    t1在哪呢?在我们之前配置的默认路径里
    这里写图片描述

    同样我们可以通过命令行获得两者的位置信息:

    desc formatted table_name;
    

    这里写图片描述

    这里写图片描述
    注:图中managed table就是内部表,而external table就是外部表。

    分别删除内部表和外部表

    下面分别删除内部表和外部表,查看区别
    这里写图片描述

    观察HDFS上的文件

    发现t1已经不存在了
    这里写图片描述

    但是t2仍然存在
    这里写图片描述
    因而外部表仅仅删除元数据

    重新创建外部表t2
    create external table t2(
        id      int
       ,name    string
       ,hobby   array<string>
       ,add     map<String,string>
    )
    row format delimited
    fields terminated by ','
    collection items terminated by '-'
    map keys terminated by ':'
    location '/user/t2'
    ;
    

    这里写图片描述

    不往里面插入数据,我们select * 看看结果
    这里写图片描述
    可见数据仍然在!!!

    官网说明
    A table created without the EXTERNAL clause is called a managed table because Hive manages its data. 
    Managed and External Tables
    By default Hive creates managed tables, where files, metadata and statistics are managed by internal Hive processes. A managed table is stored under the hive.metastore.warehouse.dir path property, by default in a folder path similar to /apps/hive/warehouse/databasename.db/tablename/. The default location can be overridden by the location property during table creation. If a managed table or partition is dropped, the data and metadata associated with that table or partition are deleted. If the PURGE option is not specified, the data is moved to a trash folder for a defined duration.
    Use managed tables when Hive should manage the lifecycle of the table, or when generating temporary tables.
    An external table describes the metadata / schema on external files. External table files can be accessed and managed by processes outside of Hive. External tables can access data stored in sources such as Azure Storage Volumes (ASV) or remote HDFS locations. If the structure or partitioning of an external table is changed, an MSCK REPAIR TABLE table_name statement can be used to refresh metadata information.
    Use external tables when files are already present or in remote locations, and the files should remain even if the table is dropped.
    Managed or external tables can be identified using the DESCRIBE FORMATTED table_name command, which will display either MANAGED_TABLE or EXTERNAL_TABLE depending on table type.
    Statistics can be managed on internal and external tables and partitions for query optimization. 
    

    2.查询建表法

    通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据
    一般用于中间表

    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;
    

    根据例子我们建一张表:t3

    create table t3 as
    select
        id
       ,name
    from t2
    ;
    

    会执行MapReduce过程。
    查看表结构及内容,发现是有数据的,并且由于没有指定外部表和location,该表在默认位置,即是内部表。
    这里写图片描述

    3.like建表法

    会创建结构完全相同的表,但是没有数据。
    常用语中间表

    CREATE TABLE empty_key_value_store
    LIKE key_value_store;
    

    例子

    create table t4 like t2;
    

    可以发现,不会执行MapReduce,且表结构和t2完全一样,但是没有数据。
    这里写图片描述

    展开全文
  • Hive_ Hive 建表语句详解

    万次阅读 2018-06-12 22:01:09
    最近博主在编写一个每天定时创建Hive 分区的脚本,其中需要创建Hive表, 开始的时候我以为创建Hive 表的语句顺序是比较宽松的,经过测试发现不然, Hive 创建表需要比较固定的书写顺序 虽然暂时不知道这个顺序,...

     

    参考文章:

    https://blog.csdn.net/qq_36743482/article/details/78383964

    最近博主在编写一个每天定时创建Hive 分区的脚本,其中需要创建Hive表,

    开始的时候我以为创建Hive 表的语句顺序是比较宽松的,经过测试发现不然,

    Hive 创建表需要比较固定的书写顺序

    虽然暂时不知道这个顺序,可以查阅什么样的文档找到,如果知道的朋友,可以在底下踊跃留言,有红包派送

     

     

    下面对Hive 建表的格式规范进行讲解

     

     

    注:hive其他语法在hive官网有说明,建议初学者,去官网学习一手的资料, 
    官网:https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentation

    Create Table

    官网说明

    Hive建表方式共有三种:

    • 直接建表法
    • 查询建表法
    • like建表法

    首先看官网介绍 
    ‘[]’ 表示可选,’|’ 表示二选一

    CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name    -- (Note: TEMPORARY available in Hive 0.14.0 and later)
      [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
      [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]
      [SKEWED BY (col_name, col_name, ...)                  -- (Note: Available in Hive 0.10.0 and later)]
         ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
         [STORED AS DIRECTORIES]
      [
       [ROW FORMAT row_format] 
       [STORED AS file_format]
         | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  -- (Note: Available in Hive 0.6.0 and later)
      ]
      [LOCATION hdfs_path]
      [TBLPROPERTIES (property_name=property_value, ...)]   -- (Note: Available in Hive 0.6.0 and later)
    
    
    
    [AS select_statement];   -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)
    
    
    
    CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
      LIKE existing_table_or_view_name
      [LOCATION hdfs_path];
    
    data_type
      : primitive_type
      | array_type
      | map_type
      | struct_type
      | union_type  -- (Note: Available in Hive 0.7.0 and later)
    
    primitive_type
      : TINYINT
      | SMALLINT
      | INT
      | BIGINT
      | BOOLEAN
      | FLOAT
      | DOUBLE
      | DOUBLE PRECISION -- (Note: Available in Hive 2.2.0 and later)
      | STRING
      | BINARY      -- (Note: Available in Hive 0.8.0 and later)
      | TIMESTAMP   -- (Note: Available in Hive 0.8.0 and later)
      | DECIMAL     -- (Note: Available in Hive 0.11.0 and later)
      | DECIMAL(precision, scale)  -- (Note: Available in Hive 0.13.0 and later)
      | DATE        -- (Note: Available in Hive 0.12.0 and later)
      | VARCHAR     -- (Note: Available in Hive 0.12.0 and later)
      | CHAR        -- (Note: Available in Hive 0.13.0 and later)
    
    array_type
      : ARRAY < data_type >
    
    map_type
      : MAP < primitive_type, data_type >
    
    struct_type
      : STRUCT < col_name : data_type [COMMENT col_comment], ...>
    
    union_type
       : UNIONTYPE < data_type, data_type, ... >  -- (Note: Available in Hive 0.7.0 and later)
    
    row_format
      : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
            [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
            [NULL DEFINED AS char]   -- (Note: Available in Hive 0.13 and later)
      | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
    
    file_format:
      : SEQUENCEFILE
      | TEXTFILE    -- (Default, depending on hive.default.fileformat configuration)
      | RCFILE      -- (Note: Available in Hive 0.6.0 and later)
      | ORC         -- (Note: Available in Hive 0.11.0 and later)
      | PARQUET     -- (Note: Available in Hive 0.13.0 and later)
      | AVRO        -- (Note: Available in Hive 0.14.0 and later)
      | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
    
    constraint_specification:
      : [, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE ]
        [, CONSTRAINT constraint_name FOREIGN KEY (col_name, ...) REFERENCES table_name(col_name, ...) DISABLE NOVALIDATE
    •  

    观察可发现一共有三种建表方式,接下来我们将一一讲解。

    1.直接建表法:

    create table table_name(col_name data_type);
    •  

    一个复杂的例子

    主要要按照上面的定义的格式顺序去进行编写

    CREATE EXTERNAL TABLE IF NOT EXISTS `dmp_clearlog` (
      `date_log` string COMMENT 'date in file', 
      `hour` int COMMENT 'hour', 
      `device_id` string COMMENT '(android) md5 imei / (ios) origin  mac', 
      `imei_orgin` string COMMENT 'origin value of imei', 
      `mac_orgin` string COMMENT 'origin value of mac', 
      `mac_md5` string COMMENT 'mac after md5 encrypt', 
      `android_id` string COMMENT 'androidid', 
      `os` string  COMMENT 'operating system', 
      `ip` string COMMENT 'remote real ip', 
      `app` string COMMENT 'appname' )
    COMMENT 'cleared log of origin log'
    PARTITIONED BY (
      `date` date COMMENT 'date used by partition'
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
    TBLPROPERTIES ('creator'='szh', 'crate_time'='2018-06-07')
    ;

     

    这里我们针对里面的一些不同于关系型数据库的地方进行说明。

    row format

    row_format
      : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
            [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
            [NULL DEFINED AS char]   -- (Note: Available in Hive 0.13 and later)
      | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
    
    •  

    Hive将HDFS上的文件映射成表结构,通过分隔符来区分列(比如’,’ ‘;’ or ‘^’ 等),row format就是用于指定序列化和反序列化的规则。 
    比如对于以下记录:

    1,xiaoming,book-TV-code,beijing:chaoyang-shagnhai:pudong
    2,lilei,book-code,nanjing:jiangning-taiwan:taibei
    3,lihua,music-book,heilongjiang:haerbin
    •  

    逗号用于分割列(FIELDS TERMINATED BY char:对应ID、name、hobby(数组形式,COLLECTION ITEMS TERMINATED BY char)、address(键值对形式map,MAP KEYS TERMINATED BY char)),而LINES TERMINATED BY char 用于区分不同条的数据,默认是换行符;

    file format(HDFS文件存放的格式)

    默认TEXTFILE,即文本格式,可以直接打开。 
     

    如下:根据上述文件内容,创建一个表t1

    create table t1(
        id      int
       ,name    string
       ,hobby   array<string>
       ,add     map<String,string>
    )
    row format delimited
    fields terminated by ','
    collection items terminated by '-'
    map keys terminated by ':'
    ;
    •  

    这里写图片描述 
    2. 查看表的描述:desc t1; 
    这里写图片描述

    1. 下面插入数据 
      注:一般很少用insert (不是insert overwrite)语句,因为就算就算插入一条数据,也会调用MapReduce,这里我们选择Load Data的方式。
    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
    •  

    创建一个文件粘贴上述记录,并上载即可,如下图: 
    这里写图片描述 
    然后上载

    load data local inpath '/home/hadoop/Desktop/data' overwrite into table t1;
    •  

    别忘记写文件名/data,笔者第一次忘记写,把整个Desktop上传了,一查全是null和乱码。。。。 
    查看表内容:

    select * from t1;
    •  

    这里写图片描述

    external

    未被external修饰的是内部表(managed table),被external修饰的为外部表(external table); 
    区别: 
    内部表数据由Hive自身管理,外部表数据由HDFS管理; 
    内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定; 
    删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除; 
    对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

    创建一个外部表t2

    create external table t2(
        id      int
       ,name    string
       ,hobby   array<string>
       ,add     map<String,string>
    )
    row format delimited
    fields terminated by ','
    collection items terminated by '-'
    map keys terminated by ':'
    location '/user/t2'
    ;
    •  

    这里写图片描述

    装载数据

    load data local inpath '/home/hadoop/Desktop/data' overwrite into table t2;
    •  

    这里写图片描述

    查看文件位置

    如下图,我们在NameNode:50070/explorer.html#/user/目录下,可以看到t2文件 
    这里写图片描述

    t1在哪呢?在我们之前配置的默认路径里 
    这里写图片描述

    同样我们可以通过命令行获得两者的位置信息:

    desc formatted table_name;
    •  

    这里写图片描述

    这里写图片描述 
    注:图中managed table就是内部表,而external table就是外部表。

    分别删除内部表和外部表

    下面分别删除内部表和外部表,查看区别 
    这里写图片描述

    观察HDFS上的文件

    发现t1已经不存在了 
    这里写图片描述

    但是t2仍然存在 
    这里写图片描述
    因而外部表仅仅删除元数据

    重新创建外部表t2

    create external table t2(
        id      int
       ,name    string
       ,hobby   array<string>
       ,add     map<String,string>
    )
    row format delimited
    fields terminated by ','
    collection items terminated by '-'
    map keys terminated by ':'
    location '/user/t2'
    ;
    •  

    这里写图片描述

    不往里面插入数据,我们select * 看看结果 
    这里写图片描述 
    可见数据仍然在!!!

    官网说明

    A table created without the EXTERNAL clause is called a managed table because Hive manages its data. 
    Managed and External Tables
    By default Hive creates managed tables, where files, metadata and statistics are managed by internal Hive processes. A managed table is stored under the hive.metastore.warehouse.dir path property, by default in a folder path similar to /apps/hive/warehouse/databasename.db/tablename/. The default location can be overridden by the location property during table creation. If a managed table or partition is dropped, the data and metadata associated with that table or partition are deleted. If the PURGE option is not specified, the data is moved to a trash folder for a defined duration.
    Use managed tables when Hive should manage the lifecycle of the table, or when generating temporary tables.
    An external table describes the metadata / schema on external files. External table files can be accessed and managed by processes outside of Hive. External tables can access data stored in sources such as Azure Storage Volumes (ASV) or remote HDFS locations. If the structure or partitioning of an external table is changed, an MSCK REPAIR TABLE table_name statement can be used to refresh metadata information.
    Use external tables when files are already present or in remote locations, and the files should remain even if the table is dropped.
    Managed or external tables can be identified using the DESCRIBE FORMATTED table_name command, which will display either MANAGED_TABLE or EXTERNAL_TABLE depending on table type.
    Statistics can be managed on internal and external tables and partitions for query optimization. 
    •  

    2.查询建表法

    通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据 
    一般用于中间表

    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;
    •  

    根据例子我们建一张表:t3

    create table t3 as
    select
        id
       ,name
    from t2
    ;
    •  

    会执行MapReduce过程。 
    查看表结构及内容,发现是有数据的,并且由于没有指定外部表和location,该表在默认位置,即是内部表。 
    这里写图片描述

    3.like建表法

    会创建结构完全相同的表,但是没有数据。 
    常用语中间表

    CREATE TABLE empty_key_value_store
    LIKE key_value_store;
    •  

    例子

    create table t4 like t2;
    •  

    可以发现,不会执行MapReduce,且表结构和t2完全一样,但是没有数据。 
    这里写图片描述

     

     

     

     

     

     

     

     

    展开全文
  • Hive中扩展GIS函数

    万次阅读 2020-04-08 09:08:21
    目前,Hive表中存在需要把经纬度转化为距离,和一些其他相关的计算函数,但是在hive中并没有集成这些函数。当然我们可以自定义UDF函数,但是现在提供一个更加简单的方法,通过源码编译的方式,集成GIS函数。 环境 ...
  • Presto 配置 Hive & Hive的权限

    千次阅读 2020-06-18 14:19:19
    Hive连接器允许查询存储在Hive数据仓库中的数据。Hive是三个组件的组合: 各种格式的数据文件通常存储在Hadoop分布式文件系统(HDFS)或Amazon S3中。 有关如何将数据文件映射到架构和表的元数据。此元数据存储在...
  • JDBC连接impala Java连接Hive JDBC连接Hive

    万次阅读 2018-10-09 20:01:27
    JDBC连接impala Java连接Hive JDBC连接Hive 大家都知道impala是用hive的数据源,但速度要比hive快的多,在秒级即可完成任务查询 package cn.com.tengen.hive; import java.sql.SQLException; import java.sql....
  • Hive简介

    万次阅读 2019-11-21 20:31:23
    文章目录Hive基本概念Hive的意义是什么Hive可以对数据进行存储与计算Hive的特性Hive缺点Hive的内部组成架构数据格式:Hive中没有定义专门的数据格式数据格式部分自定义:hive支持的数据格式Hive元数据Hive安装部署...
  • 一篇文章让你了解Hive和HBase的区别

    万次阅读 多人点赞 2018-08-07 09:41:38
    相信做大数据开发的朋友对hive和HBase一定不会陌生。 HBASE 想了解更多大数据相关知识可以点击“了解更多” Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql...
  • Hive On Tez自定义Job Name

    万次阅读 2020-09-24 21:27:49
    今天在使用Hive On Tez的时候发现一个问题,那就是我们无法设置Tez运行在Yarn上面的Job Name。按照设置MR正常的步骤来设置Job Name发现也是无效的。 这让我很迷惑,于是想了一下是不是因为TezSession的时候已经写死...
  • Flink 读取hive,写入hive

    万次阅读 2019-05-21 15:55:28
    1,读取实现了,也是找的资料,核心就是实现了 HCatInputFormat HCatInputFormatBase 上面这两个类,底层也是 继承实现了 RichInputFormat: public abstract class HCatInputFormatBase<...
  • Hive之——Hive SQL优化

    万次阅读 多人点赞 2018-06-08 23:45:15
    一、Hive优化目标在有限的资源下,提高执行效率二、Hive执行HQL——&gt; Job——&gt; Map/Reduce三、执行计划查看执行计划explain [extended] hql四、Hive表优化1、分区静态分区动态分区set hive.exec....
  • Hive中rlike,like,not like,regexp区别与使用详解

    万次阅读 多人点赞 2018-03-05 22:56:48
    1.like的使用详解 1.语法规则: 格式是A like B,其中A是字符串,B是表达式,表示能否用B去完全匹配A的内容,换句话说能否用B这个表达式去表示A的全部内容,注意这个和rlike是有区别的。返回的结果是True/False. ...
  • 2018-02-01T09:46:28,400 WARN [9a4cc1b4-8396-471b-8df0-b1eb3ca1fd82 main] ql.Driver: Caught exception attempting to write metadata call information org.apache.hadoop.hive.ql.metadata.HiveException: ...
  • hive 正则表达式详解

    万次阅读 2016-04-09 18:56:22
    hive中的正则表达式还是很强大的。数据工作者平时也离不开正则表达式。对此,特意做了个hive正则表达式的小结。所有代码都经过亲测,正常运行。1.regexp语法: A REGEXP B 操作类型: strings 描述: 功能与RLIKE相同...
  • Hive SQL执行全过程源码解析(Hive3.1)

    千次阅读 2019-11-01 17:01:41
    Hive任务提交源码解析
  • Hive安装

    千次阅读 2020-08-19 01:53:48
    1、 Hive安装地址 2、 MySql安装 2.1 安装包准备 2.2 安装MySql 2.3 配置MySql 3、Hive安装部署 4 、Hive元数据配置到MySql 4.1 拷贝驱动 4.2 配置Metastore到MySql 5、 启动Hive 5.1 初始化元数据库 5.2...
  • SpringBoot重点详解--整合hive-jdbc

    万次阅读 多人点赞 2018-08-19 15:40:18
    使用DataSource操作 Hive 使用 JdbcTemplate 操作 Hive 启动测试 创建Hive表 查看Hive表 导入数据 插入数据 本文将对如何在Springboot项目中整合hive-jdbc进行简单示例和介绍,项目的完整目录层次如下图所示...
  • Hive】基础教程

    万次阅读 2019-12-16 22:35:40
    Hive基础教程 一、启动服务 加载环境变量 source /etc/profile 启动Hive服务 nohup hive --auxpath /opt/elasticsearch-hadoop-5.6.0/dist/elasticsearch-hadoop-5.6.0.jar --service metastore & 二、停服务 ...
  • Hive调优总结

    千次阅读 2019-05-05 18:40:59
    熟悉Hive的开发者都知道,Hive会将操作语句转换为MapReduce作业,对于开发者是透明的,我们并不需要理解其原理就可以专注手头的工作,但是在实际开发当中数据量巨大,我们需要采取一些优化措施来提高MR作业的效率。...
  • 总结:HiveHive on Spark和SparkSQL区别

    万次阅读 多人点赞 2017-08-04 22:36:07
    Hive的原理大家可以参考这篇大数据时代的技术hivehive介绍,实际的一些操作可以看这篇笔记:新手的Hive指南,至于还有兴趣看Hive优化方法可以看看我总结的这篇Hive性能优化上的一些总结 Hive on Mapreduce执行...
  • Hive Merge详解

    万次阅读 2019-10-28 14:23:44
    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Merge https://community.cloudera.com/t5/Community-Articles/Hive-ACID-Merge-by-Example/ta-p/245402 说明 Hiv...
  • Hive总结篇及Hive的优化

    万次阅读 多人点赞 2018-09-11 10:15:40
    Hive学习也有一段时间了,今天来对Hive进行一个总结,也是对自己的总结,作者还是个小白,有不对的地方请大家指出相互学习,共同进步。今天来谈一谈什么是Hive,产生背景,优势等一系列问题。 什么是Hive 老...
  • hive 创建索引

    万次阅读 2019-11-28 15:33:34
    文章目录hive索引创建索引加载索引数据查看索引表中数据删除索引查看索引参考 hive索引 索引是hive0.7之后才有的功能,创建索引需要评估其合理性,因为创建索引也是要磁盘空间,维护起来也是需要代价的 创建索引 ...
  • linux 启动hive时报错

    2017-07-11 08:38:14
    $beeline -u jdbc:hive2://192.168.141.142:10000 Connecting to jdbc:hive2://192.168.141.142:10000 17/07/11 23:37:38 INFO jdbc.Utils: Supplied authorities: 192.168.141.142:10000 17/07/11 23:37:38 INFO ...
  • Hive对Hadoop MapReduce任务进行封装,通过jdbc的api接口可以发起hive任务。有些任务可能会解析一个或多个mapreduce任务。 如何监控hive的任务,再在外部时间较长的情况下,杀掉某些hive任务。 (1)通过JDBC接口...
  • [Hive进阶]- Hive with as 语法

    千次阅读 2018-12-29 11:16:31
    前言  公用表表达式(CTE)是从WITH子句中指定的简单查询派生的临时结果集(会把查询的表数据放到内存中...可以在Hive SELECT,INSERT, CREATE TABLE AS SELECT或CREATE VIEW AS SELECT语句中使用一个或多个CTE...
  • hive like与rlike的区别

    万次阅读 2016-03-28 14:55:31
    like与rlike的区别: like不是正则,而是通配符。这个通配符可以看一下SQL的标准,例如%代表任意多个字符。...hive> select "aaaaa" like "%aaa%" from test_struct limit 10; Total jobs = 1 ... OK

空空如也

1 2 3 4 5 ... 20
收藏数 132,281
精华内容 52,912
关键字:

hive