全部產品
Search
文件中心

DataWorks:SAP HANA資料來源

更新時間:Jun 19, 2024

SAP HANA資料來源為您提供讀取和寫入SAP HANA雙向通道的功能,本文為您介紹DataWorks的SAP HANA資料同步的能力支援情況。

使用限制

支援的欄位類型

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與參數說明

附錄:離線任務指令碼配置方式

如果您配置離線任務時使用指令碼模式的方式進行配置,您需要在任務指令碼中按照指令碼的統一格式要求編寫指令碼中的reader參數,指令碼模式的統一要求請參見通過指令碼模式配置離線同步任務,以下為您介紹指令碼模式下的資料來源的Reader參數的指導詳情。

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

目標表需要寫入資料的欄位,欄位之間用英文所逗號分隔,例如"column": ["id", "name", "age"]

如果要依次寫入全部列,使用星號(*)表示, 例如"column":["*"]

說明

當來源端欄位名稱包含斜杠(/),需要使用反斜線加雙引號(\"your_column_name\")進行轉義,例如,欄位名稱為/abc/efg,則轉義後欄位名稱為\"/abc/efg\"

preSql

執行資料同步任務之前率先執行的SQL語句。目前嚮導模式僅允許執行一條SQL語句,指令碼模式可以支援多條SQL語句。例如,執行前清空表中的舊資料:

truncate table tablename

說明

當有多條SQL語句時,不支援SQL事務原子性。

postSql

執行資料同步任務之後執行的SQL語句,目前嚮導模式僅允許執行一條SQL語句,指令碼模式可以支援多條SQL語句。例如,加上某一個時間戳記:alter table tablenameadd colname timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

batchSize

一次性批量提交的記錄數大小,該值可以極大減少資料同步系統與資料來源的網路互動次數,並提升整體輸送量。如果該值設定過大,會導致資料同步運行進程OOM異常。

1024