Skip to content

Microsoft SQL Server インポート連携

Microsoft SQL Server Tables Export Integrationについて詳しく見る

この記事では、Microsoft SQL Server のデータコネクタの使用方法について説明します。このコネクタを使用すると、Microsoft SQL Server から Treasure Data に直接データをインポートできます。

Microsoft SQL Server からデータをインポートする方法のサンプルワークフローについては、Treasure Boxes をご覧ください。

前提条件

  • Treasure Data の基本的な知識
  • Microsoft SQL Server の基本的な知識
  • リモートで実行されている Microsoft SQL Server インスタンス(例: RDS 上)

サポートされている SQL Server のバージョン

• Microsoft SQL Server 2017

• Microsoft SQL Server 2016

• Microsoft SQL Server 2014

• Microsoft SQL Server 2012

• Microsoft SQL Server 2008 R2

• Azure SQL Database

• Azure SQL Data Warehouse または Parallel Data Warehouse

• Azure SQL Managed Instance (Extended Private Preview)

TD Console を使用して接続を作成する

TD Console を使用して接続を設定できます。

新しい接続を作成する

データ接続を設定する際は、連携にアクセスするための認証情報を提供します。Treasure Data では、認証を設定してからソース情報を指定します。

Integrations Hub -> Catalog に移動し、Microsoft SQL Server を検索して選択します。

次のダイアログが開きます。

Microsoft SQL Server へのアクセスに必要なホスト名、ポート、ユーザー名、パスワードなどの必要な認証情報を入力します。

encrypt=true オプションを追加し、証明書が検証できない場合は、証明書検証をバイパスするために trustServerCertificate=true オプションを追加する必要があります。

Continue を選択します。

新しい Microsoft SQL Server 接続に名前を付けます。New Source を選択します。

Microsoft SQL Server データを Treasure Data に転送する

認証された接続を作成したので、次にソース接続を作成します。 詳細を入力し、Next を選択します。

スキーマを指定する場合は、次のように Use custom SELECT query を選択します:

プレビュー

データのプレビューが表示されます。変更を行う場合は Advanced Settings を選択し、そうでない場合は Next を選択します。

ターゲットデータベースとテーブルを選択する

データを転送する既存のデータベースとテーブルを選択するか、新しく作成します:

新しいデータベースを作成し、データベースに名前を付けます。Create new table についても同様の手順を実行します。

既存のテーブルにレコードを**追加(append)するか、既存のテーブルを置換(replace)**するかを選択します。

デフォルトのキーではなく、別のパーティションキーシードを設定する場合は、指定できます。

スケジュール設定

Schedule タブでは、1回限りの転送を指定するか、自動的に繰り返される転送をスケジュールできます。Once now を選択した場合は、Start Transfer を選択します。Repeat… を選択した場合は、スケジュールオプションを指定してから Schedule Transfer を選択します。

ソースコネクタに名前を付けます。コネクタを保存するか、Create & Run を選択できます。

コマンドラインを使用して Microsoft SQL Server 接続を作成する

CLI を使用して接続を設定できます。

'td' コマンドのインストール

最新の TD Toolbelt をインストールします。

シード設定ファイルの作成 (seed.yml)

Microsoft SQL Server のアクセス情報を含む seed.yml を準備します:

in:
  type: sqlserver
  host: sqlserver_host_name
  port: 1433
  user: test_user
  password: test_password
  database: test_database
  table: test_table
out:
  mode: replace

この例では、テーブル内のすべてのレコードをダンプします。追加パラメータを使用して、より詳細な制御を行うことができます。

利用可能な out モードの詳細については、以下の付録を参照してください。

フィールドの推測 (load.yml の生成)

次に connector:guess を使用します。このコマンドは、ターゲットデータを自動的に読み取り、データ形式をインテリジェントに推測します。

$ td connector:guess seed.yml -o load.yml

load.yml を開くと、ファイル形式、エンコーディング、カラム名、型などを含む、推測されたファイル形式定義が表示されます。

オプション: インポートされるデータのプレビュー

td connector:previewコマンドを使用して、インポートされるデータをプレビューできます。

$ td connector:preview load.yml
+---------+--------------+----------------------------------+------------+---------------------------+
| id:long | name:string  | description:string               | price:long | created_at:timestamp      |
+---------+--------------+----------------------------------+------------+---------------------------+
| 1       | "item name1" | "26e3c3625366591bc2ffc6e262976e" | 2419       | "2014-02-16 13:01:06 UTC" |
| 2       | "item name2" | "3e9dd9474dacb78afd607f9e0a3366" | 1298       | "2014-05-24 13:59:26 UTC" |
| 3       | "item name3" | "9b6c9e4a140284d3951681e9e047f6" | 9084       | "2014-06-21 00:18:21 UTC" |
| 4       | "item name4" | "a11faf5e63c1b02a3d4c2b5cbb7331" | 669        | "2014-05-02 03:44:08 UTC" |
| 6       | "item name6" | "6aa15471c373ddc8a6469e1c918f98" | 3556       | "2014-03-29 08:30:23 UTC" |
+---------+--------------+----------------------------------+------------+---------------------------+

ロードジョブの実行

最後に、ロードジョブを送信します。ジョブはデータサイズに応じて実行に数時間かかる場合があります。ユーザーはデータが保存されるデータベースとテーブルを指定する必要があります。

Treasure Dataのストレージは時間でパーティション化されているため、--time-columnオプションを指定することをお勧めします。このオプションが指定されていない場合、Data Connectorは最初のlong型またはtimestamp型のカラムをパーティション化時間として選択します。--time-columnで指定するカラムの型は、long型またはtimestamp型のいずれかである必要があります。

データに時間カラムがない場合は、add_timeフィルターオプションを使用して追加できます。詳細はadd_timeフィルタープラグインを参照してください。

$ td connector:issue load.yml --database td_sample_db --table td_sample_table

上記のコマンドは、*database(td_sample_db)table(td_sample_table)*がすでに作成されていることを前提としています。TDにデータベースまたはテーブルが存在しない場合、このコマンドは成功しないため、データベースとテーブルを手動で作成するか、td connector:issueコマンドで--auto-create-tableオプションを使用してデータベースとテーブルを自動作成してください。

$ td connector:issue load.yml --database td_sample_db --table td_sample_table --time-column created_at --auto-create-table

"--time-column"オプションで、時間フォーマットカラムを"パーティショニングキー"に割り当てることができます。

テーブル内のカラムを指定することで、incremental_columnsとlast_recordオプションを利用してレコードを増分的にロードできます。

in:
  type: sqlserver
  host: sqlserver_host_name
  port: 1433
  user: test_user
  password: test_password
  database: test_database
  table: test_table
  incremental: true
  incremental_columns: [id, sub_id]
  last_record: [10000, 300]
out:
  mode: append
  exec: {}

その後、プラグインは自動的にクエリを再作成し、内部で値をソートします。

# when last_record wasn't given
SELECT * FROM(
    ...original query is here
)
ORDER BY id, sub_id

::: terminal
# when last_record was given
SELECT * FROM(
    ...original query is here
)
WHERE id > 10000 OR (id = 10000 AND sub_id > 300)
ORDER BY id, sub_id

スケジュール実行と併用する場合、プラグインは自動的にlast_recordを生成し、内部で保持します。次回のスケジュール実行時にそれを使用できます。

in:
  type: sqlserver
  ...
out:
  ...

Config Diff
---
in:
  last_record:
  - 20000
  - 400

incremental: trueを設定した場合、queryオプションは使用できません。 incremental_columnsとしてサポートされるのは、文字列と整数のみです。

| --- |

スケジュール実行

定期的なMicrosoft SQL Serverインポートのために、定期的なData Connector実行をスケジュールできます。高可用性を確保するために、スケジューラーを慎重に設定しています。この機能を使用することで、ローカルデータセンターでcronデーモンを実行する必要がなくなります。

td connector:createコマンドを使用して、新しいスケジュールを作成できます。スケジュールの名前、cron形式のスケジュール、データが保存されるデータベースとテーブル、およびData Connector設定ファイルが必要です。

$ td connector:create \
    daily_sqlserver_import \
    "10 0 * * *" \
    td_sample_db \
    td_sample_table \
    load.yml

cronパラメータは、@hourly@daily@monthlyの3つのオプションも受け入れます。 | デフォルトでは、スケジュールはUTCタイムゾーンで設定されます。-tまたは--timezoneオプションを使用して、タイムゾーンでスケジュールを設定できます。--timezoneオプションは、'Asia/Tokyo'、'America/Los_Angeles'などの拡張タイムゾーン形式のみをサポートします。PST、CSTなどのタイムゾーンの略語は*サポートされておらず*、予期しないスケジュールになる可能性があります。

付録

outプラグインのモード

load.ymlのoutセクションでファイルインポートモードを指定できます。

append(デフォルト)

これはデフォルトモードで、レコードはターゲットテーブルに追加されます。

in:
  ...
out:
  mode: append

replace(td 0.11.10以降)

このモードは、ターゲットテーブルのデータを置き換えます。ターゲットテーブルに対して行われた手動のスキーマ変更は、このモードで維持されます。

in:
  ...
out:
  mode: replace

詳細情報