Mongodb数据同步到Hive

思路:利用Mongodb的export工具导出数据成json格式;

             load该json数据到临时hive表的一个字段;

             从该临时hive表解析json落地成最终的表;

代码:

1. 利用Mongodb的export工具导出数据成json格式

$mongo_path/bin/mongoexport -h $host:27017 -u $user -p $password -d $db -c $collection --fields _id,listContent,title,content --type json -q $query -o $mongodb_data_path/article_inc.json

2.load该json数据到临时hive表的一个字段
hive -e "truncate table schema_name.table_name;"
hive -e "load data local inpath '$mongodb_data_path/article_inc.json' overwrite into table schema_name.table_name;"


3. 从该临时hive表解析json落地成最终的表
insert overwrite table schema2_name.table2_name  
select  
    json_tuple("_id","title", "listContent", "content")  
from schema_name.table_name;</code>  

 

具体例子:(shell脚本)

yesterday=`date -d 'yesterday' '+%Y-%m-%d'`
 
DB_NAME=ods
MONGO_DATA=/home/hadoop/xxx/mongoExport/xxx.json
 
#-- MONGODB连接配置信息
mongoexport --host=(mongodb url) \
--port=端口  \
--username=用户名 \
--password=密码 \
--db=具体db \
--collection=表 \
--type=json \
--query="{crawl_time:{\"\$gte\":'$yesterday'}}" \
--out=${MONGO_DATA}
 
hive -e "CREATE TABLE IF NOT EXISTS ${DB_NAME}.xxx (params string);"
hive -e "LOAD DATA LOCAL INPATH '${MONGO_DATA}' OVERWRITE INTO TABLE ${DB_NAME}.xxx;"
 
rm -f ${MONGO_DATA}
 
 
hive -e "
insert overwrite table ${DB_NAME}.xxx partition (dt)
select 
	primary_key,
	phone,
	plat_code,
	crawl_time,
	jrjt_del_dt,
	dt 
	from (
		select primary_key,phone,plat_code,crawl_time,jrjt_del_dt,to_date(crawl_time) dt 
		from ${DB_NAME}.xxx  
		lateral view json_tuple(params,'primary_key','phone','plat_code','crawl_time','jrjt_del_dt') v1 as primary_key,
		phone,plat_code,crawl_time,jrjt_del_dt
	) base;"

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值