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

# Materialize

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

export const PLATFORM_0 = "Materialize"

export const DATA_TYPE_0 = "ビューまたはテーブル列"

export const COLUMN_HEADER_0 = "Materialize列"

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

## 概要

OneSignal + Materialize統合により、Materializeストリーミングデータベースからカスタムイベントを自動的にOneSignalに同期して、リアルタイムのユーザー行動に基づいた自動化されたメッセージングキャンペーンとジャーニーをトリガーできます。

Materializeは、PostgreSQL互換のストリーミングデータベースで、データの増分更新ビューを維持し、リアルタイム分析とイベント処理を可能にします。

***

## 要件

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

### Materialize

* コンソールアクセスを持つ**Materializeアカウント**
* 外部ツール認証用の**アプリパスワード**
* イベントデータを含む**マテリアライズドビュー**またはテーブル
* Materializeデータベースでアクセス可能な**イベントデータ**

***

## セットアップ

<Steps>
  <Step title="Materialize接続詳細を取得">
    Materializeコンソールにサインインし、**接続**ページに移動して接続詳細を確認します。
  </Step>

  <Step title="アプリパスワードを作成">
    Materializeコンソールで、OneSignalが認証に使用する新しい**アプリパスワード**を作成します。
  </Step>

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

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

    * **ホスト：** Materializeホスト名（Materializeコンソールの接続ページの**外部ツール**にあります）
    * **ユーザー名：** メールアドレス（Materializeへのサインインに使用）
    * **パスワード：** ステップ2で作成したアプリパスワード
    * **データベース：** データベース名（オプション、デフォルトは`materialize`）
  </Step>

  <Step title="接続をテスト">
    **テスト**をクリックして、接続が正しく機能していることを確認します。
  </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}
-- 最近のイベント用のリアルタイムマテリアライズドビュー
CREATE MATERIALIZED VIEW analytics.recent_user_events AS
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_properties,
    session_id,
    device_type
FROM raw_events.stream
WHERE event_timestamp >= NOW() - INTERVAL '1 day';
```

***

## 処理モード

### マテリアライズドビュー（推奨）

新しいデータが到着すると自動的に更新されるマテリアライズドビューから同期することで、Materializeのリアルタイム処理を活用します：

```sql theme={null}
-- 高価値イベントマテリアライズドビュー
CREATE MATERIALIZED VIEW analytics.high_value_events AS
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_properties || jsonb_build_object(
        'source', 'materialize',
        'value_tier', 'high'
    ) as event_properties
FROM raw_events.stream
WHERE (event_properties->>'value')::numeric > 100;
```

### SQLクエリモード

カスタムPostgreSQL互換クエリを作成して、イベントデータを変換します：

```sql theme={null}
-- リアルタイムユーザーアクティビティサマリー
SELECT
    'activity_summary' as event_name,
    user_id,
    NOW() as event_timestamp,
    jsonb_build_object(
        'events_last_hour', COUNT(*),
        'unique_sessions', COUNT(DISTINCT session_id),
        'total_value', SUM((event_properties->>'value')::numeric),
        'last_seen', MAX(event_timestamp)
    ) as event_properties
FROM analytics.recent_user_events
WHERE event_timestamp >= NOW() - INTERVAL '1 hour'
GROUP BY user_id
HAVING COUNT(*) >= 5;
```

### リアルタイムストリーム処理

```sql theme={null}
-- プログレッシブプロファイリングビュー
CREATE MATERIALIZED VIEW analytics.user_progression AS
SELECT
    user_id,
    COUNT(*) as total_events,
    COUNT(DISTINCT event_name) as unique_event_types,
    MAX(event_timestamp) as last_activity,
    CASE
        WHEN COUNT(*) >= 50 THEN 'power_user'
        WHEN COUNT(*) >= 20 THEN 'active_user'
        WHEN COUNT(*) >= 5 THEN 'engaged_user'
        ELSE 'new_user'
    END as user_segment
FROM raw_events.stream
GROUP BY user_id;
```

***

## 制限事項

* Materializeは基本同期エンジンのみをサポートします
* リアルタイムクエリはより多くの計算リソースを消費する可能性があります
* 大規模なデータセットにわたる複雑な結合は最適化する必要があります
* マテリアライズドビューには継続的なクラスターリソースが必要です

***

## FAQ

### Materializeでリアルタイムパフォーマンスを最適化するにはどうすればよいですか？

頻繁にクエリされる列にインデックスを使用し、パフォーマンスを向上させるために大規模なイベントデータセットを時間範囲でパーティション化することを検討してください。

### テーブルとマテリアライズドビューの両方から同期できますか？

はい、OneSignalはMaterialize内の静的テーブルとリアルタイムマテリアライズドビューの両方から読み取ることができます。

### リアルタイム同期はどのように機能しますか？

Materializeは増分更新されたビューを維持するため、OneSignalは追加の処理オーバーヘッドなしで常にデータの最新状態を読み取ります。

***
