Mongodb資料同步到Hive
阿新 • • 發佈:2018-12-21
思路:利用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;"