Microsoft SQL Server データを BigQuery に読み込む
注: この機能に関するフィードバックやサポートのリクエストについては、dts-preview-support@google.com までお問い合わせください。Microsoft SQL Server から BigQuery にデータを読み込むには、Microsoft SQL Server 用 BigQuery Data Transfer Service コネクタを使用します。Microsoft SQL Server コネクタは、オンプレミス環境や他のクラウド プロバイダ(Cloud SQL、アマゾン ウェブ サービス(AWS)、Microsoft Azure など)でホストされている Microsoft SQL Server インスタンスからのデータ読み込みをサポートしています。BigQuery Data Transfer Service を使用すると、Microsoft SQL Server インスタンスから BigQuery にデータを転送するためのオンデマンド データ転送ジョブと定期的なデータ転送ジョブを作成できます。
制限事項
Microsoft SQL Server のデータ転送ジョブには、次の制限があります。
- Microsoft SQL Server データベースへの同時接続数には上限があります。そのため、1 つの Microsoft SQL Server データベースへの同時転送実行数も制限されます。同時転送ジョブの数が、Microsoft SQL Server データベースでサポートされている同時接続の最大数より少ないことを確認します。
- データ損失を回避するために、一部の Microsoft SQL Server データ型が BigQuery の
STRING型にマッピングされることがあります。たとえば、精度と尺度が定義されていない Microsoft SQL Server の特定の数値型は、BigQuery のSTRINGにマッピングされることがあります。詳細については、データ型のマッピングをご覧ください。
増分転送の制限事項
Microsoft SQL Server の増分転送には、次の制限があります。- ウォーターマーク列として選択できるのは
TIMESTAMP列のみです。 - 増分取り込みは、有効なウォーターマーク列があるアセットでのみサポートされます。
- ウォーターマーク列の値は単調に増加する必要があります。
- 増分転送では、ソーステーブルの削除オペレーションを同期できません。
- 1 つの転送構成でサポートできるのは、増分取り込みまたは完全取り込みのいずれかのみです。
- 最初の増分取り込みの実行後に、
assetリスト内のオブジェクトを更新することはできません。 - 最初の増分取り込みの実行後に、転送構成の書き込みモードを変更することはできません。
- 最初の増分取り込みの実行後に、ウォーターマーク列または主キーを変更することはできません。
- 宛先の BigQuery テーブルは、指定された主キーを使用してクラスタ化され、クラスタ化テーブルの制限が適用されます。
- 既存の転送構成を増分取り込みモードに初めて更新すると、その更新後の最初のデータ転送で、データソースから使用可能なすべてのデータが転送されます。それ以降の増分データ転送では、データソースの新しい行と更新された行のみが転送されます。
- ウォーターマーク列にインデックスを作成することをおすすめします。このコネクタは、増分転送のフィルタにウォーターマーク列を使用するため、これらの列のインデックス登録によりパフォーマンスが向上します。
- 増分転送を行う場合は、更新されたデータ型マッピングを使用する必要があります。
データの取り込みオプション
以降のセクションでは、Microsoft SQL Server データ転送を設定する際のデータの取り込みオプションについて説明します。
TLS 構成
Microsoft SQL Server コネクタは、BigQuery へのデータ転送を暗号化するためのトランスポート レベル セキュリティ(TLS)の構成をサポートしています。Microsoft SQL Server コネクタは、次の TLS 構成をサポートしています。
データを暗号化し、CA とホスト名を検証するモード。このモードでは、TCPS プロトコルを介した TLS を使用してサーバーの完全な検証を行います。すべての転送中のデータを暗号化し、データベース サーバーの証明書が信頼できる認証局(CA)によって署名されていることを確認します。このモードでは、接続先のホスト名がサーバーの証明書の共通名(CN)またはサブジェクト代替名(SAN)と完全に一致することも確認します。このモードでは、攻撃者が別のドメインの有効な証明書を使用してデータベース サーバーを偽装することを防止できます。
ホスト名が証明書の CN または SAN と一致しない場合、接続は失敗します。証明書と一致するように DNS の解決を構成するか、別のセキュリティ モードを使用する必要があります。このモードは、中間者(PITM)攻撃を防ぐための最も安全なオプションです。
データを暗号化し、CA のみを検証するモード。このモードでは、TCPS プロトコルを介した TLS を使用してすべてのデータを暗号化し、クライアントが信頼する CA によってサーバーの証明書が署名されていることを検証します。ただし、このモードではサーバーのホスト名は検証されません。このモードでは、証明書が有効で、信頼できる CA によって発行されていれば、証明書のホスト名が接続先のホスト名と一致するかどうかに関係なく、接続が成功します。
このモードは、証明書が信頼できる CA によって署名されているサーバーに接続していることを確認したいものの、ホスト名が検証できない場合や、ホスト名構成を制御できない場合に使用します。
[暗号化のみ] モード。このモードでは、クライアントとサーバー間で転送されるすべてのデータが暗号化されます。証明書やホスト名の検証は行いません。
このモードでは、転送中のデータを保護することで一定のセキュリティが確保されますが、PITM 攻撃に対して脆弱になる可能性があります。
すべてのデータを暗号化する必要があるものの、サーバーの ID を検証できない場合や検証したくない場合は、このモードを使用します。プライベート VPC を使用する場合は、このモードを使用することをおすすめします。
暗号化または検証なしモード。このモードでは、データは暗号化されず、証明書やホスト名の検証も行われません。すべてのデータは書式なしテキストとして送信されます。
機密データが処理される環境では、このモードを使用しないことをおすすめします。このモードは、セキュリティが問題にならない分離されたネットワークでのテスト目的でのみ使用することをおすすめします。
信頼できるサーバー証明書(PEM)
データを暗号化して、CA とホスト名を検証するモードまたはデータを暗号化し、CA を検証するモードを使用している場合は、1 つ以上の PEM エンコード証明書を指定することもできます。これらの証明書は、BigQuery Data Transfer Service が TLS 接続中にデータベース サーバーの ID を確認する必要があるシナリオで必要になります。
- 組織内のプライベート CA によって署名された証明書または自己署名証明書を使用している場合は、完全な証明書チェーンまたは単一の自己署名証明書を指定する必要があります。これは、Amazon Relational Database Service(RDS)などのマネージド クラウド プロバイダ サービスの内部 CA によって発行された証明書に必要です。
- データベース サーバーの証明書がパブリック CA(Let's Encrypt、DigiCert、GlobalSign など)によって署名されている場合は、証明書を指定する必要はありません。これらのパブリック CA のルート証明書は、BigQuery Data Transfer Service によってプリインストールされ、信頼されています。
転送構成の [信頼できる PEM 証明書] フィールドに、次の要件を満たす PEM エンコード証明書を指定できます。
- 証明書は、有効な PEM エンコード証明書チェーンである必要があります。
- 証明書は完全に正しいものである必要があります。チェーン内の証明書が欠落している場合や、内容が正しくない場合、TLS 接続は失敗します。
- 単一の証明書の場合は、データベース サーバーから単一の自己署名証明書を指定できます。
- プライベート CA が発行した完全な証明書チェーンの場合は、完全な信頼チェーンを指定する必要があります。これには、データベース サーバーの証明書と、中間およびルート CA 証明書が含まれます。
完全転送または増分転送
Microsoft SQL Server 転送を設定するときに、転送構成で [完全] または [増分] の書き込み設定を選択することで、BigQuery へのデータの読み込み方法を指定できます。増分転送はプレビュー版でサポートされています。
完全データ転送を構成すると、データ転送のたびに Microsoft SQL Server データセットからすべてのデータが転送されます。または、増分データ転送(プレビュー版)を構成して、データ転送ごとにデータセット全体を読み込むのではなく、最後のデータ転送以降に変更されたデータのみを転送することもできます。データ転送で [増分] を選択した場合は、[追加] または [Upsert] の書き込みモードを指定して、データの増分転送中に BigQuery にデータを書き込む方法を定義する必要があります。以降のセクションでは、使用可能な書き込みモードについて説明します。
[追加] 書き込みモード
追加書き込みモードでは、宛先テーブルに新しい行のみが挿入されます。このオプションでは、既存のレコードをチェックせずに転送されたデータが厳密に追加されるため、このモードでは宛先テーブルでデータが重複する可能性があります。
追加モードを選択した場合は、ウォーターマーク列を選択する必要があります。Microsoft SQL Server コネクタがソーステーブルの変更を追跡するには、ウォーターマーク列が必要です。
Microsoft SQL Server の転送では、レコードの作成時にのみ更新され、その後の更新では変更されない列を選択することをおすすめします。たとえば、CREATED_AT 列です。
[Upsert] 書き込みモード
[Upsert] 書き込みモードでは、主キーを確認して、宛先テーブルの行を更新するか、新しい行を挿入します。主キーを指定すると、Microsoft SQL Server コネクタは、宛先テーブルをソーステーブルと同期するために必要な変更を特定できます。データ転送中に指定された主キーが宛先 BigQuery テーブルに存在している場合、Microsoft SQL Server コネクタはソーステーブルの新しいデータでその行を更新します。データ転送中に主キーが存在していない場合、Microsoft SQL Server コネクタは新しい行を挿入します。
upsert モードを選択する場合は、ウォーターマーク列と主キーを選択する必要があります。
- Microsoft SQL Server コネクタがソーステーブルの変更を追跡するには、ウォーターマーク列が必要です。
- 行が変更されるたびに更新されるウォーターマーク列を選択します。
UPDATED_AT列またはLAST_MODIFIED列に類似した列をおすすめします。
- 行が変更されるたびに更新されるウォーターマーク列を選択します。
主キーは、行の挿入または更新が必要かどうかを Microsoft SQL Server コネクタが判断するために必要なテーブルの 1 つ以上の列です。
テーブルのすべての行で一意の null 以外の値を含む列を選択します。システムが生成した識別子、一意の参照コード(自動増分式の ID など)、不変の時間ベースのシーケンス ID を含む列をおすすめします。
データの損失や破損を防ぐため、選択する主キー列には一意の値が必要です。選択した主キー列の一意性に疑問がある場合は、代わりに [追加] 書き込みモードを使用することをおすすめします。
増分取り込みの動作
データソースのテーブル スキーマを変更すると、これらのテーブルからの増分データ転送は、次の方法で BigQuery に反映されます。
| データソースの変更 | 増分取り込みの動作 |
|---|---|
| 新しい列の追加 | 宛先の BigQuery テーブルに新しい列が追加されます。この列の以前のレコードはすべて null 値になります。 |
| 列の削除 | 削除された列は、宛先 BigQuery テーブルに残ります。この削除された列への新しいエントリには null 値が入力されます。 |
| 列のデータ型を変更する | このコネクタは、
ALTER COLUMN DDL ステートメントでサポートされているデータ型変換のみをサポートします。これ以外のデータ型変換を行うと、データ転送が失敗します。問題が発生した場合は、新しい転送構成を作成することをおすすめします。 |
| 列の名前を変更する | 元の列は宛先 BigQuery テーブルにそのまま残り、更新された名前の新しい列が宛先テーブルに追加されます。 |
始める前に
Microsoft SQL Server データ転送のスケジュールを設定するには、次の前提条件を満たしている必要があります。
Microsoft SQL Server の前提条件
Microsoft SQL Server データベースにユーザー アカウントを作成しておく必要があります。詳細については、ログインを使用してユーザーを作成するをご覧ください。
BigQuery の前提条件
- BigQuery Data Transfer Service を有効にするために必要なすべての操作が完了していることを確認します。
- データを保存する BigQuery データセットを作成します。
必要なロール
Microsoft SQL Server データ転送の作成に必要な権限を取得するには、プロジェクトに対する BigQuery 管理者 (roles/bigquery.admin)IAM ロールを付与するよう管理者に依頼します。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
この事前定義ロールには、Microsoft SQL Server データ転送の作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
Microsoft SQL Server データ転送を作成するには、次の権限が必要です。
-
bigquery.transfers.update -
bigquery.datasets.get
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
ネットワークの構成
Microsoft SQL Server データベース接続でパブリック IP アドレスを使用できない場合は、特定のネットワーク構成を設定する必要があります。詳しくは、以下のセクションをご覧ください。
Microsoft SQL Server のデータ転送を設定する
次のオプションのいずれかを選択します。
コンソール
[データ転送] ページに移動します。
[転送を作成] をクリックします。
[ソースタイプ] セクションの [ソース] で、[Microsoft SQL Server] を選択します。
[データソースの詳細] セクションで、次のようにします。
- [ネットワーク アタッチメント] で、既存のネットワーク アタッチメントを選択するか、[ネットワーク アタッチメントの作成] をクリックします。
- [ホスト] に、Microsoft SQL Server データベースのホスト名または IP アドレスを入力します。
- [ポート番号] に、Microsoft SQL Server データベースのポート番号を入力します。
- [データベース名] に、Microsoft SQL Server データベースの名前を入力します。
- [ユーザー名] に、Microsoft SQL Server データベース接続を開始する Microsoft SQL Server ユーザーのユーザー名を入力します。
- [パスワード] に、Microsoft SQL Server データベース接続を開始する Microsoft SQL Server ユーザーのパスワードを入力します。
- [TLS Mode] で、メニューからオプションを選択します。TLS モードの詳細については、TLS 構成をご覧ください。
- [Trusted PEM Certificate] に、データベース サーバーの TLS 証明書を発行した認証局(CA)の公開証明書を入力します。詳細については、信頼できるサーバー証明書(PEM)をご覧ください。
- [以前のマッピングを有効にする] で、以前のデータ型マッピングを使用する場合は [true](デフォルト)を選択します。更新されたデータ型マッピングを使用するには、[false] を選択します。増分転送を行う場合は、この値は false にする必要があります。データ型マッピングの更新の詳細については、2027 年 3 月 16 日をご覧ください。
- [取り込みタイプ] で、[完全] または [増分] を選択します。
- [増分](プレビュー版)を選択した場合は、[書き込みモード] で [追加] または [Upsert] を選択します。書き込みモードの詳細については、完全転送または増分転送をご覧ください。
- [転送する Microsoft SQL Server オブジェクト] で、Microsoft SQL Server テーブルを参照するか、転送に必要なテーブルの名前を手動で入力します。
[転送先の設定] セクションの [データセット] で、データを保存するために作成したデータセットを選択するか、[新しいデータセットの作成] をクリックして、転送先データセットとして使用するデータセットを作成します。
[転送構成名] セクションの [表示名] に、転送名を入力します。転送名には、後で修正が必要になった場合にその転送を特定できる任意の名前を使用できます。
[スケジュール オプション] セクションで、次の操作を行います。
- [繰り返しの頻度] を選択します。[時間]、[日](デフォルト)、[週]、[月] のいずれかを選択する場合は、頻度も指定する必要があります。[カスタム] オプションを選択して、より詳細な繰り返し頻度を作成することもできます。[オンデマンド] オプションを選択すると、このデータ転送は手動で転送をトリガーした場合にのみ実行されます。
- 必要に応じて、[すぐに開始] を選択するか、[設定した時刻に開始] オプションを選択して開始日と実行時間を指定します。
省略可: [通知オプション] セクションで、次のようにします。
省略可: [詳細オプション] セクションで、この転送の暗号化タイプを選択します。 Google-owned and Google-managed encryption keyまたは顧客所有の Cloud Key Management Service 鍵のいずれかを選択できます。暗号鍵の詳細については、顧客管理の暗号鍵(CMEK)をご覧ください。
[保存] をクリックします。
bq
bq mk コマンドを入力して、転送作成フラグ --transfer_config を指定します。
bq mk \ --transfer_config \ --project_id=PROJECT_ID \ --data_source=DATA_SOURCE \ --display_name=DISPLAY_NAME \ --target_dataset=DATASET \ --params='PARAMETERS'
次のように置き換えます。
PROJECT_ID(省略可): Google Cloud プロジェクト ID。--project_idフラグで特定のプロジェクトを指定しない場合は、デフォルトのプロジェクトが使用されます。DATA_SOURCE: データソース(sqlserver)。DISPLAY_NAME: データ転送構成の表示名。転送名には、後で修正が必要になった場合に識別できる任意の名前を使用できます。DATASET: データ転送構成のターゲット データセット。PARAMETERS: 作成される転送構成のパラメータを JSON 形式で指定します。例:--params='{"param":"param_value"}'。Microsoft SQL Server 転送のパラメータは次のとおりです。connector.networkAttachment(省略可): Microsoft SQL Server データベースに接続するネットワーク アタッチメントの名前。connector.database: Microsoft SQL Server データベースの名前。connector.endpoint.host: データベースのホスト名または IP アドレス。connector.endpoint.port: データベースのポート番号。connector.authentication.username: データベース ユーザーのユーザー名connector.authentication.password: データベース ユーザーのパスワード。connector.legacyMapping: 以前のデータ型マッピングを使用するには、true(デフォルト)に設定します。更新されたデータ型マッピングを使用するには、falseに設定します。増分転送を行う場合は、この値をfalseにする必要があります。データ型マッピングの更新の詳細については、2027 年 3 月 16 日をご覧ください。connector.tls.mode: この転送で使用する TLS 構成を指定します。ENCRYPT_VERIFY_CA_AND_HOST: データを暗号化し、CA とホスト名を検証するENCRYPT_VERIFY_CA: データを暗号化し、CA のみを検証するENCRYPT_VERIFY_NONE: データの暗号化のみ行うDISABLE: 暗号化や検証を行わない場合に指定
connector.tls.trustedServerCertificate:(省略可)1 つ以上の PEM エンコード証明書を指定します。connector.tls.modeの値がENCRYPT_VERIFY_CA_AND_HOSTまたはENCRYPT_VERIFY_CAの場合にのみ必須です。ingestionType:FULLまたはINCREMENTALを指定します。増分転送はプレビュー版でサポートされています。詳細については、完全転送または増分転送をご覧ください。writeMode:WRITE_MODE_APPENDまたはWRITE_MODE_UPSERTを指定します。watermarkColumns: テーブル内の列をウォーターマーク列として指定します。このフィールドは増分転送の場合に必須です。primaryKeys: テーブルの列を主キーとして指定します。このフィールドは増分転送の場合に必須です。assets: 転送の一部として Microsoft SQL Server データベースから転送される Microsoft SQL Server テーブル名のリスト。
たとえば、次のコマンドは My Transfer という Microsoft SQL Server 転送を作成します。
bq mk \ --transfer_config --target_dataset=mydataset --data_source=sqlserver --display_name='My Transfer' --params='{"assets":["DB1/DEPARTMENT","DB1/EMPLOYEES"], "connector.authentication.username": "User1", "connector.authentication.password":"ABC12345", "connector.database":"DB1", "connector.endpoint.host":"192.168.0.1", "connector.endpoint.port":"1520", "connector.networkAttachment":"projects/dev-project1/regions/us-central1/networkattachments/na1", "ingestionType":"incremental", "writeMode":"WRITE_MODE_APPEND", "watermarkColumns":["createdAt","createdAt"], "primaryKeys":[['dep_id'], ['report_by','report_title']], "connector.tls.mode": "ENCRYPT_VERIFY_CA_AND_HOST", "connector.tls.trustedServerCertificate": "PEM-encoded certificate"}'
増分転送中に複数のアセットを指定する場合、watermarkColumns フィールドと primaryKeys フィールドの値は、assets フィールドの値の位置に対応します。次の例では、dep_id はテーブル DB1/DEPARTMENT に対応し、report_by と report_title はテーブル DB1/EMPLOYEES に対応します。
"primaryKeys":[['dep_id'], ['report_by','report_title']], "assets":["DB1/DEPARTMENT","DB1/EMPLOYEES"],
定期的なスケジュール外でデータ転送を手動で実行するには、バックフィル実行を開始します。
データ型マッピング
次の表に、Microsoft SQL Server のデータ型と対応する BigQuery のデータ型を示します。
| Microsoft SQL Server のデータ型 | BigQuery のデータ型 | 更新された BigQuery のデータ型 |
|---|---|---|
tinyint |
INTEGER |
|
smallint |
INTEGER |
|
int |
INTEGER |
|
bigint |
BIGNUMERIC |
|
bit |
BOOLEAN |
|
decimal |
BIGNUMERIC |
|
numeric |
NUMERIC |
|
money |
BIGNUMERIC |
|
smallmoney |
BIGNUMERIC |
|
float |
FLOAT |
|
real |
FLOAT |
|
date |
DATE |
|
time |
TIME |
|
datetime2 |
TIMESTAMP |
DATETIME |
datetimeoffset |
TIMESTAMP |
|
datetime |
TIMESTAMP |
DATETIME |
smalldatetime |
TIMESTAMP |
DATETIME |
char |
STRING |
|
varchar |
STRING |
|
text |
STRING |
|
nchar |
STRING |
|
nvarchar |
STRING |
|
ntext |
STRING |
|
binary |
BYTES |
|
varbinary |
BYTES |
|
image |
BYTES |
|
geography |
STRING |
|
geometry |
STRING |
|
hierarchyid |
BYTES |
|
rowversion |
BYTES |
|
sql_variant |
BYTES |
|
uniqueidentifier |
STRING |
|
xml |
STRING |
|
json |
STRING |
|
vector |
STRING |
json データ型と vector データ型は Azure でのみサポートされています。
JSON データ型は、常に最新の更新ポリシーで構成された Azure SQL データベースと Azure SQL マネージド インスタンスでサポートされています。Microsoft SQL Server 2022 更新ポリシーで構成された Azure SQL マネージド インスタンスでは、JSON データ型はサポートされていません。
Microsoft SQL Server は、JSON を JSON 型ではなく NVARCHAR(MAX) として保存します。検証には CHECK (ISJSON(json_col) = 1)、クエリには JSON_VALUE() を使用することをおすすめします。
Microsoft SQL Server には、vector データ型のベクトル サポートがありません。ベクトルは NVARCHAR(MAX) に JSON 配列として保存し、抽出には JSON_VALUE() を使用し、類似性の計算には手動の FLOAT を使用することをおすすめします。
トラブルシューティング
データ転送に関する問題のトラブルシューティングについては、Microsoft SQL Server の転送に関する問題をご覧ください。
料金
この機能のプレビュー版では、Microsoft SQL Server データを BigQuery に転送する際に費用は発生しません。
次のステップ
- BigQuery Data Transfer Service の概要を読む。
- 転送構成に関する情報の取得、転送構成の一覧表示、転送の実行履歴の表示など、転送の管理について学習します。
- クロスクラウドの操作でデータを読み込む方法を学習する。