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

# Amazon Redshift

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

export const PLATFORM_0 = "Amazon Redshift"

export const DATA_TYPE_0 = "columns"

export const COLUMN_HEADER_0 = "Redshift Column"

export const PROPERTIES_DESCRIPTION_0 = "JSON object with event details"

## 概要

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

Amazon Redshiftは、既存のビジネスインテリジェンスツールを使用して大量のデータを費用対効果の高い方法で分析できる、フルマネージドのペタバイト規模のデータウェアハウスサービスです。

***

## 要件

* Access to [Event Streams](/docs/en/event-streams) for outbound message events (Plan limitations and overages apply)
* Access to [Custom Events](/docs/en/custom-events) for inbound event syncing (Plan limitations and overages apply)
* [Updated Account Plan](https://onesignal.com/pricing) (not available on free apps)

### Amazon Redshift

* ネットワークアクセス権を持つ**Redshiftクラスタ**
* 適切な権限を持つ**データベースユーザー**
* 構造化された行動データを含む**イベントテーブル**
* OneSignalからRedshiftクラスタへの**ネットワーク接続**

***

## セットアップ

<Steps>
  <Step title="OneSignal用の専用ユーザーを作成する">
    適切な権限を持つ専用ユーザーアカウントを作成します：

    ```sql theme={null}
    -- 強力なパスワードを持つOneSignalユーザーを作成
    CREATE USER CENSUS WITH PASSWORD '<強力で一意のパスワード>';

    -- 同期状態用のプライベート簿記スキーマを作成（読み取り専用モードの場合はスキップ）
    CREATE SCHEMA CENSUS;

    -- 簿記スキーマへのフルアクセスを許可（読み取り専用モードの場合はスキップ）
    GRANT ALL ON SCHEMA CENSUS TO CENSUS;

    -- 簿記スキーマ内の既存オブジェクトへのアクセスを確保（読み取り専用モードの場合はスキップ）
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA CENSUS TO CENSUS;
    ```
  </Step>

  <Step title="イベントデータへの権限を許可する">
    イベントデータを含むスキーマへの読み取りアクセスを提供します：

    ```sql theme={null}
    -- スキーマアクセスを許可（イベントデータを持つ各スキーマごとに繰り返す）
    GRANT USAGE ON SCHEMA "<your_schema>" TO CENSUS;

    -- 既存テーブルへの読み取りアクセスを許可
    GRANT SELECT ON ALL TABLES IN SCHEMA "<your_schema>" TO CENSUS;

    -- 将来のテーブルへの読み取りアクセスを許可
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT SELECT ON TABLES TO CENSUS;

    -- 関数への実行権限を許可
    GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA "<your_schema>" TO CENSUS;
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT EXECUTE ON FUNCTIONS TO CENSUS;
    ```
  </Step>

  <Step title="ネットワークアクセスを設定する">
    RedshiftセキュリティグループにOneSignalのIPアドレスを追加します。Redshiftはデフォルトで外部アクセスを防ぎます。

    お住まいの地域のOneSignal IPアドレスは、統合設定で確認できます。詳細については、AWS Redshift Help Centerをご覧ください。
  </Step>

  <Step title="OneSignalに接続する">
    In OneSignal, go to **Data > Integrations** and click **Add Integration**.

    1. リストから**Amazon Redshift**を選択します
    2. 接続の詳細を入力します：
       * **Host**：Redshiftクラスタエンドポイント
       * **Port**：通常は5439
       * **Database**：データベース名
       * **Username**：`CENSUS`
       * **Password**：作成したパスワード
    3. 接続をテストします
    4. イベントデータを含むテーブルを設定します
  </Step>
</Steps>

***

### Event data mapping

Map your {PLATFORM_0} {DATA_TYPE_0} to OneSignal's custom events format:

| OneSignal Field | {COLUMN_HEADER_0} | Description                | Required |
| --------------- | ----------------- | -------------------------- | -------- |
| `name`          | `event_name`      | Event identifier           | Yes      |
| `external_id`   | `user_id`         | User identifier            | Yes      |
| `timestamp`     | `event_timestamp` | When event occurred        | No       |
| `properties`    | `event_data`      | {PROPERTIES_DESCRIPTION_0} | No       |

### イベントテーブルスキーマの例

```sql theme={null}
-- Redshiftイベントテーブルの例
CREATE TABLE analytics.user_events (
    event_id BIGINT IDENTITY(1,1),
    event_name VARCHAR(100) NOT NULL,
    user_id VARCHAR(255) NOT NULL,
    event_timestamp TIMESTAMP DEFAULT GETDATE(),
    event_data SUPER,
    session_id VARCHAR(255),
    created_at TIMESTAMP DEFAULT GETDATE()
)
DISTKEY(user_id)
SORTKEY(event_timestamp);
```

### SQLクエリモード

カスタムSQLクエリを記述してイベントデータを変換します：

```sql theme={null}
-- 例：最近の高価値イベント
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_data
FROM analytics.user_events
WHERE event_timestamp >= DATEADD(day, -7, GETDATE())
    AND JSON_EXTRACT_PATH_TEXT(event_data, 'value')::NUMERIC > 100
ORDER BY event_timestamp DESC;
```

***

## dbt統合

Redshiftでdbtを使用している場合は、各dbt実行後にOneSignalがアクセスを保持することを確認してください：

### オプション1：きめ細かい権限

dbtプロジェクトにpost-hookを追加して、各モデルのビルド後にアクセスを許可します：

```sql theme={null}
-- dbtモデル内
{{ config(
    post_hook="GRANT SELECT ON {{ this }} TO CENSUS"
) }}
```

### オプション2：デフォルト権限（推奨）

dbt本番ユーザーのデフォルト権限を許可します：

```sql theme={null}
-- Redshiftスーパーユーザーが実行する必要があります
ALTER DEFAULT PRIVILEGES FOR USER "<your_dbt_run_user>"
IN SCHEMA "<your_dbt_target_schema>"
GRANT SELECT ON TABLES TO CENSUS;
```

***

## 高度なネットワーク設定

### SSHトンネルのセットアップ

プライベートネットワーク上のRedshiftクラスタの場合：

1. **SSHユーザーを作成**：SSHホストで専用ユーザーをセットアップします
2. **トンネルを設定**：OneSignal統合設定で「Use SSH Tunnel」を有効にします
3. **キーペアをインストール**：OneSignalの公開鍵を`~/.ssh/authorized_keys`に追加します
4. **接続をテスト**：トンネル接続を検証します

### VPCデプロイメント

AWS VPC内のRedshiftの場合：

OneSignalは効率的なバルクデータ抽出のために`UNLOAD`コマンドを使用します。VPCデプロイメントには、RedshiftがS3と通信できるようにするための**S3 VPCエンドポイント**が必要です。

**S3 VPCエンドポイントのセットアップ：**

1. AWSコンソールでVPCサービスに移動します
2. S3サービス用のVPCエンドポイントを作成します
3. Redshiftサブネットと関連付けます
4. ルーティングテーブルを設定します

***

## パフォーマンスの最適化

### ディストリビューションキーとソートキー

分析ワークロード用にイベントテーブルを最適化します：

```sql theme={null}
-- ユーザー中心のクエリ用にuser_idで分散
CREATE TABLE analytics.user_events (
    -- 列
)
DISTKEY(user_id)
SORTKEY(event_timestamp, event_name);
```

### カラムナストレージ

分析のためにRedshiftのカラムナストレージを活用します：

* **圧縮**：Redshiftは自動的に列を圧縮します
* **ゾーンマップ**：ソートされたデータでクエリパフォーマンスを向上させます
* **列指向**：イベントデータの分析クエリに効率的です

***

## 制限事項

* 複数のスキーマには個別の権限付与が必要です
* クロススキーマテーブルを参照するビューには追加の権限が必要です
* 複雑なストアドプロシージャアクセスには追加のセットアップが必要な場合があります
* VPCデプロイメントにはS3 VPCエンドポイント設定が必要です

***

## FAQ

### OneSignalは大規模なイベントデータセットをどのように処理しますか？

OneSignalは、大規模な分析ワークロード用に最適化されているRedshiftの`UNLOAD`コマンドを使用して、効率的なバルクデータ抽出を行います。

### 読み取り専用モードを使用できますか？

はい、よりシンプルなセットアップを希望し、OneSignalによるテーブル作成を許可できない場合は、簿記スキーマの作成をスキップして読み取り専用モードを使用できます。

### dbt互換性についてはどうですか？

OneSignalは、dbt実行後に権限が維持されるように特定のdbt統合パターンを提供しています。セットアップに応じて、post-hookまたはデフォルト権限を使用してください。
