SAP HANA データソースを使用すると、DataWorks で SAP HANA のデータを読み書きできます。
サポートしているバージョン
-
DataBase 2.00.048.06.1623425628
-
DataBase 2.00.055.00.161
制限事項
-
オフライン同期は、ビューからのデータの読み取りをサポートしています。
-
このデータソースは、サーバーレスリソースグループ (推奨) および Data Integration 専用リソースグループ をサポートしています。
サポートしているデータ型
SAP HANA Reader は、以下のデータ型をサポートしています。
| 型のカテゴリ | データ型 |
|---|---|
| 整数 | 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 に SAP HANA をデータソースとして追加します。手順については、「データソース管理」をご参照ください。
データソースを追加する際、パラメーターの説明は DataWorks コンソールで直接確認できます。
SAP HANA データソースを設定する際、socketTimeout などの Java Database Connectivity (JDBC) 接続パラメーターは [詳細パラメーター] フィールドでは受け付けられません。このフィールドは、connectTimeout や useSSL などの一部のドライバープロパティのみをサポートしています。これらのパラメーターを設定するには、[データベース名] の値に dbname?key=value の形式で追加します。たとえば、[データベース名] を testdb?socketTimeout=60000 に設定すると、JDBC URL は jdbc:sap://<host>:<port>/testdb?socketTimeout=60000 となります。
データ同期タスクの開発
単一テーブルのオフライン同期タスクの設定
コードレス UI またはコードエディタを使用してタスクを設定します:
すべてのスクリプトパラメーターとスクリプトのデモについては、「付録:スクリプトのデモとパラメーターの説明」をご参照ください。
付録:スクリプトのデモとパラメーターの説明
以下のセクションでは、コードエディタで設定されたバッチ同期タスクの Reader および Writer スクリプトのパラメーターについて説明します。スクリプトのフォーマット要件については、「コードエディタでタスクを設定」をご参照ください。
Reader スクリプトのデモ
すべての Reader の例では、"stepType": "saphana" を使用して SAP HANA プラグインを識別します。
単一データベース内の単一テーブル
{
"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;"],
"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,
"concurrent": 1,
"mbps": "12"
}
},
"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 |
SAP HANA データベースのユーザー名です。 | はい | なし |
password |
SAP HANA データベースのパスワードです。 | はい | なし |
column |
同期する列です。* を使用してすべての列を同期します。列名にスラッシュ (/) が含まれる場合は、二重引用符で囲み、バックスラッシュで引用符をエスケープします。たとえば、/abc/efg という名前の列の場合、値を \\"/abc/efg\\" に設定します。 |
はい | なし |
table |
同期するテーブルの名前です。単一のテーブルの場合でも、値を配列として指定します。 | はい | なし |
jdbcUrl |
SAP HANA データベースの Java Database Connectivity (JDBC) URL です。例:jdbc:sap://127.0.0.1:30215?currentschema=TEST。socketTimeout などの追加の JDBC 接続パラメーターを追加できます。例:jdbc:sap://127.0.0.1:30215?currentschema=TEST&socketTimeout=60000。 |
はい | なし |
splitPk |
同時同期の分割キーとして使用される数値型の整数列です。そのような列が存在しない場合は、この項目を空のままにします。 | いいえ | なし |
Writer スクリプトのデモ
{
"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,
"concurrent": 1,
"mbps": "12"
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Writer スクリプトのパラメーター
| パラメーター | 説明 | 必須 | デフォルト値 |
|---|---|---|---|
datasource |
データソース名です。コードエディタで設定した名前と一致する必要があります。 | はい | なし |
table |
送信先テーブルの名前です。 | はい | なし |
column |
データを書き込む送信先の列を配列として指定します。例:["id", "name", "age"]。["*"] を使用して、すべての列に順番に書き込みます。列名にスラッシュ (/) が含まれる場合は、二重引用符で囲み、バックスラッシュで引用符をエスケープします。たとえば、/abc/efg という名前の列の場合、値を \\"/abc/efg\\" に設定します。 |
はい | なし |
preSql |
同期タスクが開始される前に実行される SQL ステートメントです。これを使用して、ロード前に古いデータをクリアします。例:truncate table tablename。コードレス UI では、1つのステートメントのみがサポートされます。コードエディタでは、複数のステートメントがサポートされますが、トランザクションの原子性はサポートされていません。 |
いいえ | なし |
postSql |
同期タスクが完了した後に実行される SQL ステートメントです。コードレス UI では、1つのステートメントのみがサポートされます。コードエディタでは、複数のステートメントがサポートされます。例:ALTER TABLE tablename ADD colname TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。 |
いいえ | なし |
batchSize |
1回のバッチでコミットされるレコード数です。値を大きくすると、ネットワークのラウンドトリップが減り、スループットが向上しますが、設定値が高すぎるとメモリ不足 (OOM) エラーが発生する可能性があります。 | いいえ | 1024 |