コマンドラインインターフェースからMS Dynamics 365 Salesデータコネクタを使用することもできます。以下の手順では、CLIを使用してデータをインポートする方法を説明します。
最新のTreasure Data Toolbeltをインストールしてください。
$ td --version
0.11.10以下の手順に従って、Dynamics 365 CRMへのアクセスを設定してください:
- アプリケーションを作成し、client_id、client_secretを取得します https://docs.microsoft.com/en-us/powerapps/developer/data-platform/use-single-tenant-server-server-authentication
- アプリケーションユーザー用のカスタムセキュリティロールを作成します。最小限の権限(目的のオブジェクトに対する読み取り権限のみ)を持つカスタムセキュリティロールを作成することを推奨します。詳細はこちらを参照してください: 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
- Dynamics 365インスタンスからアプリケーションユーザーを作成します。詳細はこちらを参照してください: https://docs.microsoft.com/en-us/power-platform/admin/create-users-assign-online-security-roles#create-an-application-user
- アプリケーションユーザーにカスタムロールを割り当てます
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を参照してください。
| Parameters | Value | Required | Description |
|---|---|---|---|
| type | string | yes | ms_dynamics |
| domain | string | yes | Dynamic 365 CRMドメイン。https://プレフィックスの有無は問いません |
| tenant_id | string | yes | MicrosoftアカウントのテナントID |
| auth_method | string | yes | client_credentials |
| client_id | string | yes | アプリケーションのクライアントID |
| client_secret | string | yes | アプリケーションのクライアントシークレット |
| entity_type | string | yes | インポートするエンティティタイプ。例: contact、account、quoteなど... |
| filter_from | string | yes | この値からデータをフィルタリングします |
| filter_to | string | no | この値までデータをフィルタリングします。設定されていない場合はデフォルトの実行時刻が使用されます |
| filter_column | string | no | データをフィルタリングする列。デフォルトはmodifiedon |
| incremental | boolean | no | 最後の実行以降の新しいデータのみをインポートします |
| skip_invalid | boolean | no | 列に無効なデータ形式が含まれている場合、そのレコードをスキップします |
| entity_set | string | no | エンティティセット名。通常はentity_typeの複数形です。例: contacts、accounts、quotesなど...この値が設定されていない場合、コネクタはAPIメタデータからentity_setを推測します |
| columns | array | no | インポートする列とそのデータタイプ。この値が設定されていない場合、コネクタはAPIメタデータから列とデータタイプを推測します |
| retry_limit | int | no | 各API呼び出しの最大リトライ回数 |
| retry_initial_wait_millis | int | no | 最初のリトライの待機時間(ミリ秒) |
| max_retry_wait_millis | int | no | API呼び出しを諦める前の最大待機時間 |
| connection_timeout_millis | int | no | API呼び出し時に接続がタイムアウトするまでの時間 |
| read_timeout_millis | int | no | リクエストにデータを書き込むまでの待機時間 |
connector:guessを使用します。このコマンドは上記のseed.ymlを読み取り、新しいファイルを出力します
$ td connector:guess seed.yml -o load.ymlload.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ロードジョブを送信します。データのサイズによっては数時間かかる場合があります。データを保存する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_atconnector: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-tabletimeというフィールドがある場合は、--time-columnオプションを指定する必要はありません。
td connector:issue load.yml --database td_sample_db --table td_sample_table新しいデータの増分インポートのために、定期的なData Connector実行をスケジュールできます。TDは高可用性を確保するためにスケジューラを慎重に設定しています。この機能を使用することで、ローカルデータセンターでcronデーモンを使用する必要がなくなります。
増分ロードの詳細については、About Incremental Loadingを参照してください
新しいスケジュールは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_atcronパラメータは、@hourly、@daily、@monthlyの3つの特別なオプションも受け付けます
デフォルトでは、スケジュールはUTCタイムゾーンで設定されます。-tまたは--timezoneオプションを使用して、タイムゾーンでスケジュールを設定できます。--timezoneオプションは、'Asia/Tokyo'や'America/Los Angeles'などの拡張タイムゾーン形式のみをサポートします。PSTやCSTなどのタイムゾーン略語は*サポートされておらず*、予期しないスケジュールになる可能性があります。
現在スケジュールされているエントリのリストは、td connector:listコマンドを実行することで確認できます。
td connector:listtd connector: スケジュールエントリの実行設定を表示します。
td connector:show daily_importtd connector:historyはスケジュールエントリの実行履歴を表示します。各実行の結果を調査するには、td job jobidを使用してください。
td connector:history daily_importtd connector:deleteはスケジュールを削除します。
$ td connector:delete daily_importseed.ymlセクションでファイルインポートモードを指定できます。
これはデフォルトのモードで、レコードはターゲットテーブルに追加されます。
in:
...
out:
mode: appendこのモードはターゲットテーブルのデータを置き換えます。ターゲットテーブルに対して手動で行われたスキーマ変更は、このモードでも保持されることに注意してください。
in:
...
out:
mode: replace