美文网首页
Hive外表批量添加分区

Hive外表批量添加分区

作者: user0650 | 来源:发表于2018-07-31 16:03 被阅读0次

简介

我们有一批日志数据存储在hdfs上,按天创建目录,如2018-07-31的日志hdfs路径为:/data/logs/gateway/20180731。
现在要用hive分析数据,同时要保证这些数据目录不能改变,就需要hive用外表的方式与这些数据进行关联。

创建外表

CREATE EXTERNAL TABLE `gateway_analysis`(
  `s_t` bigint, 
  `u_i` string
)
PARTITIONED BY ( `dt` string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' ;

添加数据

示例:

ALTER TABLE eqxdb.gateway_analysis ADD PARTITION (dt='20180422') LOCATION '/data/logs/gateway/20180422';

但是,看下文件列表

$ hadoop fs -ls /data/logs/gateway
Found 108 items
drwxr-xr-x   - hdfs supergroup          0 2018-04-13 18:50 /data/logs/gateway/20180413
drwxr-xr-x   - hdfs supergroup          0 2018-04-17 00:00 /data/logs/gateway/20180416
drwxr-xr-x   - hdfs supergroup          0 2018-04-18 00:00 /data/logs/gateway/20180417
drwxr-xr-x   - hdfs supergroup          0 2018-04-19 00:00 /data/logs/gateway/20180418
...

一共108个待添加的目录,这样一个个添加太累人,有没有批量添加的方法呢?

Hive有个MSCK命令,可以扫描数据分区目录,修复元信息,目录与元信息不一致时,能自动更新。

但是,数据目录必须是Hive习惯路径格式:

/data/logs/gateway/dt=20180731

同时,建表时指定LOCATION为分区目录的父目录:

CREATE EXTERNAL TABLE `gateway_analysis`(
  `s_t` bigint, 
  `u_i` string
)
PARTITIONED BY ( `dt` string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 
LOCATION '/data/logs/gateway/';

这时,用命令

MSCK REPAIR TABLE gateway_analysis; 

即可自动把所有的数据按dt分区,添加到gateway_analysis中。

由于我们的目录格式不符合,只能用ADD PARTITION的方式了。

为减少工作量,写了个shell脚本,自动添加/data/logs/gateway目录下所有的分区目录到gateway_analysis表中:

for path in `hdfs dfs -ls /data/logs/gateway | awk '{print $8}'`
do
    hive --database dbname -e "alter table gateway_analysis add PARTITION(dt='${path:0-8:8}') location '$path'"
done

相关文章

  • Hive外表批量添加分区

    简介 我们有一批日志数据存储在hdfs上,按天创建目录,如2018-07-31的日志hdfs路径为:/data/l...

  • Hive 删除分区

    批量删除Hive表分区 alter table siebel_member drop if exists part...

  • 动态分区说明

    Hive分区 Hive的动态分区 概述 hive中支持两种类型的分区: 静态分区SP(static partiti...

  • Hive 分区/分桶

    分区/桶 Hive 分区 Hive的分区方式:由于Hive实际上是数据文件在HDFS存在的目录区分分区字段是虚拟列...

  • Hive系列之分区表和桶

    为提升hive数据的查询和写入性能, hive提供了分区表机制。hive每个表格可以指定多个分区key, 这些分区...

  • Hive01

    Hive 启动 Hive 启动方式 建表语法【单分区】示例: 加载【单分区】数据示例: 【多分区】示例: 加载【多...

  • 大数据之Hive03-分区partition详解(静态分区,动态

    一、前言 Hive分区是为了方便数据管理Hive的分区方式:由于Hive实际是存储在HDFS上的抽象,Hive的一...

  • Hive 批量创建/删除表分区

    创建表分区: MSCK REPAIR TABLE [表名]; 删除表日期类型分区: ALTER TABLE [表名...

  • Hive 1.2.1 分区和分捅

    1. 借鉴 Hive学习笔记——Hive中的分桶Hive分区和分桶(0925)HIVE表索引,分区和分桶的区别 2...

  • Hive表

    Hive分区 描述: Hive分区根据某字段的值分区1.可以多维度分区2.分区不会影响大范围查询的执行效率3.每个...

网友评论

      本文标题:Hive外表批量添加分区

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