> ## 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.

# MotherDuck

> MotherDuckからOneSignalにカスタムイベントを同期して、ユーザーの行動に基づいた自動化されたJourneysとパーソナライズされたメッセージングキャンペーンをトリガーします。

export const PLATFORM_0 = "MotherDuck"

export const DATA_TYPE_0 = "テーブル列"

export const COLUMN_HEADER_0 = "MotherDuck列"

export const PROPERTIES_DESCRIPTION_0 = "イベントメタデータを含むJSONオブジェクト"

## 概要

OneSignal + MotherDuck統合により、MotherDuckデータベースからOneSignalへのカスタムイベントの自動同期が可能になり、ユーザーの行動に基づいた自動化されたメッセージングキャンペーンとJourneysをトリガーできます。

MotherDuckは、SQLのシンプルさで高速OLAP（オンライン分析処理）機能を提供するDuckDB-in-the-cloudサービスです。

***

## 要件

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

### MotherDuck

* データベースアクセス権を持つ**MotherDuckアカウント**
* 認証用の**サービストークン**
* イベントデータを含む**データベース**
* 構造化されたイベント情報を持つ**テーブルまたはビュー**

***

## セットアップ

<Steps>
  <Step title="MotherDuckサービストークンを作成する">
    OneSignalがMotherDuckに接続するためのアクセストークンを生成します：

    1. `app.motherduck.com`でMotherDuck Web UIにログインします
    2. 左上のプロフィールをクリックします
    3. **Settings** > **General** > **Access Tokens**に移動します
    4. **Create Token**をクリックします
    5. 有効期限を設定します（または無制限のままにします）
    6. 生成されたサービストークンをコピーします
  </Step>

  <Step title="イベントデータを準備する">
    MotherDuckデータベースに適切に構造化されたイベントテーブルが含まれていることを確認します：

    ```sql theme={null}
    -- Example event table structure
    CREATE TABLE user_events (
        event_name VARCHAR,
        user_id VARCHAR,
        event_timestamp TIMESTAMP,
        event_properties JSON,
        session_id VARCHAR
    );
    ```
  </Step>

  <Step title="OneSignalに接続する">
    OneSignalで、**Data > Integrations**に移動し、**Add Integration**をクリックします。

    **MotherDuck**を選択し、次を提供します：

    * **Service Token:** ステップ1のトークン
    * **Database Name:** MotherDuckデータベース名
    * **Connection String:** `md:your_database_name`
  </Step>

  <Step title="データ同期を構成する">
    テーブルを選択するか、カスタムSQLクエリを記述して、同期するイベントデータを定義します：

    ```sql theme={null}
    SELECT
        event_name,
        user_id,
        event_timestamp,
        event_properties
    FROM user_events
    WHERE event_timestamp >= CURRENT_DATE - INTERVAL 7 DAYS
    ```
  </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} | いいえ |

### イベントクエリの例

```sql theme={null}
-- Optimized event query for OneSignal sync
SELECT
    event_name,
    user_id,
    event_timestamp,
    {
        'source': 'motherduck',
        'session_id': session_id,
        'device_type': device_type,
        'value': event_value
    }::JSON as event_properties
FROM analytics.user_events
WHERE event_timestamp >= CURRENT_TIMESTAMP - INTERVAL 1 DAY
ORDER BY event_timestamp DESC
```

***

## 処理モード

### テーブルモード

MotherDuckデータベースから直接テーブル全体を同期します。OneSignalは自動的に列をイベントフィールドにマッピングします。

### SQLクエリモード

カスタムDuckDB SQLクエリを記述して、イベントデータを変換およびフィルタリングします：

```sql theme={null}
-- Advanced event aggregation
SELECT
    'daily_summary' as event_name,
    user_id,
    DATE_TRUNC('day', event_timestamp) as event_timestamp,
    {
        'total_events': COUNT(*),
        'unique_sessions': COUNT(DISTINCT session_id),
        'last_activity': MAX(event_timestamp)
    }::JSON as event_properties
FROM user_events
WHERE event_timestamp >= CURRENT_DATE - INTERVAL 7 DAYS
GROUP BY user_id, DATE_TRUNC('day', event_timestamp)
```

***

## 制限事項

* クエリの複雑さが同期パフォーマンスに影響します
* 大きな結果セットが同期速度に影響する可能性があります
* JSON解析には適切な列の型指定が必要です

***

## FAQ

### MotherDuckでクエリパフォーマンスを最適化するにはどうすればよいですか？

必要な列のみを選択し、クエリの早い段階でフィルタを適用することで、DuckDBの列指向ストレージの利点を活用します。

### 複数のMotherDuckデータベースから同期できますか？

はい、アカウント内の各MotherDuckデータベースに対して個別の統合を作成できます。

***
