BigQuery의 사용자 정의 함수와 보기를 통해 Google Analytics4와 결합된 이벤트 데이터를 쉽게 처리할 수 있습니다.
Google Tag Manager를 통해 다음과 같은 형식이 논의되고 있습니다.
graph TB; webapp[ Web Next.js]-->|タグマネージャー用\nスクリプト|gtm([Google タグマネージャー]); subgraph 管理コンソールで設定 gtm-->|設定により自動転送|ga4[(Google Analytics 4)]; end subgraph Google Cloud ga4-->|自動連携|gq[(BigQuery)]; end
Google Analytics4 と BigQuery を連携してどうするの?という部分なのですが、Webアプリの商品(コンテンツ)の"質"を計測する実験を行っています。せっかくBigQueryと連携できるし、GA4で取得できるデータを使おうかなとやや手段先行な部分はありつつもGA4+BigQueryを使うところまでは決定。で、最後まで悩んだのが、「Google Tag Manager/Google Analytics4 でどこまで設定して、どこからBigQueryのクエリに任せるか」といったことです。正直なところまだ結論は出ていませんが、いまのところ、GTM/GA4の設定は最小限にして、取得できたイベントから計測に都合の良いデータをクエリするとしています。
理由は以下です。
- GTM/GA4の設定画面で複雑な設定を行うと、メンテナンスが大変
- GTMで設定を再現するための手順書の作成が難しい(画面や仕様変更への追従)
- BigQuery のクエリであれば、クエリを保存して再現することが可能
特に3番目のメリットを重視しました。
GA4 페이지view
特に断りがない限り、この記事のBigQueryは표준 SQLを利用しています。
この記事では Google Analytics4 から連携される基本イベントのひとつ、page_view
をBigQueryで変形する方法を例にとります。ん?わざわざVIEWを作る必要があるの?という話ですが、Google Analytics4 のpage_view
イベントは以下のようなデータになっています。
JSONだと:
[
{
"event_date": "20210924",
"event_timestamp": "1632477063761534",
"event_name": "page_view",
"event_params": [
{
"key": "page_title",
"value": {
"string_value": "iPad mini6 アクセサリ",
"int_value": null,
"float_value": null,
"double_value": null
}
},
{
"key": "page_location",
"value": {
"string_value": "http://localhost/waddy/products/nwerwewewfadfa",
"int_value": null,
"float_value": null,
"double_value": null
}
},
{
"key": "page_referrer",
"value": {
"string_value": "http://localhost:3000/products/nwerwewewfadfa/edit",
"int_value": null,
"float_value": null,
"double_value": null
}
}
// ... 省略
],
"event_previous_timestamp": null,
}
]
각 매개 변수는 event_params
의 배열을 하고 KeyValue 형식으로 들어간다.PV 활성 데이터입니다.여러 개의 SELECT를 응용 프로그램에서 분석하고 필터링하는 것은 매우 고생스럽고 일부러 빅큐리와 합작하는 것도 장점이 적다.대체로 GA4의 원시 데이터를 사용했다.WHRE 문을 줄이기 위해서도 다음과 같은 내용을 준비해야 한다.page_title
의 사용자 정의 함수 사용page_location
의 사용자 정의 함수 사용SQL은 원본 데이터보다 사용하기 쉽습니다.이 VIEW를 만들자.순서대로 보다.
1. JSON 배열 구조에서 키의 사용자 정의 함수 찾기
이 데이터죠?여기서
page_title
의string_value
를 추출합니다. "event_params": [
{
"key": "page_title",
"value": {
"string_value": "iPad mini6 アクセサリ",
"int_value": null,
"float_value": null,
"double_value": null
}
}
]
앱으로 세척하는 것도 좀 번거로운데 SQL로 해도 될까요?조사를 해보면 빅큐리는 JSON 데이터를 쉽게 처리하기 위해 JSON 함수를 준비했다.JSON_EXTRACTjsonpath를 매개 변수로 받아들이기 때문에 하고 싶은 일을 할 수 있을 것 같아요.아, 정말 고마워요... 그렇게 말하고 싶지만 이 예비 함수는 완성할 수 없어요.이번에는 배열 JSON에서 특정한 열쇠를 찾아야 하기 때문에 이 조작
JSON_EXTRACT
은 지원되지 않습니다.사용을 실현하기 위해JavaScript에 대한 사용자 정의 함수.이제 다 됐어.
CREATE FUNCTION `project-name.dataset_name.CUSTOM_JSON_EXTRACT`(json STRING, json_path STRING)
RETURNS STRING
LANGUAGE js AS """
try {
var parsed = JSON.parse(json);
var res = jsonpath.query(parsed, json_path);
return res.length ? res[0] : null
} catch (e) { return null }
"""
OPTIONS (
library="https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/jsonpath/jsonpath-1.1.js"
);
자바스크립트 주체의 기술 외에 OPTIONS를 통해 외부 프로그램 라이브러리를 지정했다.함수를 만들 때 Google Cloud Stroage에 업로드해야 합니다.JS를 끼울 수 있다면 많은 일을 할 수 있을 것 같아요.이 함수는 아래와 같다.SELECT `CUSTOM_JSON_EXTRACT_SCALAR`("""
[
{
"key": "page_title",
"value": {
"string_value": "iPad mini6 アクセサリ",
"int_value": null,
"float_value": null,
"double_value": null
}
}
]
""", '$[?(@.key=="page_title")].value.string_value');
json_path
(두 번째 매개변수)에 주의하십시오.key
배열에서 page_title
의 물건을 찾아 그것value.string_value
을 얻는다.page_title
가string인 것을 알기 때문에string_value
로 결정하는 것은 문제없습니다.조금 힘들지만 이렇게 하면 GA4의 활동 매개 변수를 취향에 맞게 뽑을 수 있다.2. page_title의 사용자 정의 함수 추출
CUSTOM_JSON_EXTRACT_SCALAR
사용할 수 있다면 그리 어렵지 않을 거예요.CREATE FUNCTION `project-name.dataset_name.EXTRACT_PAGE_TITLE`(event_params_json STRING)
RETURNS STRING
AS (
`project-name.dataset_name.CUSTOM_JSON_EXTRACT_SCALAR`(event_params_json,'$[?(@.key=="page_title")].value.string_value')
)
이것은 VIEW에서 사용합니다.3. page_위치 추출에 사용되는 사용자 정의 함수
page_타이틀과 같다.
CREATE FUNCTION `project-name.dataset_name.EXTRACT_PAGE_LOCATION`(event_params_json STRING)
RETURNS STRING
AS (
`project-name.dataset_name.CUSTOM_JSON_EXTRACT_SCALAR`(event_params_json,'$[?(@.key=="page_location")].value.string_value')
)
이것도 VIEW에서 사용합니다.4. VIEW로 PV 이벤트를 모은 탁자
먼저 표를 표시하는 목적이 보통일 수 있도록 조회를 하세요.2와 3으로 구성된 사용자 정의 함수를 사용합니다.
SELECT
`project-name.dataset-name.EXTRACT_PAGE_TITLE`(TO_JSON_STRING(event_params)) AS page_title,
`project-name.dataset-name.EXTRACT_PAGE_LOCATION`(TO_JSON_STRING(event_params)) AS page_location,
event_name
FROM
`project-name.dataset-name.events_intraday*`
WHERE
event_name='page_view'
AND REGEXP_CONTAINS(`project-name.dataset-name.EXTRACT_PAGE_LOCATION`(TO_JSON_STRING(event_params)), r'https?://.+?/(.+?)/products/[\w-]+.*$')
이런 결과를 얻을 수 있을 것이다.대상 모양이 되면 보기를 저장합니다.
알기 쉬운 책상 이름을 붙이면 완성된다.
이렇게 되면 제작된 VIEW를 테이블로 비집고 들어가 합산할 수 있다.JSON의 배열도 없어지고 열이 펼쳐지기 때문에 WHERE 문장 등도 쉽게 사용할 수 있다.
VIEW 질의 사용 예
SELECT * FROM `my-project.analytics_999999.pv_intraday_view` LIMIT 1000
추가 데이터가 필요하면 이벤트parameter에서 추출하여 뷰에 추가할 수 있습니다.총결산
BigQuery UDF를 사용하여 Google Analytics 4와 결합된 데이터를 쉽게 분석할 수 있는 테이블로 만듭니다.다음과 같은 이점이 있습니다.
테라프롬과 빅큐리의 협업에 대해서는 다른 기사에서 소개했다.
Reference
이 문제에 관하여(BigQuery의 사용자 정의 함수와 보기를 통해 Google Analytics4와 결합된 이벤트 데이터를 쉽게 처리할 수 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/waddy/articles/bigquery-from-terraform텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)