sqoop作為很常用的資料同步工具,用於rdbms和hdfs的資料遷移,但是不支援nosql,比如說mongodb,那如果我們需要同步mongodb的資料到hive該怎麼處理呢?下面提供下我的思路:
1.我先去查詢了一下mongodb可以匯出資料為csv格式或者json格式的檔案,csv是以逗號分隔的,這樣可以直接把這個檔案put到hdfs中然後load到hive,但是有個問題就是:如果資料本身就自帶乙個或者多個逗號,那麼這樣做就會造成字段錯位的問題。那我們就可以使用生成json的這種檔案。
2.然後了解了下mongodb可以條件匯出,那麼就可以進行增量操作了,這樣我們可以每次只匯出增量的資料到檔案中進行操作。
3.如果使用json這樣的檔案,那麼資料就相當於在hive中只有一列,匯入增量的話,我們可以每天或者每月、周(看需求)只匯出增量的資料,那每次同步資料的時候都把這次的資料放到乙個分割槽(第一次同步之前需要建立好分割槽表)可以以昨天的時間為分割槽字段,然後通過scp命令將檔案傳送到hive的客戶端上(需要提前進行ssh免密碼登入),然後通過排程器每天或者每月、周定時執行任務去把接受到的檔案直接load到hive分割槽表中。
4.匯入到hive表中之後,這個hive表只有1個主要字段以及分割槽字段,我們可以對這個表進行加工,將json解析成乙個乙個欄位和值,可以通過hive的函式get_json_object(name,』$.***x』)解析,匯入乙個新錶裡面,新錶的字段就是json中的key。
比如json格式如下:
}
hive中解析如下:
select
get_json_object(name,'$.a1'
) as
a1,get_json_object(name,'$.b1'
) as
b1,get_json_object(get_json_object(name,'$.c2'
),"hljs-string">'$.c1'
) as
c2from
table_name
其中有個注意點就是,怎麼判斷mongdb的資料已經匯入到檔案並傳送過來?
其實可以在排程器上面配置一檢查個任務,當到了定時執行同步任務的時候讓同步任務依賴乙個檢查任務,檢查任務就是去不斷檢查scp的檔案傳輸過來沒,如果沒有過來間隔一段時間再去檢查(時間自己配置),直到檢查到資料來了,檢查任務就結束,後面的同步任務就開始執行。
從access匯入資料到sqlserver
執行 select into 巡查記錄1 from opendatasource microsoft.jet.oledb.4.0 data source e 匯入匯出 black hd catayou 20071128.mdb persist security info false jet oled...
從EXCEL匯入資料到SQL SERVER
從excel匯入資料到sql server 左直拳 介紹兩種途徑將資料從excel中匯入到sql server。一 在程式中,用ado.net。如下 連線串 string strconn provider microsoft.jet.oledb.4.0 extended properties exc...
從EXCEL匯入資料到SQL SERVER
從excel匯入資料到sql server 左直拳 介紹兩種途徑將資料從excel中匯入到sql server。一 在程式中,用ado.net。如下 連線串 string strconn provider microsoft.jet.oledb.4.0 extended properties exc...