全部产品
Search
文档中心

大数据开发治理平台 DataWorks:Vertica数据源

更新时间:Oct 23, 2024

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数据类型(包括整形、浮点型、字符串、时间等)的同步,但对于一些高级类型支持有限。

创建数据源

在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建并管理数据源详细的配置参数解释可在配置界面查看对应参数的文案提示

数据同步任务开发

数据同步任务的配置入口和通用配置流程可参见下文的配置指导。

单表离线同步任务配置指导

附录:脚本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"//限流,此处1mbps = 1MB/s。
}
}
}

Reader脚本参数

参数

描述

是否必选

默认值

datasource

数据源名称,脚本模式支持添加数据源,此配置项填写的内容必须要与添加的数据源名称保持一致。

table

选取的需要同步的表。使用JSON的数组进行描述,支持同时读取多张表。

当配置为多张表时,您需要保证多张表的schema结构一致,Vertica Reader不检查表的逻辑是否统一。

说明

table必须包含在connection配置单元中。

column

所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息 。默认使用所有列配置,例如[ * ]。

  • 支持列裁剪,即列可以挑选部分列进行导出。

  • 支持列换序,即列可以不按照表schema信息顺序进行导出。

  • 支持常量配置。

  • column必须显示指定同步的列集合,不允许为空。

splitPk

Vertica Reader进行数据抽取时,如果指定splitPk,表示您希望使用splitPk代表的字段进行数据分片,数据同步因此会启动并发任务进行数据同步,提高数据同步的效能。

  • 推荐splitPk用户使用表主键,因为表主键通常情况下比较均匀,因此切分出来的分片不容易出现数据热点。

  • 目前splitPk仅支持整型数据切分,不支持字符串、浮点、日期等其它类型 。如果您指定其它非支持类型,Vertica Reader将报错。

  • 如果设置splitPk为空,底层将视作您不允许对单表进行切分,因此使用单通道进行抽取。

where

筛选条件,Vertica Reader根据指定的columntablewhere条件拼接SQL,并根据该SQL进行数据抽取。

例如在测试时,可以指定where条件。在实际业务场景中,通常会选择当天的数据进行同步,可以将where条件指定为gmt_create > $bizdate

  • where条件可以有效地进行业务增量同步。

  • where条件不配置或者为空,视作全表同步数据。

querySql

在部分业务场景中,where配置项不足以描述所筛选的条件,您可以通过该配置型来自定义筛选SQL。配置该项后,数据同步系统会忽略tablescolumnssplitPk配置项,直接使用该项配置的内容对数据进行筛选。

当您配置querySql时,Vertica Reader直接忽略tablecolumnwhere条件的配置。

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"//错误记录数。
},
"speed":{
                    "throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
                    "concurrent":1, //作业并发数。
                    "mbps":"12"//限流,此处1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}

Writer脚本参数

参数

描述

是否必选

默认值

datasource

数据源名称,脚本模式支持添加数据源,此配置项填写的内容必须与添加的数据源名称保持一致。

jdbcUrl

描述的是到对端数据库的JDBC连接信息,jdbcUrl包含在connection配置单元中:

  • 在一个数据库上只能配置一个值,不支持同一个数据库存在多个主库的情况(双主导入数据情况)。

  • jdbcUrl的格式和Vertica官方一致,并可以连接附加参数信息。例如,jdbc:vertica://127.0.0.1:3306/database

username

数据源的用户名。

password

数据源指定用户名的密码。

table

选取的需要同步的表名称,使用JSON的数组进行描述。

说明

table必须包含在connection配置单元中。

column

目标表需要写入数据的字段,字段之间用英文逗号分隔,例如"column": ["id", "name", "age"]

preSql

写入数据至目标表前,会先执行此处的标准语句。如果SQL中有需要操作的表名称,请使用@table表示,以便在实际执行SQL语句时,对变量按照实际表名称进行替换。

postSql

写入数据至目标表后,会执行此处的标准语句。

batchSize

一次性批量提交的记录数大小,该值可以极大减少数据同步系统与Vertica的网络交互次数,并提升整体吞吐量。如果该值设置过大,会导致数据同步运行进程OOM异常。

1,024