Vertica是一款基于列存儲的MPP架構的數據庫,Vertica數據源為您提供讀取和寫入Vertica雙向通道的功能,本文為您介紹DataWorks的Vertica數據同步的能力支持情況。
支持的版本
Vertica Reader通過Vertica數據庫驅動訪問Vertica,您需要確認Vertica驅動和您的Vertica服務之間的兼容能力。數據庫驅動使用如下版本。
<dependency>
<groupId>com.vertica</groupId>
<artifactId>vertica-jdbc</artifactId>
<version>7.1.2</version>
</dependency>
使用限制
Vertica數據源僅支持使用Serverless資源組(推薦)和獨享數據集成資源組。
Vertica Writer不支持配置writeMode參數。
僅支持腳本模式配置任務。
支持的字段類型
支持常見的Vertica數據類型(包括整形、浮點型、字符串、時間等)的同步,但對于一些高級類型支持有限。
創建數據源
在進行數據同步任務開發時,您需要在DataWorks上創建一個對應的數據源,操作流程請參見創建并管理數據源,詳細的配置參數解釋可在配置界面查看對應參數的文案提示。
數據同步任務開發
數據同步任務的配置入口和通用配置流程可參見下文的配置指導。
單表離線同步任務配置指導
操作流程請參見通過腳本模式配置離線同步任務。
腳本模式配置的全量參數和腳本Demo請參見下文的附錄:腳本Demo與參數說明。
附錄:腳本Demo與參數說明
離線任務腳本配置方式
如果您配置離線任務時使用腳本模式的方式進行配置,您需要按照統一的腳本格式要求,在任務腳本中編寫相應的參數,詳情請參見通過腳本模式配置離線同步任務,以下為您介紹腳本模式下數據源的參數配置詳情。
Reader腳本Demo
{
"type": "job",
"steps": [
{
"stepType": "vertica", //插件名。
"parameter": {
"datasource": "", //數據源名。
"where": "",
"column": [ //字段。
"id",
"name"
],
"splitPk": "id",
"connection": [
{
"table": [ //表名。
"table"
]
}
]
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {
"print": false,
"fieldDelimiter": ","
},
"name": "Writer",
"category": "writer"
}
],
"version": "2.0",
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": {
"record": "0" //錯誤記錄數。
},
"speed": {
"throttle": true, //當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
"concurrent": 1, //作業并發數。
"mbps":"12"http://限流,此處1mbps = 1MB/s。
}
}
}
Reader腳本參數
參數 | 描述 | 是否必選 | 默認值 |
datasource | 數據源名稱,腳本模式支持添加數據源,此配置項填寫的內容必須要與添加的數據源名稱保持一致。 | 是 | 無 |
table | 選取的需要同步的表。使用JSON的數組進行描述,支持同時讀取多張表。 當配置為多張表時,您需要保證多張表的schema結構一致,Vertica Reader不檢查表的邏輯是否統一。 說明 table必須包含在connection配置單元中。 | 是 | 無 |
column | 所配置的表中需要同步的列名集合,使用JSON的數組描述字段信息 。默認使用所有列配置,例如[ * ]。
| 是 | 無 |
splitPk | Vertica Reader進行數據抽取時,如果指定splitPk,表示您希望使用splitPk代表的字段進行數據分片,數據同步因此會啟動并發任務進行數據同步,提高數據同步的效能。
| 否 | 無 |
where | 篩選條件,Vertica Reader根據指定的column、table和where條件拼接SQL,并根據該SQL進行數據抽取。 例如在測試時,可以指定where條件。在實際業務場景中,通常會選擇當天的數據進行同步,可以將where條件指定為
| 否 | 無 |
querySql | 在部分業務場景中,where配置項不足以描述所篩選的條件,您可以通過該配置型來自定義篩選SQL。配置該項后,數據同步系統會忽略tables、columns和splitPk配置項,直接使用該項配置的內容對數據進行篩選。 當您配置querySql時,Vertica Reader直接忽略table、column和where條件的配置。 | 否 | 無 |
fetchSize | 該配置項定義了插件和數據庫服務器端每次批量數據獲取條數,該值決定了數據集成和服務器端的網絡交互次數,能夠較大地提升數據抽取性能。 說明 fetchSize值過大(>2048)可能造成數據同步進程OOM。 | 否 | 1,024 |
Writer腳本Demo
{
"type":"job",
"version":"2.0",//版本號。
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"vertica",//插件名。
"parameter":{
"datasource": "數據源名",
"column": [//字段。
"id",
"name"
],
"connection": [
{
"table": [//表名。
"vertica_table"
]
}
],
"preSql": [ //執行數據同步任務之前率先執行的SQL語句。
"delete from @table where db_id = -1"
],
"postSql": [//執行數據同步任務之后率先執行的SQL語句。
"update @table set db_modify_time = now() where db_id = 1"
]
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"http://錯誤記錄數。
},
"speed":{
"throttle":true,//當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
"concurrent":1, //作業并發數。
"mbps":"12"http://限流,此處1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Writer腳本參數
參數 | 描述 | 是否必選 | 默認值 |
datasource | 數據源名稱,腳本模式支持添加數據源,此配置項填寫的內容必須與添加的數據源名稱保持一致。 | 是 | 無 |
jdbcUrl | 描述的是到對端數據庫的JDBC連接信息,jdbcUrl包含在connection配置單元中:
| 是 | 無 |
username | 數據源的用戶名。 | 是 | 無 |
password | 數據源指定用戶名的密碼。 | 是 | 無 |
table | 選取的需要同步的表名稱,使用JSON的數組進行描述。 說明 table必須包含在connection配置單元中。 | 是 | 無 |
column | 目標表需要寫入數據的字段,字段之間用英文逗號分隔,例如 | 是 | 無 |
preSql | 寫入數據至目標表前,會先執行此處的標準語句。如果SQL中有需要操作的表名稱,請使用 | 否 | 無 |
postSql | 寫入數據至目標表后,會執行此處的標準語句。 | 否 | 無 |
batchSize | 一次性批量提交的記錄數大小,該值可以極大減少數據同步系統與Vertica的網絡交互次數,并提升整體吞吐量。如果該值設置過大,會導致數據同步運行進程OOM異常。 | 否 | 1,024 |