> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Databricks

> OneSignalメッセージイベントをDatabricksにエクスポートし、Databricks行動イベントをOneSignalにインポートして、Journeysをトリガーしメッセージをパーソナライズします。

export const PLATFORM_0 = "Databricks"

export const DATA_TYPE_0 = "event table columns"

export const COLUMN_HEADER_0 = "Databricks Column"

export const PROPERTIES_DESCRIPTION_0 = "Additional columns as JSON"

## 概要

OneSignal + Databricks統合は**2つのフロー**をサポートしています：

* **エクスポート**：分析とレポート用にOneSignalメッセージイベントをDatabricksに送信します。
* **インポート**：Journeysをトリガーしキャンペーンをパーソナライズするために、DatabricksからOneSignalにカスタムイベントを送信します。

<Info> エクスポートとインポートは別々に構成されます。どちらか一方のみを設定できます。 </Info>

***

## OneSignalメッセージイベントをDatabricksにエクスポート

ほぼリアルタイムの分析と可視性のために、OneSignalからDatabricksレイクハウスにすべてのメッセージイベントを同期します。

**要件**

* [Professionalプラン以上](https://onesignal.com/pricing)
* カスタムイベントが有効（イベントインポート用）
* Databricksプラットフォーム：AWS、Azure、またはGCP
* Databricksプラン：Premium以上
* Databricks Unity Catalog（ガバナンスに推奨）
* クエリ用のDatabricks SQL Warehouse
* Delta Lakeイベントテーブル（カスタムイベントインポート用）

**セットアップ手順**

### 1. SQL Warehouseの詳細を収集

<Steps>
  <Step title="Databricksワークスペースにログイン">
    Databricksワークスペースの**SQL Warehouses**に移動します。
  </Step>

  <Step title="Warehouseを選択">
    Warehouseを選択し、**Connection details**タブを開きます。
  </Step>

  <Step title="次の詳細を保存">
    * Server Hostname
    * Port
    * HTTP Path

    <Frame caption="Fivetranセットアップ用のDatabricks SQL接続詳細">
      <img src="https://mintcdn.com/onesignal/tNi1OgLc_p9hiq7_/images/docs/1ce7c549df4a383336633d9f258bec12107a895dc9467134d672c12c2c85923f-cluster-databricks.png?fit=max&auto=format&n=tNi1OgLc_p9hiq7_&q=85&s=1f03dbaa1a6cc6c4bdf804e49755cbf7" alt="Fivetranセットアップ用のDatabricks SQL接続詳細" width="1810" height="988" data-path="images/docs/1ce7c549df4a383336633d9f258bec12107a895dc9467134d672c12c2c85923f-cluster-databricks.png" />
    </Frame>
  </Step>
</Steps>

### 2. サービスプリンシパルの作成

<Steps>
  <Step title="Service Principalsページに移動">
    **Workspace Settings > Identity and Access > Service Principals**に移動します。
  </Step>

  <Step title="新しいサービスプリンシパルを追加">
    **Add Service Principal**をクリックし、次に**Add New**をクリックします。
  </Step>

  <Step title="サービスプリンシパルに名前を付ける">
    名前を付けます（例：`onesignal-sync`）。

    <Frame caption="サービスプリンシパルを追加するためのモーダル。「Add new」オプションがハイライトされています">
      <img src="https://mintcdn.com/onesignal/56ctKxZSV4m5VEkn/images/docs/b8eeb211ceb77247f711eb312d3d68d1cb0da10788fd81fd37ae27e929e35cde-Screenshot_2025-04-01_at_9.16.12_PM.png?fit=max&auto=format&n=56ctKxZSV4m5VEkn&q=85&s=3bda750f12db717d630220bed24cdb2e" alt="サービスプリンシパルを追加するためのモーダル。「Add new」オプションがハイライトされています" width="932" height="392" data-path="images/docs/b8eeb211ceb77247f711eb312d3d68d1cb0da10788fd81fd37ae27e929e35cde-Screenshot_2025-04-01_at_9.16.12_PM.png" />
    </Frame>
  </Step>
</Steps>

### 3. シークレットの生成

<Steps>
  <Step title="作成されたプリンシパルをクリック" />

  <Step title="Secretsタブに移動" />

  <Step title="シークレットを生成">
    **Generate Secret**をクリックして安全に保存します。

    <Warning>
      シークレットは一度だけ表示されます。安全に保管してください。
    </Warning>

    <Frame caption="API認証用のOAuthシークレットとクライアントIDを表示するDatabricks「Generate secret」モーダル">
      <img src="https://mintcdn.com/onesignal/KSCNwSpBCNSQ8xdF/images/docs/ff24d4d5bf9b21e0cadf67055f1e1a5a4b517b82e9c006520a02b4fd404d259e-Screenshot_2025-03-28_at_4.14.17_PM.png?fit=max&auto=format&n=KSCNwSpBCNSQ8xdF&q=85&s=54eaae1d695bfad59b726ba005ff6f1f" alt="API認証用のOAuthシークレットとクライアントIDを表示するDatabricks「Generate secret」モーダル" width="746" height="368" data-path="images/docs/ff24d4d5bf9b21e0cadf67055f1e1a5a4b517b82e9c006520a02b4fd404d259e-Screenshot_2025-03-28_at_4.14.17_PM.png" />
    </Frame>
  </Step>
</Steps>

### 4. 権限の割り当て

<Steps>
  <Step title="Catalogに移動してPermissionsタブを開く" />

  <Step title="Grantをクリック" />

  <Step title="サービスプリンシパルに次の権限を割り当てる">
    * USE CATALOG
    * USE SCHEMA
    * SELECT
    * MODIFY
    * CREATE SCHEMA
    * CREATE TABLE

    <Frame caption="カスタムカタログ権限が選択されたDatabricksプリンシパルの権限割り当て画面">
      <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5755c8739fd66a0f35fec57b817d54d202c64ae95bf8219645ba76abdc8fbe0b-Screenshot_2025-04-01_at_9.19.14_PM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=0964053615467ebd7372edd7beaf33fe" alt="カスタムカタログ権限が選択されたDatabricksプリンシパルの権限割り当て画面" width="1034" height="812" data-path="images/docs/5755c8739fd66a0f35fec57b817d54d202c64ae95bf8219645ba76abdc8fbe0b-Screenshot_2025-04-01_at_9.19.14_PM.png" />
    </Frame>
  </Step>
</Steps>

### 5. OneSignalを接続

<Steps>
  <Step title="統合をアクティブ化">
    OneSignalで、**Data > Integrations > Databricks**に移動します。
  </Step>

  <Step title="詳細を入力">
    * Server Hostname
    * Port
    * HTTP Path
    * Catalog Name
    * Schema Name
    * Service Principal認証情報（ID + Secret）

    <Frame caption="カタログ、ホスト名、HTTPパス、およびOAuth認証情報のフィールドを持つOneSignal Databricks構成フォーム">
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/816a07ed459d3d19910630da0cb52b2075c06d6eaf85af98e969703edab88ad5-Screenshot_2025-03-28_at_4.12.07_PM.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=cd7ba1d76deff9922dc44b25a7528eb2" alt="カタログ、ホスト名、HTTPパス、およびOAuth認証情報のフィールドを持つOneSignal Databricks構成フォーム" width="718" height="796" data-path="images/docs/816a07ed459d3d19910630da0cb52b2075c06d6eaf85af98e969703edab88ad5-Screenshot_2025-03-28_at_4.12.07_PM.png" />
    </Frame>
  </Step>

  <Step title="統合を構成">
    * **Sync Frequency：** 15分ごとの頻度
    * **Dataset/Table Names：** `onesignal_events_<app-id>`および`message_events`として事前設定（編集可能）
    * **Event Types：** 同期するイベントを選択 - すべてまたは必要なものだけを選択
  </Step>

  <Step title="イベントを選択">
    Databricksカタログで受信したいイベントを選択します。

    <Frame caption="同期ステータス、データセット構成、および選択されたメッセージイベントタイプを表示するOneSignalイベントエクスポート設定画面">
      <img src="https://mintcdn.com/onesignal/tNi1OgLc_p9hiq7_/images/docs/1a5ff2af7dc8fc42a91ce70583a03b361fd8a343bc57fd3123f26a5d21dabbf8-Screenshot_2025-04-09_at_11.56.58_AM.png?fit=max&auto=format&n=tNi1OgLc_p9hiq7_&q=85&s=ce7eee0983e2026b1847a4d2a45cbe96" alt="同期ステータス、データセット構成、および選択されたメッセージイベントタイプを表示するOneSignalイベントエクスポート設定画面" width="2738" height="1254" data-path="images/docs/1a5ff2af7dc8fc42a91ce70583a03b361fd8a343bc57fd3123f26a5d21dabbf8-Screenshot_2025-04-09_at_11.56.58_AM.png" />
    </Frame>
  </Step>

  <Step title="セットアップを完了">
    **Save**をクリックして、成功確認を待ちます
  </Step>
</Steps>

<Note>
  初期データ同期がBigQueryに表示されるまでに15〜30分かかる場合があります。

  待っている間、プッシュ、メール、アプリ内、またはSMSを介してメッセージを送信して、選択したイベントをトリガーします。
</Note>

### 6. Databricksでデータを表示

1. Databricksで**Catalog**を開きます。

2. 同期が完了すると、構成されたスキーマが表示されます。

3. `message_events`テーブルにアクセスしてクエリします。

   <Frame caption="プロダクションスキーマの下にOneSignalメッセージイベントテーブルを表示するDatabricks Catalogビュー">
     <img src="https://mintcdn.com/onesignal/tNi1OgLc_p9hiq7_/images/docs/1b59f6eff2070490f194df8a7496fab6cf17f8fc9355cfb7b77c7c076799632e-Screenshot_2025-04-01_at_9.22.01_PM.png?fit=max&auto=format&n=tNi1OgLc_p9hiq7_&q=85&s=c5908557481f292b1a659b4f0ef210ed" alt="プロダクションスキーマの下にOneSignalメッセージイベントテーブルを表示するDatabricks Catalogビュー" width="854" height="618" data-path="images/docs/1b59f6eff2070490f194df8a7496fab6cf17f8fc9355cfb7b77c7c076799632e-Screenshot_2025-04-01_at_9.22.01_PM.png" />
   </Frame>

4. テーブルをクリックしてサンプルデータのプレビューを表示します。

   <Frame caption="同期されたOneSignalイベントフィールドを持つmessage_events_1テーブルのサンプルデータ">
     <img src="https://mintcdn.com/onesignal/6v_cVPknFpo5qSVB/images/docs/112f17e471b8e29173429bfbbd4b34fb68923c9f76faa55b06161114249fcaab-Screenshot_2025-04-01_at_9.22.08_PM.png?fit=max&auto=format&n=6v_cVPknFpo5qSVB&q=85&s=a853fe144d238a24d86b5f989261f2be" alt="同期されたOneSignalイベントフィールドを持つmessage_events_1テーブルのサンプルデータ" width="1196" height="374" data-path="images/docs/112f17e471b8e29173429bfbbd4b34fb68923c9f76faa55b06161114249fcaab-Screenshot_2025-04-01_at_9.22.08_PM.png" />
   </Frame>

<Info>
  スキーマの欠落、権限エラー、または不正な形式のイベントなどの問題が発生した場合は、`support@onesignal.com`にお問い合わせください。
</Info>

## メッセージイベントとプロパティ

### メッセージイベントの種類

**プロパティ：** `event_kind`
**タイプ：** `String`

メッセージとイベントの種類（例：`message.push.received`、`message.push.sent`）。

|  メッセージイベント（OneSignal）  |           `event_kind`           | 説明                                                                             |
| :--------------------: | :------------------------------: | ------------------------------------------------------------------------------ |
|        Push Sent       |        `message.push.sent`       | プッシュ通知が正常に送信されました。                                                             |
|      Push Received     |      `message.push.received`     | 配信されたプッシュ（[Confirmed receipt](/docs/ja/confirmed-delivery)を参照）。                |
|      Push Clicked      |      `message.push.clicked`      | ユーザーがプッシュをクリックしました。                                                            |
|       Push Failed      |       `message.push.failed`      | 配信失敗。メッセージレポートを参照してください。                                                       |
|    Push Unsubscribed   |    `message.push.unsubscribed`   | ユーザーがプッシュからサブスクライブ解除しました。                                                      |
|    In-App Impression   |     `message.iam.impression`     | アプリ内メッセージが表示されました。                                                             |
|     In-App Clicked     |       `message.iam.clicked`      | アプリ内メッセージがクリックされました。                                                           |
|   In-App Page Viewed   |   `message.iam.page_displayed`   | アプリ内ページが表示されました。                                                               |
|       Email Sent       |       `message.email.sent`       | メールが配信されました。                                                                   |
|     Email Received     |     `message.email.received`     | 受信者のメールサーバーでメールが受け入れられました。                                                     |
|      Email Opened      |      `message.email.opened`      | メールが開かれました。[Email Reports](/docs/ja/email-message-reports)を参照してください。           |
|   Email Link Clicked   |      `message.email.clicked`     | メール内のリンクがクリックされました。                                                            |
|   Email Unsubscribed   |   `message.email.unsubscribed`   | 受信者がサブスクライブ解除しました。                                                             |
| Email Reported As Spam | `message.email.reported_as_spam` | スパムとしてマークされました。[Email Deliverability](/docs/ja/email-deliverability)を参照してください。 |
|      Email Bounced     |      `message.email.bounced`     | 永続的な配信失敗によるバウンス。                                                               |
|      Email Failed      |      `message.email.failed`      | 配信が失敗しました。                                                                     |
|    Email Suppressed    |    `message.email.suppressed`    | 抑制リストにより抑制されました。                                                               |
|        SMS Sent        |        `message.sms.sent`        | SMSが送信されました。                                                                   |
|      SMS Delivered     |      `message.sms.delivered`     | SMSが正常に配信されました。                                                                |
|       SMS Failed       |       `message.sms.failed`       | SMSの配信に失敗しました。                                                                 |
|     SMS Undelivered    |     `message.sms.undelivered`    | SMSが拒否されたか到達不可能です。                                                             |

### イベントデータスキーマ

ユーザーが生成する各メッセージイベントには、以下のメタデータがレコードに添付されます。

|                        列名                       |    タイプ    | 説明                                   |
| :---------------------------------------------: | :-------: | ------------------------------------ |
|                    `event_id`                   |    UUID   | イベントの一意の識別子                          |
|                `event_timestamp`                | Timestamp | イベント発生時刻                             |
|                   `event_kind`                  |   String  | [イベントの種類](#message-event-kinds)      |
|            `subscription_device_type`           |   String  | デバイスタイプ（例：iOS、Android、Web、Email、SMS） |
|                    `language`                   |   String  | サブスクリプションの言語コード                      |
|                    `version`                    |   String  | 統合バージョン                              |
|                   `device_os`                   |   String  | デバイスのオペレーティングシステムバージョン               |
|                  `device_type`                  |   Number  | 数値デバイスタイプ                            |
|                     `token`                     |   String  | プッシュトークン、電話番号、またはメール                 |
|                `subscription_id`                |    UUID   | Subscription ID                      |
|                   `subscribed`                  |  Boolean  | サブスクリプションステータス                       |
|                  `onesignal_id`                 |    UUID   | OneSignalユーザーID                      |
|                  `last_active`                  |   String  | 最終アクティブタイムスタンプ                       |
|                      `sdk`                      |   String  | OneSignal SDKバージョン                   |
|                  `external_id`                  |   String  | 統合ユーザーIDと一致する必要がある外部ユーザーID           |
|                     `app_id`                    |    UUID   | OneSignalからのApp ID                   |
|                  `template_id`                  |    UUID   | Template ID（該当する場合）                  |
|                   `message_id`                  |    UUID   | メッセージバッチ/リクエストID                     |
|                  `message_name`                 |   String  | メッセージの名前                             |
|                 `message_title`                 |   String  | メッセージタイトル（英語のみ）                      |
|                `message_contents`               |   String  | 切り捨てられたメッセージ本文（英語のみ）                 |
|                 `failure_reason`                |   String  | 失敗理由（プッシュ失敗およびメール失敗イベント用）            |
| `_created`, `_id`, `_index`, `_fivetran_synced` |   *内部使用*  | Fivetran同期メタデータ                      |

### 注意事項

* 保存/アクティブ化後の同期は、完了までにさらに15〜30分かかる場合があります。
* 非アクティブ化しても、非アクティブ化後に最終同期が1回行われる場合があります。
* 効率的なデータ同期を確保するために、システムは自動的にステージングデータセットを作成および管理します。これらのデータセットは、`fivetran_{2つのランダムな単語}_staging`のようなパターンで命名され、メインスキーマに統合される前の処理中にデータを一時的に保存します。これらのステージングデータセットは、合理化されたワークフローを維持するために不可欠であり、削除しないでください。自動的に再作成されます。

***

## Databricksからイベントをインポート

Databricksから行動イベントデータをOneSignalに送信して：

* ユーザーアクティビティに基づいてJourneysをトリガー
* 行動データに基づいてメッセージングをパーソナライズ

**要件**

* アウトバウンドメッセージイベント用の[Event Streams](/docs/ja/event-streams)へのアクセス（プランの制限と超過料金が適用されます）
* インバウンドイベント同期用の[Custom Events](/docs/ja/custom-events)へのアクセス（プランの制限と超過料金が適用されます）
* [更新されたアカウントプラン](https://onesignal.com/pricing)（無料アプリでは利用できません）

- SQL Warehouseまたはコンピュートクラスターを持つDatabricks**ワークスペース**
- 適切な権限を持つ**Personal Access Token**
- Delta Lake形式で行動データを含む**イベントデータテーブル**
- **Unity Catalog**（データガバナンスに推奨）

**セットアップ手順**

<Steps>
  <Step title="Databricks Personal Access Tokenを作成">
    OneSignalがDatabricksワークスペースにアクセスするためのPersonal Access Tokenを生成します：

    1. Databricksワークスペースの**User Settings**に移動します
    2. **Developer**タブをクリックし、次に**Access tokens**をクリックします
    3. **Generate new token**をクリックします
    4. 「OneSignal Integration」のようなコメントを入力し、有効期限を設定します（90日を推奨）
    5. 生成されたトークンを保存します（OneSignalに必要です）
  </Step>

  <Step title="SQL Warehouseアクセスを構成">
    OneSignalがSQL Warehouse経由でイベントデータをクエリできることを確認します：

    1. Databricksワークスペースの**SQL Warehouses**に移動します
    2. OneSignalアクセス用のSQL Warehouseを選択または作成します
    3. 接続詳細から**Server Hostname**と**HTTP Path**をメモします
    4. Warehouseがイベントデータテーブルにアクセスできることを確認します
  </Step>

  <Step title="テーブル権限を付与">
    イベントデータを含むテーブルへのOneSignal読み取りアクセスを付与します：

    ```sql theme={null}
    -- Unity Catalogが有効なワークスペースの場合
    GRANT SELECT ON TABLE catalog.schema.event_table TO `onesignal@yourdomain.com`;

    -- Hive metastoreテーブルの場合
    GRANT SELECT ON TABLE database.event_table TO `onesignal@yourdomain.com`;
    ```
  </Step>

  <Step title="OneSignalに統合を追加">
    OneSignalで、**Data > Integrations**に移動し、**Add Integration**をクリックします。

    **Databricks**を選択して次を提供します：

    * **Server Hostname**：Databricks SQL Warehouseホスト名
    * **HTTP Path**：SQL Warehouse HTTPパス
    * **Personal Access Token**：ステップ1で作成したトークン
    * **Catalog**（オプション）：Unity Catalogを使用している場合はUnity Catalog名
  </Step>

  <Step title="イベントデータソースを構成">
    イベントデータを含むDatabricksテーブルを指定します：

    * **Database/Schema**：イベントテーブルを含むデータベースまたはスキーマ名
    * **Table**：イベントレコードを含むテーブル名（例：`user_events`）
    * **Event Query**：イベントデータをフィルタリングまたは変換するオプションのSQLクエリ

    イベントテーブルには次の列が含まれている必要があります：

    * イベント名/タイプ（String）
    * ユーザー識別子（String）
    * イベントタイムスタンプ（Timestamp）
    * 追加のイベントプロパティ
  </Step>

  <Step title="接続をテスト">
    **Test Connection**をクリックして、OneSignalがDatabricksワークスペースにアクセスしてイベントデータを読み取れることを確認します。
  </Step>
</Steps>

### イベントデータマッピング

{PLATFORM_0} {DATA_TYPE_0}をOneSignalのカスタムイベント形式にマッピングします：

| OneSignalフィールド | {COLUMN_HEADER_0} | 説明                         | 必須  |
| -------------- | ----------------- | -------------------------- | --- |
| `name`         | `event_name`      | イベント識別子                    | はい  |
| `external_id`  | `user_id`         | ユーザー識別子                    | はい  |
| `timestamp`    | `event_timestamp` | イベントが発生した時刻                | いいえ |
| `properties`   | `event_data`      | {PROPERTIES_DESCRIPTION_0} | いいえ |

### 高度な構成

#### Unity Catalog統合

ガバナンスされたデータアクセスのためにUnity Catalogを活用します：

```sql theme={null}
SELECT
  event_name,
  user_id,
  event_timestamp,
  to_json(
    named_struct(
      'product_id', product_id,
      'purchase_amount', purchase_amount,
      'category', category
    )
  ) as payload
FROM catalog.schema.user_events
WHERE event_timestamp >= current_timestamp() - INTERVAL 7 DAYS
```

### Delta Lakeの最適化

より良いクエリパフォーマンスのためにイベントテーブルを最適化します：

* **パーティショニング**：より高速な時間ベースのクエリのために日付（`event_date`）でパーティション分割
* **Z-Ordering**：より良いフィルタリングのために`user_id`と`event_name`でZ-order
* **Delta Lake機能**：自動最適化のためにliquid clusteringを使用

#### ストリーミングイベント処理

リアルタイムイベント処理については、次を検討してください：

* **Structured Streaming**：イベントが到着したときに処理
* **Delta Live Tables**：堅牢なイベント処理パイプラインを構築
* **Auto Loader**：新しいイベントファイルを継続的に取り込む

<Warning>
  SQL Warehouseが、他のワークロードに影響を与えることなくOneSignalのクエリを処理するのに十分なコンピュートリソースを持っていることを確認してください。
</Warning>

***

## FAQ

### 同じコンテンツで異なるメッセージIDが表示されるのはなぜですか？

これは、同じメッセージが複数回送信された場合に発生します。おそらくトランザクションフローまたは複数の送信で再利用されるメッセージテンプレート経由です。

### OneSignalはDatabricksからイベントをどのくらいの頻度で同期しますか？

OneSignalは、最小間隔15分で構成されたスケジュールに基づいてイベントデータを同期します。

### イベント処理にDatabricksノートブックを使用できますか？

はい、ノートブックを使用してイベントデータを処理および準備し、OneSignalがクエリできるテーブル経由で公開できます。

### イベントクエリのコスト最適化はどうですか？

クエリ負荷に基づいて自動的にスケーリングする費用対効果の高いオンデマンドコンピュート用のサーバーレスSQL Warehouseの使用を検討してください。

***
