• hive学习笔记-表操作


    Hive数据类型
    基本数据类型
    tinyint,smallint,int,biging,float,double,decimal,char,varchar,string,binary,boolean,timestamp,date,
    引用数据类型
    Array:同样数据类型组合的数组,使用array[1]訪问
    MAP:Key-value键值对,通过键进行訪问,使用map['key']訪问
    STRUCT:结构体类型,用来存储不同数据类型的数据,是用struct.key訪问
    类型不区分大写和小写

    Hive使用的文件
    textfile:文本格式
    SequenceFile:序列化文件(存储的是二进制)
    RcFile:列是文件存储格式

    Hive基本使用表
    CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment],...)] [PARTITIONED BY(col_name data_type [COMMENT col_comment],...)] [CLUSTERED BY (col_name,col_name2,...) SORTED BY(col_name [ASC|DESC],...)] INTO num_buckets BUCKETS]
    [
     [ROW FORMAT row_format][STORED AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES(...)]
    ]
    [LOCATION hdfs_path]
               
    [AS select_statement]

    EXTERNAL:是内部还是外部表
    PARTITIONER BY :依据指定列进行分区
    CLUSTERED BY:依照某一个字段将同样数据聚到同一个reduce中
    BUCKETS:分桶,依据哈希值进行分桶
    LOCATION:创建表,其文件在在集群的位置
    AS:查询值同一时候加入到表中

    样例:
    CREATE TABLE IF NOT EXISTS employees(
    name string,
    salary float,
    subordinates array<string>,
    deductions map<string,float>,
    address struct<street:string,city:string,state:string,zip:int>
    )row format delimited fields terminated by ' ' collection items terminated by ',' map keys terminated by ':' lines terminated by ' ' stored as textfile location '/data/';

    查看表结构:
    desc table_name;
    具体信息
    desc extended table_name;
    格式化后的具体信息
    desc formatted table_name;

    删除表
    drop table table_name;

    外部表与内部表的差别:
    假设内部表,在删除表之后会将表数据从HDFS中删除,而外部表仅仅删除表的元数据信息,并不会删除表中的数据。



    查询字段,假设是array类型能够通过下标
    select subordinates[1] from employees;
    查询假设是map,使用col_name['key']
    查询假设是struct。使用col_name.steet

    show tables    显示当前数据库中的表
    desc [extended | formatted] table_name    显示表的结构
    show create table tablename    显示创建表的语句
    drop table tablename    删除表
    create table test1 like test2    复制表结构,可是表中数据并没有载入过来
    create table test4 as select name,addr from test5    依据test5的name和addr创建test4表。而且将test5中name和addr数据内容载入到test4中(select中不能查*)

    hive不同文件读取:
    stored as testfile
    直接查看HDFS
    通过hdfs dfs -test查看

    stored as sequencefile
    通过hdfs dfs -test查看

    stored as rcfile
    hive -service rcfilecat path

    stored as inputformat 'class' outputformat 'class'

    四种基本的差别是inputformat 和 outputformat不同

    hive中载入jar包(当次会话实用,假设多次须要加到lib文件夹下)
    add jar path/..jar

    Hive使用SerDe
    SerDe是Serializer和Deserializer的缩写即序列化与反序列化
    Hive读写数据的顺序
    HDFS->inputfileformat-> <key,vlaue> -> deserializer -> row对象
    row对象 -> serializer -> <key,value> ->outputFileFormat -> HDFS文件

    Hive分区
    为了避免查询过程中消耗非常长时间进行查找整个表,能够使用分区。查找特定分区中的内容,从而节省时间。


    分区语句
    create table tablename(
    name string
    ....
    )
    partitioned by(col_name type,...)    这个分区字段和上面定义的字段不同。定义分区字段能够有多个用于分区后在对内容进行分区,相当于一级分区二级分区,注意和顺序有关的
    事实上分区就是在HDFS下相应表中创建文件夹,这样以后查询的时候直接去相应文件夹下进行查找
    加入分区语法:
    alter table table_name add [if not exists] partition(col_name=par_con)
    注意这样的加入分区方法前提是在创建表的时候已经创建了col_name分区
    删除分区
    alter table table_name drop [if exists] partition(col_name=par_com)
    查看分区
    show partitions table_name
    数据载入到分区:
    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE table_name [partition(dt=..,hour=..)]

    Hive分桶
    对于某个表或者某个分区。hive进一步的组织成桶,也就是说桶是更细粒度范围的划分
    hive针对某一列进行分桶
    hive採用对列进行hash取值。然后使用该值对桶的个数取余的方式决定该条记录放在哪个桶中
    与分区一样都是为了提高查询的效率

    查找
    select [ALL|DISTINCT] col_name frwom table_name [where col_name=..]

  • 相关阅读:
    Visual C++ 2012/2013的内存溢出检測工具
    MATLAB新手教程
    LCD开发之汉字显示
    支持向量机通俗导论(理解SVM的三层境地)
    类与类之间的简单传值
    hibernate官方新手教程 (转载)
    秒杀多线程第四篇 一个经典的多线程同步问题
    Java的位运算符具体解释实例——与(&amp;)、非(~)、或(|)、异或(^)
    mysql基础:mysql与C结合实例
    php实现字符串的排列(交换)(递归考虑所有情况)
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6917770.html
Copyright © 2020-2023  润新知