Skip to content
Last updated

SendGrid Import Integration

この機能はベータ版です。詳細については、カスタマーサクセス担当者にお問い合わせください。

SendGridは、ユーザーがメールサーバーを維持することなくメールを送信できるクラウドベースのSMTPプロバイダーです。このIntegrationにより、TDユーザーはSendGrid上で作成されたキャンペーンの応答イベントとパフォーマンスメトリクスを収集できます。また、コンタクト、シングルセンド、メッセージなどの他のマーケティングデータの収集も可能です。

前提条件

  • Treasure Dataの知識
  • SendGridの知識

要件と制限事項

SendGridのAPIキーが必要です。API Keyを参照してください。

Treasure Data Integration の静的 IP アドレス

セキュリティポリシーで IP ホワイトリストが必要な場合は、接続を成功させるために Treasure Data の IP アドレスを許可リストに追加する必要があります。

リージョンごとに整理された静的 IP アドレスの完全なリストは、次のリンクにあります: https://api-docs.treasuredata.com/en/overview/ip-addresses-integrations-result-workers/

TD Console経由でSendGridへの接続を確立する

Authenticationの作成

SendGridへの新しいAuthenticationを作成するには、次の手順に従います。

  1. Integrations HubからCatalogを開きます。

  2. CatalogでSendGridを検索します。

  3. Create Authenticationを選択します。API Keyを入力して、Authenticationを保存します。

SendGridからContactsをインポートする

SendGridからContactsをインポートするには、次の手順に従います。

AuthenticationからNew Sourceを作成する

  1. TD Consoleを開きます。
  2. Integrations Hub > Authenticationsに移動します。
  3. 新しいAuthenticationを見つけて、New Sourceを選択します。

Source Table Configuration - Contacts

Contactsのインポートジョブを設定するために、次の設定パラメータを定義します。

パラメータ説明
Typeインポートするデータのタイプ。Contactsを選択します。
Sub-typeインポートするデータのサブタイプ。ユーザーは次のいずれかを選択できます: - All Contacts: すべてのコンタクトをインポートします。 - Lists: リスト内のコンタクトのみを取得します。 - Segments: セグメント内のコンタクトを取得します。
List NameListsの場合のみ。フィルタリングするリストの名前を入力します。
Segment NameSegmentsの場合のみ。フィルタリングするセグメントの名前を入力します。
Max Wait TimeSendGridがデータファイルを生成するための最大待機時間(分単位)。

Nextを選択します。

Define Data Settings

Integrationは、SendGridによって定義された標準コンタクトスキーマのフィールドを表示します。

Nextを選択します。

データのプレビュー

SendGridは、コンタクトファイルの準備と生成のプロセスを処理します。タイムアウトを避けるために、Integrationはダミーデータのみを表示します。

データプレビューはオプションであり、必要に応じてNextをクリックしてダイアログの次のページに安全に進むことができます。

  1. Generate Previewを選択して、インポートを実行する前にデータのプレビューを表示します。

データプレビューに表示されるデータは、ソースから概算されたものです。インポートされる実際のデータではありません。

  1. データが期待どおりに見えることを確認します。

  2. Nextを選択します。

Data Placement

データの配置について、データを配置したいターゲット database と table を選択し、インポートを実行する頻度を指定します。

  1. Next を選択します。Storage の下で、インポートされたデータを配置する新しい database を作成するか、既存の database を選択し、新しい table を作成するか、既存の table を選択します。

  2. Database を選択 > Select an existing または Create New Database を選択します。

  3. オプションで、database 名を入力します。

  4. Table を選択 > Select an existing または Create New Table を選択します。

  5. オプションで、table 名を入力します。

  6. データをインポートする方法を選択します。

    • Append (デフォルト) - データインポートの結果は table に追加されます。 table が存在しない場合は作成されます。
    • Always Replace - 既存の table の全体の内容をクエリの結果出力で置き換えます。table が存在しない場合は、新しい table が作成されます。
    • Replace on New Data - 新しいデータがある場合のみ、既存の table の全体の内容をクエリの結果出力で置き換えます。
  7. Timestamp-based Partition Key 列を選択します。 デフォルトキーとは異なるパーティションキーシードを設定したい場合は、long または timestamp 列をパーティショニング時刻として指定できます。デフォルトの時刻列として、add_time フィルターで upload_time を使用します。

  8. データストレージの Timezone を選択します。

  9. Schedule の下で、このクエリを実行するタイミングと頻度を選択できます。

一度だけ実行

  1. Off を選択します。
  2. Scheduling Timezone を選択します。
  3. Create & Run Now を選択します。

定期的に繰り返す

  1. On を選択します。
  2. Schedule を選択します。UI では、@hourly@daily@monthly、またはカスタム cron の 4 つのオプションが提供されます。
  3. Delay Transfer を選択して、実行時間の遅延を追加することもできます。
  4. Scheduling Timezone を選択します。
  5. Create & Run Now を選択します。

転送が実行された後、Data Workbench > Databases で転送の結果を確認できます。

SendGridから統計情報をインポートする

SendGridから統計情報を取得するためのサンプル設定に従います

Source Table Configuration - Global Email Statistics

パラメータ説明
Typeインポートするデータのタイプ。Statisticを選択します。
Sub-typeインポートするデータのサブタイプ。ユーザーは次のいずれかを選択できます: Global Email Stats: 送信されたすべてのメールからの統計をインポートします。 SingleSend Stats: シングルセンド別の統計をインポートします。 Automation Stats: オートメーション別の統計をインポートします。
Start Date - End DateGlobal Email Statsの場合のみ利用可能。日付でフィルタリングします。Start Dateは必須です。
Aggregated byGlobal Email Statsの場合のみ利用可能。データの集計方法を定義します*(Day、Week、Month、None)*。
IncrementalGlobal Email Statsの場合のみ利用可能。繰り返し実行の場合、次の時間枠内のデータのみを検索します。

SendGridからSuppressionsをインポートする

SendGridからSuppressionsイベントを取得するためのサンプル設定に従います。Integrationは次をサポートします:

  • Bounces
  • Unsubscribes
  • Blocks
  • Spam Reports
  • Invalid

Source Table Configuration - Suppressions

パラメータ説明
Typeインポートするデータのタイプ。Suppressionsを選択します。
Start Time - End Time検索期間を定義します。Incrementalがオンの場合、Start Timeは必須です。
On behalf of(オプション)サブユーザーまたは顧客アカウントからデータを取得するために使用します。
Incremental繰り返し実行の場合、次の時間枠内のデータのみを検索します。

Data Schema - Suppressions

SendGridからのデータ定義はSuppressionタイプによって異なるため、以下はTDに取り込まれる際のデータスキーマです。

type;created;email;reason;status;ipblock;1714970265;testemail4@email.com;blockreason;blockstatus;nullinvalid;1714970265;testemail5@email.com;dummyreason;null;nullbounce;1714970265;testemail@email.com;550 Inconsistent;550;nullspam_report;1714970265;testemail2@email.com;null;null;192.168.1.1unsubscribe;1714970265;testemail3@email.com;null;null;null

SendGridからSingle SendsをインポートSingle

SendGridからSingle Sendsデータをインポートするには、次の手順に従います。

Source Table Configuration - Single Send

SendGridからMessage Dataをインポートする

SendGridからMessage Dataをインポートするには、次の手順に従います。

Source Table Configuration - Message Data

パラメータ説明
Typeインポートするデータのタイプ。Message Dataを選択します。
Queryクエリでフィルタリングします。クエリ構文を参照してください。

Workflow経由でSendGridからインポートする

WorkflowのTD_load>: operatorを使用して、SendGridからデータをインポートできます。すでにSOURCEを作成している場合は実行できます。作成したくない場合は、ymlファイルを使用してインポートできます。

Sourceを使用する

  1. Sourceを特定します。
  2. Unique IDを取得するには、SourceリストをSendGridでフィルタリングします。
  3. メニューを開き、Copy Unique IDを選択します。

  1. td_load > operatorを使用してWorkflowタスクを定義します。
+load:
  td_load>: unique_id_of_your_source
  database: ${td.dest_db}
  table: ${td.dest_table}
  1. Workflowを実行します。

Yamlファイルを使用する

  1. ymlファイルを特定します。ymlファイルを作成する必要がある場合は、参考としてAmazon S3 Import Integration Using CLIを確認してください。
  2. td_load > operatorを使用してWorkflowタスクを定義します。
+load:
  td_load>: config/daily_load.yml
  database: ${td.dest_db}
  table: ${td.dest_table}
  1. Workflowを実行します。

パラメータリファレンス

名前説明デフォルト値必須
typeIntegrationタイプsendgridsendgridYes
api_key接続用のAPIキーN/AN/AYes
data_type取得するデータタイプstatistic suppressions contacts message_data single_sendsstatisticYes
sub_type_statistic統計のサブタイプglobal_email_stats single_send_stats automation_statsglobal_email_statsNo
sub_type_contactsコンタクトのサブタイプall_contacts lists segmentsall_contactsNo
start_dateall_contactsの開始日Stringincremental_statisticsがtrueの場合のみ必須
end_dateall_contactsの終了日StringNo
aggregated_byall_contactsの集計方法day week month yeardayNo
incremental_statisticsall_contactsの増分モードtrue falsetrueNo
start_timedata_type suppressionsの開始時刻​ StringNo
end_timedata_type suppressionsの終了時刻StringNo
incremental_suppressionssuppressionsの増分モードtrue falsetrueNo
on_behalf_ofサブユーザーまたは顧客アカウントからデータを取得するために使用します。StringNo
sub_type_contactsコンタクトのサブタイプall_contacts lists segmentsall_contactsNo
list_nameコンタクトのリストの名前カンマで区切られた文字列のリストsub_type_contacts がlistsの場合は必須
segment_nameコンタクトのセグメントの名前カンマで区切られた文字列のリストsub_type_contacts がsegmentsの場合は必須
max_wait_timeコンタクトをエクスポートするための最大待機時間(分単位)Integer5No
querymessage_dataのクエリStringNo
maximum_retries最大リトライ回数Integer5No
initial_retry_interval_millis初回リトライ待機時間(ミリ秒単位)Integer500No
maximum_retry_interval_millis最大リトライ待機時間(ミリ秒単位)Integer30000No
columnsカラム定義JsonYes

サンプルWorkflowコード

サンプルWorkflowコードについては、Treasure Boxesを参照してください。

CLI(Toolbelt)経由でSendGridからインポートする

Integrationを設定する前に、最新のTD Toolbeltをインストールしてください。

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

in:
 type: sendgrid
 api_key: XXXXXXXXXX
 data_type: contacts
 sub_type_statistic: global_emal_stats
 sub_type_contacts: list
 start_time: '2023-01-19-T00:51:29.937Z'
 end_time: '2023-01-19-T00:51:29.937Z'
 start_date: '2023-01-01'
 end_date: '2023-01-01'
 aggregated_by: day
 query: to_email="dumy@gmail.com"
 list_name: 'abc,def'
 segment_name: 'abc,def'
 incremental_statistic: true
 incremental_suppressions: true
 max_wait_time: 5
 on_behalf_of: xxx
 initial_retry_interval_millis: 500
 maximum_retries: 5
 maximum_retry_interval_millis: 30000
out:
  mode: append

パラメータリファレンス

名前説明デフォルト値必須
typeIntegrationタイプsendgridsendgridYes
api_key接続用のAPIキーN/AN/AYes
data_type取得するデータタイプstatistic suppressions contacts message_data single_sendsstatisticYes
sub_type_statistic統計のサブタイプglobal_email_stats single_send_stats automation_statsglobal_email_statsNo
sub_type_contactsコンタクトのサブタイプall_contacts lists segmentsall_contactsNo
start_dateall_contactsの開始日Stringincremental_statisticsがtrueの場合のみ必須
end_dateall_contactsの終了日StringNo
aggregated_byall_contactsの集計方法day week month yeardayNo
incremental_statisticsall_contactsの増分モードtrue falsetrueNo
start_timedata_type suppressionsの開始時刻StringNo
end_timedata_type suppressionsの終了時刻StringNo
incremental_suppressionssuppressionsの増分モードtrue falsetrueNo
on_behalf_ofサブユーザーまたは顧客アカウントからデータを取得するために使用します。StringNo
sub_type_contactsコンタクトのサブタイプall_contacts lists segmentsall_contactsNo
list_nameコンタクトのリストの名前カンマで区切られた文字列のリストsub_type_contacts がlistsの場合は必須
segment_nameコンタクトのセグメントの名前カンマで区切られた文字列のリストsub_type_contacts がsegmentsの場合は必須
max_wait_timeコンタクトをエクスポートするための最大待機時間(分単位)Integer5No
querymessage_dataのクエリStringNo
maximum_retries最大リトライ回数Integer5No
initial_retry_interval_millis初回リトライ待機時間(ミリ秒単位)Integer500No
maximum_retry_interval_millis最大リトライ待機時間(ミリ秒単位)Integer30000No

Data Integrationは、指定されたprefixに一致するすべてのファイルをインポートします。

path_prefix: path/to/sample_ –> path/to/sample_201501.csv.gz, path/to/sample_201502.csv.gz, …, path/to/sample_201505.csv.gz

load.ymlの生成

connector:guessを使用します。このコマンドは自動的にソースファイルを読み取り、ロジックを使用してファイル形式とそのフィールド/カラムを推測します。

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

load.ymlを開いて、ファイル形式、エンコーディング、カラム名、タイプの定義を確認できます。

in:
  type: sendgrid
  api_key: XXXXXXXXXX
  data_type: contacts
  sub_type_statistic: global_emal_stats
  sub_type_contacts: list
  start_time: '2023-01-19-T00:51:29.937Z'
  end_time: '2023-01-19-T00:51:29.937Z'
  start_date: '2023-01-01'
  end_date: '2023-01-01'
  aggregated_by: day
  query: to_email="dumy@gmail.com"
  list_name: 'abc,def'
  segment_name: 'abc,def'
  incremental_statistic: true
  incremental_suppressions: true
  max_wait_time: 5
  on_behalf_of: xxx
  initial_retry_interval_millis: 500
  maximum_retries: 5
  maximum_retry_interval_millis: 30000
  columns:
    - {name: email, type: string}
    - {name: first_name, type: string}
    - {name: last_name, type: string}
    - {name: created_at, type: timestamp, format: '%Y-%m-%dT%H:%M:%S%z'}
    - {name: date, type: timestamp, format: '%Y-%m-%d'}

  out:
    mode: append

データをプレビューするには、td connector:previewコマンドを使用します。

$ td connector:preview load.yml

guessコマンドは、ソースデータファイル内に3行以上と2列以上が必要です。これは、コマンドがソースデータのサンプル行を使用してカラム定義を評価するためです。

システムがカラム名またはカラムタイプを予期せず検出した場合は、load.ymlファイルを変更して再度プレビューしてください。

Load Jobの実行

  1. load jobを送信します。

データサイズによっては数時間かかる場合があります。データを保存するTreasure DataのDatabaseとTableを必ず指定してください。

Treasure Dataのストレージは時間によってパーティション化されているため(data partitioningを参照)、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   --time-column created_at

connector:issueコマンドは、database(td_sample_db)table(td_sample_table)がすでに作成されていることを前提としています。DatabaseまたはTableがTDに存在しない場合、このコマンドは失敗します。DatabaseとTableを手動で作成するか、td connector:issueコマンドで--auto-create-tableオプションを使用してDatabaseとTableを自動作成してください。

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

data connectorはサーバー側でレコードをソートしません。時間ベースのパーティション化を効果的に使用するには、事前にファイル内のレコードをソートしてください。

timeという名前のフィールドがある場合は、--time-columnオプションを指定する必要はありません。

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

Import Modes

load.ymlファイルのoutセクションでファイルインポートモードを指定できます。out:セクションは、データがTreasure DataのTableにインポートされる方法を制御します。例えば、データを追加したり、Treasure Data内の既存のTableのデータを置き換えたりすることができます。

Mode説明
AppendレコードはターゲットTableに追加されます。in: ... out: mode: append
Always ReplaceターゲットTableのデータを置き換えます。 ターゲットTableに対して行われた手動のスキーマ変更はそのまま残ります。in: ... out: mode: replace
Replace on new dataインポートする新しいデータがある場合にのみ、ターゲットTableのデータを置き換えます。in: ... out: mode: replace_on_new_data

実行のスケジューリング

増分ファイルインポートのために、定期的なData Integration実行をスケジュールできます。Treasure Dataは、高可用性を確保するためにスケジューラを慎重に設定しています。

スケジュールされたインポートでは、指定されたprefixに一致し、条件により次のフィールドのいずれかに該当するすべてのファイルをインポートできます:

  • use_modified_timeが無効になっている場合、最後のパスが次の実行のために保存されます。Integrationは、2回目以降の実行では、アルファベット順で最後のパス以降のファイルのみをインポートします。
  • それ以外の場合、ジョブの実行時間が次の実行のために保存されます。2回目以降の実行では、Integrationはその実行時間以降に変更されたファイルのみをアルファベット順でインポートします。

TD Toolbeltを使用したスケジュールの作成

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

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

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

$ 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などのタイムゾーンの略語はサポートされておらず、予期しないスケジュールにつながる可能性があります。

関連記事

SendGrid Export Integration - SendGrid Output

外部参照

SendGrid API - API Reference