阿里云數(shù)據(jù)集成服務(wù)-使用手冊-D_第1頁
阿里云數(shù)據(jù)集成服務(wù)-使用手冊-D_第2頁
阿里云數(shù)據(jù)集成服務(wù)-使用手冊-D_第3頁
阿里云數(shù)據(jù)集成服務(wù)-使用手冊-D_第4頁
阿里云數(shù)據(jù)集成服務(wù)-使用手冊-D_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、數(shù)據(jù)集成使用手冊消息隊列/用戶手冊消息隊列/用戶手冊 PAGE 101 PAGE 101使用手冊作業(yè)配置說明Job配置設(shè)計約定type: job,type: job,traceId: bazhen_001, version: 1.0, configuration: setting: , reader: plugin: ,parameter: ,writer: plugin: ,parameter: 其中:type=job,代表底層使用批量離線的數(shù)據(jù)同步。traceId,用戶用來此traceId跟蹤作業(yè)。version,版本號,公測版本CDP目前僅支持1.0版本格式。configuration=

2、,是DataX本身進(jìn)行數(shù)據(jù)傳輸?shù)拿枋?。具體而言,描述的是源、目的、轉(zhuǎn)換器(暫不支持)。所有的配置信息定義,均按照駝峰命名法進(jìn)行配置key命名,且大小寫敏感 。用戶必須保證配置必須嚴(yán)格按照文檔定義格式進(jìn)行填寫。由于JSON本身不支持注釋, 用戶在參考CDP提供的樣例配置必須剔除掉注釋信息 ,否則JSON解析將會報錯。阿里云物聯(lián)網(wǎng)套件/詳細(xì)手冊阿里云物聯(lián)網(wǎng)套件/詳細(xì)手冊Job主體配置type: job, /用戶提交同步類型,包括Job/Stream traceId: bazhen_001, /用戶用來此traceId跟蹤作業(yè)version: 1.0, /版本號,公測版本CDP目前僅支持1.0版本格

3、式。configuration: settting: key: value,type: job, /用戶提交同步類型,包括Job/Stream traceId: bazhen_001, /用戶用來此traceId跟蹤作業(yè)version: 1.0, /版本號,公測版本CDP目前僅支持1.0版本格式。configuration: settting: key: value,reader: plugin: mysql, /這里填寫源頭數(shù)據(jù)存儲類型的名稱parameter: key: value,writer: plugin: odps, /這里填寫目標(biāo)端數(shù)據(jù)存儲類型的名稱parameter: key:

4、 value其中:type指定本次提交同步任務(wù)是Job、Stream。traceId是由用戶指定,并且建議用戶按照自己業(yè)務(wù)邏輯生成唯一ID,以方便 后期的運(yùn)維工作。CDP只提供觸發(fā)式數(shù)據(jù)同步API,CDP本身不提供Job存儲、Job定期調(diào)度、Job的DAG依賴觸發(fā)等各類涉及工 作流調(diào)度功能。因此同一份Job如果用戶多次(非并行)進(jìn)行提交,CDP將為每次提交的Job分配單個CDP集群(例 如杭州集群)唯一的運(yùn)行ID,該ID為Job的主鍵ID,由CDP服務(wù)生成并分配,CDP保證全局唯一性。如果用戶希 望對于每個數(shù)據(jù)同步任務(wù)配置使用同一個ID進(jìn)行追蹤,那么請為每個數(shù)據(jù)同步作業(yè)分配單一的traceID

5、。例如阿里云公有云產(chǎn)品采云間系統(tǒng),其底層數(shù)據(jù)集成功能通過CDP完成。采云間使用dpc+采云間作業(yè)ID作 為traceId向CDP提交Job。這樣采云間可以方便的使用采云間作業(yè)ID在CDP中獲取并追蹤該采云間作業(yè)近期所 有的運(yùn)行狀況。version目前所有Job僅支持版本號1.0,用戶只能填寫版本號為1.0。二、Job Setting配置type: job,traceId: bazhen_0001, type: job,traceId: bazhen_0001, version: 1.0, configuration: setting: errorLimit: ,speed: ,column:

6、- configuration.setting.column(類型轉(zhuǎn)換)datetimeFormatdatetime類型和string類型的轉(zhuǎn)換format。timeFormat: 設(shè)定time類型和string類型的轉(zhuǎn)換format。dateFormat: 設(shè)定date類型和string類型的轉(zhuǎn)換format。type: job,traceId: bazhen_0001, version: 1.0, configuration: setting: type: job,traceId: bazhen_0001, version: 1.0, configuration: setting: col

7、umn: datetimeFormat: yyyy-MM-dd HH:mm:ss, timeFormat: HH:mm:ss,dateFormat: yyyy-MM-dd,encoding: utf-8- configuration.setting.errorLimit(臟數(shù)據(jù)控制)type: job,version: 1.0, configuration:type: job,version: 1.0, configuration: setting:errorLimit: record: 1024上述配置用戶指定了errorLimit上限為1024條record,當(dāng)Job在傳輸過程中出現(xiàn)臟數(shù)據(jù)

8、記錄數(shù)大于 ,Job報錯退 出:- configuration.setting.speed (流量控制)type: job, configuration: setting: speed: type: job, configuration: setting: speed: mbps: 1 /代表1MB/s的傳輸帶寬Reader插件MySQLReader快速介紹讀取數(shù)據(jù)。在底層實(shí)現(xiàn)上,MySQLReader通過JDBC連接遠(yuǎn)程Mysql數(shù)據(jù) 庫,并執(zhí)行相應(yīng)的sql語句將數(shù)據(jù)從mysql庫中SELECT出來。實(shí)現(xiàn)原理簡而言之,MySQLReader通過JDBC連接器連接到遠(yuǎn)程的Mysql數(shù)據(jù)庫,并根

9、據(jù)用戶配置的信息生成查詢SELECT SQL語句并發(fā)送到遠(yuǎn)程Mysql數(shù)據(jù)庫,并將該SQL執(zhí)行返回結(jié)果使用DataX自定義的數(shù)據(jù)類型拼裝為抽象的數(shù)據(jù)集,并傳遞給下游Writer處理。對于用戶配置Table、Column、Where的信息,MySQLReader將其拼接為SQL語句發(fā)送到Mysql數(shù)據(jù)庫;對 于用戶配置querySql信息,Mysql直接將其發(fā)送到Mysql數(shù)據(jù)庫。功能說明配置樣例- 使用instance配置一個從Mysql數(shù)據(jù)庫同步抽取數(shù)據(jù)到ODPS的作業(yè):type: job,traceId: 您可以在這里填寫您作業(yè)的追蹤ID,建議使用業(yè)務(wù)名+您的作業(yè)ID, version:

10、1.0,configuration: reader: plugin: mysql, parameter: instanceName: datasync001, database: database,table: table,splitPk: db_id, username: datasync001, password: xxxxxx, column: *,where: Date(add_time) = 2014-06-01,writer: plugin: odps, parameter: accessId: bazhen.csy, accessKey: xxxxxxx, project: pr

11、oject, table: table, column: *,partition: pt=20150101- 使用JDBC方式配置一個從Mysql數(shù)據(jù)庫同步抽取數(shù)據(jù)到ODPS的作業(yè):云數(shù)據(jù)庫 OceanBase/SQL語法參考云數(shù)據(jù)庫 OceanBase/SQL語法參考type: job,traceId: 您可以在這里填寫您作業(yè)的追蹤ID,建議使用業(yè)務(wù)名+您的作業(yè)ID, version: 1.0,configuration: reader: plugin: mysql, parameter: jdbcUrl: jdbc:mysql:/ip:port/database, table: table

12、,splitPk: db_id, username: datasync001, password: xxxxxx, column: *,where: Date(add_time) = 2014-06-01,writer: plugin: odps, parameter: accessId: bazhen.csy, accessKey: xxxxxxx, project: project, table: table, column: *,partition: pt=20150101- 使用多個instance配置一個從Mysql數(shù)據(jù)庫同步抽取分庫分表數(shù)據(jù)到ODPS的作業(yè):type: job,tr

13、aceId: 您可以在這里填寫您作業(yè)的追蹤ID,建議使用業(yè)務(wù)名+您的作業(yè)ID, version: 1.0,configuration: reader: plugin: mysql, parameter: connection: table: tbl1,tbl2, tbl3,instanceName: inst1,database: dbdatabase: db,table: tbl4,tbl5, tbl6,instanceName: inst2, database: db,splitPk: db_id, username: datasync001, password: xxxxxx, colu

14、mn: *,where: Date(add_time) = 2014-06-01,writer: plugin: odps, parameter: accessId: bazhen.csy, accessKey: xxxxxxx, project: project, table: table, column: *,partition: pt=20150101- 使用多個jdbc配置一個從Mysql數(shù)據(jù)庫同步抽取分庫分表數(shù)據(jù)到ODPS的作業(yè):type: job,traceId: 您可以在這里填寫您作業(yè)的追蹤ID,建議使用業(yè)務(wù)名+您的作業(yè)ID, version: 1.0,configuration

15、: reader: plugin: mysql, parameter: connection: table: tbl1,tbl2, tbl3,jdbcUrl: jdbc:mysql:/ip:port/database1,table: tbl4,tbl5, tbl6,jdbcUrl: jdbc:mysql:/ip:port/database2,splitPk: db_id, username: datasync001, password: xxxxxx, column: *,where: Date(add_time) = 2014-06-01,writer: plugin: odps, para

16、meter: accessId: bazhen.csy, accessKey: xxxxxxx, project: project, table: table, column: *,partition: pt=20150101參數(shù)說明instanceName描述: 阿里云RDS實(shí)例名稱(Instance名稱)。用戶使用該配置指定RDS的Instance名稱,CDP將翻譯為底層執(zhí)行的jdbcUrl連接串連接。instanceName指定的是RDS實(shí)例。發(fā)給類似Mysql實(shí)例,指定了數(shù)據(jù)源的IP+Port,需要 和database配合使用。例如,在RDS WebConsole頁面中點(diǎn)擊【基本信息】

17、,其右側(cè)詳情的名稱即是用戶擁有RDS的instanceName。ACE/操作指南ACE/操作指南必選:是默認(rèn)值:無jdbcUrl描述:對于CDP私有云場景、數(shù)據(jù)庫遷移場景等,其本身數(shù)據(jù)源是普通Mysql數(shù)據(jù)庫不是RDS。對于這類使用場景,用戶可以指定jdbc信息直連。兩類信息概念上是等同的,因此只能配置其一。如果兩 者均配置,CDP默認(rèn)將使用jdbcUrl信息??紤]到公有云上用戶RDS DNS名稱、內(nèi)網(wǎng)等信息可能存在更改的情況,強(qiáng)烈建議公有云用戶不使用jdbcUrl配置項(xiàng)。必選:是默認(rèn)值:無databaseRDS實(shí)例下的數(shù)據(jù)庫名稱。必選:是默認(rèn)值:無username描述:數(shù)據(jù)源的用戶名必選:是

18、默認(rèn)值:無password描述:數(shù)據(jù)源的密碼必選:是默認(rèn)值:無table描述:所選取的需要同步的表名稱,一個CDPJob只能同步一張表。必選:是默認(rèn)值:無column描述:所配置的表中需要同步的列名集合,使用JSON的數(shù)組描述字段信息。用戶使用星號 代表默認(rèn)使用所有列配置,例如*。支持列裁剪,即列可以挑選部分列進(jìn)行導(dǎo)出。支持列換序,即列可以不按照表schema信息進(jìn)行導(dǎo)出。支持常量配置,用戶需要按照Mysql SQL語法格式:id, table, 1, bazhen.csy, null, to_char(a + 1), 2.3 , trueid為普通列名,table為包含保留在的列名,1為整形

19、數(shù)字常量,bazhen.csy為字符串常量,null為空指針,to_char(a + 1)為表達(dá)式,2.3為浮點(diǎn)數(shù),true為布爾值。column必須用戶顯示指定同步的列集合,不允許為空! 必選:是默認(rèn)值:無splitPk描述:MySQLReader進(jìn)行數(shù)據(jù)抽取時,如果指定splitPk,表示用戶希望使用splitPk代表的 字段進(jìn)行數(shù)據(jù)分片,DataX因此會啟動并發(fā)任務(wù)進(jìn)行數(shù)據(jù)同步,這樣可以大大提供數(shù)據(jù)同步 的效能。推薦splitPk用戶使用表主鍵,因?yàn)楸碇麈I通常情況下比較均勻,因此切分出來的分片也不容 易出現(xiàn)數(shù)據(jù)熱點(diǎn)。目前splitPk僅支持整形、字符串型數(shù)據(jù)切分,不支持浮點(diǎn)、日期等其他類

20、型。如果用戶指定 其他非支持類型,MySQLReader將報錯!如果splitPk不填寫,包括不提供splitPk或者splitPk值為空,DataX視作使用單通道同步該 表數(shù)據(jù)。必選:否默認(rèn)值:無where描述:篩選條件。例如在做測試時,可以將where條件指定為limit10;在實(shí)際業(yè)務(wù)場景中,往往會選擇當(dāng)天的數(shù)據(jù)進(jìn)行同步,可以將where條件指定為gmt_create $bizdate;where條件可以有效地進(jìn)行業(yè)務(wù)增量同步。如果不填寫where語句,包括不提供where的key或者value,DataX均視作同步全量數(shù)據(jù)。必選:否默認(rèn)值:無querySql描述:在有些業(yè)務(wù)場景下,wh

21、ere這一配置項(xiàng)不足以描述所篩選的條件,用戶可以通過該配 置型來自定義篩選SQL。當(dāng)用戶配置了這一項(xiàng)之后,DataX系統(tǒng)就會忽略這些配置型,直接使用這個配置項(xiàng)的內(nèi)容對數(shù)據(jù)進(jìn)行篩選,例如需要進(jìn)行 多表join后同步數(shù)據(jù),使用selecta,bfromtable_ajointable_bontable_a.id必選:否默認(rèn)值:無類型轉(zhuǎn)換DataX 內(nèi)部類型Mysql 數(shù)據(jù)類型LongDataX 內(nèi)部類型Mysql 數(shù)據(jù)類型Longint, tinyint, smallint, mediumint, int, bigintDoublefloat, double, decimalStringvarch

22、ar,char,tinytext,text,mediumtext, longtextDatedate, datetime, timestamp, time, yearBooleanbit, boolBytestinyblob,mediumblob,blob,longblob, varbinary請注意:除上述羅列字段類型外,其他類型均不支持。MySQLReader將tinyint(1)視作整形。性能報告環(huán)境準(zhǔn)備數(shù)據(jù)特征建表語句:CREATE TABLE tc_biz_vertical_test_0000 (CREATE TABLE tc_biz_vertical_test_0000 (biz_

23、order_id bigint(20) NOT NULL COMMENT id,key_value varchar(4000) NOT NULL COMMENT Key-value的內(nèi)容,gmt_create datetime NOT NULL COMMENT 創(chuàng)建時間,gmt_modified datetime NOT NULL COMMENT 修改時間,attribute_cc int(11) DEFAULT NULL COMMENT 防止并發(fā)修改的標(biāo)志,value_type int(11) NOT NULL DEFAULT 0 COMMENT 類型,buyer_id bigint(20)

24、 DEFAULT NULL COMMENT buyerid,seller_id bigint(20) DEFAULT NULL COMMENT seller_id, PRIMARY KEY (biz_order_id,value_type),KEY idx_biz_vertical_gmtmodified (gmt_modified)biz_order_id: 888888888key_value: ;orderIds:20148888888,2014888888813800; gmt_create: 2011-09-24 11:07:20biz_order_id: 888888888key_

25、value: ;orderIds:20148888888,2014888888813800; gmt_create: 2011-09-24 11:07:20gmt_modified: 2011-10-24 17:56:34value_type: 3buyer_id: 8888888value_type: 3buyer_id: 8888888seller_id: 1機(jī)器參數(shù)執(zhí)行DataX的機(jī)器參數(shù)為:cpu24Intel(RXeon(RCPUE5-263002.30GHzmem:48GBnetdiscDataXMysql數(shù)據(jù)庫機(jī)器參數(shù)為:cpu32Intel(RXeon(RCPUE5-2650v

26、22.60GHzmem:256GBnetdisc: BTWL419303E2800RGN INTEL SSDSC2BB800G4D2010370DataXjvm-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError測試報告單表測試報告通道數(shù)是否按DataX速DataX機(jī)DataX機(jī)DB網(wǎng)卡DB運(yùn)行容器服務(wù)/使用手冊容器服務(wù)/使用手冊照主鍵切分度(Rec/s)器網(wǎng)卡進(jìn)入流量(MB/s)器運(yùn)行負(fù)載流出流量(MB/s)負(fù)載1否183185290.6310.61是183185290.6310.64否183185290.6310.64是329733580.

27、8600.768否183185290.6310.68是5495561151.461200.78說明:1. 這里的單表,主鍵類型為 bigint(20),范圍為:190247559466810-570722244711460,從主鍵范圍劃分看,數(shù)據(jù)分布均勻。2. 對單表如果沒有安裝主鍵切分,那么配置通道個數(shù)不會提升速度,效果與1個通道一樣。分表測試報告(2個分庫,每個分庫16張分表,共計32張分表)通道數(shù)DataX速度(Rec/s)DataX機(jī)器網(wǎng)卡進(jìn)入流量(MB/s)DataX機(jī)器運(yùn)行負(fù)載DB網(wǎng)卡流出流量(MB/s)DB運(yùn)行負(fù)載120224131.51.032193.

28、11323.6810744051975.52055.1161227892229.28.12337.3約束限制主備同步數(shù)據(jù)恢復(fù)問題主備同步問題指Mysql使用主從災(zāi)備,備庫從主庫不間斷通過binlog恢復(fù)數(shù)據(jù)。由于主備數(shù)據(jù)同步存在一定的 時間差,特別在于某些特定情況,例如網(wǎng)絡(luò)延遲等問題,導(dǎo)致備庫同步恢復(fù)的數(shù)據(jù)與主庫有較大差別,導(dǎo)致從 備庫同步的數(shù)據(jù)不是一份當(dāng)前時間的完整鏡像。CDP如果同步的是阿里云提供RDS,是直接從主庫讀取數(shù)據(jù),不存在數(shù)據(jù)恢復(fù)問題。但是會引入主庫負(fù)載問題,請注意流控配置。一致性約束系統(tǒng),對外可以提供強(qiáng)一致性數(shù)據(jù)查詢接口。例如當(dāng)一次同步任務(wù)啟動運(yùn) 行過程中,當(dāng)該庫存在其他數(shù)據(jù)寫

29、入方寫入數(shù)據(jù)時,MySQLReader完全不會獲取到寫入更新數(shù)據(jù),這是由于 數(shù)據(jù)庫本身的快照特性決定的。關(guān)于數(shù)據(jù)庫快照特性,請參看MVCCWikipedia操作審計/產(chǎn)品使用手冊操作審計/產(chǎn)品使用手冊上述是在MySQLReader單線程模型下數(shù)據(jù)同步一致性的特性,由于MySQLReader可以根據(jù)用戶配置信息使用 了并發(fā)數(shù)據(jù)抽取,因此不能嚴(yán)格保證數(shù)據(jù)一致性:當(dāng)MySQLReader根據(jù)splitPk進(jìn)行數(shù)據(jù)切分后,會先后啟動 多個并發(fā)任務(wù)完成數(shù)據(jù)同步。由于多個并發(fā)任務(wù)相互之間不屬于同一個讀事務(wù),同時多個并發(fā)任務(wù)存在時間間 隔。因此這份數(shù)據(jù)并不是完整的、一致的數(shù)據(jù)快照信息。針對多線程的一致性快照

30、需求,在技術(shù)上目前無法實(shí)現(xiàn),只能從工程角度解決,工程化的方式存在取舍,我們 提供幾個解決思路給用戶,用戶可以自行選擇:使用單線程同步,即不再進(jìn)行數(shù)據(jù)切片。缺點(diǎn)是速度比較慢,但是能夠很好保證一致性。關(guān)閉其他數(shù)據(jù)寫入方,保證當(dāng)前數(shù)據(jù)為靜態(tài)數(shù)據(jù),例如,鎖表、關(guān)閉備庫同步等等。缺點(diǎn)是可能影響 在線業(yè)務(wù)。數(shù)據(jù)庫編碼問題MySQLReader底層使用JDBC進(jìn)行數(shù)據(jù)抽取,JDBC天然適配各類編碼,并在底層進(jìn)行了編碼轉(zhuǎn)換。因此MySQLReader不需用戶指定編碼,可以自動獲取編碼并轉(zhuǎn)碼。對于Mysql底層寫入編碼和其設(shè)定的編碼不一致的混亂情況,MySQLReader對此無法識別,對此也無法提供解 決方案,

31、對于這類情況,導(dǎo)出有可能為亂碼。增量數(shù)據(jù)同步MySQLReader使用JDBC SELECT語句完成數(shù)據(jù)抽取工作,因此可以使用SELECT.WHERE.進(jìn)行增量數(shù)據(jù)抽取,方式有多種:數(shù)據(jù)庫在線應(yīng)用寫入數(shù)據(jù)庫時,填充modify字段為更改時間戳,包括新增、更新、刪除(邏輯刪)。對 于這類應(yīng)用,MySQLReader只需要WHERE條件跟上一同步階段時間戳即可。對于新增流水型數(shù)據(jù),MySQLReader可以WHERE條件后跟上一階段最大自增ID即可。對于業(yè)務(wù)上無字段區(qū)分新增、修改數(shù)據(jù)情況,MySQLReader也無法進(jìn)行增量數(shù)據(jù)同步,只能同步全量數(shù)據(jù)。SQL安全性SELECT抽取語句,MySQLR

32、eader本身對querySql不做任 何安全性校驗(yàn)。這塊交由DataX用戶方自己保證。FAQmysql -u -p -h -D -e select * from Q: MySQLReader同步報錯,報錯信息為XXX A: 網(wǎng)絡(luò)或者權(quán)限問題,請使用mysql命令行測試:mysql -u -p -h -D -e select * from 如果上述命令也報錯,那可以證實(shí)是環(huán)境問題,請聯(lián)系你的DBA。Q: 我想同步Mysql增量數(shù)據(jù),怎么配置?where: Date(add_time) = 2014-06-01A: MySQLReader必須業(yè)務(wù)支持增量字段DataX才能同步增量,例如在淘寶大部

33、分業(yè)務(wù)表中,通過gmt_modified字段表征這條記錄的最新修改時間,那么DataX MySQLReader只需要配置where條件為where: Date(add_time) = 2014-06-01Q: 上述bizdate代表什么意思? 我每天需要同步的gmt_modified值肯定不一樣的,如何做到每天使用不同變量值A(chǔ): CDP支持自定義變量,請參考CDP Console 中有關(guān)自定義變量章節(jié)說明。 Q:我有1億條數(shù)據(jù)需要同步,大概需要同步多長時間A: 和數(shù)據(jù)庫配置、DataX機(jī)器負(fù)載相關(guān),請參考上述性能章節(jié) Q: 為什么不推薦使用默認(rèn)列*, 會有問題嗎A: 如果你限定了DataX同步

34、a,b,c三列,那么數(shù)據(jù)庫在添加列,修改列,刪除列情況,DataX可以做到要么立即報錯,要么兼容老情況。如果直接配置星號,上游的數(shù)據(jù)庫變量會立刻影響下游數(shù)據(jù)!而且可能會在下游任務(wù) 運(yùn)行到一段時間才報錯,可能已經(jīng)引入了大量臟數(shù)據(jù)。Q: MySQLReader同步出現(xiàn)亂碼,怎么處理A: 通常情況下是你同步的數(shù)據(jù)庫沒有按照規(guī)范配置編碼,比如數(shù)據(jù)庫配置的編碼是UTF8,但是底層物理文件實(shí)際存放的編碼是GBK,DataX按照UTF-8讀取數(shù)據(jù)就會出現(xiàn)亂碼。此時你應(yīng)該尋求你的DBA修改庫的編碼格式。SQLServerReader快速介紹SQLServerReader插件實(shí)現(xiàn)了從SqlServer讀取數(shù)據(jù)。

35、在底層實(shí)現(xiàn)上,SQLServerReader通過JDBC連接遠(yuǎn)程SqlServer數(shù)據(jù)庫,并執(zhí)行相應(yīng)的sql語句將數(shù)據(jù)從SqlServer庫中SELECT出來。實(shí)現(xiàn)原理簡而言之,SQLServerReader通過JDBC連接器連接到遠(yuǎn)程的SqlServer數(shù)據(jù)庫,并根據(jù)用戶配置的信息生成查 詢SELECT SQL語句并發(fā)送到遠(yuǎn)程SqlServer數(shù)據(jù)庫,并將該SQL執(zhí)行返回結(jié)果使用CDP自定義的數(shù)據(jù)類型拼裝為抽象的數(shù)據(jù)集,并傳遞給下游Writer處理。對于用戶配置Table、Column、Where的信息,SQLServerReader將其拼接為SQL語句發(fā)送到SqlServer數(shù)據(jù) 庫;對于

36、用戶配置querySql信息,SqlServer直接將其發(fā)送到SqlServer數(shù)據(jù)庫。功能說明配置樣例type: job,type: job,traceId: 您可以在這里填寫您作業(yè)的追蹤ID,建議使用業(yè)務(wù)名+您的作業(yè)ID, version: 1.0,configuration: reader: plugin: sqlserver, parameter: instanceName: , username: username, password: xxx,splitPk: id, fetchSize: 512, table: table_01, column: a,b,c,where: 1 =

37、 1,writer: plugin: odps, parameter: accessId: bazhen.csy, accessKey: xxx, project: project, table: table, column: *,partition: pt=20140501使用JDBC配置一個從SqlServer數(shù)據(jù)庫同步抽取數(shù)據(jù)到ODPS的作業(yè):type: job,traceId: 您可以在這里填寫您作業(yè)的追蹤ID,建議使用業(yè)務(wù)名+您的作業(yè)ID, version: 1.0,configuration: reader: plugin: sqlserver, parameter: jdbcUr

38、l: jdbc:sqlserver:/localhost:3433;DatabaseName=dbname, username: username,password: xxx,splitPk: id,fetchSize: 512, table: table_01, column:fetchSize: 512, table: table_01, column:a,b,c, where: 1 =1,writer: plugin: odps, parameter: accessId: bazhen.csy, accessKey: xxx, project: project, table: table

39、,column: *,partition: pt=20140501參數(shù)說明instanceName描述: 阿里云RDS實(shí)例名稱(Instance名稱)。用戶使用該配置指定RDS的Instance名稱,CDP將翻譯為底層執(zhí)行的jdbc連接串連接。instanceName指定的是RDS實(shí)例,類似Mysql實(shí)例,需要和database配合使用。 必選:是默認(rèn)值:無jdbcUrl描述:對于CDP部分私有云場景,數(shù)據(jù)庫遷移場景等,其本身數(shù)據(jù)源是普通SqlServer數(shù)據(jù) 庫不是RDS,對于這類場景,用戶可以指定jdbc信息直連。兩類信息概念上是等同的,因此只能配置其一。如果兩 者均配置,CDP默認(rèn)將使用

40、jdbc信息。必選:是默認(rèn)值:無username描述:數(shù)據(jù)源的用戶名必選:是默認(rèn)值:無password描述:數(shù)據(jù)源指定用戶名的密碼必選:是默認(rèn)值:無table描述:所選取的需要同步的表,一個作業(yè)只能支持一個表同步必選:是默認(rèn)值:無column描述:所配置的表中需要同步的列名集合,使用JSON的數(shù)組描述字段信息。用戶使用代表默認(rèn)使用所有列配置,例如。支持列裁剪,即列可以挑選部分列進(jìn)行導(dǎo)出。支持列換序,即列可以不按照表schema信息進(jìn)行導(dǎo)出。支持常量配置,用戶需要按照J(rèn)SON格式:id, table, 1, bazhen.csy, null, COUNT(*), 2.3 , true,1為整形數(shù)

41、字常量,bazhen.csy為字符串常 量,null為空指針,to_char(a1)為表達(dá)式,2.3為浮點(diǎn)數(shù),true為布爾值。column必須用戶顯示指定同步的列集合,不允許為空! 必選:是默認(rèn)值:無splitPk描述:SQLServerReader進(jìn)行數(shù)據(jù)抽取時,如果指定splitPk,表示用戶希望使用splitPk代 表的字段進(jìn)行數(shù)據(jù)分片,CDP因此會啟動并發(fā)任務(wù)進(jìn)行數(shù)據(jù)同步,這樣可以大大提供數(shù)據(jù)同 步的效能。推薦splitPk用戶使用表主鍵,因?yàn)楸碇麈I通常情況下比較均勻,因此切分出來的分片也不容 易出現(xiàn)數(shù)據(jù)熱點(diǎn)。目前splitPk僅支持整形、字符串型數(shù)據(jù)切分,不支持浮點(diǎn)、日期等其他類型

42、。如果用戶指定 其他非支持類型,SQLServerReader將報錯!必選:否默認(rèn)值:空where描述:篩選條件,SQLServerReader根據(jù)指定的column、table、where條件拼接SQL,并 根據(jù)這個SQL進(jìn)行數(shù)據(jù)抽取。例如在做測試時,可以將where條件指定為limit 10;在實(shí)際業(yè)務(wù)場景中,往往會選擇當(dāng)天的數(shù)據(jù)進(jìn)行同步,可以將where條件指定為gmt_create$bizdate; where條件可以有效地進(jìn)行業(yè)務(wù)增量同步。如果該值為空,代表同步全表所有的信息。必選:否默認(rèn)值:無querySql描述:在有些業(yè)務(wù)場景下,where這一配置項(xiàng)不足以描述所篩選的條件,用戶可

43、以通過該配 置型來自定義篩選SQL。當(dāng)用戶配置了這一項(xiàng)之后,CDP系統(tǒng)就會忽略table,column這些 配置型,直接使用這個配置項(xiàng)的內(nèi)容對數(shù)據(jù)進(jìn)行篩選,例如需要進(jìn)行多表join后同步數(shù)據(jù),使用selecta,bfromtable_ajointable_bontable_a.idtable_b.id必選:否默認(rèn)值:無fetchSize描述:該配置項(xiàng)定義了插件和數(shù)據(jù)庫服務(wù)器端每次批量數(shù)據(jù)獲取條數(shù),該值決定了CDP和服 務(wù)器端的網(wǎng)絡(luò)交互次數(shù),能夠較大的提升數(shù)據(jù)抽取性能。注意,該值過大(2048)可能造成CDP進(jìn)程OOM。必選:否默認(rèn)值:1024類型轉(zhuǎn)換目前SQLServerReader支持大部分

44、SqlServer類型,但也存在部分個別類型沒有支持的情況,請注意檢查你的 類型。下面列出SQLServerReader針對SqlServer類型轉(zhuǎn)換列表:CDP 內(nèi)部類型SQLServer 數(shù)據(jù)類型Longbigint, int, smallint, tinyintDoublefloat, decimal, real, numericStringchar,nchar,ntext,nvarchar,text,varchar,nvarchar (MAX),varchar(MAX)Datedate, datetime, timeBooleanbitBytesbinary,varbinary,var

45、binary(MAX),timestamp請注意:除上述羅列字段類型外,其他類型均不支持。timestamp類型作為二進(jìn)制類型。約束限制主備同步數(shù)據(jù)恢復(fù)問題主備同步問題指SqlServer使用主從災(zāi)備,備庫從主庫不間斷通過binlog恢復(fù)數(shù)據(jù)。由于主備數(shù)據(jù)同步存在一定 的時間差,特別在于某些特定情況,例如網(wǎng)絡(luò)延遲等問題,導(dǎo)致備庫同步恢復(fù)的數(shù)據(jù)與主庫有較大差別,導(dǎo)致 從備庫同步的數(shù)據(jù)不是一份當(dāng)前時間的完整鏡像。CDP如果同步的是阿里云提供RDS,是直接從主庫讀取數(shù)據(jù),不存在數(shù)據(jù)恢復(fù)問題。但是會引入主庫負(fù)載問題,請注意流控配置。一致性約束SqlServer在數(shù)據(jù)存儲劃分中屬于RDBMS系統(tǒng),對外可

46、以提供強(qiáng)一致性數(shù)據(jù)查詢接口。例如當(dāng)一次同步任務(wù)啟 動運(yùn)行過程中,當(dāng)該庫存在其他數(shù)據(jù)寫入方寫入數(shù)據(jù)時,SQLServerReader完全不會獲取到寫入更新數(shù)據(jù),這 是由于數(shù)據(jù)庫本身的快照特性決定的。關(guān)于數(shù)據(jù)庫快照特性,請參看MVCCWikipedia上述是在SQLServerReader單線程模型下數(shù)據(jù)同步一致性的特性,由于SQLServerReader可以根據(jù)用戶配置信 息使用了并發(fā)數(shù)據(jù)抽取,因此不能嚴(yán)格保證數(shù)據(jù)一致性:當(dāng)SQLServerReader根據(jù)splitPk進(jìn)行數(shù)據(jù)切分后,會 先后啟動多個并發(fā)任務(wù)完成數(shù)據(jù)同步。由于多個并發(fā)任務(wù)相互之間不屬于同一個讀事務(wù),同時多個并發(fā)任務(wù)存 在時間間

47、隔。因此這份數(shù)據(jù)并不是完整的、一致的數(shù)據(jù)快照信息。針對多線程的一致性快照需求,在技術(shù)上目前無法實(shí)現(xiàn),只能從工程角度解決,工程化的方式存在取舍,我們 提供幾個解決思路給用戶,用戶可以自行選擇:使用單線程同步,即不再進(jìn)行數(shù)據(jù)切片。缺點(diǎn)是速度比較慢,但是能夠很好保證一致性。關(guān)閉其他數(shù)據(jù)寫入方,保證當(dāng)前數(shù)據(jù)為靜態(tài)數(shù)據(jù),例如,鎖表、關(guān)閉備庫同步等等。缺點(diǎn)是可能影響 在線業(yè)務(wù)。數(shù)據(jù)庫編碼問題SQLServerReader底層使用JDBC進(jìn)行數(shù)據(jù)抽取,JDBC天然適配各類編碼,并在底層進(jìn)行了編碼轉(zhuǎn)換。因此SQLServerReader不需用戶指定編碼,可以自動識別編碼并轉(zhuǎn)碼。增量數(shù)據(jù)同步SQLServerR

48、eader使用JDBC SELECT語句完成數(shù)據(jù)抽取工作,因此可以使用SELECT.WHERE.進(jìn)行增量數(shù)據(jù)抽取,方式有多種:數(shù)據(jù)庫在線應(yīng)用寫入數(shù)據(jù)庫時,填充modify字段為更改時間戳,包括新增、更新、刪除(邏輯刪)。對 于這類應(yīng)用,SQLServerReader只需要WHERE條件跟上一同步階段時間戳即可。對于新增流水型數(shù)據(jù),SQLServerReader可以WHERE條件后跟上一階段最大自增ID即可。對于業(yè)務(wù)上無字段區(qū)分新增、修改數(shù)據(jù)情況,SQLServerReader也無法進(jìn)行增量數(shù)據(jù)同步,只能同步全量數(shù)據(jù)。Sql安全性SQLServerReader提供querySql語句交給用戶自己

49、實(shí)現(xiàn)SELECT抽取語句,SQLServerReader本身對querySql不做任何安全性校驗(yàn)。這塊交由CDP用戶方自己保證。PostgreSQLReader快速介紹讀取數(shù)據(jù)。在底層實(shí)現(xiàn)上,PostgreSQLReader通過JDBC連接 遠(yuǎn)程PostgreSQL數(shù)據(jù)庫,并執(zhí)行相應(yīng)的sql語句將數(shù)據(jù)從PostgreSQL庫中SELECT出來。公有云上RDS提供PostgreSQL存儲引擎。實(shí)現(xiàn)原理簡而言之,PostgreSQLReader通過JDBC連接器連接到遠(yuǎn)程的PostgreSQL數(shù)據(jù)庫,并根據(jù)用戶配置的信息生 成查詢SELECT SQL語句并發(fā)送到遠(yuǎn)程PostgreSQL數(shù)據(jù)庫,并將

50、該SQL執(zhí)行返回結(jié)果使用CDP自定義的數(shù)據(jù)類型拼裝為抽象的數(shù)據(jù)集,并傳遞給下游Writer處理。對于用戶配置Table、Column、Where的信息,PostgreSQLReader將其拼接為SQL語句發(fā)送到PostgreSQL數(shù)據(jù)庫;對于用戶配置querySql信息,PostgreSQL直接將其發(fā)送到PostgreSQL數(shù)據(jù)庫。功能說明配置樣例- 使用Instance方式配置一個從PostgreSQL數(shù)據(jù)庫同步到抽取數(shù)據(jù)作業(yè)type: job,traceId: 您可以在這里填寫您作業(yè)的追蹤ID,建議使用業(yè)務(wù)名+您的作業(yè)ID,version: 1.0, configuration: vers

51、ion: 1.0, configuration: reader: plugin: postgresql, parameter: instanceName: datasync001, table: table,username: xxx, password: xxxxxx, column: *, fetchSize: 512, splitPk: pk,where: 1 = 1,writer: plugin: odps, parameter: accessId: bazhen.csy, accessKey: xxxxxxx, project: project, table: table,colum

52、n: *, partition: pt=2014, truncate: true- 使用JDBC方式配置一個從PostgreSQL數(shù)據(jù)庫同步抽取數(shù)據(jù)作業(yè):type: job,traceId: 您可以在這里填寫您作業(yè)的追蹤ID,建議使用業(yè)務(wù)名+您的作業(yè)ID, version: 1.0,configuration: reader: plugin: postgresql, parameter: jdbcUrl: jdbc:postgresql:/HOST_NAME:PORT/DATABASE_NAME, table: table,username: xxx, password: xxxxxx, co

53、lumn: *, fetchSize: 512, splitPk: pk,where: 1 = 1,writer: plugin: odps, parameter: accessId: bazhen.csy, accessKey: xxxxxxx,project: project, table: table,project: project, table: table,column: *, partition: pt=2014, truncate: true- 配置一個自定義SQL的數(shù)據(jù)庫同步任務(wù)到ODPS的作業(yè):type: job,traceId: 您可以在這里填寫您作業(yè)的追蹤ID,建議使用

54、業(yè)務(wù)名+您的作業(yè)ID, version: 1.0,configuration: reader: plugin: postgresql, parameter: jdbcUrl: jdbc:postgresql:/HOST_NAME:PORT/DATABASE_NAME, username: xxx,password: xxxxxx,querySql: SELECT * from dual, fetchSize: 512,writer: plugin: odps, parameter: accessId: bazhen.csy, accessKey: xxxxxxx, project: proje

55、ct, table: table, column: *,partition: pt=2014, truncate: true參數(shù)說明instanceName描述: 阿里云RDS實(shí)例名稱(Instance名稱)。用戶使用該配置指定RDS的Instance名稱,CDP將翻譯為底層執(zhí)行的jdbcUrl連接串連接。instanceName指定的是RDS實(shí)例。發(fā)給類似Mysql實(shí)例,指定了數(shù)據(jù)源的IP+Port,需要和database配 合使用。例如,在RDSinstanceName指定的是RDS實(shí)例。發(fā)給類似Mysql實(shí)例,指定了數(shù)據(jù)源的IP+Port,需要和database配 合使用。例如,在RDS

56、 WebConsole頁面中點(diǎn)擊【基本信息】,其右側(cè)詳情的名稱即是用戶擁有RDS的instanceName。!RDS HYPERLINK /kf/HTB1wAz9GpXXXXc9XXXXq6xXFXXXl.jpg) instanceName圖解(/kf/HTB1wAz9GpXXXXc9XXXXq6xXFXXXl.jpg)必選:是默認(rèn)值:無jdbcUrl描述:描述的是到對端數(shù)據(jù)庫的JDBC連接信息,jdbcUrl按照PostgreSQL官方規(guī)范,并可 以填寫連接附件控制信息。必選:是默認(rèn)值:無username描述:數(shù)據(jù)源的用戶名。必選:是默認(rèn)值:無password描述:數(shù)據(jù)源指定用戶名的密碼。必

57、選:是默認(rèn)值:無table描述:所選取的需要同步的表名。必選:是默認(rèn)值:無column描述:所配置的表中需要同步的列名集合,使用JSON的數(shù)組描述字段信息。用戶使用代表默認(rèn)使用所有列配置,例如。支持列裁剪,即列可以挑選部分列進(jìn)行導(dǎo)出。支持列換序,即列可以不按照表schema信息進(jìn)行導(dǎo)出。支持常量配置,用戶需要按照J(rèn)SON格式:id, 1, bazhen.csy, null, to_char(a + 1), 2.3 , trueid為普通列名,1為整形數(shù)字常量,bazhen.csy為字符串常量,null為空指針,to_char(a+ 1)為表達(dá)式,2.3為浮點(diǎn)數(shù),true為布爾值。Column必

58、須顯示填寫,不允許為空! 必選:是默認(rèn)值:無splitPk描述:PostgreSQLReader進(jìn)行數(shù)據(jù)抽取時,如果指定splitPk,表示用戶希望使用 因此會啟動并發(fā)任務(wù)進(jìn)行數(shù)據(jù)同步,這樣可以大大提 供數(shù)據(jù)同步的效能。推薦splitPk用戶使用表主鍵,因?yàn)楸碇麈I通常情況下比較均勻,因此切分出來的分片也不容 易出現(xiàn)數(shù)據(jù)熱點(diǎn)。目前splitPk僅支持整形、字符串型數(shù)據(jù)切分,不支持浮點(diǎn)、日期等其他類型。如果用戶指定 其他非支持類型,PostgreSQLReader將報錯!,PostgreSQLReader使用單通道同步全 量數(shù)據(jù)。必選:否默認(rèn)值:空where描述:篩選條件,PostgreSQLRe

59、ader根據(jù)指定的column、table、where條件拼接SQL,并根據(jù)這個SQL進(jìn)行數(shù)據(jù)抽取。例如在做測試時,可以將where條件指定為limit 10;在實(shí)際業(yè)務(wù)場景中,往往會選擇當(dāng)天的數(shù)據(jù)進(jìn)行同步,可以將where條件指定為gmt_create $bizdate ;where條件可以有效地進(jìn)行業(yè)務(wù)增量同步。where條件不配置或者為空,視作全表同步數(shù)據(jù)。必選:否默認(rèn)值:無querySql描述:在有些業(yè)務(wù)場景下,where這一配置項(xiàng)不足以描述所篩選的條件,用戶可以通過該配 置型來自定義篩選SQL。當(dāng)用戶配置了這一項(xiàng)之后,CDP系統(tǒng)就會忽略table,column這些 配置型,直接使用這

60、個配置項(xiàng)的內(nèi)容對數(shù)據(jù)進(jìn)行篩選,例如需要進(jìn)行多表join后同步數(shù)據(jù),使用select a,b from table_a join table_b on table_a.id = table_b.id當(dāng)用戶配置querySql時,PostgreSQLReader直接忽略table、column、where條件的配置。必選:否默認(rèn)值:無fetchSize描述:該配置項(xiàng)定義了插件和數(shù)據(jù)庫服務(wù)器端每次批量數(shù)據(jù)獲取條數(shù),該值決定了CDP和服 務(wù)器端的網(wǎng)絡(luò)交互次數(shù),能夠較大的提升數(shù)據(jù)抽取性能。注意,該值過大(2048)可能造成CDP進(jìn)程OOM。必選:否默認(rèn)值:512類型轉(zhuǎn)換目前PostgreSQLReade

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論