数仓回刷历史数据–hive设置动态分区,并向动态分区内刷入历史数据

内容目录

  • 数仓回刷历史数据--hive设置动态分区,并向动态分区内刷入历史数据
    • 一、问题介绍
    • 二、问题解决思路
      • 1 . 解决复杂逻辑任务
      • 2. 数据一致性
      • 3. 数据分区问题
    • 三、必备知识
      • 1. checksum验证一致性
      • 2. hive动态分区
    • 四、实际操作

一、问题介绍

今天发现一张表在今年开始有一个字段就没有数据了,没有办法只能是去重新写下逻辑重新刷一下数据。

首先介绍一下这个表,是一张全量表,每天数据在3G左右,有多个上游任务,同时也有多个下游任务。所以对于刷数据的时候就哟啊考虑一下

刷数据有几个问题会出现:

  1. 原始逻辑很复杂,肯定不能通过直接重跑数据做到数据回刷
  2. 刷数据怎么保证数据的一致性
  3. 确实的数据有100天,如何把这些数据放到相应的分区,总不能运行100次吧

二、问题解决思路

1 . 解决复杂逻辑任务

对于问题1,逻辑很复杂,上下游任务较多的时候,可以直接冲刷数据没有问题,但是不建议这样做,这里采取的办法是把确实的字段和表粒度信息放到一张临时表里,把数据全刷回临时表之后,再次把临时表数据刷到目标表即可

2. 数据一致性

对于冲刷历史数据,最重要的肯定是数据怎么保证和已经入仓的数据保持一致性,如果辛辛苦苦刷了100天的数据,发现和仓里的数据完全对不上,那就面向白干式刷数据。

这里提供两种方案:

①比较简单的

看刷完数据和仓内数据某一天的数据行数,如果数据行数是一致的,那么可以80%的可能是没有问题的,但是也不排除20%的可能是有问题的。比如行数一致但是内容不一致。关于这个80%怎么来的,当然是我自己说的,没有科学依据

②比较科学的

检查两张表的数据除了刷的字段之外的checksum是否相同。这类似于一种算法处理机制,可以类比一下码代码时候的equal方法,借助hash值把数据都搞在一起,看看是不是一致的,这种方法是比较科学的,因为java之父就是这样干的,如果非要鸡蛋里挑骨头,你可以说存在哈希碰撞的情况,可能会造成极其幸运情况下下的误差,那就说准确度99.9%吧

③100%正确的

可以选择人工的把两张表数据拿出来,一个一个的去比较,当然也有你打盹眯眼的时候会出错

3. 数据分区问题

对于100天的数据,就会去到100个分区里,对于一个调度项目,中规中矩的可以执行到一个分区,所以执行到100个分区内时,就要运行100次,如果一天数据刷10min,100次就是1000min,也就一天一夜加班加点就刷完了,你花了一天就刷了100天的数据,看似你亏了,实际上你赚了。你可以这样尝试一下

当然了,可以选择一个hive黑科技,动态分区,就能解放劳动力,指定一个分区字段,剩下的交给hive完成

三、必备知识

理清了逻辑和分析了问题找到了解决方法,可能还需要一些必备知识

1. checksum验证一致性

关于这个一致性验证,可以调用一个hash方法

这个方法会返回传进去参数的hash值

那么就可以直接

select sum(hash(column)) from tbl;

2. hive动态分区

hive的动态分区在使用前需要先配置一下才行

①开启动态分区参数

默认就是true

hive.exec.dynamic.parition=true

②设置非严格模式

注意,必须设置非严格模式,否则不行

hive.exec.dynamic.parition.mode=nonstrict

③所有节点最大动态分区个数

hive.exec.max.dynamic.paritions=1000

④每个节点最大动态分区个数

hive.exec.max.dynamic.partitions.pernode=100

⑤整个mr job种可以创建多少HDFS文件

hive.exec.max.created.files=100000

以上这些不走就时配置好了动态分区

四、实际操作

这里做一个测试,并不是真实的数据

首先创建一张分区表

create table dyntable(name string, job int) partitioned by (logdate int);

看一下我们的表信息

desc extended dyntable;

我们拿两张表的数据简单连接一下往动态分区内刷数据

insert into table dyntable partition (logdate) select j1.name,j1.job,j2.logdate from jn1 j1 left join jn2 j2 on j1.name=j2.name and j1.logdate=j2.logdate;

这里有一个注意点,分区数据要在select字段的最后一个,因为会把前面的字段放进表字段内

查看刷进去的数据

select * from dyntable;

数仓回刷历史数据--hive设置动态分区,并向动态分区内刷入历史数据相关推荐

  1. 【学习笔记】第三章——内存 I(交换技术、进程七状态模型、动态分区分配、动态分区算法)

    文章目录 一. 交换状态.进程七状态模型 二. 内存的分配方式 三. 动态分配算法 一. 交换状态.进程七状态模型 交换技术:内存空间紧张,把某些进程暂时换出外存.(进程在内存与磁盘间动态调度) 进程 ...

  2. android recovery分区内刷镜像,Android手机Recovery模式取证方法研究.pdf

    Android手机Recovery模式取证方法研究 2015 年第 9 期 信息通信 2015 (总第 153 期) INFORMATION & COMMUNICATIONS (Sum. No ...

  3. hive当前日期超前_微博数仓数据延时优化方案

    前言 本文以离线数据仓库为背景,重点介绍因传输链路数据延时的不确定性,可能导致部分延迟文件无法参与正常的调度计算或同步,导致数据缺失的问题成因.业务影响及相应的解决方案.关于这类问题的处理,有这么一种 ...

  4. 数仓系列第11篇:实时数仓

    目录 导读: 1.数据仓库简介 2.数据仓库的发展 3.数据仓库建设方法论 4.数据仓库架构的演变 5.实时数仓案例 6. 实时数仓与离线数仓的对比 导读: 本文将从数据仓库的简介.经历了怎样的发展. ...

  5. 数仓(三)简析阿里、美团、网易、恒丰银行、马蜂窝5家数仓分层架构

    上一篇我们介绍了数据集市的概念以及它和数仓的区别,并且重点论述了大数据数仓中的分层架构体系. 这篇我们简要分析一下以下5家公司的数仓分层架构模型: 1.马蜂窝数仓分层架构 2.阿里云MaxComput ...

  6. hive动态分区shell_Hive动态分区 参数配置及语法

    Hive本身是不支持动态分区的.. 但动态分区是真的方便啊..不然手动维护要累死..按日期甚至小时来分区时动辄就好几千上万的分区..手动到哪一年去..? 想要用动态分区要先做一些设置来修改默认的配置. ...

  7. Hive 05_hive变量、动态分区

    hive 参数.变量     --hive当中的参数.变量,都是以命名空间开头     --通过${}方式进行引用,其中system.env下的变量必须以前缀开头 hive 参数设置方式 --1.修改 ...

  8. Hive动态分区 参数配置及语法

    Hive本身是不支持动态分区的.. 但动态分区是真的方便啊..不然手动维护要累死..按日期甚至小时来分区时动辄就好几千上万的分区..手动到哪一年去..? 想要用动态分区要先做一些设置来修改默认的配置. ...

  9. 深圳大数据培训:大数据开发之掌握Hive的静态分区与动态分区

    深圳大数据培训:大数据开发之掌握Hive的静态分区与动态分区 分区是hive存放数据的一种方式.将列值作为目录来存放数据,就是一个分区. 这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的 ...

最新文章

  1. MFC底层窗口的实现
  2. TinyBERT搜索: 比BERT快10倍,小20倍
  3. Android中asset文件夹和raw文件夹区别
  4. 字符串的构造方法和直接创建
  5. fatal: remote origin already exists.解决方法
  6. java数组使用实验报告_JAVA数组与类的定义-java实验报告
  7. java单个变量的表达式_java中使用Lambda表达式的5种语法
  8. 饿了么监控系统 EMonitor 与美团点评 CAT 的对比
  9. VMware (CentOS 6.x)克隆导致的网卡问题
  10. 谈谈android不同尺寸,不同分辨率的布局
  11. C语言关键字浅析-case
  12. 如何使用Ubuntu安装QQ音乐Linux版本
  13. 对计算机专业学科的认识1000字,计算机专业1000字实习报告
  14. 路由器选华硕还是tp_家用选TP-LINK路由器好还是华为路由器好
  15. 视觉三维重建:colmap从理论到实战
  16. 一文入门智能开关的3种功能形态
  17. Java中hash算法细述
  18. 计算机锁屏图片怎么设置方法,怎么设置电脑锁屏图片 电脑锁屏图片设置步骤...
  19. 数学建模之对策论/竞赛论/博弈论(Python)
  20. Linux网络服务——FTP服务器搭建

热门文章

  1. css 设置全屏背景图片
  2. 输入压缩空间量是分区量吗_硬盘只有C盘如何增加分区
  3. JMX : Standard MBean
  4. 贝叶斯平均:排序算法之二
  5. node各个版本的下载地址
  6. 模块化:模块化的基本概念
  7. springboot使用freemaker模板生成图片
  8. Suse获取磁盘利用率最大值
  9. 交换机/路由器实验:实验6软件二层交换机的实现
  10. 基于JavaScript的物业管理系统APP设计