美文网首页
hive基础学习

hive基础学习

作者: 485b1aca799e | 来源:发表于2017-06-18 00:14 被阅读0次

    Hive学习

    Author : Shan Jia-jun

    Date : 2016-09-18


    • hive把数据组织为表,通过这种方式为存储在HDFS上的数据赋予结构

    • 元数据存储在metastore数据库中。

    hive 外壳环境

    hive > show tables;
    #列出hive的数据列表
    #交互式环境
    hive > show databases;
    #列出所有的数据库;
    hive > show tables in dbname;
    #列出某个数据库中的表;
    
    hive > show tables like 'h*';
    #使用正则表达式列出某个以h开头的表的名字;
    
    hive > describe databases dbname;
    
    $ hive -f script.q
    #使用-f选项可以运行指定文件中的命令
    #也可以使用非交互式环境
    
    $ hive -e 'select * from dummy'
    #对于较短的脚本,可以使用-e选项在行内嵌入命令
    
    • 建立一个较小的数据表用于测试查询
    $ echo 'x' > dummy.txt
    $ hive -e "create table dummy (value string);load data local inpath '/home/shanjiajun/dummy.txt' into table dummy;"
    
    如果不想将操作运行信息打印到标准输出中,这时候可以使用-S选项,不显示打印运行的时间信息;

    创建一个表并导入数据

    create table records (year string, temperature int, quality int)
    row format delimited fields terminated by '\t';
    
    #该表声明的是数据文件的每一行是由制表符分隔的文本
    
    load date local inpath 'input/ncdc/micro-tab/sample.txt' overwrite into table records;
    #这一个命令告诉hive把指定的本地文件放进仓库目录中。
    #但是这个操作并不解析文件或把它存储为内部数据库格式,因为hive并不强制使用任何指定文件格式。
    #文件以原样逐字存储,hive并不会对文件进行修改。local为从本地上传数据。overwrite为覆盖上传.
    #在hive的仓库目录中,表存储为目录。HDFS的数据表存储目录为/user/hive/warehouse
    

    删除表

    $hive -e 'drop table if exists 表名'
    #删除hive中的一个表 
    #注意:使用hive命令删除表后,但是上传的数据并不会被删除,仅仅只是删除了一个表的目录,需要手动删除HDFS中的数据
    

    更新

    hive 不支持更新(或删除),但支持insert into ,所以可以向现有表中增加新的行。

    多数据库/模式支持

    hive 支持创建多个数据库或模式,可用的命令包括 SHOW DATABASES、CREATE DATABASE dbname、user dbname 以及DROP DATABASE dbname 这样的语句。如果没有明确指明数据库,那么所指定的是在default数据库中的表

    托管表和外部表

    #对于托管表,加载数据到托管表时,hive把数据移到仓库目录。例如:
    hive > CREATE TABLE managed_table (dummy STRING);
    hive > LOAD DATA INPATH '/user/tom/data.txt' INTO table managed_table;
    #此时load把文件从hdfs:/user/tom/data.txt 移动到hdfs: /user/hive/warehouse/managed_table.
    
    #对于外部表而言,外部数据的位置需要在创建表的时候声明:
    CREATE EXTERNAL TABLE external_table (dummy STRING)
    LOCATION '/user/tom/external_table';
    LOAD DATA INPATH '/user/tom/data.txt' INTO TABLE external_table;
    
    #只有源和目标在同一个文件系统中移动才会成功。
    #当然,作为特例,如果用了LOCAL关键字,hive会吧本地文件系统的数据复制到hive的仓库目录。在其他情况下,最好把LOAD视为一个移动操作。
    #使用EXTERNAL关键字以后,hive知道数据并不由自己管,因此不会把数据移动到自己的仓库目录。
    #丢弃外部表时,hive不会碰数据,而只会删除元数据。
    

    建立外部分区表

    创建一个外部表:
    create external table user_action_201608 
    (type STING,userid string,region string,action string)
    partitioned by (day string)
    row format delimited 
    fields terminated by '|' 
    location '/cucrz/data/look/1901/2016/08';
    
    
    修改表创建分区
    alter table user_action_201608 add partition (day='01')
    location '01';
    alter table user_action_201608 add partition (day='02')
    location '02';
    alter table user_action_201608 add partition (day='03')
    location '03';
    ...
    
    #查询:
    select * from user_action_201608 limit 10;
    
    

    相关文章

      网友评论

          本文标题:hive基础学习

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