hive官方并不支持json格式的数据加载,默认支持csv格式文件加载,如何在不依赖外部jar包的情况下实现json数据格式解析,本编博客着重介绍此问题解决方案

首先创建元数据表:

create EXTERNAL table access_log (content string) 
row format delimited fields terminated by '\t'
STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
location 'hdfs://sps1:9090/data/accesslog'

创建视图表:

create view access_log_view as 

select eventTime, ip, appName, fp, username, target from access_log 
lateral view json_tuple(content, "eventTime", "ip", "appName", "fp", "username", "target") t1
as eventTime, ip, appName, fp, username, target;

视图表利用json tuple将json object的数据进行抽取,这样就实现了字段分离。

但是有些日志文件是/user/aaa/dt=2013-12-01/ds=01/access.log带有分区目录的,对于这种格式需要分区表的支持

创建分区表:

create EXTERNAL table access_log (content string) 
partitioned by (dt int, ds int)
row format delimited fields terminated by '\t'
STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
location 'hdfs://sps1:9090/data/accesslog4';

但是问题来了,发现没有办法加载数据,该怎么办那。

下一步我们需要手动的加载分区:

alter table access_log add partition(dt=?,ds=?)

这样就可以查到数据了。切记必须要进行分区add,否则无法查到数据。

批量add分区方法:

#!/bin/bash
source ~/.bashrc
dir="/testdata/user"
dt="dt="
ht="ht="
table="tpa.access_log"
hscript=""
#get date dir list
for part in `hadoop fs -ls $dir |grep -o -P "[0-9-]+$"`;
do
#get hour dir list
for part2 in `hadoop fs -ls $dir/$dt$part |grep -o -P "[0-9]+$"`
do
echo $dir/$dt$part/$ht$part2
tmp="ALTER TABLE $table ADD PARTITION($dt'$part', $ht'$part2');"
hscript=$hscript$tmp
done;
done; hive -e "$hscript"

创建视图表:

与上边创建视图一样

但是分区是随着时间的推移进行增加的,这个不能人肉,我们需要自动化脚本来帮助我们完成

#!/bin/bash
source ~/.bashrc
date=`date +%Y-%m-%d`
hour=`date +%H`
cmd="ALTER TABLE databaseName.tableName ADD PARTITION(dt='$date', ht='$hour');"
hive -e "$cmd"

至此为止,有关hive加载json数据和分区表的问题就解释清楚了,不明白下方留言,我们继续讨论。

hive加载json数据解决方案的更多相关文章

  1. dojo 加载Json数据

    1.今天研究了dojo datagrid加载WebService后台传上来的数据.研究来研究去发现他不是很难.用谷歌多调试一下就好了. 2.看很多例子,这个例子能够更好的帮我解决问题:https:// ...

  2. 扩展JQUERY 表单加载JSON数据

    $.fn.extend({ //表单加载json对象数据 setForm : function (jsonValue) { var obj = this; $.each(jsonValue, func ...

  3. PHP+MySQL+Easyui tree菜单从后台加载json数据(一)

    实现功能:从数据库加载出所有的数据库名,相应的数据库加载对应的数据库表名 原理:(首先看一下参考手册的内容) 异步加载Tree tree 支持内置的异步加载模式,用户创建一个空的tree,然后定义一个 ...

  4. 【Android】Handler的应用(一):从服务器端加载JSON数据

    最终目的 以JSON的形式,将数据存入服务器端. 在Android中,以Handler加载显示大批量文字. 在此以加载金庸小说<天龙八部(新修版)>为例(2580480 字节). 以tom ...

  5. JQuery和原生JS跨域加载JSON数据或HTML。

    前提:有时候需要在网页上,加载另一个网站上的数据.或者加载另一个网站上的一个页面.Js的Ajax请求不具备跨域功能,可以使用JQuery来实现. 网页端JS代码: $(function () { $. ...

  6. BootStrap的表格加载json数据,并且可以搜索,选择

    2018.4.11日更新,8号的时候我推荐去官网下载,但是那个版本不知道为什么我无法使用 $table.bootstrapTable('getSelections'); 无论如何...然后我尝试着更换 ...

  7. EasyUI datagrid动态加载json数据

    最近做一个项目,要求是两张张表可能查找出10多种不同的结果集. 如果想只用一个表格就把全部的结果不同的显示出来那么就肯定不同使用固定的字段名字,要通过动态加载后台返回来的数据把它显示出来就必须动态加载 ...

  8. vue通过ajax加载json数据

    HTML <ul id="Hanapp"> <li class="styVue" v-for="item in actList&qu ...

  9. MVC4中EasyUI Tree异步加载JSON数据生成树

      1,首先构造tree接受的格式化数据结构MODEL /// <summary> /// 定义EasyUI树的相关数据,方便控制器生成Json数据进行传递 /// </summar ...

随机推荐

  1. Linux 策略路由配置

    策略路由配置 #编辑rt_tables echo "192 net_192 " >> /etc/iproute2/rt_tables echo "196 ne ...

  2. Web字体(链接)嵌入

    下面是我最近在学习的两种字体嵌入方法 1.@font-face 使用@font-face可以这样做: @font-face{ font-family:"Garamod Premier Pro ...

  3. iOS自动化探索(九)使用Jenkins自动化打包并发布iOS App

    继前一篇: Mac环境下安装Jenkins Jenkins安装好后, 我们试着创建一个iOS自动打包并发布的任务 iOS App构建必须在MAC上面使用xcode进行,所以我们要安装下xcode集成插 ...

  4. Quartz 框架 教程(中文版)2.2.x

    Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架 Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介 Quar ...

  5. 【sql】使用触发器

    今天在写sql触发器时遇到这样一个问题: 利用完整性规则创建教师表,包括(教师工号,姓名,性别,职称,工资),在此基础上定义触发器,为教师表Teacher定义完整性规则“教授的工资不能低于4000元, ...

  6. js 可拉伸表格

    table <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  7. lombok --- 常用注解解析

    @Data@Getter @Setter @ToString@Cleanup@NonNull@Builder@EqualsAndHashCode      

  8. LeetCode OJ:Merge Intervals(合并区间)

    Given a collection of intervals, merge all overlapping intervals. For example,Given  [1,3],[2,6],[8, ...

  9. Cscope 安装和使用

    CScope 安装和使用 一.安装 1. 软件下载 https://sourceforge.net/projects/cscope/files/ 2. 解压 3. 安装 ./configure --p ...

  10. 数据存储-- Core Data的使用(一)

    一.概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型 在Mac OS X 10.5Leopard及以 ...