SQL データエクスプローラー /SQL Data Explorer

SQL データエクスプローラーを使用して、データに対する読み取り専用 SQL クエリの作成と実行、さまざまなタイプの可視化への結果のプロット、およびダッシュボードへのそれらの追加を行います。他の Analytics 製品では明らかにならない情報を取得できます。[SQL クックブック](<https://github.com/Unity-Technologies/UGS-SQL-Cookbook/tree/main/SQL データエクスプローラークエリ>) で 'レシピ' のコレクションを参照してください。クエリは Snowflake に対して実行されるため、Snowflake SQL ダイアレクト を使用します。SELECT 以外のステートメントと $SYSTEM コマンドは機能が制限されています。

ノート: SQL データエクスプローラークエリは、クエリの秒数に基づいて請求されます。詳細については、Analytics の請求 に関する説明を参照してください。

棒グラフ、折れ線グラフ、面グラフ、円グラフ、積み重ね棒グラフを切り替えることができます。

SQL は、データベースとの通信に使用されるプログラミング言語です。SQL データエクスプローラーを使用するには、SQL クエリの記述に関する基本的な知識が必要です。

以下のコードは、SQL データエクスプローラーを使用するときのデフォルトの SQL クエリを示しています (ただし、独自の SQL クエリを提供できます)。

select EVENT_DATE, count(distinct USER_ID) from EVENTS
where EVENT_DATE > CURRENT_DATE-7
group by EVENT_DATE
order by EVENT_DATE desc

このクエリは、過去 7 日間にあなたのゲームをプレイした個別ユーザー数をカウントします。

クエリの実行後、チャートを設定します。現在、2 つの Y 軸と 1 つの X 軸がサポートされています。それぞれの列と単位を選択します。軸ラベルの名前を変更するには、SQL クエリで式として使用します。これにより、軸名にラベルが付け直されます。

X 軸と Y 軸のチャートを設定します。

折れ線、棒、面の 3 つのチャートスタイルから選択します。

折れ線グラフ。

グラフスタイルの切り替え: 棒グラフ。

面グラフ。

データの並べ替えなしでクエリを実行する場合、そのチャートはソートされていないため、データを正確に表現することはできません。このインスタンスに警告が表示され、"order by" キーワードを使用してクエリを並べ替えることが推奨されます。

チャートの下には、列とクエリの結果を示す結果のテーブルがあります。

結果のテーブル。

glossary (用語集) パネルには、クエリで使用できるパラメーターのリストが表示されます。クリップボードを使用してパラメーターをコピーします。用語集の用語は、データベース列名 (EVENT_DATE など) とイベント json から解析されたカスタムパラメーター (JSON データのクエリ方法に関する Snowflake ドキュメント を参照) の 2 つのソースから取得したものです。送信するイベントに応じてカスタムパラメーターを定義できます。一部のパラメーターは Snowflake に固有のフィールドであり、SQL で構文を変更できます。

データベース列名は、JSON から解析されたパラメーターよりもクエリのパフォーマンスが高いので、できるかぎり優先してください。

パラメーターが列 (USER_COUNTRY など) によって表現される場合、クエリはそれを以下のように使用します。

USER_COUNTRY

代わりにパラメーターがイベント自体からのものである場合 (例えば、名前指定された "missionName") は、以下を介してアクセスされます。

EVENT_JSON:missionName::STRING

イベントマネージャー を使用して、列としてクエリで使用するカスタムイベントを作成します。

Glossary (用語集) パネル。

レポートを使用して、クエリを保存します。レポートは、すべてのクエリのリストを提供するため、それらを後で再ロードして使用できます。

環境セレクタを使用して、Unity 環境 間を切り替えます。

ミッション統計

この例では、ミッション失敗率を参照し、プレイヤーのミッションへのエンゲージメントを追跡するカスタムイベントを missonID パラメーターとともに使用します。

このクエリでは、デフォルトの EVENTS テーブルを使用します。このテーブルには、ゲームで記録された各イベントのきめ細かいデータが含まれます。

SELECT EVENT_JSON:missionID::INTEGER AS missionID
,    count(distinct case when event_name = 'missionStarted' then user_id else null end) AS starts
,    round( 
(count(distinct case when event_name = 'missionFailed' then user_id else null end) /
starts)*100
) AS "Players failed %"
FROM EVENTS
WHERE missionID <=10 -- Focus on the first few levels
    AND event_name in ('missionStarted','missionFailed')
    AND event_date>current_date-30 -- Use a date filter for efficiency
GROUP BY missionID
ORDER BY missionID

ここで日付フィルター event_date>current_date-30 を使用してクエリを制限していることに注意してください。そうしないと、SQL データエクスプローラーでデフォルトでクエリ可能な 365 日分のデータが調べられます。

結果を使用してグラフをプロットします。

![](<../images/Copy of SQLBarChart.png>)

Y 軸は定義した名前であることに注意してください:  "Players failed %"。

(mod)hash

ゲームが徐々に成功し、プレイヤーベースが成長すると、単純なクエリの実行にかなりの時間がかかるようになる可能性があります。

以下の基本的なクエリを参照してください。

SELECT count(distinct event_name, user_id)/count(distinct user_id) as "avg number of event types per user"
FROM EVENTS
WHERE event_date>current_date-7

大きなデータセットを使用すると、この実行に時間がかかる場合があります。user_ids はハッシュとして格納され、コードを以下のようにリライトできます。

SELECT count(distinct event_name, user_id)/count(distinct user_id) as "avg number of event types per user"
FROM EVENTS
WHERE event_date>current_date-7
AND mod(hash(user_id),100) = 63

ここで、ユーザーをランダムに割り当てられて番号が振られた 100 個の擬似バケットに分割し、バケット番号 63 を参照しています。計算の複雑さが増すと、この方法でのデータのフィルタリングがより便利になり、時間が節約されます。

データを丸める

精度を 100% にせずにクエリスピードを向上させるシンプルな方法は、approximate_count_distinct を使用することです。前のクエリは以下のようになります。

SELECT approximate_count_distinct(event_name, user_id)/ approximate_count_distinct(user_id) as "avg number of event types per user"
FROM EVENTS
WHERE mod(hash(user_id),100) = 63

より小さいオブジェクトを使用することで、このクエリを改善できます。

Glossary (用語集) を参照して、クエリに使用可能なテーブルを確認しましょう。これらは、UGS ですぐに使用可能です。

  • EVENTS
  • USERS: プレイヤーごとに 1 行を、そのプレイヤーのゲーム内での生存期間指標とともに保持します。
  • FACT_USER_SESSIONS_DAY: 各プレイヤーの各セッションでのデータが含まれます。
  • FACT_EVENT_TYPE_USERS_DAY: プレイヤーが毎日送信した各イベントの行と、合計数から構成されます。
  • FACT_WAU_USERS および FACT_MAU_USERS には、前の週または月の特定の日にプレイしたユーザーのプロファイルデータが含まれます。

FACT_EVENT_TYPE_USERS_DAY と FACT_USER_SESSIONS_DAY の間に、おそらく小さなオブジェクトに対するほとんどのクエリの 80% 以上に回答できます。

例えば、最初のクエリでは、ミッション失敗率を確認しました。FACT_EVENT_TYPE_USERS_DAY を使用して、毎日の全体的な失敗率を計算し、NUMBER_OF_EVENTS のカウントをこのテーブルに格納できます。

SELECT event_date
, round((SUM(case when event_name='missionFailed' then number_of_events else null end) / SUM(case when event_name='missionStarted' then number_of_events else null end))*100) as overallFailRate
FROM FACT_EVENT_TYPE_USERS_DAY
WHERE event_name in ('missionStarted','missionFailed')
AND event_date>current_date-30
GROUP BY event_date
ORDER BY event_date

データのピボット

新しいウィザードを使用して、データをピボット、編集、およびピボット解除できます。

イベントストリーム

このクエリを使用して、特定の基準を満たすプレイヤーのイベントストリームを確認します。前述の USERS テーブルを使用して、実行するたびに別のユーザーを取得できるため、QA とデバッグに役立ちます。

例えば、ゲームの特定のバージョンをインストールしたプレイヤーについてイベントが正しく記録されていない疑いがある場合は、以下を実行できます。

SELECT event_timestamp
, event_name
, EVENT_JSON:sessionID::STRING 
FROM EVENTS 
WHERE client_version LIKE '0.0%' 
AND user_id IN (
SELECT user_id 
FROM USERS 
WHERE start_date BETWEEN '2022-07-01' AND '2022-07-08'
LIMIT 1 —- pull out just one user
)
ORDER BY event_timestamp

SQL データエクスプローラーのクエリ可能なテーブル

SQL データエクスプローラーを通じて、いくつかのテーブルにアクセスできます。

EVENTS:

このテーブルには、アプリケーションから送信されたすべてのイベントがリストされます。イベント固有のパラメーターは JSON オブジェクトとして EVENT_JSON 列にあります。パラメーターは JSON オブジェクトとして格納されるため、それをクエリするにはコンテンツを解析する必要があります。パラメーターを解析する例は、このリポジトリに含まれるサンプルで確認できます。パラメーター名を入力し、TAB を押して構文をオートコンプリートすることで、パラメーターを解析する構文を取得することもできます。このテーブルは、1 - 2 時間ごとに更新されます。

列:

UNITY_ENVIRONMENT_NAME (TEXT)

UNITY_APPLICATION_NAME (TEXT)

EVENT_ID (NUMBER)

EVENT_JSON (VARIANT)

AGE_GROUP (TEXT)

ACQUSITION_CHANNEL (TEXT)

MAIN_EVENT_ID (NUMBER)

PLATFORM (TEXT)

EVENT_DATE (DATE)

EVENT_LEVEL (NUMBER)

CLIENT_VERSION (TEXT)

USER_ID (TEXT)

USER_COUNTRY (TEXT)

EVENT_TIMESTAMP (TIMESTAMP)

PLAYER_START_DATE (DATE)

EVENT_NAME (TEXT)

GENDER (TEXT)

USERS:

このテーブルには、過去にイベントで送信したすべてのユーザーがリストされます。各ユーザーについて、列にはさまざまな役立つ指標が含まれています。具体的には、指標列には SQL Analytics 関数を使用して計算された指標があります。このテーブルは、3 - 4 時間ごとに更新されます。

列:

UNITY_ENVIRONMENT_NAME (TEXT)

UNITY_APPLICATION_NAME (TEXT)

ACQUISITION_CHANNEL (TEXT)

BIRTH_YEAR (INTEGER)

MESSAGE_COUNTS (VARIANT)

COUNTRY (TEXT)

LAST_LOCALE (TEXT)

LAST_SESSION_ID (TEXT)

START_DATE (DATE)

DDNA_CROSS_GAME_USER_ID (TEXT)

IS_SDK_NATIVE (INTEGER)

CREATED_TIMESTAMP (TIMESTAMP)

LAST_PLATFORM (TEXT)

LAST_UPDATED_TIMESTAMP (TIMESTAMP)

COHORTS (TEXT)

LAST_ANDROID_REGISTRATION_ID (TEXT)

LAST_PUSH_NOTIFICATION_TOKEN (TEXT)

METRICS (VARIANT)

GENDER (TEXT)

USER_ID (TEXT)

CUSTOM_VALUES (VARIANT)

UNITY_CAMPAIGNS (VARIANT)

LAST_EVENT_TIMESTAMP (TIMESTAMP)

LAST_TIMEZONE_OFFSET (TEXT)

LAST_SEEN_TIMESTAMP (TIMESTAMP)

FACT_USER_SESSIONS_DAY

このテーブルには、各ユーザーセッションのレコードがあります。各レコードには、そのセッションのユーザーレベルのさまざまな集約 KPI が格納されています。このテーブルに記録されている、集計ディメンションを除くいずれかのディメンションがセッション中に変更された場合 (例えば、AGE_GROUP または GENDER)、そのセッションに対して新しいレコードが作成されます。このテーブルは、1 - 2 時間ごとに更新されます。

列:

UNITY_ENVIRONMENT_NAME (TEXT)

UNITY_APPLICATION_NAME (TEXT)

MISSION_ABORTED (INTEGER)

CLIENT_VERSION (TEXT)

AGE_GROUP (TEXT)

MISSIONS_FAILED (INTEGER)

INVITES_ACCEPTED (INTEGER)

PLAYER_START_DATE (DATE)

MISSIONS_COMPLETED (INTEGER)

NUMBER_OF_EVENTS (INTEGER)

USER_COUNTRY (TEXT)

INVITES_SENT (INTEGER)

FACT_EVENT_TYPE_USERS_DAY:#

このテーブルには、1 日にユーザーが記録したすべてのイベントと、それらのユーザーが各イベントで送信した回数がリストされます。このテーブルは、1 - 2 時間ごとに更新されます。

列:

UNITY_ENVIRONMENT_NAME (TEXT)

UNITY_APPLICATION_NAME (TEXT)

GENDER (TEXT)

CLIENT_VERSION (TEXT)

EVENT_DATE (DATE)

NUMBER_OF_EVENTS (INTEGER)

PLATFORM (TEXT)

ACQUISITION_CHANNEL (TEXT)

INSERTED_TIMESTAMP (TIMESTAMP)

USER_ID (TEXT)

AGE_GROUP (TEXT)

EVENT_NAME (TEXT)

PLAYER_START_DATE (DATE)

USER_COUNTRY (TEXT)

FACT_WAU_USERS:

このテーブルには、過去 7 日間にイベントで送信したすべてのユーザーがリストされます。このテーブルは、1 - 2 時間ごとに更新されます。

列:

UNITY_ENVIRONMENT_NAME (TEXT)

UNITY_APPLICATION_NAME (TEXT)

PLAYER_START_DATE (DATE)

USER_ID (TEXT)

INSERTED_TIMESTAMP (TIMESTAMP)

EVENT_DATE (DATE)

USER_COUNTRY (TEXT)

PLATFORM (TEXT)

GENDER (TEXT)

ACQUISITION_CHANNEL (TEXT)

CLIENT_VERSION (TEXT)

AGE_GROUP (TEXT)

FACT_MAU_USERS

このテーブルには、過去 30 日間にイベントで送信したすべてのユーザーがリストされます。このテーブルは、1 - 2 時間ごとに更新されます。

列:

UNITY_ENVIRONMENT_NAME (TEXT)

UNITY_APPLICATION_NAME (TEXT)

PLAYER_START_DATE (DATE)

USER_ID (TEXT)

INSERTED_TIMESTAMP (TIMESTAMP)

EVENT_DATE (DATE)

USER_COUNTRY (TEXT)

PLATFORM (TEXT)

GENDER (TEXT)

ACQUISITION_CHANNEL (TEXT)

CLIENT_VERSION (TEXT)

AGE_GROUP (TEXT)

上記のテーブルを介してデータにアクセスするために記述できる SQL クエリの例は、[SQL データエクスプローラークックブック](<https://github.com/Unity-Technologies/UGS-SQL-Cookbook/tree/main/SQL Data Explorer Queries#queries>) を参照してください。