hive加载json数据解决方案
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数据解决方案的更多相关文章
- dojo 加载Json数据
1.今天研究了dojo datagrid加载WebService后台传上来的数据.研究来研究去发现他不是很难.用谷歌多调试一下就好了. 2.看很多例子,这个例子能够更好的帮我解决问题:https:// ...
- 扩展JQUERY 表单加载JSON数据
$.fn.extend({ //表单加载json对象数据 setForm : function (jsonValue) { var obj = this; $.each(jsonValue, func ...
- PHP+MySQL+Easyui tree菜单从后台加载json数据(一)
实现功能:从数据库加载出所有的数据库名,相应的数据库加载对应的数据库表名 原理:(首先看一下参考手册的内容) 异步加载Tree tree 支持内置的异步加载模式,用户创建一个空的tree,然后定义一个 ...
- 【Android】Handler的应用(一):从服务器端加载JSON数据
最终目的 以JSON的形式,将数据存入服务器端. 在Android中,以Handler加载显示大批量文字. 在此以加载金庸小说<天龙八部(新修版)>为例(2580480 字节). 以tom ...
- JQuery和原生JS跨域加载JSON数据或HTML。
前提:有时候需要在网页上,加载另一个网站上的数据.或者加载另一个网站上的一个页面.Js的Ajax请求不具备跨域功能,可以使用JQuery来实现. 网页端JS代码: $(function () { $. ...
- BootStrap的表格加载json数据,并且可以搜索,选择
2018.4.11日更新,8号的时候我推荐去官网下载,但是那个版本不知道为什么我无法使用 $table.bootstrapTable('getSelections'); 无论如何...然后我尝试着更换 ...
- EasyUI datagrid动态加载json数据
最近做一个项目,要求是两张张表可能查找出10多种不同的结果集. 如果想只用一个表格就把全部的结果不同的显示出来那么就肯定不同使用固定的字段名字,要通过动态加载后台返回来的数据把它显示出来就必须动态加载 ...
- vue通过ajax加载json数据
HTML <ul id="Hanapp"> <li class="styVue" v-for="item in actList&qu ...
- MVC4中EasyUI Tree异步加载JSON数据生成树
1,首先构造tree接受的格式化数据结构MODEL /// <summary> /// 定义EasyUI树的相关数据,方便控制器生成Json数据进行传递 /// </summar ...
随机推荐
- C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 00)
一.安装说明 https://studygolang.com/dl 二.环境变量 // 下载 *.msi 安装文件,部分环境变量默认配置好了. 其他配置如下描述 三.目录及项目层级关系 在系统环境变量 ...
- php7.2版本+yii2会报错
FastCGI sent in stderr: "PHP message: PHP Fatal error: Cannot use 'Object' as class name as it ...
- vue router使用query和params传参的使用
传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,希望可以帮到大家. Vue ...
- dropload.js 上滑加载,下拉刷新
https://github.com/ximan/dropload dropload a javascript implementation of pull to refresh and up to ...
- http请求的GET和POST请求:查询和新增(server.php)
<?php //设置页面内容是html编码格式是utf-8 header("Content-Type: text/plain;charset=utf-8"); //heade ...
- 由浅入深了解EventBus:(二)
概念 深入学习EventBus框架,就必须理解EventBus的相关原理和一些概念: Subscribe 在EventBus框架中,消息的处理接收方法必须要“@Subscribe”注解来进行标注: p ...
- ExcelHelper.cs
using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; ...
- SSM整合AOP,日志框架和拦截器
前言 日志是所有系统必不可少的部分,而AOP在MVC通常用于监控方法调用,可以生成一个traceid,记录从用户调用到底层数据库的数据链路,帮助监控和排查问题. AOP 现在做一个简单的前置切面,用来 ...
- Mysqlde的权限操作,以及增加用户
增加用户及直接授权 ' 在这条命令里边all代表所有的权限,*.*代表所有的空间名.表名 sql的通配符 _ 代表任意的一个字符 % 代表任意的字符的任意长度 修改用户的密码 update 空间名.表 ...
- IE只是开始!
Study is boring,but devotion make it is easy!