GA4 BigQueryへのデータエクスポート | オンラインセミナー アーカイブ動画+テキスト起こし(2022年6月16日開催)

オンラインセミナー アーカイブ

当日のセミナー動画

このセミナーのテキストのダウンロードはこちらから

BigQuery サンドボックスに無料でエクスポート

BigQuery Export の利用を開始する方法は2種類

サービス名公式サイトクレジットカードの 事前登録
Google Cloud Platform(GCP)無料トライアルhttps://cloud.google.com/gcp/無料枠を利用するためには、登録時にクレジットカード情報の登録が必要。 無料枠を使い切っても、自動で課金されることは無い。
BigQueryサンドボックスhttps://cloud.google.com/bigquery/docs/sandbox?hl=ja登録時にクレジットカード情報の登録は不要。

公式ヘルプ: https://cloud.google.com/bigquery/docs/sandbox

解説:サンドボックスについて

BigQuery サンドボックスについて

制限事項

BigQuery サンドボックスには次の制限があります。

すべてのデータセットにデフォルトのテーブル有効期限https://cloud.google.com/bigquery/docs/updating-datasets#table-expirationが設定されています。また、デフォルトのパーティション有効期限は 60 日間に設定されています。テーブル(https://cloud.google.com/bigquery/docs/tables-intro)、ビュー(https://cloud.google.com/bigquery/docs/views-intro)、パーティション分割テーブル(https://cloud.google.com/bigquery/docs/partitioned-tables)のパーティションは、60 日後に自動的に有効期限が切れます。

サンドボックス プロジェクトでサポートされていないものは、次のとおりです。

GA4のデータは、1日1テーブルでBigQueryに出力されます。60日よりも前のデータは自動的に削除されます。また外部からインポートしたCSVファイル等も、60日経つと削除されます。

サンドボックスの制限をなくすには、プロジェクトをアップグレード(=有料版への移行)し、リソースの有効期限を削除または更新します。サンドボックスからアップグレードした後も、無料枠( https://cloud.google.com/free )を使用できますが、料金が発生する場合があります。 BigQuery の割り当てを管理するには、費用管理( https://cloud.google.com/bigquery/docs/custom-quotas )の設定を検討してください。

サンドボックスからのアップグレードについては、下記をご参照ください。https://cloud.google.com/bigquery/docs/sandbox#upgrade_from_the_sandbox

BigQueryサンドボックス

公式サイト: https://cloud.google.com/bigquery/docs/sandbox?hl=ja

「BigQueryに移動」をクリック。

Google Cloud Platform の画面が表示されます。

https://console.cloud.google.com/

プロジェクトの作成

Google API Console プロジェクトを作成するか、既存のプロジェクトを選択します。

ここでは、プロジェクトを作成します。「プロジェクトの選択」をクリック。

解説:プロジェクト

BigQueryのアカウント構造は上記のようになっています。

「新しいプロジェクト」をクリック。

「プロジェクト名」(図(1))を入力すると、「プロジェクト ID」 (図(2))の候補が自動的に入力されますが、変更できます。 「プロジェクト ID」は後で変更できないので、変更したい場合は、ここで変更しておく必要があります。「プロジェクト ID」を変更するか、またはそのままで「作成」をクリックします。

作成したプロジェクトをクリックします。

Google API の確認

左上のナビゲーション メニューを開き、「API とサービス」 > 「ライブラリ」 の順にクリックします。

公式ヘルプ:https://support.google.com/analytics/answer/9823238?hl=ja#zippy=%2C%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%86%85%E5%AE%B9

APIライブラリで、BigQueryを検索し、検索結果をクリックします。BigQuery APIが有効になっていれば、そのままで。有効になっていなければ、有効にしてください。

Cloud プロジェクトにサービス アカウントを追加していることを確認

Cloud プロジェクトにサービス アカウントを追加していることを確認します。

firebase-measurement@system.gserviceaccount.com がプロジェクトのメンバーとして追加されており、編集者の基本ロールが割り当てられていることを確認し、必要に応じてアカウントを追加します。

「プロジェクト情報」の画面で、「このプロジェクトにユーザーを追加」をクリックします。

公式ヘルプ:https://support.google.com/analytics/answer/9823238?hl=ja#zippy=%2C%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%86%85%E5%AE%B9

firebase-measurement@system.gserviceaccount.com に BigQuery データ編集者のロールを設定して、保存します。

BigQueryを使用する

BigQuery は、Google Cloud Platform のメニュー内、「分析」から利用できます。

「固定」を利用すると、 BigQueryをメニュー上部に固定することができます。

BigQuery を GA4 プロパティにリンクする

管理 > プロパティ列 > BigQueryのリンク をクリック。

GA4にログインします。 BigQuery プロジェクトの所有者権限と、リンクするGA4データ ストリームを含むアナリティクス プロパティの編集者の役割を持つメールアドレスを使用します。

「リンク」をクリック。

「BigQuery プロジェクトを選択」をクリックして、読み取り権限以上の権限を持つプロジェクトのリストを表示します。

リストからプロジェクトを選択し、「確認」 をクリックします。

データのロケーションを選択します。

次へ」をクリックします。

公式ヘルプ: データセットのロケーション
https://cloud.google.com/bigquery/docs/locations?hl=ja

エクスポートに含めるデータ ストリーム、およびエクスポートから除外する特定のイベントを選択するには、「データ ストリームとイベントを設定」を選択します。

イベントを除外するには、「追加」をクリックして既存のイベントのリストから選択するか、「名前でイベントを指定」をクリックして名前で既存のイベントを選択するか、プロパティで収集していないイベント名を定義します。

(標準プロパティでは、BigQuery Export の 1 日の上限は 100 万イベント(Google アナリティクス 360(Google アナリティクス 4 プロパティ)の場合はヘルプに「数十億件のイベント」と記載されている。 https://support.google.com/analytics/answer/11202874 )です。

イベントを除外するには、「追加」をクリックして既存のイベントのリストから選択するか、「名前でイベントを指定」をクリックして名前で既存のイベントを選択するか、プロパティで収集していないイベント名を定義します。

「追加」をクリックして既存のイベントのリストから選択するか、「名前でイベントを指定」をクリックして名前で既存のイベントを選択するか、プロパティで収集していないイベント名を定義します。

広告識別子を含める場合は、「モバイルアプリ ストリーム用の広告識別子の追加」を選択します。

データのエクスポートの頻度として「毎日」(1日1回)または「ストリーミング」(継続的)、あるいは両方を選択します。

「次へ」 をクリックします。

解説:ストリーミングとは

BigQuery ストリーミング エクスポートでは、BigQuery Export を介して当日のデータを数分以内に入手できます。

このエクスポート オプションを使用すると、BigQuery に最新のデータを読み込んで、ユーザーとプロパティのトラフィックを分析できます。

ストリーミング エクスポートでは、毎日新しいテーブルが 1 つ作成されます。

events_intraday_YYYYMMDD(イントゥラデイ=その日のうちに、の意): 内部ステージング テーブルです。このテーブルには、その日に発生したセッション アクティビティのレコードが保持されます。ストリーミング エクスポートはベスト エフォート型の処理であり、イベントの遅れやアップロードの失敗などにより、データに漏れが生じる場合もあります。データは 1 日を通して継続的にエクスポートされます。セッションが複数のエクスポート周期にまたがっていると、テーブルにはそのセッションのレコードが複数保存されることがあります。このテーブルは、events_YYYYMMDD の作成が完了すると削除されます。

ストリーミング エクスポートを選択した場合、次のテーブルも毎日作成されます。

events_YYYYMMDD: 1 日に 1 回、すべてのイベントがエクスポートされます。

その日の安定したデータセットを分析できるよう、クエリでは、events_intraday_YYYYMMDD ではなく events_YYYYMMDD を使用するようにしてください。

公式ヘルプ:https://support.google.com/analytics/answer/9358801?hl=ja

データをストリーミング送信するメリット

■絶好のタイミングで広告配信

たとえば、ユーザーが(商品をカートに追加するなど)興味を示したもののコンバージョンに至らなかった場合、その直後に割引を提示すると効果的であることがわかっています。最適なタイミングで割引をアピールすると、多くのユーザーが再びサイトを訪れ、コンバージョンを達成する可能性が高まります。そのためには、最新のデータを利用して該当する ユーザーをすばやく見つけ、ユーザーの関心を引き付ける広告を絶好のタイミングで配信しなければなりません。

■新たなトレンドの理解

頻繁なデータ更新は、問題のすみやかな特定と解決にも役立ちます。また、文化的トレンドをいち早くキャッチして、情報を発信することもできます。BigQuery は、こうしたデータ運用の重要な部分を担います。CRM システム、コールセンター、実店舗など、現在 Google アナリティクスでは利用できないデータを取り込むことで、顧客、問題点、新たなトレンドを深く理解することができます。

公式ブログ: https://analytics-ja.googleblog.com/2017/10/google-bigquery.html

BigQuery を GA4 プロパティにリンクする(リンクを完了させる)

設定を確認して、「送信」をクリックします。

参考:選択したリージョンが間違っていて、リンクの作成後に変更する必要がある場合

  1. BigQuery へのリンクを削除します(後述)。
  2. データを BigQuery の別のデータセットにバックアップ(移動(https://cloud.google.com/bigquery/docs/managing-datasets#moving_datasets)またはコピー(https://cloud.google.com/bigquery/docs/copying-datasets))します。
  3. 元のデータセットを削除(https://cloud.google.com/bigquery/docs/samples/bigquery-delete-dataset)「します。次のステップで必要になるため、名前を控えておきます。
  4. 削除したデータセットと同じ名前で新しいデータセットを作成し、データのロケーションを選択します。
  5. バックアップしておいたデータを、新しいデータセットにコピーします。
  6. 上の手順を繰り返して、BigQuery へのリンクを新たに作成します。

ロケーションを変更すると、データに空白期間が生じる点に注意しましょう。元のリンクを削除してから新しいリンクを削除するまでの間、データのエクスポートは(頻度が「ストリーミング」でも「毎日」でも)処理されません。

公式ヘルプ: https://support.google.com/analytics/answer/9823238?hl=ja#zippy=%2C%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%86%85%E5%AE%B9

BigQuery へのリンクを削除する

管理ページで、目的のアカウントとプロパティが選択されていることを確認します。

「プロパティ」列の 「BigQuery とのリンク」をクリックします。

目的のリンクの行をクリックします。

公式ヘルプ:https://support.google.com/analytics/answer/9823238?hl=ja#zippy=%2C%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%86%85%E5%AE%B9

画面右上の その他 > [削除] の順にクリックします。

解説:BigQuery Export に関する制限

標準プロパティでは、BigQuery Export の 1 日の上限は 100 万イベント(Google アナリティクス 360(Google アナリティクス 4 プロパティ)の場合はヘルプに「数十億件のイベント」と記載されています。 https://support.google.com/analytics/answer/11202874 )です。プロパティがエクスポートの上限を継続的に超えると、BigQuery の日次エクスポートは一時停止され、それ以前の数日間のエクスポートは再処理されません。

プロパティの編集者と管理者には、自らが管理しているプロパティが 1 日の上限を超えるたびにメール通知が届きます。この通知には、何も対応しなかった場合にエクスポートが一時停止される時期が記載されます。また、標準プロパティが 1 日の上限である 100 万件イベントを大幅に超えると、アナリティクスでは日次エクスポートが直ちに一時停止されることがあります。通知が届いた場合は、データ フィルタリング機能(データ ストリーム エクスポートとイベント除外)( https://support.google.com/analytics/answer/9823238?hl=ja#datafiltering )を利用して、毎日エクスポートするイベント数を減らし、日次エクスポートの作業を継続できるようにしてください。

ストリーミング エクスポート( https://support.google.com/analytics/answer/9358801#streaming )に制限はありません。

詳しくは、360 プロパティの機能に適用される制限についてのヘルプ( https://support.google.com/analytics/answer/11202874 )をご覧ください。

BigQuery の料金

BigQuery の料金はストレージとクエリ処理に基づいて請求されます。

価格表(https://developers.google.com/bigquery/pricing#packagetable)をご覧になり、インタラクティブ クエリとバッチクエリの違い(https://cloud.google.com/bigquery/docs/running-queries?hl=jp#batchqueries)を確認してください。

エクスポートを処理するには、クラウドに有効なお支払い方法の登録(https://support.google.com/cloud/answer/4356189)が必要です。無効なお支払い方法が原因でエクスポートが中断された場合、その期間のデータをエクスポートし直すことができませんのでご注意ください。

アナリティクスのデータは 「BigQuery サンドボックス」(前出)に無料でエクスポートすることもできますが、「サンドボックスの制限」(前出)が適用されることにご注意ください。

公式ヘルプ:https://support.google.com/analytics/answer/9823238?hl=ja#zippy=%2C%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%86%85%E5%AE%B9

料金と課金 東京(asia-northeast) (1) ストレージの料金

課金対象料金詳細
アクティブストレージ(注1)$0.023 / GB毎月10 GBまで無料
長期保存(注2)$0.016 / GB毎月10 GBまで無料

(注1)「アクティブ ストレージ」には、過去 90 日間で変更されたテーブルまたはテーブル パーティションが含まれます。

(注2)「長期保存」には、90 日間連続して変更されていないテーブルまたはテーブル パーティションが含まれます。そのテーブルのストレージの料金は自動的に約 50% 値引きされます。アクティブ ストレージと長期保存のパフォーマンス、耐久性、可用性に違いはありません。

料金と課金 東京(asia-northeast) (2) データ取り込みの料金

課金対象料金詳細
 BigQuery Storage API$0.03 / GB 毎月最初の 2 TB まで無料
ストリーミング挿入$0.012 / 200MB挿入に成功した行が対象課金となります。 最小サイズ1 KBで各行が計算されます。

BigQuery へのデータの読み込みの概要 公式ヘルプ:https://cloud.google.com/bigquery/docs/loading-data?hl=ja

料金と課金 東京(asia-northeast) (3) 分析の料金

課金対象料金詳細
クエリ(オンデマンド分析)$6.00 / TB毎月1TBまで無料
クエリ(月定額)$2,400 / 100 slots最小スロット数は 100 で、100 スロット単位で購入可能
クエリ(年定額)$2,040 / 100 slots最小スロット数は 100 で、100 スロット単位で購入可能

最新情報を公式ヘルプでご確認ください:https://cloud.google.com/bigquery/pricing?hl=ja#storage

データのエクスポートが開始されるタイミング

リンク完了後 24 時間以内に、データが BigQuery プロジェクトにエクスポートされるようになります。

毎日のエクスポートを有効にすると、前日のデータが格納された 1 ファイルが毎日(通常は、レポート作成用に設定したタイムゾーンの午後の早い時間帯に)エクスポートされます。

公式ヘルプ:https://support.google.com/analytics/answer/9823238?hl=ja#zippy=%2C%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%86%85%E5%AE%B9

BigQuery にエクスポートされるデータ

[GA4] BigQuery Export スキーマ

データセット

BigQuery にリンクしている GA4 プロパティおよび Firebase プロジェクトごとに、「analytics_<property_id>」という名前の 1 つのデータセットが BigQuery プロジェクトに追加されます。

公式ヘルプ

https://support.google.com/analytics/answer/7029846?hl=ja

テーブル

毎日のエクスポート オプションまたはストリーミング エクスポート オプションが有効になっているかどうかにかかわらず、各データセット内に events_YYYYMMDD という名前のテーブルが毎日作成されます。

ストリーミング エクスポート オプションを有効にすると、events_intraday_YYYYMMDD という名前のテーブルも作成されます。(前出)イベントは 1 日中記録されるため、このテーブルには継続的にデータが入力されます。このテーブルは、events_YYYYMMDD の作成が完了すると 1 日の終わりに削除されます。(BigQuery サンドボックスの場合、1 日の途中にはイベントはインポートされず、追加で適用される上限設定があります。当日にインポートする場合は、サンドボックスからアップグレードしてください)

主なデータ型

データ型説明
STRING文字列型
INTEGER(インテジャー)整数型
BOOLEAN(ブーリアン)TRUE または FALSE(フォールス)
FLOAT浮動小数点型 小数部分を持つ数値

主なデータ型 RECORD

列の種類として、event_paramsのように「RECORD」という種別があります。

種類:「RECORD」、モード:「REPEATED」の列は構造体と呼ばれる特殊なデータ型で、内部に配列(複数のデータを順番に並べた構造)などさまざまなフィールドを内包しています。

この構造体を組み合わせると、複数のテーブルを一つに結合しているかのように使うことができます。その結果、個別のテーブルをJOIN(2つ以上のテーブルを繋ぐこと)してクエリーするよりも高速に複雑なデータを分析できます。

[event_params]を例にRECORD型を解説

ここからは、[event_params]を例にRECORD型を解説します。 

1つのレコードが1つのイベントを格納しており(上記の例では、page_view)、その中に埋め込まれたテーブルが、そのイベント(=page_view)のパラメータを格納しています。

[event_params]は[key]と[value]に別れています。[value]は更に4つに分かれています。

  • [string_value]=文字列を格納する。
  • [int_value]=整数を格納する。
  • [float_value」=浮動小数点型のデータを格納する。
  • [double_value]=有効桁数の多い小数を格納する。

たとえば、page_titleは[string_value]に格納されています。文字列は[string_value]に入れることが決まっているからです。

BigQuery にエクスポートされるデータスキーマ

スキーマとは、データベースのデータの構造、性質、などを定義したものです。

BigQueryにエクスポートされるGA4のデータのスキーマを確認します。

公式ヘルプ:https://support.google.com/analytics/answer/7029846?hl=ja

フィールド名データ型説明
アプリ  
app_infoRECORDアプリについての情報を格納するレコード。
app_info.idSTRINGアプリのパッケージ名またはバンドル ID。
app_info.firebase_app_idSTRINGアプリに関連付けられている Firebase アプリ ID。
app_info.install_sourceSTRINGアプリをインストールしたストア。
app_info.versionSTRINGアプリの versionName(Android の場合)または short bundle version。
デバイス  
deviceRECORDデバイスの情報を格納するレコード。
device.categorySTRINGデバイスのカテゴリ(モバイル、タブレット、PC)。
device.mobile_brand_nameSTRINGデバイスのブランド名。
device.mobile_model_nameSTRINGデバイスのモデル名。
device.mobile_marketing_nameSTRINGデバイスのマーケティング名。
device.mobile_os_hardware_modelSTRINGオペレーティング システムから直接取得したデバイスのモデル情報。
device.operating_systemSTRINGデバイスのオペレーティング システム。
device.operating_system_versionSTRINGOS のバージョン。
device.vendor_idSTRINGIDFV(IDFA を収集していない場合にのみ使用)。
device.advertising_idSTRING広告 ID または IDFA。
device.languageSTRINGOS の言語。
device.time_zone_offset_secondsINTEGERGMT との時差(秒単位)。
device.is_limited_ad_trackingBOOLEANデバイスの広告トラッキング制限の設定。iOS14 以降では、IDFA がゼロ以外の場合、false が返されます。
device.web_info.browserSTRINGユーザーがコンテンツを閲覧したブラウザ。
device.web_info.browser_versionSTRINGユーザーがコンテンツを閲覧したブラウザのバージョン。
device.web_info.hostnameSTRINGログに記録されたイベントに関連付けられたホスト名。
ストリームとプラットフォーム  
stream_idSTRINGストリームの数値 ID。
platformSTRINGアプリケーションが構築されているプラットフォーム。
ユーザー  
user_first_touch_timestampINTEGERユーザーが初めてアプリを起動したか、サイトに訪れた時刻(マイクロ秒単位)。
user_idSTRINGsetUserId API によって設定されるユーザー ID。
user_pseudo_idSTRINGユーザーの仮の ID(アプリ インスタンス ID など)。
user_propertiesRECORDsetUserProperty API によって設定される、ユーザー プロパティの繰り返しレコード。
user_properties.keySTRINGユーザー プロパティの名前。
user_properties.valueRECORDユーザー プロパティの値を格納するレコード。
user_properties.value.string_valueSTRINGユーザー プロパティの文字列値。
user_properties.value.int_valueINTEGERユーザー プロパティの整数値。
user_properties.value.double_valueFLOATユーザー プロパティの倍精度値。
user_properties.value.float_valueFLOATこのフィールドは現在使用されていません。
user_properties.value.set_timestamp_microsINTEGERユーザー プロパティが最後に設定された時刻(ミリ秒単位)。
user_ltvRECORDユーザーのライフタイム バリューに関する情報を格納するレコード。このフィールドは当日表では使用されません。
user_ltv.revenueFLOATユーザーのライフタイム バリュー(収益)。このフィールドは当日表では使用されません。
user_ltv.currencySTRINGユーザーのライフタイム バリュー(通貨)。このフィールドは当日表では使用されません。
キャンペーン 注: traffic_source のアトリビューションは、クロスチャネルのラストクリックに基づいています。traffic_source の値は、ユーザーがインストール後に次のキャンペーンを操作しても変更されません。
traffic_sourceRECORDユーザーを最初に獲得したトラフィック ソースの名前。このフィールドは当日表では使用されません。
traffic_source.nameSTRINGユーザーを最初に獲得したマーケティング キャンペーンの名前。このフィールドは当日表では使用されません。
traffic_source.mediumSTRINGユーザーを最初に獲得したメディアの名前(有料検索、オーガニック検索、メールなど)。このフィールドは当日表では使用されません。
traffic_source.sourceSTRINGユーザーを最初に獲得したネットワークの名前。このフィールドは当日表では使用されません。
地域  
geoRECORDユーザーの位置情報を格納するレコード。
geo.continentSTRINGイベントが報告された大陸(IP アドレスベース)。
geo.sub_continentSTRINGイベントが報告された亜大陸(IP アドレスベース)。
geo.countrySTRINGイベントが報告された国(IP アドレスベース)。
geo.regionSTRINGイベントが報告された地域(IP アドレスベース)。
geo.metroSTRINGイベントが報告された大都市圏(IP アドレスベース)。
geo.citySTRINGイベントが報告された都市(IP アドレスベース)。
イベント  
event_dateSTRINGイベントが記録された日付(アプリの登録タイムゾーンにおける日付を YYYYMMDD 形式で示したもの)。
event_timestampINTEGER該当クライアントでイベントが記録された時刻(ミリ秒単位、UTC)。
event_previous_timestampINTEGER該当クライアントで前回イベントが記録された時刻(ミリ秒単位、UTC)。
event_nameSTRINGイベントの名前。
event_paramsRECORDこのイベントに関連付けられたパラメータを格納する繰り返しレコード。
event_params.keySTRINGイベント パラメータのキー。
event_params.valueRECORDイベント パラメータの値を格納するレコード。
event_params.value.string_valueSTRINGイベント パラメータの文字列値。
event_params.value.int_valueINTEGERイベント パラメータの整数値。
event_params.value.double_valueFLOATイベント パラメータの倍精度値。
event_params.value.float_valueFLOATイベント パラメータの浮動小数点値。このフィールドは現在使用されていません。
event_value_in_usdFLOATイベントの「値」パラメータの通貨換算値(米ドル単位)。
event_bundle_sequence_idINTEGERこれらのイベントをアップロードしたバンドルのシーケンシャル ID。
event_server_timestamp_offsetINTEGERデータの収集時とアップロード時のタイムスタンプの間隔(マイクロ秒単位)。
e コマース  
ecommerceRECORDe コマースに関する情報を格納するレコード。
ecommerce.total_item_quantityINTEGERこのイベントにおけるアイテムの合計数。items.quantity の合計です。
ecommerce.purchase_revenue_in_usdFLOATこのイベントでの購入による収益。米ドル(標準単位)で表記されます。購入イベントに対してのみ入力されます。
ecommerce.purchase_revenueFLOATこのイベントでの購入による収益。現地通貨(標準単位)で表記されます。購入イベントに対してのみ入力されます。
ecommerce.refund_value_in_usdFLOATこのイベントにおける払い戻しの金額。米ドル(標準単位)で表記されます。払い戻しイベントに対してのみ入力されます。
ecommerce.refund_valueFLOATこのイベントにおける払い戻しの金額。現地通貨(標準単位)で表記されます。払い戻しイベントに対してのみ入力されます。
ecommerce.shipping_value_in_usdFLOATこのイベントにおける送料。米ドル(標準単位)で表記されます。
ecommerce.shipping_valueFLOATこのイベントにおける送料。現地通貨で表記されます。
ecommerce.tax_value_in_usdFLOATこのイベントにおける税額。米ドル(標準単位)で表記されます。
ecommerce.tax_valueFLOATこのイベントにおける税額。現地通貨(標準単位)で表記されます。
ecommerce.transaction_idSTRINGe コマース トランザクションのトランザクション ID。
ecommerce.unique_itemsINTEGERこのイベントにおける固有のアイテム数。item_id、item_name、item_brand に基づきます。
商品アイテム  
itemsRECORDこのイベントに含まれる商品アイテムの繰り返しレコード。
items.item_idSTRING商品アイテムの ID。
items.item_nameSTRING商品アイテムの名前。
items.item_brandSTRING商品アイテムのブランド。
items.item_variantSTRING商品アイテムのバリエーション。
items.item_categorySTRING商品アイテムのカテゴリ。
items.item_category2STRING商品アイテムのサブカテゴリ。
items.item_category3STRING商品アイテムのサブカテゴリ。
items.item_category4STRING商品アイテムのサブカテゴリ。
items.item_category5STRING商品アイテムのサブカテゴリ。
items.price_in_usdFLOAT商品アイテムの価格。米ドル(標準単位)で表記されます。
items.priceFLOAT商品アイテムの現地通貨での価格。
items.quantityINTEGER商品アイテムの数量。
items.item_revenue_in_usdFLOATこの商品アイテムの収益。price_in_usd x 数量によって計算されます。購入イベントに対してのみ入力され、米ドル(標準単位)で表記されます。
items.item_revenueFLOATこの商品アイテムの収益。価格 x 数量によって計算されます。購入イベントに対してのみ入力され、現地通貨(標準単位)で表記されます。
items.item_refund_in_usdFLOATこの商品アイテムの払い戻し額。price_in_usd x 数量によって計算されます。払い戻しイベントに対してのみ入力され、米ドル(標準単位)で表記されます。
items.item_refundFLOATこの商品アイテムの払い戻し額。価格 x 数量によって計算されます。払い戻しイベントに対してのみ入力され、現地通貨(標準単位)で表記されます。
items.couponSTRINGこの商品アイテムに適用されるクーポンコード。
items.affiliationSTRING仕入れ先業者や実店舗を指定する商品アフィリエーション。
items.location_idSTRING商品アイテムに関連付けられている場所。
items.item_list_idSTRINGユーザーに商品アイテムが表示されたリストの ID。
items.item_list_nameSTRINGユーザーに商品アイテムが表示されたリストの名前。
Items.item_list_indexSTRINGリスト内の商品アイテムの位置
items.promotion_idSTRING商品プロモーションの ID。
items.promotion_nameSTRING商品プロモーションの名前。
items.creative_nameSTRINGプロモーション スポットで使用されたクリエイティブの名前。
items.creative_slotSTRINGクリエイティブ スロットの名前。
ウェブ  
web_infoRECORDウェブデータの情報のレコード。
プライバシー情報 以下のフィールドは、同意モードを使用した場合のユーザーの同意ステータスに基づいています。
privacy_info.ads_storageSTRINGユーザーに対して広告ターゲティングが有効になっているかどうか。有効な値: Yes、No、Unset
privacy_info.analytics_storageSTRINGユーザーに対してアナリティクスのデータ保存が有効になっているかどうか。有効な値: Yes、No、Unset
privacy_info.uses_transient_tokenSTRINGウェブユーザーがアナリティクスでのデータ保存を拒否し、デベロッパーがサーバーデータの一時的なトークンに基づいて Cookie を使用しない測定を有効にしているかどうか。有効な値: Yes、No、Unset

BigQuery の操作

プロジェクトを選択し、左サイドメニューの「分析」の中から、BigQueryを選択する。

GA4側で確認できるプロジェクト IDは、BigQueryの下記の位置で確認できる。

プロジェクトIDをクリックすると、「analytics_<property_id>」という名前の 1 つのデータセットが表示される。

プロパティIDは、GA4の下記の位置で確認できる。

公式ヘルプ:https://support.google.com/analytics/answer/7029846?hl=ja

「analytics_<property_id>」をクリックし、「events_」をクリックすると、最後にインポートされた1日分のデータが表示されます。YYYY-MM-DDのプルダウンをクリックすると、日毎のデータを選択することができます。(サンドボックス利用中は、60日より前のデータは削除される。)

「スキーマ」を表示するタブ。

「詳細」タブで、「テーブル情報」が表示される。

「プレビュー」タブで、テーブルをプレビューすることができる。

「プレビュー」では、イベントとパラメータを見ることができる。

クエリ

「クエリ」でクエリ実行画面を開くことができる。

実際に上の結果が得られるクエリを実行してみます。

イベント名別のイベントの実行回数の一覧です。

ここからは、SQLを使って、データを取得する方法をご紹介します。

SQLとは、リレーショナルデータベース(複数の表の形式で、データを管理するデータベースシステム)を操作するための言語です。

SQLが何の略かは諸説ありますが、たとえば、

Structured(構造化された)、Query(問い合わせ用の)、Language(言語)

という説があります。

これからSQLを習得したいという方の入門書としては、下記の本がおすすめです。

集中演習 SQL入門
Google BigQueryではじめるビジネスデータ分析
木田和廣  (著) 
インプレス (2021/2/19)

実際に下記のクエリを実行することで、先ほど見た実行結果が得られます。

1行ずつ解説していきます。

※SQLの書き方は1つではありません。あくまでも書き方の一つとしてご覧ください。

SELECT
データを取得するカラムを指定する。

FROM
データを取得するテーブルを指定する。

COUNT
[event_name]フィールドを基準にグループ化して、それぞれのレコード数を[event_count]として取得する。

WHERE
条件を指定して、合致するレコードだけを取得する。

_TABLE_SUFFIX BETWEEN ‘YYYYMMDD’ AND ‘YYYYMMDD’
日付別に分割されたテーブルをまとめて参照する。

GROUP BY
フィールドを指定して、グループ化(例:同じイベント名を1行にまとめて集計)する。
GROUP BY は列番号を指定してグループ化することができる。
[event_name] [event_count]というフィールド名が並んでいる場合、「1」は[event_name] のことである。

ORDER BY
ORDER BYに続けて、並べ替えの基準とするフィールド名を並べ替える。
ORDER BYは列番号を指定して並べ替えすることができる。
[event_name] [event_count]というフィールド名が並んでいる場合、「2」は[event_count] のことである。
ORDER BY で並べ替えの基準とするフィールド名(列番号)を指定した後、ASC(アスク)で昇順の指定、DESC(デスク)で降順の指定ができる。ASCは省略できるので、何もつけない場合は、昇順となる。

ここまでで見た、クエリの実行結果は上記のようになります。
イベント名別のイベントの実行回数の一覧です。

SQLの例 page_titleとPV数のデータを作成

「page_title」はRECORD型の「event_params」の中にあります。

[event_params]は[key]と[value]に別れています。[value]は更に4つに分かれています。

  • [string_value]=文字列を格納する。「page_title」のvalueはここに入ります。
  • [int_value]=整数を格納する。
  • [float_value」=浮動小数点型のデータを格納する。
  • [double_value]=有効桁数の多い小数を格納する。

整理すると、上記のようになります。

※SQLの書き方は1つではありません。あくまでも書き方の一つとしてご覧ください。

RECORD型の「event_param」からデータを取り出す時は、UNNESTを使います。

「key」が「page_title」のデータを取得します。

「event_name」が「page_view」に合致するデータだけを取得する。

今回はクエリ結果とGA4のレポートの数値が一致しています。(何らかの理由で、若干の差が出る可能性もあると思われます。)※サンドボックスは60日より前のデータが自動で削除されているので、GA4のレポートとのデータ比較の際は注意が必要です。

GA4のデータと外部のデータをBigQuery内で結合する

ここでは、GA4のデータと、セミナー申込受付システムのデータをBigQuery内で結合する例をご説明します。

外部のデータを、GA4からエクスポートしたBigQueryのデータに繋ぎます。

今回、例として繋ぎたいのは、セミナーの参加者データです。

GA4が持っているセミナー別の案内ページのPV数のデータと繋ぎます。

見出し行は、半角英数文字にします。アップロードの際の文字コードはUTF-8です。

外部データ(この場合はCSVファイル)をインポートする「データセット」を選択し、「テーブルを作成」をクリック。

CSVファイルをBigQueryにアップロードする。

CSVファイルがBigQueryにアップロードされた。

※SQLの書き方は1つではありません。あくまでも書き方の一つとしてご覧ください。

RECORD型の「event_param」からデータを取り出す時は、UNNESTを使います。

赤線で囲んだ部分は既に見た「page_titleとPV数のデータを作成」とそっくりですが、WITHで「仮想テーブル」を作っている点が異なります。

「WITHで仮想テーブルを作る」とは、ここでは、先に[page_location](=URL)と[pageviews]のテーブルを作っておくことを指します。

後半では、「RIGHT OUTER JOIN」を使って、仮想テーブルと、CSVでインポートしたテーブルを連結しています。page_location =url によって結合させています。

RIGHT OUTER JOIN の解説

RIGHT OUTER JOIN は、FROMで指定するテーブルを左側、RIGHT OUTER JOINで指定するテーブルを右側として、右側は全レコード、左側は右側と共通して持つフィールドの値が重なっているレコードのみを残します。

実行結果はこちらです。GA4が持っていたページビュー数と、外部にあったセミナー参加者数のデータが、page_location=URLをキーにして結合されています。

上記の例で参加者数よりもpageviewsの数値が小さくなっているのは、サンドボックスを使用しているため、60日よりも前のデータが削除されており、集計対象とならなかったためです。

関連記事

特集記事

コメント

  1. Woow that was odd. I just wrote an very long comment but afrter I clicked submit my commenjt didn’t appear.

    Grrrr… wrll I’m not writing alll tgat over again. Anyway, jist wanted tto say supdrb blog!

  2. Я прочитал эту статью с большим удовольствием! Автор умело смешал факты и личные наблюдения, что придало ей уникальный характер. Я узнал много интересного и наслаждался каждым абзацем. Браво!

  3. Я восхищен тем, как автор умело объясняет сложные концепции. Он сумел сделать информацию доступной и интересной для широкой аудитории. Это действительно заслуживает похвалы!

  4. Аргументы подкреплены фактами и исследованиями, что позволяет читателям рассмотреть разные стороны вопроса.

  5. Я просто не могу не поделиться своим восхищением этой статьей! Она является источником ценных знаний, представленных с таким ясным и простым языком. Спасибо автору за его умение сделать сложные вещи доступными!

  6. Я хотел бы выразить свою благодарность автору за его глубокие исследования и ясное изложение. Он сумел объединить сложные концепции и представить их в доступной форме. Это действительно ценный ресурс для всех, кто интересуется этой темой.

  7. Send anonymous email with attachment, you can send unlimited email securely with anonymous email service http://candymail.org/ and no registration required.

  8. Автор умело структурирует информацию, что помогает сохранить интерес читателя на протяжении всей статьи.

  9. Статья предлагает глубокий анализ проблемы, рассматривая ее со всех сторон.

  10. Это поддерживается ссылками на надежные источники, что делает статью достоверной и нейтральной.

  11. Статья представляет интересный взгляд на данную тему и содержит ряд полезной информации. Понравилась аккуратная структура и логическое построение аргументов.

  12. Ahaa, its good discussion concerning this post at this place at this weblog, I
    have read all that, so now me also commenting here.

  13. Статья содержит актуальную информацию, которая помогает понять сложность и важность проблемы.

  14. Thanks for sharing your thoughts. I truly appreciate your efforts and I am waiting for your further write ups thanks once again.

  15. Superb blog! Do you have any recommendations for aspiring writers?
    I’m planning to start my own website soon but I’m a little lost
    on everything. Would you suggest starting with a free platform like WordPress
    or go for a paid option? There are so many options out there that
    I’m totally confused .. Any recommendations? Thank you!

  16. Thanks in support of sharing such a fastidious idea, article is fastidious, thats
    why i have read it fully

  17. Your style is very unique in comparison to other people I’ve read stuff from. Many thanks for posting when you’ve got the opportunity, Guess I will just bookmark this page.

  18. Howdy, I do think your site might be having internet browser compatibility problems. When I take a look at your website in Safari, it looks fine however, when opening in IE, it’s got some overlapping issues. I just wanted to give you a quick heads up! Apart from that, wonderful site!

  19. Highly energetic blog, I enjoyed that bit. Will there be a part 2?

  20. Hi there! I know this is kinda off topic but I was wondering which blog platform are you using for this site?
    I’m getting tired of WordPress because I’ve had issues with hackers and
    I’m looking at alternatives for another platform.
    I would be awesome if you could point me in the direction of a good
    platform.

  21. My brother suggested I would possibly like this blog. He was totally right. This post truly made my day. You cann’t consider just how a lot time I had spent for this info! Thank you!

  22. Why viewers still use to read news papers when in this technological world the whole thing is existing on web?

  23. Yes! Finally someone writes about keyword1.

  24. You actually make it seem so easy with your presentation but I find this matter to be actually something that I think I would never understand. It seems too complex and very broad for me. I’m looking forward for your next post, I will try to get the hang of it! Это сообщение отправлено с сайта https://ru.gototop.ee/

  25. Небольшие доски объявлений, такие как эта, становятся все более популярными, привлекая большое количество пользователей, которые ценят локальность, удобство и безопасность.

  26. Disposable Email Addresses: CandyMail.org also offers disposable email addresses, allowing users to create temporary aliases for specific purposes. These addresses can be used to sign up for online services, forums, or any situation that requires an email address but may pose a risk to privacy. With disposable email addresses, users can protect their primary email accounts from unwanted spam or potential data breaches.

  27. Healthcare Privacy

  28. rx pharmacy are canadian pharmacies legitimate

  29. Hey there! I simply would like to give you a huge thumbs up for the great info you’ve got right here on this post.I will be coming back to your blog for more soon.

  30. Thank you ever so for you blog post.Much thanks again.

  31. Sweet blog! I found it while surfing around on Yahoo News.Do you have any tips on how to get listed in Yahoo News? I’ve been trying for a while but I never seem toget there! Thank you

  32. I got this site from my friend who informed me concerning
    this website and at the moment this time I am browsing this site and reading very informative content at this time.

    Look at my website – thermal scope for ar15

  33. Say, you got a nice blog. Awesome.

  34. Thanks for sharing, this is a fantastic article.Really thank you! Cool.

  35. Very informative blog.Thanks Again. Really Cool.

  36. I quite like cooking can i take ibuprofen when i am pregnant Lynch’s spokesman also asserted that the union president does not have the power to guide the performance of his members.

  37. Thank you for the auspicious writeup. It in reality was once a enjoymentaccount it. Look advanced to far delivered agreeable from you!By the way, how could we keep up a correspondence?

  38. Hi! I just want to offer you a big thumbs up for the excellent info you have right here on this post. I am returning to your blog for more soon.

  39. I really enjoy the blog article.Thanks Again. Want more.

  40. I always spent my half an hour to read this website’s posts every day along with a cup of coffee.

  41. Very neat article post.Much thanks again. Awesome.

  42. I’m not sure where you are getting your info, but great topic.I needs to spend some time learning much more orunderstanding more. Thanks for wonderful information I was looking for this info for my mission.

  43. Sweet blog! I found it while searching on Yahoo News. Do you have any suggestionson how to get listed in Yahoo News? I’ve been trying for a while but I never seem to get there!Thank you

  44. replica rolex watches unquestionably are hand-crafted.

  45. Aw, this was a very nice post. Taking the time and actualeffort to create a good article… but what can I say… I put things off a wholelot and never seem to get anything done.

  46. Heya! I just wanted to ask if you ever have any problems with hackers? My last blog (wordpress) was hacked and I ended up losing several weeks of hard work due to no backup. Do you have any methods to protect against hackers?

  47. Hello! I’m at work surfing around your blog from my new apple iphone! Just wanted to say I love reading your blog and look forward to all your posts! Carry on the superb work!

  48. Im thankful for the blog article.Really thank you!

  49. Very great post. I simply stumbled upon your blog and wished to say that I have truly loved surfing around your blog posts. After all I will be subscribing to your rss feed and I’m hoping you write once more soon!

  50. I really appreciate this post. I’ve been looking everywhere for this! Thank goodness I found it on Bing. You’ve made my day! Thx again! soyos

  51. Thanks for finally writing about > ელგუჯა გოცირიძემ ტყიბულის მაჟორიტარიდეპუტატის მანდატი პირველივე ტურში მოიპოვა —infotkibuli.ge sylvbuster.free.fr

  52. essay editorwriting a five paragraph essayself reflection essay

  53. Excellent way of explaining, and nice article to get data about my presentation subject matter,
    which i am going to deliver in institution of higher
    education.
    powered by GoToTop.ee
    https://ru.gototop.ee/

  54. L67HGr15dPOxPiwWNLfWnOxrsQAiRImnUJWTlOSuLU51tFRHQEzOAnPOkK5UWWQ9x24YNc3qEreeDGfvvFtlOPJnQapJFdI5b0m3c9GJKCrUIIZA1hmmOIwbuOD6USxMOgcQgHBGA86KBAY9IF9Q8RfydXXKffWfjOEaIlg

  55. online pharmacy india supreme suppliers mumbai india onlinepharmacy

  56. Amazing things here. I am very glad to look your article.Thank you so much and I’m looking ahead to contact you.Will you please drop me a mail?

  57. Hi there! This post couldn’t be written any better! Reading this post reminds me of my previous room mate!
    He always kept talking about this. I will forward this page to him.
    Pretty sure he will have a good read. Thanks for
    sharing!
    powered by GoToTop.ee
    https://ru.gototop.ee/

  58. Wow that was unusual. I just wrote an very long comment but after I clicked submit my comment didn’t appear. Grrrr… well I’m not writing all that over again. Anyways, just wanted to say great blog!

  59. 백링크 프로그램, 국내최초 자체 개발을 통해 애드뉴만의 로직으로 백링크를 작업해드립니다. 승인코드 AD

  60. A round of applause for your blog.Really looking forward to read more. Really Cool.

  61. Thanks-a-mundo for the blog post.Much thanks again. Great.

  62. amlodipine gingival hyperplasia side effects of norvasc blood pressure medicine

  63. Medicine information. What side effects?can i purchase singulair in CanadaBest about medicines. Get now.

  64. carvela flat schuhe samsung s10e led hoesje black and orange broncos jersey accessorize robot torba lumee case for iphone 8 canvas travel tote zak teamcansler

  65. when new comments are added- checkbox and from now on whenever a comment is added I get four

  66. I want to to thank you for this very good read!! I absolutely loved every bit of it. I have got you bookmarked to check out new stuff you postÖ

  67. I don’t even know how I ended up here, but I thought this post was great. I do not know who you are but certainly you are going to a famous blogger if you aren’t already 😉 Cheers!

  68. I have read so many posts regarding the blogger lovers but this paragraph is actually a good piece of writing, keep it up.

  69. It is in point of fact a great and helpful piece of information. I’m happy that you just shared this helpful information with us. Please stay us informed like this. Thank you for sharing.

  70. Hello there! I know this is kind of off topic but I was wondering if you knew where I could find a captcha plugin for my comment form? I’m using the same blog platform as yours and I’m having problems finding one? Thanks a lot!

  71. walgreens 24 hour pharmacy canadian pharmacies certified

  72. Hello there! This post couldn’t be written any better! Reading this post reminds me of my previous room mate! He always kept chatting about this. I will forward this article to him. Fairly certain he will have a good read. Many thanks for sharing!

  73. I like what you guys are up too. This sort of clever work and coverage! Keep up the great works guys I’ve you guys to our blogroll.

  74. In my opinion you are mistaken. I can defend the position.

  75. A round of applause for your article.Much thanks again. Great.

    • Андрей Романов
    • 2023.09.04 5:16am

    Добрый день,

    Предлагаем вам попробовать новую услугу Статейное продвижение + Промокод на 1000р. от GoToTop на первую кампанию

    DT5X885Q

    GoToTop – это сервис массового размещения ссылок. Хорошая по качеству и большая по объему ссылочная масса обеспечивает более высокие позиции сайта в поисковой выдаче.

    * Вы можете воспользоваться бонусом при заказе любого пакета услуг на сайте GoToTop.

    ** Кому подойдет: Владельцам сайтов, админам, специалистам в области разработки сайтов и всем другим, кто заинтересован в росте позиций своего сайта.

    *** Промокод является фиксированной скидкой на покупку и действует до 31.08.2023 г.

  76. I appreciate you sharing this article. Really Cool.

  77. This is a great tip especially to those new to the blogosphere.Short but very accurate information… Thanks for sharing thisone. A must read post!

  78. Keep in mind what you’ve learned so that you can bring it on the field.Surprise Yourself! Boost Your Blogging With This Advice

  79. Very good blog article. Will read on…

  80. avengers endgame scena dopo i titoli di coda

  81. always i used to read smaller content that as well clear their motive, and that isalso happening with this paragraph which I am reading at this time.

  82. land o lakes apartments sunscape apartments arvada apartments

  83. grande court apartments rentberry scam ico 30m$ raised wichita apartments

  84. Piece of writing writing is also a fun, if you be acquainted with after that you can write otherwise it is difficult towrite.

  85. sleekness as well as classiness. An elegant ladies watch that

  86. I do believe all the concepts you’ve introduced for your post. They’re very convincing and can definitely work. Nonetheless, the posts are too brief for newbies. Could you please lengthen them a bit from subsequent time? Thank you for the post.

  87. I value the blog.Much thanks again. Will read on…

  88. help with an essay college essay prompts how to write essay how to write a essay

  89. Major thankies for the blog article. Really Great.

  90. Hi there i am kavin, its my first occasion to commentinganywhere, when i read this paragraph i thought i could also make comment due to this sensible article.

  91. This is a very good tip especially to those fresh to the blogosphere. Brief but very accurate informationÖ Many thanks for sharing this one. A must read post!

  92. Some genuinely great info , Gladiola I discovered this. «Courage is contagious. When a brave man takes a stand, the spines of others are stiffened.» by William Franklin Billy Graham.

  93. Actually no matter if someone doesn’t understand afterward its upto other visitors that they will help, so here it takes place.

  94. I truly appreciate this blog.Really thank you! Cool.

  95. A precise & well-wrtitten post. Thanks heaps for sharing it.

  96. Yes! Finally someone writes about telegraph obituaries.

  97. My spouse and i ended up being thankful when Michael could do his analysis from the ideas he acquired out of the site. It’s not at all simplistic to simply always be offering steps that the others might have been making money from. Therefore we acknowledge we have got the website owner to appreciate because of that. The illustrations you’ve made, the straightforward blog menu, the relationships your site help to instill – it’s everything remarkable, and it’s really letting our son in addition to us recognize that the situation is brilliant, which is really essential. Thanks for all!

  98. Link exchange is nothing else except it is only placing
    the other person’s webpage link on your page at appropriate place
    and other person will also do same for you.

  99. Definitely believe that which you stated. Your favourite justification seemed to be on the internet the easiest factor to keep in mind of.

    I say to you, I certainly get annoyed while people think about
    issues that they plainly do not recognize about. You managed to hit the nail upon the top and also outlined out the whole thing with no need side-effects , other
    people could take a signal. Will likely be again to get more.
    Thanks

ランキング(週間)

  1. 1

    GA4 「ページ ロケーション」と「ページ パス と スクリーン クラス」何が違う?ドメインの有無以外にもパラメータの扱いに違いあり

  2. 2

    GA4のレポート画面の数値データは、イベント発生時から何時間後に確定するのか?

  3. 3

    GA4の探索で「ページ別訪問数」を見ることは可能か?

  4. 4

    GA4の指標「総ユーザー数」VS「アクティブ ユーザー数」

  5. 5

    【祝・GPT-4 が ChatGPT plus に登場記念!】アクセス解析コンサルタントが、GPT-4にCSVデータを渡して、データ解析結果のコメントを書いてもらう方法

  6. 6

    GA4 拡張計測機能の新顔「フォームの操作」 form_start, form_submit

  7. 7

    YouTubeの概要欄に貼られたリンクをクリックしてサイトを訪れたユーザーを計測するために

  8. 8

    GA4 クロスドメイン設定では、リンク先に「_gl」パラメータが付く。勝手なパラメータを付けるとエラーになるページは要注意

  9. 9

    GA4で異なるドメイン(サブドメイン)の同一ページパスをドメイン付きで表示する

  10. 10

    GA4では、utm_term, utm_content はどうなったのか?

最近の記事

  1. 生成AIを調整してABテストを実装したら想像以上に早かった

  2. 無料で使えるABテストツールのバージョンアップを行いました

  3. 無料ABテストツール(and,B)のマニュアルを作成しました

カテゴリー

 
TOP