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

# Google BigQuery

> メッセージングイベントデータをBigQueryにエクスポートし、BigQueryからカスタムイベントをインポートしてパーソナライズされたキャンペーンをトリガーします。

export const PLATFORM_0 = "BigQuery"

export const DATA_TYPE_0 = "event table columns"

export const COLUMN_HEADER_0 = "BigQuery Column"

export const PROPERTIES_DESCRIPTION_0 = "Additional columns as JSON"

## 概要

OneSignal + BigQuery統合は、2つの強力なデータパイプラインをサポートしています：

* **エクスポート**：OneSignalからBigQueryにメッセージングイベントデータ（プッシュ、メール、SMS、アプリ内）を自動的に送信して、分析とレポート作成を行います。
* **インポート**：BigQueryデータセットからOneSignalにカスタムユーザーイベントを同期して、自動化されたJourneysとパーソナライズされたメッセージングをトリガーします。

これらの統合により、ユーザーエンゲージメントデータを完全に制御でき、高度な分析とリアルタイムの行動駆動型メッセージングが可能になります。

***

## OneSignalイベントをBigQueryにエクスポート

メッセージングパフォーマンスとエンゲージメントイベント（例：送信、開封、クリック）をBigQueryに送信して、次のことを行います：

* カスタムダッシュボードとレポートを構築
* チャネル全体の配信とエンゲージメントトレンドを追跡
* OneSignalデータを他のビジネスデータと組み合わせて分析

**要件**

* 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)

- **課金が有効**なGoogle Cloud Platformプロジェクト
- GCPプロジェクトでBigQueryが有効
- BigQuery書き込み権限を持つサービスアカウント

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

### 1. サービスアカウントを作成

<Steps>
  <Step title="Google Cloud Platformアカウントにログイン">
    ログイン後、適切なプロジェクトが選択されていることを確認してください。

    <Frame>
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/7fe257f51fcacd15a07c4f4f23bf8bf2f9f22c2f1c171ad8b8648624de4de304-BQ1-2.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=038779c4d976ba56a17a32f2e6646573" width="2388" height="558" data-path="images/docs/7fe257f51fcacd15a07c4f4f23bf8bf2f9f22c2f1c171ad8b8648624de4de304-BQ1-2.png" />
    </Frame>
  </Step>

  <Step title="サービスアカウントを作成">
    [サービスアカウント作成ページ](https://console.cloud.google.com/iam-admin/serviceaccounts/create)にアクセスし、**Create Service Account**をクリックします。

    <Frame>
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/7fe257f51fcacd15a07c4f4f23bf8bf2f9f22c2f1c171ad8b8648624de4de304-BQ1-2.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=038779c4d976ba56a17a32f2e6646573" width="2388" height="558" data-path="images/docs/7fe257f51fcacd15a07c4f4f23bf8bf2f9f22c2f1c171ad8b8648624de4de304-BQ1-2.png" />
    </Frame>
  </Step>

  <Step title="フィールドに入力">
    任意の名前とサービスアカウントIDを指定します。

    <Frame>
      <img src="https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/6437e9849e23f18ec6f90e03c3821817566e7f150125f440a58fbe5fd2b42e0b-BQ1-3.png?fit=max&auto=format&n=MUgio66t0sYhGEvj&q=85&s=37236688a79f1c16c0d6fdad15b03245" width="1344" height="870" data-path="images/docs/6437e9849e23f18ec6f90e03c3821817566e7f150125f440a58fbe5fd2b42e0b-BQ1-3.png" />
    </Frame>
  </Step>

  <Step title="'BigQuery User'ロールを割り当て">
    サービスアカウントに「BigQuery User」ロールを付与します。

    <Frame>
      <img src="https://mintcdn.com/onesignal/56ctKxZSV4m5VEkn/images/docs/b1bff32d7f010b488b60347e01ecb1fbde182602f19f16d3d89914d1de1c0635-BQ1-4.png?fit=max&auto=format&n=56ctKxZSV4m5VEkn&q=85&s=1df75028d3632a3ed413c10c1de9b94a" width="549" height="395" data-path="images/docs/b1bff32d7f010b488b60347e01ecb1fbde182602f19f16d3d89914d1de1c0635-BQ1-4.png" />
    </Frame>
  </Step>

  <Step title="このアカウントのJSONキーを作成">
    新しいサービスアカウント > **Keys** > **Add Key** > **Create new key** > JSONを選択します。ファイルを保存します。
  </Step>
</Steps>

<Info>
  統合を有効にするために、このJSONキーファイルの全内容をOneSignalに貼り付けます。
</Info>

### 2. OneSignalで統合を有効化

<Steps>
  <Step title="OneSignal > Data > Integrations > BigQueryに移動" />

  <Step title="サービスアカウントのJSONキーを貼り付け" />

  <Step title="設定を構成">
    * **Sync Frequency**：最短で15分ごと
    * **Dataset/Table Names**：小文字、数字、アンダースコアのみを含み、数字で始めることはできません。
    * **Event Types**：特定のメッセージイベント（例：送信済み、開封、クリック）を選択
      * \*\*注意：\*\*複数のイベントタイプを選択するか、後で選択したイベントを更新できます。
  </Step>

  <Step title="Saveをクリックして確認を待つ" />
</Steps>

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

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

### 3. BigQueryでデータを表示

BigQueryコンソールを開き、データセット（例：`onesignal_events_<app-id>`）を見つけて、同期されたメッセージイベントを探索します。

<Frame caption="エクスポートされたメッセージイベントを含むBigQueryデータセット">
  <img src="https://mintcdn.com/onesignal/9_Q1FZLh6C0BFLq-/images/docs/c40ec987eadef5dd1c16cb47fb71c2c666b30ea8667624584ecbc481c12ef026-BQ5.png?fit=max&auto=format&n=9_Q1FZLh6C0BFLq-&q=85&s=08cf57a8bd91f9447909ad619077935f" width="1552" height="1052" data-path="images/docs/c40ec987eadef5dd1c16cb47fb71c2c666b30ea8667624584ecbc481c12ef026-BQ5.png" />
</Frame>

## Message events and properties

### Message event kinds

**Property:** `event_kind`
**Type:** `String`

The kind of message and event (e.g. `message.push.received`, `message.push.sent`).

| Message Event (OneSignal) |           `event_kind`           | Description                                                                |
| :-----------------------: | :------------------------------: | -------------------------------------------------------------------------- |
|       Push Delivered      |        `message.push.sent`       | Push notification successfully delivered to the push services (FCM, APNs). |
|       Push Received       |      `message.push.received`     | Delivered push (see [Confirmed receipt](/docs/en/confirmed-delivery)).     |
|        Push Clicked       |      `message.push.clicked`      | User clicked the push.                                                     |
|        Push Failed        |       `message.push.failed`      | Delivery failure. See message reports.                                     |
|     Push Unsubscribed     |    `message.push.unsubscribed`   | User unsubscribed from push.                                               |
|     In-App Impression     |     `message.iam.impression`     | In-App message shown.                                                      |
|       In-App Clicked      |       `message.iam.clicked`      | In-App message clicked.                                                    |
|     In-App Page Viewed    |   `message.iam.page_displayed`   | In-App page shown.                                                         |
|         Email Sent        |       `message.email.sent`       | Email delivered.                                                           |
|       Email Received      |     `message.email.received`     | Email accepted by recipient's mail server.                                 |
|        Email Opened       |      `message.email.opened`      | Email opened. See [Email Reports](/docs/en/email-message-reports).         |
|     Email Link Clicked    |      `message.email.clicked`     | Link in email clicked.                                                     |
|     Email Unsubscribed    |   `message.email.unsubscribed`   | Recipient unsubscribed.                                                    |
|   Email Reported As Spam  | `message.email.reported_as_spam` | Marked as spam. See [Email Deliverability](/docs/en/email-deliverability). |
|       Email Bounced       |      `message.email.bounced`     | Bounce due to permanent delivery failure.                                  |
|        Email Failed       |      `message.email.failed`      | Delivery failed.                                                           |
|      Email Suppressed     |    `message.email.suppressed`    | Suppressed due to suppression list.                                        |
|          SMS Sent         |        `message.sms.sent`        | SMS sent.                                                                  |
|       SMS Delivered       |      `message.sms.delivered`     | SMS successfully delivered.                                                |
|         SMS Failed        |       `message.sms.failed`       | SMS failed to deliver.                                                     |
|      SMS Undelivered      |     `message.sms.undelivered`    | SMS rejected or unreachable.                                               |

### Event data schema

For each message event generated by a user, the following metadata will be attached to the record.

|                   Column Name                   |      Type      | Description                                                  |
| :---------------------------------------------: | :------------: | ------------------------------------------------------------ |
|                    `event_id`                   |      UUID      | Unique identifier for the event                              |
|                `event_timestamp`                |    Timestamp   | Time of event occurrence                                     |
|                   `event_kind`                  |     String     | The [Event Kind](#message-event-kinds)                       |
|            `subscription_device_type`           |     String     | Device type (e.g., iOS, Android, Web, Email, SMS)            |
|                    `language`                   |     String     | Subscription language code                                   |
|                    `version`                    |     String     | Integration version                                          |
|                   `device_os`                   |     String     | Device operating system version                              |
|                  `device_type`                  |     Number     | Numeric device type                                          |
|                     `token`                     |     String     | Push token, phone number, or email                           |
|                `subscription_id`                |      UUID      | Subscription ID                                              |
|                   `subscribed`                  |     Boolean    | Subscription status                                          |
|                  `onesignal_id`                 |      UUID      | OneSignal user ID                                            |
|                  `last_active`                  |     String     | Last active timestamp                                        |
|                      `sdk`                      |     String     | OneSignal SDK version                                        |
|                  `external_id`                  |     String     | External user ID that should match the integration user ID   |
|                     `app_id`                    |      UUID      | App ID from OneSignal                                        |
|                  `template_id`                  |      UUID      | Template ID (if applicable)                                  |
|                   `message_id`                  |      UUID      | Message batch/request ID                                     |
|                  `message_name`                 |     String     | Name of the message                                          |
|                 `message_title`                 |     String     | Message title (English only)                                 |
|                `message_contents`               |     String     | Truncated message body (English only)                        |
|                 `failure_reason`                |     String     | Reason for failure (for push failed and email failed events) |
| `_created`, `_id`, `_index`, `_fivetran_synced` | *Internal use* | Fivetran sync metadata                                       |

### Notes

* Syncs after saving/activating may take an additional 15-30 minutes to complete.
* Deactivating may still result in one final sync after deactivation.
* To ensure efficient data synchronization, our system automatically creates and manages staging datasets. These datasets, named with a pattern like `fivetran_{two random words}_staging`, temporarily store data during processing before it's integrated into your main schema. These staging datasets are essential for maintaining a streamlined workflow and should not be deleted, as they will be automatically recreated.

***

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

BigQueryからOneSignalに行動イベントデータを送信して、次のことを行います：

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

**要件**

* 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)

- BigQueryとイベントデータテーブルを持つGCPプロジェクト
- 読み取り権限を持つサービスアカウント
- BigQueryデータセットに行動データを含むイベントデータテーブル

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

<Steps>
  <Step title="BigQueryサービスアカウントを作成">
    OneSignalは、接続を作成すると自動的にサービスアカウントを生成します。または、独自のサービスアカウントキーJSONファイルを提供することもできます。

    独自のサービスアカウントを作成する場合は、以下にリストされている必要な権限があることを確認してください。
  </Step>

  <Step title="必要な権限を付与">
    OneSignalサービスアカウントには、次のBigQuery IAMロールが必要です：

    * **`bigquery.dataViewer`** - イベントデータを含むデータセットとテーブルへの読み取りアクセス
    * **`bigquery.jobUser`** - データクエリのジョブを作成する権限
    * **`bigquery.metadataViewer`** - プロジェクトレベルのメタデータアクセス（推奨）

    Google Cloud ConsoleまたはCLIを使用して権限を付与します：

    ```bash theme={null}
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member serviceAccount:ONESIGNAL_SERVICE_ACCOUNT_EMAIL \
      --role roles/bigquery.dataViewer

    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member serviceAccount:ONESIGNAL_SERVICE_ACCOUNT_EMAIL \
      --role roles/bigquery.jobUser
    ```
  </Step>

  <Step title="OneSignalで統合を追加">
    In OneSignal, go to **Data > Integrations** and click **Add Integration**.

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

    * **Google Cloud Project ID**：BigQueryデータセットを含むGCPプロジェクト
    * **Dataset Region**：BigQueryデータセットが保存されている場所
    * **Service Account Key**（オプション）：独自のサービスアカウントを使用する場合はJSONキーファイル
  </Step>

  <Step title="イベントデータソースを設定">
    イベントデータを含むBigQueryデータセットとテーブルを指定します：

    * **Dataset**：BigQueryデータセット名（例：`analytics_events`）
    * **Table/View**：イベントレコードを含むテーブルまたはビュー
    * **Event Query**：イベントデータをフィルタリングまたは変換するためのオプションのSQLクエリ

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

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

  <Step title="接続をテスト">
    **Test Connection**をクリックして、OneSignalがBigQueryプロジェクトにアクセスしてイベントデータを読み取れることを確認します。
  </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クエリ

OneSignalに同期する前に、カスタムSQLを使用してイベントデータをフィルタリングまたは変換します：

```sql theme={null}
SELECT
  event_name,
  user_id,
  event_timestamp,
  STRUCT(
    product_id,
    purchase_amount,
    category
  ) as payload
FROM `project.dataset.events`
WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
```

#### クロスプロジェクトアクセス

イベントデータが複数のBigQueryプロジェクトにまたがる場合は、参照されるテーブルまたはビューを含む各プロジェクトへのアクセス権をOneSignalサービスアカウントに付与します。

<Warning>
  最適なパフォーマンスを得るには、BigQuery接続リージョンが特定のテーブルリージョンと一致している必要があります。
</Warning>

***

## FAQ

### 同じコンテンツに対して複数のメッセージIDが表示されるのはなぜですか？

これは通常、メッセージテンプレートが複数の送信またはトリガーフローで再利用される場合に発生します。

### OneSignalはどのくらいの頻度でデータを同期しますか？

エクスポートとインポートの両方の統合は、最短で15分ごとに同期できます。

### BigQueryビューを使用できますか？

はい。サービスアカウントがビュー内の参照されるすべてのテーブルにアクセスできることを確認してください。

***

## 関連リソース

* [GCPでのサービスアカウントキーの作成](https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating)
* [OneSignal Journeysドキュメント](./journeys-overview)
* [OneSignalデータエクスポートドキュメント](./exporting-data)

***
