閱讀1051 返回首頁    go 財經資訊


DRDSReader__Reader插件_使用手冊_數據集成-阿裏雲

1 快速介紹

DrdsReader插件實現了從DRDS(分布式RDS)讀取數據。在底層實現上,DrdsReader通過JDBC連接遠程DRDS數據庫,並執行相應的sql語句將數據從DRDS庫中SELECT出來。

DRDS的插件目前CDP隻適配了Mysql引擎的場景,DRDS對於CDP而言,就是一套分布式Mysql數據庫,並且大部分通信協議遵守Mysql使用場景。

2 實現原理

簡而言之,DrdsReader通過JDBC連接器連接到遠程的DRDS數據庫,並根據用戶配置的信息生成查詢SELECT SQL語句並發送到遠程DRDS數據庫,並將該SQL執行返回結果使用CDP自定義的數據類型拚裝為抽象的數據集,並傳遞給下遊Writer處理。

對於用戶配置Table、Column、Where的信息,DrdsReader將其拚接為SQL語句發送到DRDS數據庫。不同於普通的Mysql數據庫,DRDS作為分布式數據庫係統,無法適配所有Mysql的協議,包括複雜的Join等語句,DRDS暫時無法支持。

3 功能說明

3.1 配置樣例
  • 配置一個從Mysql數據庫同步抽取數據到ODPS的作業:
{
    "type": "job",
    "traceId": "您可以在這裏填寫您作業的追蹤ID,建議使用業務名+您的作業ID",
    "version": "1.0",
    "configuration": {
        "reader": {
            "plugin": "drds",
            "parameter": {         
            "jdbcUrl": "jdbc:mysql://drds-ip:3306/database",
            "table": "t_instance",
            "username": "datasync",
            "password": "xxxxxx",
            "column": ["*"],
            "where": "1 = 1"
            }
        },
        "writer": {
            "plugin": "odps",
            "parameter": {
                "accessId": "bazhen.csy",
                "accessKey": "xxxxxxx",
                "project": "project",
                "table": "table",
                "partition": "pt=20150101",
                "column": ["*"]
            }
        }
    }
}
3.2 參數說明
  • jdbcUrl

    • 描述:描述的是到對端數據庫的JDBC連接信息。

      jdbcUrl按照Mysql官方規範,並可以填寫連接附件控製信息。具體請參看mysql官方文檔

    • 必選:是

    • 默認值:無

  • username

    • 描述:數據源的用戶名
    • 必選:是
    • 默認值:無
  • password

    • 描述:數據源指定用戶名的密碼
    • 必選:是
    • 默認值:無
  • table

    • 描述:所選取需要抽取的表。
    • 必選:是
    • 默認值:無
  • column

    • 描述:所配置的表中需要同步的列名集合,使用JSON的數組描述字段信息。用戶使用代表默認使用所有列配置,例如['']。

      支持列裁剪,即列可以挑選部分列進行導出。

      支持列換序,即列可以不按照表schema信息進行導出。

      支持常量配置,用戶需要按照Mysql SQL語法格式:

      ["id", "`table`", "1", "'bazhen.csy'", "null", "to_char(a + 1)", "2.3" , "true"]

      id為普通列名,`table`為包含保留在的列名,1為整形數字常量,'bazhen.csy'為字符串常量,null為空指針,to_char(a + 1)為表達式,2.3為浮點數,true為布爾值。

      column必須用戶顯示指定同步的列集合,不允許為空!

    • 必選:是

    • 默認值:無

  • where

    • 描述:篩選條件,DrdsReader根據指定的column、table、where條件拚接SQL,並根據這個SQL進行數據抽取。例如在做測試時,可以將where條件指定為limit 10;在實際業務場景中,往往會選擇當天的數據進行同步,可以將where條件指定為gmt_create > $bizdate;

      where條件可以有效地進行業務增量同步。where條件不配置或者為空,視作全表同步數據。

    • 必選:否

    • 默認值:無

  • querySql

    • 描述:在有些業務場景下,where這一配置項不足以描述所篩選的條件,用戶可以通過該配置型來自定義篩選SQL。當用戶配置了這一項之後,CDP係統就會忽略tables,columns這些配置型,直接使用這個配置項的內容對數據進行篩選,例如需要進行多表join後同步數據,使用select a,b from table_a join table_b on table_a.id = table_b.id ;

      當用戶配置querySql時,MysqlReader直接忽略table、column、where條件的配置,querySql優先級大於table、column、where選項。

    • 必選:否

    • 默認值:無

3.3 類型轉換

目前DrdsReader支持大部分Mysql類型,但也存在部分個別類型沒有支持的情況,請注意檢查你的類型。

下麵列出DrdsReader針對Mysql類型轉換列表:

CDP 內部類型 Mysql 數據類型
Long int, tinyint, smallint, mediumint, int, bigint
Double float, double, decimal
String varchar, char, tinytext, text, mediumtext, longtext
Date date, datetime, timestamp, time, year
Boolean bit, bool
Bytes tinyblob, mediumblob, blob, longblob, varbinary

請注意:

  • 除上述羅列字段類型外,其他類型均不支持。

4 約束限製

4.1 一致性視圖問題

DRDS本身屬於分布式數據庫,對外無法提供一致性的多庫多表視圖,不同於Mysql等單庫單表同步,DRDSReader無法抽取同一個時間切片的分庫分表快照信息,也就是說CDP DrdsReader抽取底層不同的分表將獲取不同的分表快照,無法保證強一致性。

4.2 數據庫編碼問題

DRDS本身的編碼設置非常靈活,包括指定編碼到庫、表、字段級別,甚至可以均不同編碼。優先級從高到低為字段、表、庫、實例。我們不推薦數據庫用戶設置如此混亂的編碼,最好在庫級別就統一到UTF-8。

DrdsReader底層使用JDBC進行數據抽取,JDBC天然適配各類編碼,並在底層進行了編碼轉換。因此DrdsReader不需用戶指定編碼,可以自動獲取編碼並轉碼。

對於DRDS底層寫入編碼和其設定的編碼不一致的混亂情況,DrdsReader對此無法識別,對此也無法提供解決方案,對於這類情況,導出有可能為亂碼

4.3 增量數據同步

DrdsReader使用JDBC SELECT語句完成數據抽取工作,因此可以使用SELECT...WHERE...進行增量數據抽取,方式有多種:

  • 數據庫在線應用寫入數據庫時,填充modify字段為更改時間戳,包括新增、更新、刪除(邏輯刪)。對於這類應用,DrdsReader隻需要WHERE條件跟上一同步階段時間戳即可。
  • 對於新增流水型數據,DrdsReader可以WHERE條件後跟上一階段最大自增ID即可。

對於業務上無字段區分新增、修改數據情況,DrdsReader也無法進行增量數據同步,隻能同步全量數據。

4.4 SQL安全性

DrdsReader提供querySql語句交給用戶自己實現SELECT抽取語句,DrdsReader本身對querySql不做任何安全性校驗。這塊交由CDP用戶方自己保證。

5 FAQ


Q: DrdsReader同步報錯,報錯信息為XXX

A: 網絡或者權限問題,請使用DRDS命令行測試:

mysql -u username -p password -h ip -D database -e "select * from "

如果上述命令也報錯,那可以證實是環境問題,請聯係你的DBA。


Q: 我想同步DRDS增量數據,怎麼配置?

A: DrdsReader必須業務支持增量字段CDP才能同步增量,例如在淘寶大部分業務表中,通過gmt_modified字段表征這條記錄的最新修改時間,那麼CDP DrdsReader隻需要配置where條件為

    "where": "Date(add_time) = '2014-06-01'"

最後更新:2016-11-23 16:03:59

  上一篇:go OTSReader__Reader插件_使用手冊_數據集成-阿裏雲
  下一篇:go OSSReader__Reader插件_使用手冊_數據集成-阿裏雲