美文网首页数据分析大数据 爬虫Python AI Sql
Hive编程指南学习笔记-持续更新

Hive编程指南学习笔记-持续更新

作者: JaeGwen | 来源:发表于2018-04-08 11:18 被阅读13次

    HiveQL 数据定义

    HiveQL 是Hive查询语言,不完成遵循任一种ANSI SQL标准的修订版。
    Hive 不支持行级插入操作、更新操作和删除操作,也不支持事务

    Hive中的数据库

    Hive中数据库本质上是表的一个目录或者命名空间,这样可以避免表命名的冲突。
    创建数据库 Hive 会为每个数据库创建一个目录,数据库里的表将会以这个数据库目录的子目录的形式存储。

    hive> CREATE DATABASE financials;
    hive> CREATE DATABASE IF NOT EXISTS financials;
    

    显示数据库如果数据库非常多的话,可以使用正则表达式匹配来筛选出需要的数据库名

    hive> SHOW DATABASE LIKE 'h.*'
    human_resources
    hive>...
    

    数据库所在目录位于属性hive.metastore.warehouse.dir所指定的目录,其中default这个数据库比较特殊,没有相应的目录,所以default的表都是在hive.metastore.warehouse.dir顶层目录,数据库的文件目录名是以.db结尾
    用户可以通过如下命令来修改文件存储的这个默认位置

    hive> CREATE DATABASE financials 
        > LOCATION '/my/preferred/directory'
    
    hive> CREATE DATABASE financials 
        > COMMENT 'Holds all financials tables'
    
    hive> DESCRIBE DATABASE financials;
       financials Holds all financials tables
    hdfs://master-server/user/hive/warehouse/financials.db
    
    

    在这个例子中URL格式是hdfs, 如果安装的是MapR,那么这里就是maprfs,用户也可以使用亚马逊的S3特定的格式s3n

    为了脚本的可移植性,通常会省略掉那个服务器和端口号信息,而只有在涉及到另一个分布式文件系统实例(包括S3存储)的时候才会指明该信息。

    hive> CREATE DATABASE financials
        > WITH DBPROPERTIES ('creater' = 'Mark Moneybags','date' = '2012-01-02')
    
    hive> DESCRIBE DATABASE financials;
       financials Holds all financials tables
    hdfs://master-server/user/hive/warehouse/financials.db
    
    hive> DESCRIBE DATABASE EXTENDED financials;
    hdfs://master-server/user/hive/warehouse/financials.db
    (creater=Mark Moneybags,date=2012-01-02)
    

    USE 命令用于将某个数据库设置为用户当前的工作数据库,和在文件系统中切换工作目录是一个概念:

    hive> USE financials;
    ...
    

    可以通过设置一个属性值来在提示符里面显示当前所在的数据库

    hive> set hive.cli.print.current.db=true
    hive (financials) > USE default
    hive (default) > set hive.cli.print.current.db=false
    hive> ...
    

    删除数据库,IF EXISTS子句是可选的,如果加了这个子句,就可以避免因数据库financials不存在而抛出警告信息。默认情况下,Hive是不允许用户删除一个包含有表的数据库的,用户要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后面加在CASCADE这样可以使Hive自行先删除数据库中的表:

    hive> DROP DATABASE IF EXISTS financials;
    
    hive> DROP DATABASE IF EXISTS financials CASCADE;
    
    修改数据库

    用户可以使用ALTER DATABASE命令来为某个数据库的DBPROPERTIES设置键-值对属性值,来描述这个个数据库的属性信息。数据库的其他元数据信息是不可更改的,包括数据库名数据存储的目录位置

    创建表

    Hive的CREATE TABLE语句是遵循SQL语法惯例的,同时Hive的这个语句中具有显著的功能扩展,使其可以具有广泛的灵活性。
    用户可以在字段类型后为每个字段增加一个注释。和数据库一样,用户也可以为这个表本身添加一个注释,还可以自定义一个或多个表属性。TBLPROPERTIES主要作用是按键-值对的格式为表增加额外的文档说明。
    Hive 自动增加两个表属性: 一个是last_modified_by 一个是last_modified_time 分别保存着最后修改这个表的用户名,和最后一次修改的新纪元时间秒。

    用户还可以拷贝一张已经存在的表的表模式(而无需拷贝数据,类似表结构)

    hive> CREATE TABLE IF NOT EXISTS mydb.employees2 
    LIKE mydb.employees;
    

    Hive 并非支持所有的正则表达式功能。如果用户了解正则表达式的话 ,最好事前先测试下备选的正则表达式是否生效。
    我们也可以使用DESCRIBE EXTENDED mydb.employees命令来查看这个表的详细表结构信息,
    还有一种使用FORMATTED关键字替代EXTENDED关键字的话,可以提供更加可读的和冗长的输出信息。

    如果用户只想查看某一列的信息,那么只要在表名后增加这个字段的名称即可,这种情况下, EXTENDED关键字也不会增加更多输出信息。

    hive> DESCRIBE mydb.employees.salary;
    salary float Employee salary
    
    管理表

    我们目前所创建的表都是所谓的管理表,有时也被称为内部表。因为这种表,Hive会(或多或少)控制着数据的生命周期。
    但是,管理表不方便和其他工作共享数据,例如: 假设我们有一份由Pig或者其他工具创建并且主要由这一工具使用的数据,同时我们还想Hive在这份数据上执行一些查询,可以并没有给予Hive对数据的所有权,我们可以创建一个外部表指向这份数据,而并不需要对其具有所有权。

    外部表

    下面语句将创建一个外部表,其可以读取所有位于/data/stocks目录下的以逗号分隔的数据:

    CREATE EXTERNAL TABLE IF NOT EXISTS stocks (
        exchange      STRING,
        symbol        STRING,
        ymd           STRING,
        price_open    FLOAT,
        price_high    FLOAT,
        price_low     FLOAT,
        price_close   FLOAT,
        volume        INT,
        price_adj_close    FLOAT)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    LOCATION '/data/stocks';
    
    

    关键字EXTERNAL告诉Hive这个表是外部表,而后面的LOCATION...子句则用于告诉Hive数据位于哪个路径下。
    因为表是外部表,所以Hive并非认为其完全拥有这份数据。因此,删除该表并不会删掉这份数据,不过描述表的元数据信息会被删掉。

    用户可以在DESCRIBE EXTENDED tablename语句的输出中查看到表是否是管理表或者是外部表。在末尾的详细表信息输出中,对于管理表,用户可以看到如下信息:

    ... tableType:MANAGED_TABLE)
    

    对于外部表,用户可以看到如下信息:

    ... tableType: EXTERNAL_TABLE)
    
    分区表

    相关文章

      网友评论

        本文标题:Hive编程指南学习笔记-持续更新

        本文链接:https://www.haomeiwen.com/subject/qxqlhftx.html