• hive的数据类型和表类型


     一、hive的数据类型

    1.Hive中的数据类型分为两类:基本类型和复杂类型
    2.基本类型包含:tinyint,smallint,int,bigint,float,double,boolean,string,timestamp,binary
    3.复杂类型:array,map和struct

    二、hive的表类型

    hive是有多种表类型的,分四种,内部表、外部表、分区表、桶表

    1、内部表

    内部表也成受控表,表的默认数据存储在warehouse目录中,在加载数据过程中,实际上数据会被移动到warehouse目录中,在metastore中存储表的元数据信息,当我们一旦从hive删除一张表后,表中的数据和元数据将会同时被删除

    2、外部表

    建表语句中包含External的表也叫外部表,表的定义和数据生命周期互相不约束,数据只是表对hdfs上的某一个目录的引用而已,当删除表定义的时候,数据依然是存在的。仅删除表和数据之间引用关系。

     create external table external_table(    key string  ) location  '/data/external'

     导入:

    load data local inpath '/data/soft/hivedata/external_table.data' into table external_table;

     此时表目录存在/data/external,而表数据存在  /data/external/external_table.data

     当删除表时候, drop table external_table;表数据依旧存在

    • 内部表转外部表: alter table t1 set tblproperties('EXTERNAL'='true');
    • 外部表转内部表: alter table external_table set tblproperties('EXTERNAL'='false');

     修改后:

     

     备注:EXTERNAL必须大写,小写不生效:

    3、分区表

    分区可以理解为分类,通过分区把不同类型的数据放到不同目录。分区表的意义在于优化查询,查询时尽量利用分区字段,如果不使用分区字段,就会全表扫描,最典型的一个场景是把天作为分区字段,查询的时候指定天

    3.1创建一个分区

    创建表:

    1. create table partition_1(
    2. id int ,
    3. name string
    4. ) partitioned by (dt string)
    5. row format delimited
    6. fields terminated by '\t'

    添加表分区数据

    1. load data local inpath '/data/soft/hivedata/partition_1.data'
    2. into table partition_1 partition(dt='2022-01-01');

     

    手动添加分区:

    alter table partition_1 add partition(dt ='2022-01-02');

     3.2创建多个分区

    创建表语句:

    1. create table partition_2(
    2. id int ,
    3. name string
    4. )partitioned by (year int ,school string)
    5. row format delimited
    6. fields terminated by '\t'

    加载数据,其中数据文件只要有id和name这两个字段就可以,具体year和school两个区分字段在加载分区的时候指定的 

    load data local inpath '/data/soft/hivedata/partition_2.data' into table partition_2 partition (year='20220101',school='li');

    如果数据已经上传了,如何把表绑定数据:

    1. alter table ex_par add partition(year=20220103,school='bao')
    2. location '/data/soft/hivedata/partition_2.data';

    4、桶表

    桶表是对数据进行哈希取值,然后放到不同文件中存储,物理上,每个桶就是表(或分区)里的一个文件

    创建桶:

    create table bucket_tb(id int) clustered by (id) into 4 buckets;

    创建表并导入数据

    1. create table b_source(id int);
    2.  load data local inpath '/data/soft/hivedata/b_source.data' into table b_source ;

     往桶里导入数据

    insert into table bucket_tb select  id from b_source where id is not null;  

     

     

  • 相关阅读:
    卷积和转置卷积矩阵计算 convolution和deconvolution或者transposed_convolution
    Python 全栈系列195 Neo4j 4.4 Docker安装
    【如何设置环境变量(环境变量在哪里)】
    Elasticsearch:使用字节大小的向量节省空间 - 8.6
    Abp Vnext修改密码强度
    amap 高德地图
    Android开发学习【Button控件】
    flink1.13.2 text文本数据迁移为orc+snappy数据解决方案
    Another app is currently holding the yum lock; waiting for it to exit
    hadoop 运行环境搭建
  • 原文地址:https://blog.csdn.net/libaowen609/article/details/126337551