hive数据仓库建设

1、设计原生日志表

原生日志表用来存放上报的原始日志,数据经过清洗加工后会进入到各个日志表中。

1.1 创建数据库

#创建数据库
$hive>create database umeng_big11 ;

1.2 创建原生日志表

原生表使用分区表设计,分区字段为ym/d/hm,hive使用动态分区表,分区采用非严格模式,即所有分区都可以是动态分区。hive命令行终端打开显式表头设置:

#临时设置,只在当前回话有效
$hive>set hive.cli.print.header=true ;

永久配置hive-site.xml:

...
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
...

创建hive原生日志表raw_logs:

$hive>create table raw_logs
(
servertimems float ,
servertimestr string ,
clientip string ,
clienttimems bigint,
status int ,
log string
)
PARTITIONED BY (ym int, day int , hm int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '#'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

1.3 加载hdfs数据到hive原生表

$hive>use umeng_big11 ;
$hive>load data inpath '/user/centos/umeng/raw-logs/201805/24/1809' into table raw_logs partition(ym=201805 , day = 24 , hm = 1809) ;

2、自定义UDF函数完成数据清洗

2.1 介绍

将原生数据加载原生日志表后,将status码为200的记录查询出来进行清洗,将结果分别插入到5类日志子表中。供以后分析使用。

3、创建日志子表

3.1 准备sql语句

创建/home/centos/umeng/umeng_create_logs_ddl.sql文件,内容如下:

--使用指定库
use umeng_big11 ; --startuplogs
create table if not exists startuplogs
(
appChannel string ,
appId string ,
appPlatform string ,
appVersion string ,
brand string ,
carrier string ,
country string ,
createdAtMs bigint ,
deviceId string ,
deviceStyle string ,
ipAddress string ,
network string ,
osType string ,
province string ,
screenSize string ,
tenantId string
)
partitioned by (ym int ,day int , hm int)
stored as parquet ; --eventlogs
create table if not exists eventlogs
(
appChannel string ,
appId string ,
appPlatform string ,
appVersion string ,
createdAtMs bigint ,
deviceId string ,
deviceStyle string ,
eventDurationSecs bigint ,
eventId string ,
osType string ,
tenantId string
)
partitioned by (ym int ,day int , hm int)
stored as parquet ; --errorlogs
create table if not exists errorlogs
(
appChannel string ,
appId string ,
appPlatform string ,
appVersion string ,
createdAtMs bigint ,
deviceId string ,
deviceStyle string ,
errorBrief string ,
errorDetail string ,
osType string ,
tenantId string
)
partitioned by (ym int ,day int , hm int)
stored as parquet ; --usagelogs
create table if not exists usgaelogs
(
appChannel string ,
appId string ,
appPlatform string ,
appVersion string ,
createdAtMs bigint ,
deviceId string ,
deviceStyle string ,
osType string ,
singleDownloadTraffic bigint ,
singleUploadTraffic bigint ,
singleUseDurationSecs bigint ,
tenantId string
)
partitioned by (ym int ,day int , hm int)
stored as parquet ; --pagelogs
create table if not exists pagelogs
(
appChannel string ,
appId string ,
appPlatform string ,
appVersion string ,
createdAtMs bigint ,
deviceId string ,
deviceStyle string ,
nextPage string ,
osType string ,
pageId string ,
pageViewCntInSession int ,
stayDurationSecs bigint ,
tenantId string ,
visitIndex int
)
partitioned by (ym int ,day int , hm int)
stored as parquet ;

3.2 执行sql脚本

$hive>source /home/centos/umeng/umeng_create_logs_ddl.sql

hive数据仓库建设的更多相关文章

  1. Hive数据仓库工具安装

    一.Hive介绍 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单SQL查询功能,SQL语句转换为MapReduce任务进行运行. 优点是可以通过类S ...

  2. HIVE—数据仓库

    1. hive是什么? Hive是基于 Hadoop 的一个数据仓库工具: 1.       hive本身不提供数据存储功能,使用HDFS做数据存储: 2.       hive也不分布式计算框架,h ...

  3. 高速查询hive数据仓库表中的总条数

    Author: kwu 高速查询hive数据仓库中的条数.在查询hive表的条数,通常使用count(*).可是数据量大的时候,mr跑count(*)往往须要几分钟的时间. 1.传统方式获得总条数例如 ...

  4. Hive数据仓库你了解了吗

    在工作中我们经常使用的数据库,数据库一般存放的我们系统中常用的数据,一般为百万级别.如果数据量庞大,达到千万级.亿级又需要对他们进行关联运算,该怎么办呢? 前面我们已经介绍了HDFS和MapReduc ...

  5. hive数据仓库入门到实战及面试

    第一章.hive入门 一.hive入门手册 1.什么是数据仓库 1.1数据仓库概念 对历史数据变化的统计,从而支撑企业的决策.比如:某个商品最近一个月的销量,预判下个月应该销售多少,从而补充多少货源. ...

  6. 将CSV格式或者EXCEL格式的文件导入到HIVE数据仓库中

    学习内容:数据导入,要求将CSV格式或者EXCEL格式的文件导入到HIVE数据仓库中: ①hive建表:test1 create table test1 (InvoiceNo String, Stoc ...

  7. Hive数据仓库工具基本架构和入门部署详解

    @ 目录 概述 定义 本质 特点 Hive与Hadoop关系 Hive与关系型数据库区别 优缺点 其他说明 架构 组成部分 数据模型(Hive数据组织形式) Metastore(元数据) Compil ...

  8. Hive数据仓库

    Hive 是一个基于Hadoop分布式文件系统(HDFS)之上的数据仓库架构,同时依赖于MapReduce.适用于大数据集的批处理,而不适用于低延迟快速查询. Hive将用户的HiveQL语句转换为M ...

  9. Hive数据仓库笔记(一)

    Hive建表: CREATE TABLE records (year STRING,temperature INT, quality INT) ROW FORMAT DELIMITED FIELDS ...

随机推荐

  1. nginx 搭建 rtmp 服务器

    前言 最近接手了一个跟视频监控相关的项目,用了近年来越来越流行的 Web 服务器 nginx 加上 nginx-rtmp-module 搭建 rtmp 服务器.使用了阿里云的服务器,系统 Ubuntu ...

  2. poj1125传播谣言(弗洛伊德,求最长路)

    Stockbroker Grapevine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38541   Accepted: ...

  3. xlrd和xlwd模块

    xlrd模块 是python中一个第三方的用于读取excle表格的模块 exlce结构分析 一个excle表格包含多个sheet 一个sheet中包含多行多列 每个单元格具备唯一的行号和列号 常用函数 ...

  4. xshell连接不上

    1.排查道路通不通 ping  baidu.com   是否通畅,如果不通 2.排查DNS ping 223.5.5.5 地址解释是否通畅 3.是否有劫财劫色的 检查防火墙   selinux是否 关 ...

  5. Go语言基础之3--时间和日期序列

    一.时间和日期类型 1. time包 2. time.Time类型,用来表示时间 3. 获取当前时间, now := time.Now() 实例1-1  打印输出当前时间 package main i ...

  6. css连续的纯数字或字母强制换行

    white-space:normal; word-break:break-all; white-space: normal|pre|nowrap|pre-wrap|pre-line|inherit;w ...

  7. js学习笔记 -- 随记

    js不区分整数和浮点数,统一用Number表示, js'=='比较会自动转换类型,会产生奇怪结果,'==='不会转换比较类型,如果不一致返回false,因此js判断始终用'===' `` 保留换行,也 ...

  8. Typora中给代码块设置快捷键

    Tpyore中大部分的操作都是有快捷键的.但是有那么几个常用的却没有快捷键.就比如代码块,这个常用的操作,还有有序无需列表. 下边教会你怎么设置快捷键,打开设置,Preferences[偏好设置],然 ...

  9. java内存区域与内存溢出

    JVM的内存区域划分: jvm的内存区域分为5部分:程序计数器,虚拟机栈,本地方法栈,堆跟方法区. 程序计数器,虚拟机栈,本地方法栈三部分是线程私有的,堆跟方法区是公共的. 1.程序计数器 是一块较小 ...

  10. etc

    小小的注意点们 交换两个变量的值时, 如果使用异或运算符, 需要先判断两个数是否相等 if (a == b) return; a ^= b; b = a ^ b; a ^= b; 取一个数组的中间位置 ...