SAP HANA数据源为您提供读取和写入SAP HANA双向通道的功能,本文为您介绍DataWorks的SAP HANA数据同步的能力支持情况。
支持的版本
支持SAP HANA以下版本:
DataBase2.00.048.06.1623425628
DataBase2.00.055.00.161
使用限制
离线同步支持读取视图表。
目前该数据源支持Serverless资源组(推荐)和独享数据集成资源组。
支持的字段类型
SAP HANA Reader针对SAP HANA类型的转换列表,如下所示。
类型分类  | 数据源的数据类型  | 
整数类  | INT、TINYINT、SMALLINT、MEDIUMINT和BIGINT  | 
浮点类  | FLOAT、DOUBLE和DECIMAL  | 
字符串类  | VARCHAR、CHAR、TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT  | 
日期时间类  | DATE、DATETIME、TIMESTAMP、TIME和YEAR  | 
布尔型  | BIT和BOOL  | 
二进制类  | TINYBLOB、MEDIUMBLOB、BLOB、LONGBLOB和VARBINARY  | 
除上述列举的字段类型外,其它类型均不支持。
SAP HANA Reader插件将tinyint(1)视作整型。
创建数据源
在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建并管理数据源,详细的配置参数解释可在配置界面查看对应参数的文案提示。
数据同步任务开发
数据同步任务的配置入口和通用配置流程可参见下文的配置指导。
单表离线同步任务配置指导
操作流程请参见通过向导模式配置离线同步任务、通过脚本模式配置离线同步任务。
脚本模式配置的全量参数和脚本Demo请参见下文的附录:脚本Demo与参数说明。
附录:脚本Demo与参数说明
离线任务脚本配置方式
如果您配置离线任务时使用脚本模式的方式进行配置,您需要按照统一的脚本格式要求,在任务脚本中编写相应的参数,详情请参见通过脚本模式配置离线同步任务,以下为您介绍脚本模式下数据源的参数配置详情。
Reader脚本Demo
配置单库单表
{ "type":"job", "version":"2.0",//版本号。 "steps":[ { "stepType":"saphana",//插件名。 "parameter":{ "column":[//列名。 "id" ], "connection":[ { "querySql":["select a,b from join1 c join join2 d on c.id = d.id;"], //使用字符串的形式,将querySql写在connection中。 "datasource":"",//数据源。 "table":[//表名,即使只有一张表,也必须以[]的数组形式书写。 "xxx" ] } ], "where":"",//过滤条件。 "splitPk":"",//切分键。 "encoding":"UTF-8"//编码格式。 }, "name":"Reader", "category":"reader" }, { "stepType":"stream", "parameter":{}, "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" } ] } }配置分库分表
说明分库分表是指在SAP HANA Reader端可以选择多个SAP HANA数据表,且表结构保持一致。
{ "type": "job", "version": "1.0", "configuration": { "reader": { "plugin": "saphana", "parameter": { "connection": [ { "table": [ "tbl1", "tbl2", "tbl3" ], "datasource": "datasourceName1" }, { "table": [ "tbl4", "tbl5", "tbl6" ], "datasource": "datasourceName2" } ], "singleOrMulti": "multi", "splitPk": "db_id", "column": [ "id", "name", "age" ], "where": "1 < id and id < 100" } }, "writer": { } } }
Reader脚本参数
参数  | 描述  | 
username  | 用户名。  | 
password  | 密码。  | 
column  | 需要同步的字段名称。如果需要同步所有列,请使用星号(*)。 说明  当SAP HANA Reader中字段名称包含斜杠(/),需要使用反斜杠加双引号(\"your_column_name\")进行转义,例如,字段名称为/abc/efg,则转义后字段名称为\"/abc/efg\"。  | 
table  | 需要同步的表名。  | 
jdbcUrl  | 连接HANA的JDBC URL。例如,jdbc:sap://127.0.0.1:30215?currentschema=TEST。  | 
splitPk  | HANA表中的某个字段作为同步的切分字段,切分字段有助于多并发同步HANA表。 切分字段需要是数值整型的字段,如果没有该类型,则可以不填。  | 
Writer脚本Demo
脚本配置示例如下所示。
{
    "type":"job",
    "version":"2.0",//版本号。
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"saphana",//插件名。
            "parameter":{
                "postSql":[],//导入后的准备语句。
                "datasource":"",//数据源。
                "column":[//列名。
                    "id",
                    "value"
                ],
                "batchSize":1024,//一次性批量提交的记录数大小。
                "table":"",//表名。
                "preSql":[
                     "delete from XXX;" //导入前的准备语句。
                   ]
            },
            "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  | 数据源名称,脚本模式支持添加数据源,此配置项填写的内容必须与添加的数据源名称保持一致。  | 是  | 无  | 
table  | 选取的需要同步的表名称。  | 是  | 无  | 
column  | 目标表需要写入数据的字段,字段之间用英文所逗号分隔,例如 如果要依次写入全部列,使用星号(*)表示, 例如 说明  当来源端字段名称包含斜杠(/),需要使用反斜杠加双引号(\"your_column_name\")进行转义,例如,字段名称为/abc/efg,则转义后字段名称为\"/abc/efg\"。  | 是  | 无  | 
preSql  | 执行数据同步任务之前,需率先执行的SQL语句。目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。例如,执行前清空表中的旧数据: 说明  当有多条SQL语句时,不支持SQL事务原子性。  | 否  | 无  | 
postSql  | 执行数据同步任务之后执行的SQL语句,目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。例如,加上某一个时间戳:  | 否  | 无  | 
batchSize  | 一次性批量提交的记录数大小,该值可以极大减少数据同步系统与数据源的网络交互次数,并提升整体吞吐量。如果该值设置过大,会导致数据同步运行进程OOM异常。  | 否  | 1024  |