Skip to content
Last updated

Microsoft Dynamics 365 Sales Import Integration Using CLI

コマンドラインインターフェースからMS Dynamics 365 Salesデータコネクタを使用することもできます。以下の手順では、CLIを使用してデータをインポートする方法を説明します。

Install the 'td' command v0.11.9 or later

最新のTreasure Data Toolbeltをインストールしてください。

$ td --version
0.11.10

Create Seed Config File (seed.yml)

以下の手順に従って、Dynamics 365 CRMへのアクセスを設定してください:

  1. アプリケーションを作成し、client_id、client_secretを取得します https://docs.microsoft.com/en-us/powerapps/developer/data-platform/use-single-tenant-server-server-authentication
  2. アプリケーションユーザー用のカスタムセキュリティロールを作成します。最小限の権限(目的のオブジェクトに対する読み取り権限のみ)を持つカスタムセキュリティロールを作成することを推奨します。詳細はこちらを参照してください: https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/administering-dynamics-365/dn531130(v=crm.8)#create-a-security-role および https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/administering-dynamics-365/dn531090(v=crm.8)#security-roles
  3. Dynamics 365インスタンスからアプリケーションユーザーを作成します。詳細はこちらを参照してください: https://docs.microsoft.com/en-us/power-platform/admin/create-users-assign-online-security-roles#create-an-application-user
  4. アプリケーションユーザーにカスタムロールを割り当てます

Microsoft Dynamics 365の詳細情報を使用して、以下の例のようにseed.ymlを準備してください。

in:
  type: ms_dynamics
  domain: YOUR_DYNAMICS_365_DOMAIN
  tenant_id: TENANT_ID
  auth_method: client_credentials
  client_id: CLIENT_ID
  client_secret: CLIENT_SECRET
  entity_type: contact
  filter_from: FROM_DATE
  incremental: true
out:
  mode: append
exec: {}

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

Supported config parameters

ParametersValueRequiredDescription
typestringyesms_dynamics
domainstringyesDynamic 365 CRMドメイン。https://プレフィックスの有無は問いません
tenant_idstringyesMicrosoftアカウントのテナントID
auth_methodstringyesclient_credentials
client_idstringyesアプリケーションのクライアントID
client_secretstringyesアプリケーションのクライアントシークレット
entity_typestringyesインポートするエンティティタイプ。例: contact、account、quoteなど...
filter_fromstringyesこの値からデータをフィルタリングします
filter_tostringnoこの値までデータをフィルタリングします。設定されていない場合はデフォルトの実行時刻が使用されます
filter_columnstringnoデータをフィルタリングする列。デフォルトはmodifiedon
incrementalbooleanno最後の実行以降の新しいデータのみをインポートします
skip_invalidbooleanno列に無効なデータ形式が含まれている場合、そのレコードをスキップします
entity_setstringnoエンティティセット名。通常はentity_typeの複数形です。例: contacts、accounts、quotesなど...この値が設定されていない場合、コネクタはAPIメタデータからentity_setを推測します
columnsarraynoインポートする列とそのデータタイプ。この値が設定されていない場合、コネクタはAPIメタデータから列とデータタイプを推測します
retry_limitintno各API呼び出しの最大リトライ回数
retry_initial_wait_millisintno最初のリトライの待機時間(ミリ秒)
max_retry_wait_millisintnoAPI呼び出しを諦める前の最大待機時間
connection_timeout_millisintnoAPI呼び出し時に接続がタイムアウトするまでの時間
read_timeout_millisintnoリクエストにデータを書き込むまでの待機時間

Guess Fields (Generate load.yml)

connector:guessを使用します。このコマンドは上記のseed.ymlを読み取り、新しいファイルを出力します

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

load.ymlを開くと、推測されたentity_setとcolumnsが表示されます。

---
in:
  type: ms_dynamics
  domain: <YOUR_DYNAMICS_365_DOMAIN>
  tenant_id: <TENANT_ID>
  auth_method: client_credentials
  client_id: <CLIENT_ID>
  client_secret: <CLIENT_SECRET>
  entity_type: contact
  filter_from: <FROM_DATE>
  custom_expression_filter: your custom expression filter
  incremental: true
  entity_set: contacts
  columns:
  - {name: exchangerate, type: double}
  - {name: anniversary, type: string}
  - {name: lastname, type: string}
  - {name: employeeid, type: string}
  - {name: firstname, type: string}
  - {name: spousesname, type: string}
  - {name: customersizecode, type: long}
  - {name: fullname, type: string}

out: {mode: append}
exec: {}
filters:
- from_value: {mode: upload_time}
  to_column: {name: time}
  type: add_time

次に、previewコマンドを使用して結果をプレビューできます。

td connector:preview load.yml

システムが予期せず列タイプを検出した場合、または結果から列を削除したい場合は、load.ymlを直接変更して再度プレビューしてください。

現在、Data Connectorは「boolean」、「long」、「double」、「string」、「timestamp」タイプの解析をサポートしています。

td database:create td_sample_db
td table:create td_sample_db td_sample_table

Execute Load Job

ロードジョブを送信します。データのサイズによっては数時間かかる場合があります。データを保存するTreasure Dataのデータベースとテーブルを指定してください。

また、--time-columnオプションを指定することを推奨します。これは、Treasure Dataのストレージが時間によって分割されているためです(data partitioningを参照)。オプションが指定されていない場合、データコネクタは最初のlongまたはtimestamp列を分割時刻として選択します。--time-columnで指定する列の型はlongまたはtimestamp型である必要があります。

データに時刻列がない場合は、add_timeフィルタオプションを使用して時刻列を追加できます。詳細については、add_time filter pluginを参照してください。

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

connector:issueコマンドは、すでにdatabase(td_sample_db)table(td_sample_table)を作成していることを前提としています。データベースまたはテーブルがTDに存在しない場合、connector:issueコマンドは失敗するため、データベースとテーブルを手動で作成するか、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というフィールドがある場合は、--time-columnオプションを指定する必要はありません。

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

Scheduled execution

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

増分ロードの詳細については、About Incremental Loadingを参照してください

Create the schedule

新しいスケジュールはtd connector:createコマンドを使用して作成できます。以下が必要です:

  • スケジュールの名前
  • cron形式のスケジュール
  • データを保存するデータベースとテーブル
  • Data Connector設定ファイル
td connector:create \
daily_import \
"10 0 * * *" \
td_sample_db \
td_sample_table \
load.yml

また、Treasure Dataのストレージは時間によって分割されているため、--time-columnオプションを指定することを推奨します(data partitioningを参照)。

td connector:create \
daily_import \
"10 0 * * *" \
td_sample_db \
td_sample_table \
load.yml \
--time-column created_at

cronパラメータは、@hourly@daily@monthlyの3つの特別なオプションも受け付けます

デフォルトでは、スケジュールはUTCタイムゾーンで設定されます。-tまたは--timezoneオプションを使用して、タイムゾーンでスケジュールを設定できます。--timezoneオプションは、'Asia/Tokyo'や'America/Los Angeles'などの拡張タイムゾーン形式のみをサポートします。PSTやCSTなどのタイムゾーン略語は*サポートされておらず*、予期しないスケジュールになる可能性があります。

List the Schedules

現在スケジュールされているエントリのリストは、td connector:listコマンドを実行することで確認できます。

td connector:list

Show the Setting and Schedule History

td connector: スケジュールエントリの実行設定を表示します。

td connector:show daily_import

td connector:historyはスケジュールエントリの実行履歴を表示します。各実行の結果を調査するには、td job jobidを使用してください。

td connector:history daily_import

Delete the Schedule

td connector:deleteはスケジュールを削除します。

$ td connector:delete daily_import

Appendix

Modes for out plugin

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

append (default)

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

in:
  ...
out:
  mode: append

replace (In td 0.11.10 and later)

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

in:
  ...
out:
  mode: replace