• Hive数据操作


    首先我们介绍下Hive中的数据类型

    • 数值型类型
    • 字符串类型
    • 日期类型
    • 复杂类型

    数值型类型

    • TINY INT
    • SMALL INT
    • INT
    • BIG INT
    • FLOAT
    • DOUBLE
    • DECIMAL

    字符串类型

    • CHAR
    • VARCHAR
    • STRING

    日期类型

    • Timestamp
    • Date

    复杂类型

    • Arrays
    • Maps
    • Structs
    • Union

    在Hive上的操作

    创建数据库

    hive> show databases;
    OK
    default
    test
    Time taken: 1.268 seconds, Fetched: 2 row(s)
    hive> create database yandufeng_test;
    OK
    Time taken: 2.467 seconds
    hive> show databases;
    OK
    default
    test
    yandufeng_test
    Time taken: 0.042 seconds, Fetched: 3 row(s)

    删除数据库

    hive> show databases;
    OK
    default
    test
    yandufeng_test
    Time taken: 1.223 seconds, Fetched: 3 row(s)
    hive> drop database yandufeng_test;
    OK
    Time taken: 2.531 seconds
    hive> show databases;
    OK
    default
    test
    Time taken: 0.033 seconds, Fetched: 2 row(s)

    创建,修改,删除表

    hive> create table test_table(empid int, empname string);
    OK
    Time taken: 1.478 seconds
    hive> show tables;
    OK
    orcusers
    test_table
    users
    Time taken: 0.279 seconds, Fetched: 3 row(s)
    hive> alter table test_table rename to test1_table;
    OK
    Time taken: 1.264 seconds
    hive> show tables;
    OK
    orcusers
    test1_table
    users
    Time taken: 0.243 seconds, Fetched: 3 row(s)
    hive> drop table test1_table;
    OK
    Time taken: 2.005 seconds
    hive> show tables;
    OK
    orcusers
    users
    Time taken: 0.248 seconds, Fetched: 2 row(s)

    表的类型以及使用情况

    Hive分为内部表和外部表。

    内部表

    内部表类似于通常的数据库表,当删除这些表时,存储在上面的数据也会一并删除。所以当在内部表执行drop操作时一定要小心。

    hive> 
        > 
        > create table weather(wban int,temp int)
        > row format delimited
        > fields terminated by ','
        > location '/yandufeng/weather';
    OK
    Time taken: 1.464 seconds
    
    [hdfs@bd2 ~]$ hdfs dfs -copyFromLocal /home/hdfs/yandufeng_interval_table.txt /yandufeng/weather
    
    hive> select * from weather;
    OK
    1    3
    2    4
    Time taken: 0.102 seconds, Fetched: 2 row(s)

    或者你也可以加载数据到表里

    hive> load data inpath '/yandufeng/weather/yandufeng_interval_table.txt' into table weather;

    什么时候使用内部表?

    我们想要Hive管理数据的整个过程,包括删除

    创建内部表的例子

    外部表

    如果删除这种表的话,只会删除schema,数据仍然可用

    hive> create external table external_weather(wban int, temp int)
        > row format delimited
        > fields terminated by ','
        > location '/yandufeng/external_weather';
    OK
    Time taken: 0.214 seconds
    
    hive> 
        > 
        > select * from external_weather;
    OK
    Time taken: 0.112 seconds
    hive> load data inpath '/yandufeng/weather/yandufeng_interval_table.txt' into table external_weather;
    Loading data to table default.external_weather
    chmod: changing permissions of 'hdfs://bd4:8020/yandufeng/external_weather/yandufeng_interval_table.txt': Permission denied. user=hive is not the owner of inode=yandufeng_interval_table.txt
    Table default.external_weather stats: [numFiles=1, totalSize=8]
    OK
    Time taken: 0.847 seconds
    hive> select * from external_weather;
    OK
    1    3
    2    4
    Time taken: 0.084 seconds, Fetched: 2 row(s)

    什么时候使用外部表?

    数据不被Hive管控

    内部表和外部表的对比

    特性 内部表 外部表
    Schema Data on Schema Schema on Data
    存储位置 /usr/hive/warehouse HDFS location
    数据可用性 本地文件系统 HDFS

    分区

    Hive以分区的形式构建表,基于partition keys拆分数据到不同的分区。partition keys决定数据怎么进行存储。

    hive> create table partition_table(id int, name string,dept string, yoj int)
        > row format delimited
        > fields terminated by ','
        > location '/yandufeng/partition_table';
    OK
    Time taken: 0.226 seconds
    
    hdfs dfs -copyFromLocal partition_table.txt /yandufeng/partition_table
    
    hive>  
        > create table date_partition(id int, dept string) partitioned by(yoj int)
        > row format delimited
        > fields terminated by ','
        > location '/yandufeng/date_partition';
    OK
    Time taken: 0.217 seconds
    
    hive> load data inpath '/yandufeng/partition_table/partion_table.txt' into table parition_table;
    
    hive> set hive.exec.dynamic.partition.mode=nostrict
    
    hive> insert overwrite table date_parition partition(yoj) select id, dept, yoj from parition_table;

    Buckets

    Buckets主要用来有效进行查询,Buckets用来分割表的数据到不同的文件和目录

    Views and Indexs

    视图类似于表

    • 我们可以保存结果到视图
    • 类似于SLQ中的视图
    • 在视图上可以进行所有DML操作
    hive> create view view_data as select * from weather where wban = 1;
    OK
    Time taken: 0.66 seconds
    hive> select * from view_data;
    OK
    1    3
    Time taken: 0.671 seconds, Fetched: 1 row(s)

    Index

    索引是指向表中的特定列的指针

    • 用户必须手动定义索引
    • 当我们创建索引的时候,我们就是在创建指向表的特定列的指针
    hive> Create INDEX wban_index ON TABLE weather(temp) as 'COMPACT' with deferred rebuild;
    OK
    Time taken: 0.853 seconds
    hive> show index on weather;
    OK
    wban_index              weather                 temp                    default__weather_wban_index__    compact                 
    Time taken: 0.236 seconds, Fetched: 1 row(s)
    hive> 
  • 相关阅读:
    Apache Commons IO之FileUtils的常用方法
    Java之字节数组和字符串的转换问题
    Java之高级IO,Properties
    Java之IO流(字节流,字符流)
    Java之File与递归
    Java之线程池和Lambda表达式
    java之初学线程
    Java之初学异常
    Java之使用链表实现队列
    请求参数的绑定
  • 原文地址:https://www.cnblogs.com/yandufeng/p/6432070.html
Copyright © 2020-2023  润新知