mixpanelのコホートをBigQueryにエクスポートする

mixpanelで作ったコホートをWebhookとCloud Functions使ってBigQueryに書き出すよん。
2023.10.04

ミックスパネラーの國崎です。
今回はmixpanelで作成したコホートをWebhookとCloud Functionsを使ってBigQueryにエクスポートするという知っておくとちょっと便利な技術をお伝えします。

前提条件

  • mixpanelでコホートを作れる環境である
  • mixpanelでコホートをエクスポートできる権限がある
  • 今回使うWebhookはWebhook Relay
  • Google Cloudのプロジェクト設定は完了している

全体の作業の流れ

全体の作業の流れとしては以下になります。

  1. mixpanelでコホートを作成する
  2. Webhook Relayでバケットを作成する
  3. BigQueryでテーブルの作成をする
  4. Cloud FunctionsでBigQueryへの連携をする
  5. Webhook RelayでCloud FunctionsのURLを設定する
  6. mixpanelでWebhook Relayバケットの連携をする
  7. BigQueryにコホートが入ったか確認する

上記に挙げた項目の中には別記事で詳しいやり方を書いてるものもあるので、それらの記事の案内と合わせて本記事では全体の作業をお伝えします。

やってみる

mixpanelでコホートを作成する

mixpanelのコホートについては以下記事で案内をしているので、以下を参照ください。

mixpanelのコホートの作成方法・使い方を解説!

Webhook Relayでバケットを作成する

今回はWebhook Relayを使います。
使う理由としては無料でWebhookにエクスポートされたコホートを転送できる機能があったので選びました。

Webhook Relayを初めて使う方は右上のSign upからアカウントを作成ください。
webhook_bigquery1

アカウント作成の際に入力したメールアドレスにメールが届くので、確認後再度Webhook Relayに遷移し、左メニュー>Access Tokensをクリック。
webhook_bigquery2

CREATE TOKENをクリックしてAccess Tokensを作成。
webhook_bigquery3

次にバケットを作成するので左メニュー>Bucketsをクリック。
webhook_bigquery4

NEW EMPTY BUCKETをクリックし、バケットを作成します。
webhook_bigquery5

作成されたバケットのAuthenticationに先ほど作成したAccess Tokensを設定します。
webhook_bigquery6

作成されたバケットのInputsにあるDefault public endpointをクリック。
webhook_bigquery7

CUSTOM RESPONSEのタブ内にあるHeader/ValueをContent-Type: application/jsonで保存。
webhook_bigquery8

SETTINGのタブ内にあるURLは「mixpanelでWebhook Relayバケットの連携をする」で使うので、コピーして保存しておきます。
webhook_bigquery9

BigQueryでテーブルの作成をする

次にBigQueryでテーブルの作成をします。
今回は以下の感じでテーブルを作ってみました。

CREATE TABLE `プロジェクト名.データセット名.テーブル名` (
    email STRING,
    mixpanel_distinct_id STRING,
    first_name STRING,
    last_name STRING,
    action STRING,
    mixpanel_project_id STRING,
    mixpanel_cohort_id STRING,
    mixpanel_cohort_name STRING,
    mixpanel_cohort_description STRING,
    mixpanel_session_id STRING,
    page_info_total_pages INT64,
    page_info_page_count INT64
);

テーブルを作成したらCloud FunctionsでWebhook RelayバケットをBigQueryに連携させる作業を行なっていきます。

Cloud FunctionsでBigQueryへの連携をする

Cloud Functionsで以下の設定を行います。

  • 第一世代
  • トリガー…HTTP
  • ランタイム…Node.js 20
  • エントリポイント…任意の名前
  • ソースコード…インラインエディタ

index.js

const express = require('express');
const bodyParser = require('body-parser');
const { BigQuery } = require('@google-cloud/bigquery');

const app = express();
app.use(bodyParser.json());

app.get('/', (req, res) => {
    res.status(200).send("Hello, this is エントリポイントの名前 function!");
});

app.post('/', async (req, res) => {
    const bigquery = new BigQuery();
    const datasetId = 'データセット名';
    const tableId = 'テーブル名';

    const requestBody = req.body;
    const rows = requestBody.parameters.members.map(member => ({
        email: member.email,
        mixpanel_distinct_id: member.mixpanel_distinct_id,
        first_name: member.first_name,
        last_name: member.last_name,
        action: requestBody.action,
        mixpanel_project_id: requestBody.parameters.mixpanel_project_id,
        mixpanel_cohort_id: requestBody.parameters.mixpanel_cohort_id,
        mixpanel_cohort_name: requestBody.parameters.mixpanel_cohort_name,
        mixpanel_cohort_description: requestBody.parameters.mixpanel_cohort_description,
        mixpanel_session_id: requestBody.parameters.mixpanel_session_id,
        page_info_total_pages: requestBody.parameters.page_info.total_pages,
        page_info_page_count: requestBody.parameters.page_info.page_count
    }));

    try {
        await bigquery.dataset(datasetId).table(tableId).insert(rows);
        res.status(200).send('Success');
    } catch (error) {
        res.status(500).send('Failed to process request');
    }
});

exports.エントリポイントの名前 = app;

package.json

{
  "name": "mixpanel-webhook-to-bigquery",
  "version": "1.0.0",
  "description": "Google Cloud Function to save Mixpanel webhook data to BigQuery",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "@google-cloud/bigquery": "^5.9.0",
    "express": "^4.17.1",
    "body-parser": "^1.19.0"
  }
}

トリガーに表示されているHTTPのURLは「Webhook RelayでCloud FunctionsのURLを設定する」で使うのでコピーして保存しておきます。
webhook_bigquery10

Webhook RelayでCloud FunctionsのURLを設定する

再度Webhook RelayのBucketsに戻り、今度はOutput Destinationsの設定をします。
ADD MORE+をクリック。
webhook_bigquery11

Nameには任意の名前、DestinationにはCloud FunctionsのトリガーでコピーしたURLを貼り、Publicを選択します。
webhook_bigquery12

SETTINGでHeader/ValueはContent-Type: application/jsonを設定します。
webhook_bigquery13

ここまで終わったら最後にmixpanelでWebhook Relayとの連携を行います。

mixpanelでWebhook Relayバケットの連携をする

mixpanelのダッシュボードに移動してWebhook Relayとの連携を行います。
mixpanelコホートをWebhookへエクスポートする具体的な手順については以下記事で案内をしていますので、こちらをご覧ください。

mixpanelのコホートをカスタムWebhookにエクスポートする

連携するWebhookのURLはWebhook Relayバケットで作成したInputsにあるURLになります。
webhook_bigquery9

注意点として連携作業を終えても、すぐにデータのエクスポートが始まるわけではなく15〜30分程度の時間がかかります。
エクスポートが無事完了した際はmixpanelのIntegrationsのCustom Webhookで連携されたユーザー数が表示されます。
webhook_bigquery14

またWebhook Relayの画面でPOSTが正常にされているかも確認しておきましょう。
無事完了してる場合は200が表示されます。
webhook_bigquery15

BigQueryにコホートが入ったか確認する

作成したBigQueryのテーブルを確認してみます。
今回の作成したコホートと同じデータが入っているのを確認しました。
webhook_bigquery16

以上が【mixpanelのコホートをWebhookでBigQueryにエクスポートする】手順になります。

クラスメソッドが行っているmixpanelの支援

クラスメソッドではmixpanelをすでにお使いのお客様にも以下の支援サービスを提供しております。

  • PoC…検証環境提供
  • プランニング支援…KPI設計の支援/QA対応
  • 実装支援…開発の支援/SaaS連携支援
  • 伴走支援…定例など

mixpanelのKPI設計は以下記事でも紹介している専用の測定フレームワークを用いたプランニング支援をさせていただきます。

mixpanelの測定フレームワーク作り方のコツ!サンプルを例に解説!

また実装いただいた後の伴走支援では実際にお使いになられているお客様の課題感などをヒアリングさせていただき、ご要望に沿った内容での定例を設けさせていただき、成果につなげるための分析手法のご提案などをさせていただきます。

今回の記事を見てmixpanelについて詳細の話を聞きたい、興味を持ったという方はぜひぜひクラスメソッドまでお問い合わせください!!

クラスメソッドへのmixpanelお問い合わせ