SQL Server データソースは、SQL Server からのデータの読み取りと書き込みを行うための双方向チャネルを提供します。このトピックでは、DataWorks の SQL Server に対するデータ同期機能について説明します。
サポートされるバージョン
SQL Server Reader は `com.microsoft.sqlserver sqljdbc4 4.0` ドライバーを使用します。ドライバーの機能に関する詳細については、公式ドキュメントをご参照ください。このドライバーは、次の SQL Server バージョンをサポートしています:
バージョン | サポート状況 (はい/いいえ) |
SQL Server 2016 | はい |
SQL Server 2014 | はい |
SQL Server 2012 | はい |
PDW 2008R2 AU34 | はい |
SQL Server 2008 R2 | はい |
SQL Server 2008 | はい |
SQL Server 2019 | いいえ |
SQL Server 2018 | いいえ |
Azure SQL Managed Instance | いいえ |
Azure Synapse Analytics | いいえ |
Azure SQL Database | はい |
制限事項
オフライン同期は、ビューからのデータ読み取りをサポートしています。
サポートされるフィールドタイプ
SQL Server のフィールドタイプの完全なリストについては、SQL Server ヘルプドキュメントをご参照ください。次の表は、SQL Server 2016 を例として、サポートされている一般的なフィールドタイプの一覧です。
SQL Server 2016 フィールドタイプ | SQL Server Reader | SQL Server Writer |
bigint | サポート済み | サポート済み |
bit | サポート済み | サポート済み |
decimal | サポート済み | サポート済み |
int | サポート済み | サポート済み |
money | サポート済み | サポート済み |
numeric | サポート済み | サポート済み |
smallint | サポート済み | サポート済み |
smallmoney | サポート済み | サポート済み |
tinyint | サポート済み | サポート済み |
float | サポート済み | サポート済み |
real | サポート済み | サポート済み |
date | サポート済み | サポート済み |
datetime2 | サポート済み | サポート済み |
datetime | サポート済み | サポート済み |
datetimeoffset | サポート対象外 | サポート対象外 |
smalldatetime | サポート済み | サポート済み |
time | サポート済み | サポート済み |
char | サポート済み | サポート済み |
text | サポート済み | サポート済み |
varchar | サポート済み | サポート済み |
nchar | サポート済み | サポート済み |
ntext | サポート済み | サポート済み |
nvarchar | サポート済み | サポート済み |
binary | サポート済み | サポート済み |
image | サポート済み | サポート済み |
varbinary | サポート済み | サポート済み |
cursor | サポート対象外 | サポート対象外 |
hierarchyid | サポート対象外 | サポート対象外 |
sql_variant | サポート済み | サポート済み |
Spatial Geometry Types | サポート対象外 | サポート対象外 |
table | サポート対象外 | サポート対象外 |
rowversion | サポート対象外 | サポート対象外 |
uniqueidentifier | サポート済み | サポート済み |
xml | サポート済み | サポート済み |
Spatial Geography Types | サポート対象外 | サポート対象外 |
次の表は、SQL Server Reader と SQL Server Writer の型マッピングの一覧です。
型カテゴリ | SQL Server データの型 |
整数 | BIGINT、INT、SMALLINT、および TINYINT |
浮動小数点 | FLOAT、DECIMAL、REAL、および NUMERIC |
文字列 | CHAR、NCHAR、NTEXT、NVARCHAR、TEXT、VARCHAR、NVARCHAR(MAX)、および VARCHAR(MAX) |
日付と時刻 | DATE、DATETIME、および TIME |
ブール値 | BIT |
バイナリ | BINARY、VARBINARY、VARBINARY(MAX)、および TIMESTAMP |
データソースの追加
DataWorks で同期タスクを開発する前に、「データソース管理」の手順に従って、必要なデータソースを DataWorks に追加する必要があります。データソースを追加する際に、DataWorks コンソールでパラメーターの説明を表示して、各パラメーターの意味を理解することができます。
データ同期タスクの開発
同期タスクの構成のエントリポイントとプロシージャについては、以下の構成ガイドをご参照ください。
単一テーブルのオフライン同期タスクの構成
手順については、「コードレス UI でのタスクの構成」および「コードエディタでのタスクの構成」をご参照ください。
コードエディタのすべてのパラメーターとスクリプトデモの一覧については、「付録:スクリプトデモとパラメーター」をご参照ください。
データベース全体のオフライン読み取り同期タスクの構成
手順については、「データベース全体のリアルタイム同期タスクの構成」をご参照ください。
よくある質問
アクティブ/スタンバイ同期のデータ復元
SQL Server がアクティブ/スタンバイのディザスタリカバリ構成を使用している場合、アクティブ/スタンバイ同期の問題が発生する可能性があります。この構成では、セカンダリデータベースは binlog を使用してプライマリデータベースから継続的にデータを復元します。プライマリデータベースとセカンダリデータベース間のデータ同期には時間差が生じる可能性があります。この遅延は、ネットワーク遅延の期間中など、特定の状況では大きくなることがあります。その結果、セカンダリデータベースに復元されたデータは、プライマリデータベースのデータと大幅に異なる場合があります。セカンダリデータベースから同期されたデータは、完全で最新のスナップショットではありません。
整合性の制約
SQL Server は、強力な整合性を持つデータクエリインターフェイスを提供するリレーショナルデータベース管理システム (RDBMS) です。たとえば、同期タスク中、SQL Server Reader はデータベースのスナップショット機能により、他のトランザクションからの更新データを取得しません。
上記の説明は、シングルスレッドモデルにおける SQL Server Reader のデータ整合性に適用されます。SQL Server Reader は、設定に基づいて同時データ抽出を使用できます。そのため、強力なデータ整合性は保証できません。
SQL Server Reader が `splitPk` パラメーターに基づいてデータを分割した後、複数の同時タスクを開始してデータを同期します。これらの同時タスクは同じ読み取りトランザクションに属さず、異なる時間に実行されます。したがって、同期されたデータは完全で一貫性のあるデータスナップショットではありません。
マルチスレッド環境における一貫性のあるスナップショットのための技術的なソリューションは現在利用できません。この問題は、エンジニアリングの観点からのみ対処できます。エンジニアリング手法にはトレードオフが伴います。参考として、以下のソリューションを提供します。必要に応じてソリューションを選択してください。
データシャーディングなしのシングルスレッド同期を使用します。欠点は、同期速度が遅くなることですが、整合性は保証されます。
他のデータ書き込みを停止して、現在のデータが静的であることを保証します。たとえば、テーブルをロックしたり、セカンダリデータベースへの同期を停止したりできます。欠点は、これがオンラインサービスに影響を与える可能性があることです。
データベースのエンコーディング
SQL Server Reader は、Java Database Connectivity (JDBC) を使用してデータを抽出します。JDBC は、さまざまなエンコーディングと自然に互換性があり、基盤となるレイヤーでエンコーディング変換を実行します。したがって、SQL Server Reader にエンコーディングを指定する必要はありません。エンコーディングは自動的に取得され、トランスコードされます。
増分データ同期のメソッド
SQL Server Reader は SELECT 文を使用してデータを抽出します。
SELECT…WHERE…文を使用して、増分データ抽出を実行できます。メソッドは次のとおりです:新規、更新、または論理的に削除されたレコードの変更フィールドにタイムスタンプを設定するアプリケーションの場合、SQL Server Reader は最後の同期のタイムスタンプを指定する WHERE 句のみを必要とします。
新規トランザクションデータの場合、SQL Server Reader は前回の同期からの最大自動増分 ID を指定する WHERE 句のみを必要とします。
アプリケーションに新規データと変更データを区別するフィールドがない場合、SQL Server Reader は増分データ同期を実行できません。この場合、完全データのみを同期できます。
SQL セキュリティ
SQL Server Reader は、データ抽出のための SELECT 文を作成できる `querySql` パラメーターを提供します。SQL Server Reader は、これらの `querySql` 文に対してセキュリティチェックを実行しません。
付録:スクリプトデモとパラメーター
コードエディタを使用したバッチ同期タスクの構成
コードエディタを使用してバッチ同期タスクを構成する場合、統一されたスクリプトフォーマット要件に基づいて、スクリプト内の関連パラメーターを構成する必要があります。詳細については、「コードエディタでのタスクの構成」をご参照ください。以下の情報は、コードエディタを使用してバッチ同期タスクを構成する際に、データソースに対して構成する必要があるパラメーターについて説明しています。
Reader スクリプトデモ
{
"type":"job",
"version":"2.0",// バージョン番号。
"steps":[
{
"stepType":"sqlserver",// プラグイン名。
"parameter":{
"datasource":"",// データソース。
"column":[// フィールド。
"id",
"name"
],
"where":"",// フィルター条件。
"splitPk":"",// splitPk を指定すると、指定されたフィールドに基づいてデータがシャーディングされます。
"table":""// データテーブル。
},
"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"// レート制限。1 mbps は 1 MB/s に相当します。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}`querySql` パラメーターを使用してクエリを実行する場合は、Reader セクションに次のサンプルスクリプトを使用できます。この例では、SQL Server データソースは `sql_server_source`、クエリ対象のテーブルは `dbo.test_table`、クエリ対象の列は `name` です。
{
"stepType": "sqlserver",
"parameter": {
"connection": [
{
"querySql": ["select name from dbo.test_table"],
"datasource": "sql_server_source"
}
],
"datasource": "sql_server_source",
"column": ["name"],
"where": "",
"splitPk": "id"
},
"name": "Reader",
"category": "reader"
}Reader スクリプトパラメーター
パラメーター | 説明 | 必須 | デフォルト値 |
datasource | データソースの名前。コードエディタはデータソースの追加をサポートしています。このパラメーターの値は、追加されたデータソースの名前と同じでなければなりません。 | はい | なし |
table | データを同期するテーブルの名前。1 つのジョブで 1 つのテーブルからのみデータを同期できます。 | はい | なし |
column | ソーステーブルから同期する列。JSON 配列を使用して列情報を指定します。デフォルトでは、すべての列が同期されます。例:["*"]。
| はい | なし |
splitFactor | シャーディング係数。データ同期のシャード数を構成できます。複数の同時スレッドを構成する場合、データは 説明 推奨値は 1 から 100 までの整数です。値が大きすぎると、Out-of-Memory (OOM) エラーが発生する可能性があります。 | いいえ | 5 |
splitPk | SQL Server Reader がデータを抽出する際に、
| いいえ | なし |
where | フィルター条件。SQL Server Reader は、指定された
| いいえ | なし |
querySql | フォーマット: | いいえ | なし |
fetchSize | このパラメーターは、データベースサーバーから各バッチでフェッチするレコード数を指定します。この値は、Data Integration とサーバー間のネットワーク対話の回数を決定し、データ抽出のパフォーマンスを向上させることができます。 説明 大きすぎる | いいえ | 1024 |
driverVersion | SQL Server ドライバーのバージョン。デフォルト値は 4.0 です。このパラメーターを 12.10 に設定すると、Active Directory サービスプリンシパル認証をサポートするバージョンを使用できます。 | いいえ | 4.0 |
構成した
table、column、およびwhere情報については、SQL Server Reader がそれらを SQL 文に組み立て、その文を SQL Server データベースに送信します。構成した
querySql情報については、SQL Server がそれを直接 SQL Server データベースに送信します。
Writer スクリプトデモ
{
"type":"job",
"version":"2.0",// バージョン番号。
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"sqlserver",// プラグイン名。
"parameter":{
"postSql":[],// データ同期タスクの後に実行される SQL 文。
"datasource":"",// データソース。
"column":[// フィールド。
"id",
"name"
],
"table":"",// テーブル名。
"preSql":[]// データ同期タスクの前に実行される SQL 文。
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// エラーレコード数。
},
"speed":{
"throttle":true,// throttle を false に設定すると、mbps パラメーターは有効にならず、レート制限は課されません。throttle を true に設定すると、レート制限が課されます。
"concurrent":1, // 同時ジョブ数。
"mbps":"12"// レート制限。1 mbps は 1 MB/s に相当します。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Writer スクリプトパラメーター
パラメーター | 説明 | 必須 | デフォルト値 |
datasource | データソースの名前。コードエディタはデータソースの追加をサポートしています。このパラメーターの値は、追加されたデータソースの名前と同じでなければなりません。 | はい | なし |
table | データを同期する先のテーブルの名前。 | はい | なし |
column | データを書き込む先のテーブルのフィールド。フィールドはコンマ (,) で区切ります。例: | はい | なし |
preSql | データ同期タスクが実行される前に実行される SQL 文。コードレス UI では、1 つの SQL 文のみ実行できます。コードエディタでは、古いデータをクリアする文など、複数の SQL 文を実行できます。 | いいえ | なし |
postSql | データ同期タスクが実行された後に実行される SQL 文。コードレス UI では、1 つの SQL 文のみ実行できます。コードエディタでは、タイムスタンプを追加する文など、複数の SQL 文を実行できます。 | いいえ | なし |
writeMode | インポートモード。 | いいえ | insert |
batchSize | 各バッチで送信するレコード数。値を大きくすると、データ同期システムと SQL Server 間のネットワーク対話が大幅に減少し、全体のスループットが向上します。この値が大きすぎると、データ同期プロセスで OOM エラーが発生する可能性があります。 | いいえ | 1,024 |
driverVersion | SQL Server ドライバーのバージョン。デフォルト値は 4.0 です。このパラメーターを 12.10 に設定すると、Active Directory サービスプリンシパル認証をサポートするバージョンを使用できます。 | いいえ | 4.0 |