

# Google Analytics 4 への接続
<a name="connecting-to-googleanalytics"></a>

 Google Analytics 4 は、アプリやウェブサイトでの訪問者のインタラクションに関するメトリクスを追跡および報告する分析サービスです。メトリクスには、ページビュー、アクティブなユーザー、イベントが含まれます。Google Analytics 4 ユーザーの場合は、Google Analytics 4 アカウントに AWS Glue を接続できます。Google Analytics 4 を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Google Analytics 4 コンソールから AWS サービスまたはその他のサポートされているアプリケーションにデータを転送します。

**Topics**
+ [Google Analytics 4 の AWS Glue サポート](googleanalytics-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](googleanalytics-configuring-iam-permissions.md)
+ [Google Analytics 4 の設定](googleanalytics-configuring.md)
+ [Google Analytics 4 接続の設定](googleanalytics-configuring-connections.md)
+ [Google Analytics 4 エンティティからの読み取り](googleanalytics-reading-from-entities.md)
+ [Google Analytics 4 接続オプション](googleanalytics-connection-options.md)
+ [Google Analytics 4 アカウントの作成](googleanalytics-create-account.md)
+ [クライアントアプリおよび OAuth 2.0 認証情報を作成する方法](googleanalytics-client-app-oauth-credentials.md)
+ [制約事項と考慮事項](googleanalytics-connector-limitations.md)

# Google Analytics 4 の AWS Glue サポート
<a name="googleanalytics-support"></a>

AWS Glue は、次のように Google Analytics 4 をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Google Analytics 4 からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Google Analytics 4 の API バージョン**  
 v1 ベータ。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="googleanalytics-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Google Analytics 4 の設定
<a name="googleanalytics-configuring"></a>

AWS Glue を使用して Google Analytics 4 から転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="googleanalytics-configuring-min-requirements"></a>
+  転送するデータを収集する 1 つ以上のデータストリームを持つ Google Analytics アカウントがあります。
+  Google Cloud Platform のアカウントと Google Cloud プロジェクトがある。
+  Google Cloud プロジェクトで次の API を有効にしました。
  +  Google Analytics API 
  +  Google Analytics Admin API 
  +  Google Analytics Data API 
+  Google Cloud プロジェクトで、外部ユーザー用の OAuth 同意画面を設定している。OAuth 同意画面の詳細については、Google Cloud Platform コンソールのヘルプの「[OAuth 同意画面の設定](https://support.google.com/cloud/answer/10311615#)」を参照してください。
+  Google Cloud プロジェクトで、OAuth 2.0 クライアント ID を設定している。詳細については、「[Setting up OAuth 2.0](https://support.google.com/cloud/answer/6158849?hl=en#zippy=)」を参照してください。

 これらの要件を満たしている場合、AWS Glue を Google Analytics 4 アカウントに接続する準備ができています。

# Google Analytics 4 接続の設定
<a name="googleanalytics-configuring-connections"></a>

Google Sheet 接続を設定するには:

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  AuthorizationCode グラントタイプの場合: 
      +  カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Google Analytics 4] を選択します。

   1. 接続先の Google Analytics 4 の `INSTANCE_URL` を指定します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

 `AUTHORIZATION_CODE` 付与タイプ。

 このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Google Analytics 4 にリダイレクトされます。ここではユーザーがログインし、Google Analytics 4 インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。

 ユーザーは、Google Analytics 4 で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Google Analytics 4 にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

 このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。

 詳細については、「[Auth 2.0 を使用した Google API へのアクセス](https://developers.google.com/identity/protocols/oauth2)」を参照してください。

# Google Analytics 4 エンティティからの読み取り
<a name="googleanalytics-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Google Analytics 4 オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| リアルタイムレポート | はい | あり | あり | あり | なし | 
| コアレポート | はい | あり | あり | あり | あり | 

 **例** 

```
googleAnalytics4_read = glueContext.create_dynamic_frame.from_options(
    connection_type="GoogleAnalytics4",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v1beta"
    }
```

 **Google Analytics 4 エンティティとフィールドの詳細** 


| エンティティ | フィールド | データタイプ | サポートされている演算子 | 
| --- | --- | --- | --- | 
| コアレポート | 動的フィールド |  |  | 
| コアレポート | ディメンションフィールド | 文字列 | LIKE, = | 
| コアレポート | ディメンションフィールド | 日付 | LIKE, = | 
| コアレポート | メトリクスフィールド | 文字列 | >, <, >=, <=, = BETWEEN | 
| コアレポート | カスタムディメンションフィールドとカスタムメトリクスフィールド | 文字列 | NA | 
| リアルタイムレポート | appVersion | 文字列 | LIKE, = | 
| リアルタイムレポート | audienceId | 文字列 | LIKE, = | 
| リアルタイムレポート | audienceName | 文字列 | LIKE, = | 
| リアルタイムレポート | city | 文字列 | LIKE, = | 
| リアルタイムレポート | cityId | 文字列 | LIKE, = | 
| リアルタイムレポート | country | 文字列 | LIKE, = | 
| リアルタイムレポート | countryId | 文字列 | LIKE, = | 
| リアルタイムレポート | deviceCategory | 文字列 | LIKE, = | 
| リアルタイムレポート | eventName | 文字列 | LIKE, = | 
| リアルタイムレポート | minutesAgo | 文字列 | LIKE, = | 
| リアルタイムレポート | platform | 文字列 | LIKE, = | 
| リアルタイムレポート | streamId | 文字列 | LIKE, = | 
| リアルタイムレポート | streamName | 文字列 | LIKE, = | 
| リアルタイムレポート | unifiedScreenName | 文字列 | LIKE, = | 
| リアルタイムレポート | activeUsers | 文字列 | >, <, >=, <=, = BETWEEN | 
| リアルタイムレポート | conversions | 文字列 | >, <, >=, <=, = BETWEEN | 
| リアルタイムレポート | eventCount | 文字列 | >, <, >=, <=, = BETWEEN | 
| リアルタイムレポート | screenPageViews | 文字列 | >, <, >=, <=, = BETWEEN | 

 **パーティショニングクエリ** 

1.  **フィルターベースのパーティション** 

    Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
   +  `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
   +  `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

      日付については、Spark SQL クエリで使用される Spark の日付形式を受け入れます。有効な値の例: `"2024-02-06"`。
   +  `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
   +  `NUM_PARTITIONS`: パーティション数。

    **例** 

   ```
   googleAnalytics4_read = glueContext.create_dynamic_frame.from_options(
       connection_type="GoogleAnalytics4",
       connection_options={
           "connectionName": "connectionName",
           "ENTITY_NAME": "entityName",
           "API_VERSION": "v1beta",
           "PARTITION_FIELD": "date"
           "LOWER_BOUND": "2022-01-01"
           "UPPER_BOUND": "2024-01-02"
           "NUM_PARTITIONS": "10"
       }
   ```

1.  **レコードベースのパーティション** 

    Spark で同時実行を使用する場合、追加の Spark オプションの `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
   +  `NUM_PARTITIONS`: パーティション数。

    **例** 

   ```
   googleAnalytics4_read = glueContext.create_dynamic_frame.from_options(
       connection_type="GoogleAnalytics4",
       connection_options={
           "connectionName": "connectionName",
           "ENTITY_NAME": "entityName",
           "API_VERSION": "v1beta",
           "NUM_PARTITIONS": "10"
       }
   ```

# Google Analytics 4 接続オプション
<a name="googleanalytics-connection-options"></a>

Google Analytics 4 の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Google Analytics 4 のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Google Analytics 4 Rest の API バージョン。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+  `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+  `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+  `INSTANCE_URL` (整数) – 読み取りに使用されます。(オプション) 

# Google Analytics 4 アカウントの作成
<a name="googleanalytics-create-account"></a>

 次の手順に従って Google Analytics 4 アカウントを作成します: [https://support.google.com/analytics/answer/9304153?hl=en](https://support.google.com/analytics/answer/9304153?hl=en) 

# クライアントアプリおよび OAuth 2.0 認証情報を作成する方法
<a name="googleanalytics-client-app-oauth-credentials"></a>

 詳細については、「[Google Analytics4 API ドキュメント](https://developers.google.com/analytics/devguides/reporting/data/v1)」を参照してください。

1.  認証情報を使用して [Google Analytics アカウント](https://analytics.google.com/)にログインし、アカウントを作成して設定します。次に、**[Admin]** > **[アカウント作成]** に移動します。

1.  **[プロパティを作成]** を選択して、作成したアカウントのプロパティを作成します。必要な情報でプロパティを設定します。必要な情報がすべて指定されたら、対応するプロパティ ID が生成されます。

1.  ドロップダウンで **[データストリーム]** > **[ストリームを追加]** > **[Web]** を選択して、作成したプロパティにデータストリームを追加します。URL やその他の必須フィールドなど、ウェブサイトの詳細を指定します。すべての情報を指定したら、対応する **[ストリーム ID]** および **[測定 ID]** が生成されます。

1.  測定 ID をコピーしてウェブサイトの設定に追加し、ウェブサイトで Google Analytics を設定します。

1.  **[レポート]** に移動して必要なレポートを生成し、Google Analytics からレポートを作成します。

1.  [console.cloud.google.com]( https://console.cloud.google.com) に移動して Google Analytics Data API を検索し、API を有効にすることでアプリを許可します。

   1.  「API とサービス」ページに移動して、**[認証情報]** > **[OAuth 2.0 クライアント ID の設定]** を選択します。

   1.  AWS Glue リダイレクト URL を追加して、リダイレクト URL を指定します。

1.  接続の作成がさらに必要となるクライアント ID およびクライアントシークレットをコピーします。

# 制約事項と考慮事項
<a name="googleanalytics-connector-limitations"></a>

Google Analytics 4 コネクタの制限事項は次のとおりです。
+  コアレポートエンティティの場合、リクエストに送信できる内容は 9 個のディメンションフィールドおよび 10 個のメトリクスフィールドのみです。フィールドの許容数を超えた場合、リクエストは失敗してコネクタがエラーメッセージをスローします。
+  リアルタイムレポートエンティティの場合、リクエストで送信できる内容は 4 個のディメンションフィールドのみです。フィールドの許容数を超えた場合、リクエストは失敗してコネクタがエラーメッセージをスローします。
+  Google Analytics 4 はベータ版の無料ツールであるため、新機能、エンティティ強化、新しいフィールドの追加、既存フィールドの廃止に関する最新情報が定期的に配信されます。
+  コアレポートフィールドは動的に入力されるため、フィールドの追加、廃止、名前変更があります。フィールドに対する新しい制限の適用はいつでも実行することができます。
+  デフォルトの開始日は 30 日で、終了日は昨日 (現在の日付から 1 日前) になります。ユーザーが値を設定しているか、フローが増分である場合、これらの日付はフィルター式コードで上書きされます。
+  ドキュメントによると、リクエストに制限が渡されない場合、リアルタイムのレポートエンティティによって 10,000 レコードが返されます。それ以外の場合、要求する行数を問わず、API はリクエストごとに最大 250,000 行を返します。詳細については、Google Analytics ドキュメントの「[メソッド: properties.runRealtimeReport](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runRealtimeReport)」を参照してください。
+  リアルタイムのレポートエンティティはページ分割をサポートしていないため、レコードベースのパーティションはサポートされません。また、定義された基準を満たすフィールドがないため、フィールドベースのパーティションはサポートされません。
+  リクエストで渡すことができるフィールド数に制限があるため。指定された制限内でデフォルトのディメンションフィールドおよびメトリクスフィールドが設定されます。「すべて選択」が選択されている場合、事前定義されたこれらのフィールドのデータのみが取得されます。
  +  コアレポート 
    +  SAAS の制限に従い、リクエストには最大 9 つのディメンションと最大 10 のメトリクスのみが許可されます。つまり、リクエストに最大 19 個のフィールド (メトリクス \$1 ディメンション) を含めることができます。
    +  実装に従い、ユーザーが SELECT\$1ALL または 25 を超える選択されたフィールドを使用する場合、デフォルトのフィールドはリクエストで渡されます。
    +  次のフィールドはコアレポートのデフォルトフィールドとして扱われます – "country"、"city"、"eventName"、"cityId"、"browser"、"date"、"currencyCode"、"deviceCategory"、"transactionId"、"active1DayUsers"、"active28DayUsers"、"active7DayUsers"、"activeUsers"、"averagePurchaseRevenue"、"averageRevenuePerUser"、"averageSessionDuration"、"engagedSessions"、"eventCount"、"engagementRate"。
  +  リアルタイムレポート 
    +  SAAS の制限に従い、リクエストには最大 4 つのディメンションが許可されます。
    +  ユーザーが SELECT\$1ALL または 15 を超える選択されたフィールドを渡す場合、デフォルトのフィールドがリクエストで渡されます。
    +  次のフィールドはリアルタイムレポートのデフォルトフィールドとして扱われます – "country"、"deviceCategory"、"city"、"cityId"、"activeUsers"、"conversions"、"eventCount"、"screenPageViews"。
+  コアレポートエンティティでは、日付フィールドのパーティションおよび startDate のフィルターが同時に存在する場合。この場合、dateRange 値は startDate フィルター値で上書きされます。ただし、パーティションを常に優先する必要があるため、日付フィールドのパーティションがすでに存在する場合は startDate フィルターを破棄します。
+  現在、cohortSpecs はコアレポートリクエスト本文の一部でもあるため、現在のコアレポートエンティティを拡張して cohortSpec 属性のサポートを含めました。cohortSpecs リクエスト本文では、ほぼすべてのフィールドにユーザー入力が必要です。これに対処するため、これらの属性/フィールドにデフォルト値が設定され、必要に応じてユーザーがこれらの値を上書きするためのプロビジョニングが提供されました。    
<a name="google-analytics-connector-limitations-table"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/googleanalytics-connector-limitations.html)
+  これらのフィルターをすべてまとめて一度に渡すか、他のフィルターと一緒に渡すことができます。
  +  例 1 – filterPredicate: startDate between "2023-05-09" and "2023-05-10" AND startOffset=1 AND endOffset=2 AND granularity="WEEKLY"
  +  例 2 – filterPredicate: city=“xyz” AND startOffset=1 AND endOffset=2 AND granularity="WEEKLY"
+  コホートリクエストにおいて: 
  +  リクエストで「cohortNthMonth」が渡された場合、内部粒度値は「MONTHLY」に設定されます。
  +  同様に、「cohortNthWeek」が渡された場合、粒度値は「WEEKLY」に設定されます。
  +  また、「cohortNthDay」の粒度値の場合、「DAILY」に設定されます。詳細については、以下を参照してください。
    +  [https://developers.google.com/analytics/devguides/reporting/data/v1/advanced](https://developers.google.com/analytics/devguides/reporting/data/v1/advanced) 
    +  [https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/CohortSpec](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/CohortSpec) 
  +  ユーザーが dateRange および粒度のデフォルト値を上書きするため、プロビジョニングが与えられます。上記のテーブルを参照してください。