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

# Greenplum

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

export const PLATFORM_0 = "Greenplum"

export const DATA_TYPE_0 = "table columns"

export const COLUMN_HEADER_0 = "Greenplum Column"

export const PROPERTIES_DESCRIPTION_0 = "JSON/JSONB object with event metadata"

## 概要

OneSignal + Greenplumインテグレーションにより、Greenplumデータベースからカスタムイベントを同期して、ユーザー行動に基づいた自動化されたメッセージングキャンペーンとJourneysをトリガーできます。

Greenplumは、大規模な分析ワークロード向けに設計された、PostgreSQLベースの超並列処理（MPP）データベースです。

***

## 要件

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

### Greenplum

* ネットワークアクセスを持つ**Greenplumインスタンス**
* 適切な権限を持つ**データベースユーザー**
* 構造化された行動データを含む**イベントテーブル**

***

## 同期エンジンと権限

OneSignalは、Greenplumのテーブルとビューからデータを読み取り、それを同期して自動化されたメッセージングキャンペーンをトリガーします。データベースへの負荷を制限するために、OneSignalは状態追跡テーブルを維持し、最後の同期以降に変更されたデータのみを同期できるようにします（増分同期）。Greenplum接続を構成する際、状態追跡の処理方法を決定する同期エンジンを選択します。

**Basic Sync Engine**は、OneSignalが所有するインフラストラクチャに状態追跡テーブルを維持し、読み取りアクセスのみが必要で、構成が簡単です。

**Advanced Sync Engine**は、独自のGreenplumインスタンス内の専用スキーマに状態追跡テーブルを維持することで、パフォーマンスを向上させます。

## セットアップ

<Steps>
  <Step title="Censusユーザーを作成する">
    OneSignalが使用する専用データベースユーザーを作成します：

    ```sql theme={null}
    -- Create CENSUS user and set password
    CREATE USER CENSUS WITH PASSWORD '<strong unique password>';
    ```
  </Step>

  <Step title="同期エンジンを選択して権限を構成する">
    **Basic Sync Engine（読み取り専用アクセス）の場合：**

    イベントデータスキーマへの読み取りアクセスを付与します。`<your schema>`をスキーマ名に置き換えます：

    ```sql theme={null}
    -- Let the census user read all existing tables in this schema
    GRANT SELECT ON ALL TABLES IN SCHEMA "<your schema>" TO CENSUS;

    -- Let the census user read any new tables added to this schema
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your schema>" GRANT SELECT ON TABLES TO CENSUS;

    -- Let the census user execute any existing functions in this schema
    GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA "<your schema>" TO CENSUS;

    -- Let the census user execute any new functions added to this schema
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your schema>" GRANT EXECUTE ON FUNCTIONS TO CENSUS;
    ```

    **Advanced Sync Engine（パフォーマンスの向上）の場合：**

    最初に上記のBasic Sync Engineの手順を完了してから、次を追加します：

    ```sql theme={null}
    -- Create a private bookkeeping schema where Census can store sync state
    CREATE SCHEMA CENSUS;

    -- Give the census user full access to the bookkeeping schema
    GRANT ALL ON SCHEMA CENSUS TO CENSUS;

    -- Ensure the census user has access to any existing objects in the bookkeeping schema
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA CENSUS TO CENSUS;

    -- Let the census user see your data schema
    GRANT USAGE ON SCHEMA "<your schema>" TO CENSUS;
    ```
  </Step>

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

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

    * \*\*Host：\*\*Greenplumマスターホスト
    * \*\*Port：\*\*5432（またはカスタムポート）
    * \*\*Database：\*\*データベース名
    * **Username：**`CENSUS`
    * \*\*Password：\*\*ステップ1のパスワード
    * \*\*Sync Engine：\*\*ステップ2に基づいてBasicまたはAdvancedを選択します
  </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}
-- Example Greenplum event table
CREATE TABLE analytics.user_events (
    event_id BIGSERIAL,
    event_name VARCHAR(100) NOT NULL,
    user_id VARCHAR(255) NOT NULL,
    event_timestamp TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    event_properties JSONB,
    session_id VARCHAR(255),
    device_type VARCHAR(50)
);
```

***

## 処理モード

### テーブルモード

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

### SQLクエリモード

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

```sql theme={null}
-- Example: Recent high-value events
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_properties
FROM analytics.user_events
WHERE event_timestamp >= NOW() - INTERVAL '7 days'
    AND (event_properties->>'value')::NUMERIC > 100
ORDER BY event_timestamp DESC;
```

### MPPクエリの最適化

イベントクエリが分散実行用に最適化されていることを確認して、Greenplumの並列処理を活用します。適切な分散キーを使用し、パフォーマンスを向上させるためにセグメント間のデータ移動を回避します。

***

## 高度なネットワーク構成

OneSignalは、リージョン制約、IPアドレス許可リスト、またはSSHトンネリングなどの高度なネットワーク制御を使用しているGreenplumインスタンスに正常に接続できます。

すべての接続にTLS v1.2以降を使用するようにGreenplumインスタンスを構成することをお勧めします。

## 制限事項

* 大規模な分析クエリはクラスタのパフォーマンスに影響を与える可能性があります
* JSON/JSONB操作は分散用に最適化する必要があります
* パフォーマンスのために、セグメント間の結合は最小限に抑える必要があります

***

## よくある質問

### どの同期エンジンを選択すればよいですか？

より簡単なセットアップと読み取り専用アクセスを希望する場合は、**Basic Sync Engine**を使用してください。パフォーマンスの向上が必要で、OneSignalがGreenplumインスタンスにテーブルを作成することを許可できる場合は、**Advanced Sync Engine**を選択してください。

### GreenplumのMPPアーキテクチャ用にクエリを最適化するにはどうすればよいですか？

クエリが分散キーを効果的に利用していることを確認し、セグメント間の不要なデータ移動を回避し、Greenplumの列指向ストレージを分析に活用します。

### イベントデータにGreenplumの外部テーブルを使用できますか？

はい、OneSignalは、外部システムに保存されているParquetやCSVなどの形式のデータを参照する外部テーブルから読み取ることができます。

***
