当前位置:   article > 正文

Hive创建表指定分隔符、分区表的插入_hive创建表指定分隔号

hive创建表指定分隔号

hive是怎样保存元数据&内部表和外部表的区别:

https://www.jianshu.com/p/2ea08633b790

Hive建表指定分隔符

 hive 默认的字段分隔符为ascii码的控制符\001,建表的时候用row format delimited fields terminated by '\001' 

 hive默认使用的行分隔符是'\n'分隔符 ,也可以加一句:LINES TERMINATED BY '\n' ,使用默认的字段分隔符和行分隔符情况下,在建表时加不加效果一样

  1. CREATE TABLE test(
  2. id int,
  3. name string
  4. )
  5. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
  6. LINES TERMINATED BY '\n'
  7. STORED AS TEXTFILE;

 使用了’\t’作为了字段分隔符,’\n’作为换行分隔符。特殊字符无需转义

分区表

分区表的使用:

  • 分区表一般在数据量比较大,且有明确的分区字段时使用,这样用分区字段作为查询条件查询效率会比较高。

分区表的介绍:

     分区表指的是在创建表时指定的partition的分区空间,一个表可以拥有一个或者多个分区,每个partition分区以文件夹的形式单独存在表文件夹的目录下。

动态分区和静态分区:

对于hive分区表插入数据时候,对于分区字段可以自行指定一个静态字段或者根据分区字段的具体值进行插入分区表。

对于前者指定一个分区值的插入则成为静态分区插入,而后者根据分区字段的具体值插入则成为动态分区插入。

示例:

建立分区表:

  1. create table test.ora2hive (
  2. id int,
  3. name string,
  4. salary double,
  5. time string
  6. )
  7. PARTITIONED BY (`pday` string)
  8. STORED AS PARQUET TBLPROPERTIES('PARQUET.COMPRESSION'='SNAPPY');

准备数据:

另一张表名为test.oracle,数据为:

插入数据(动态分区插入):

  1. INSERT into test.ora2hive PARTITION(pday)
  2. SELECT
  3. id,
  4. name,
  5. salary,
  6. `time`,
  7. from_unixtime(unix_timestamp(time,'yyyy/MM/dd'),'yyyy-MM-dd') as pday
  8. FROM test.oracle

静态分区插入: 

动态分区插入时,需要在表的最后字段中有分区字段;静态分区插入时因为已经执行了分区字段,所以在表的数据中不需要有pday字段

INSERT into test.ora2hive PARTITION(pday='2020-05-08') VALUES(8,'h',2341.23,'2020/05/08 12:24:32')

查看ora2hive的数据:

查看HDFS上ora2hive表的目录,可以看到根据time时间字段进行了相应分区,每个分区为独立一个目录

查看分区信息

show  partitions test_partition

 添加新分区

alter table test.ora2hive add partition (pday='2020-05-09')

删除分区

alter table test.ora2hive drop  IF EXISTS partition(pday='2020-05-09');

分区修复命令MSCK

      将数据拷贝到我们Hive的目录下面,如果不是分区表,则新建的表可以正常使用,但是如果是分区表的,一般都是使用alter table add partition命令将分区信息添加到新建的表中,每添加一条分区信息就执行一个alter table add partition命令。

       如果分区数量少还好办,但是遇到分区数量多的情况,特别是分区数量大于50的情况,如果还是使用alter命令添加分区,那是一件耗时耗力的事情,还容易出错。Hive提供了MSCK命令,用于修复表的分区,该命令将关于分区的元信息添加到Hive metastore中,这是对于那些没有元信息的分区来说的。换句话说,就是将任何存在于HDFS上但不在metastore上的分区添加到metastore。

示例

     通过kettle将Oracle中的数据导入至hive的parquet表后,show  partitions test_partition并没有显示分区,而通过hdfs dfs -ls /命令查看HDFS目录下是有分区文件的,需要通过alter table add partition (pday='2020-05-09')来手动添加增加的分区。

    分区数量较多时,通过命令:

MSCK REPAIR TABLE test.ora2hive;

        将ora2hive表的全部的分区信息添加到Hive metastore,省时省力。注意,MSCK命令只能在hive下使用,在impala命令下不存在该命令。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/562544
推荐阅读
相关标签
  

闽ICP备14008679号