增量同步ODPS數據解決方法
解決方法
目前ODPS到分析型數據庫之間的數據同步是離線批量同步的,不支持實時同步增量的情況。如果用戶有增量同步的需求,可以考慮以下方案:
1、如果用戶的數據是不更新隻累加的數據,比如日誌數據,可以在分析型數據庫裏創建表的時候設置二級分區。每次增量的數據導入到分析型數據庫的一個二級分區裏。
2、用戶可以在ODPS裏就把增量更新後的結果數據放在一個表(分區)裏。這樣同步隻處理結果數據的全量同步,增量操作在ODPS裏已經做好了。
3、用戶使用實時更新的功能,自己使用SQL更新數據。這樣相當於用戶完全繞過了ODPS,自行實現了數據的同步。另外這樣做,需要在創建表的時候設置為實時更新表。
原理解讀
如果一個表是實時寫入的表,則分析型數據庫會支持對該表的單條數據進行Insert/Delete操作,不過由於分析型數據庫不支持事務,對於Insert/Delete命令,有一些限製。
在分析型數據庫中Insert語句的語法是:
INSERT [IGNORE]
INTO tbl_name (col1,col2...)
VALUES (value1, value2...), (value1, value2...)....
在分析型數據庫中,能夠實時插入的表一定要定義主鍵或組合主鍵,和MySQL有一個非常大的不同是,分析型數據庫在進行數據插入時,若發現同主鍵的數據時,默認執行覆蓋行為。若使用insert ignore語法,則在發現有同主鍵的數據時,丟棄新插入的數據,保留原有數據。但是無論如何,在主鍵衝突時分析型數據庫無法直接返回錯誤給insert的執行方。
在分析型數據庫中的Delete語句的語法是:
DELETE FROM tbl_name WHERE where_definition
where_definition中暫不支持函數定義。
對分析型數據庫是數據插入和刪除操作,原則上在分析型數據庫操作返回成功後一分鍾內可查(但不保證一定是一分鍾的數據可見延遲),不過在表剛剛創建時的十分鍾內,數據可能無法查詢。
Delete語句執行後,數據會不可查詢到,但不會在物理上立刻刪除,原則上24小時內會自動清除掉,如果刪除了大量數據想立刻生效,可以執行:
optimize table ;
執行成功一段時間後,物理上數據會被刪除。
關於最終一致性:對於主鍵相同的數據的多次變更,分析型數據庫會遵循分析型數據庫返回語句執行成功的順序進行;對於主鍵不同的數據的兩次變更,分析型數據庫不保證先執行的變更會比後執行的變更更優先的查詢到。但是當業務端暫停數據寫入的若幹時間後,分析型數據庫會保證數據的最終一致。
若希望達成數據寫入速率的最大化,建議:
(1)每條insert插入多條數據,具體條數視數據列數決定。若需要極限性能,每條insert插入的數據需擁有相同的一級分區號;
最後更新:2017-04-12 10:53:37
上一篇:
Spark:超越Hadoop MapReduce
下一篇:
創業公司如何做數據分析(二)運營數據係統
【友盟+】COO葉謙:解讀全域大數據戰略背後的技術演進
org.apache.hadoop.hbase.MasterNotRunningException: Retried 7 times 異常的解決
研發效能嘉年華直播活動RDC專場
需求分析的故事——如何練就需求分析的火眼金晴?
大數據平台的發展會降低程序員的價值嗎?
向童年致敬,沒玩過這些遊戲的程序員不是好的美少年~
SQLiteDatabase
數字經濟時代凸顯網絡安全重要性
友善之臂Mini6410之Android開發學習筆記(3)-ADC Demo
JSTL包重複報錯java.lang.NoSuchFieldError: deferredExpression