アクセス解析担当者のBigQuery日記

普段はアクセス解析やウェブ広告の運用をしています。主にBigQueryについて、記録していきます。

サブクエリを使ってサンプルテーブル的なものを簡単に用意する【BigQuery Tips】

想定する場面

何かクエリを試したいけど手頃なテーブルがBigQuery上にない時がたまによくあるかと思います。
必要なデータが少ない場合は、以下の方法でサブクエリにデータを書ききり、テーブル代わりとして扱えるものを用意した方が早いことがあります。

今回のゴール

以下のテーブル代わりのサブクエリを用意します。

x y z
1 2 "a"
3 4 "i"
5 6 "u"
7 8 "e"
9 10 "o"
補足

なお、今回紹介するクエリはテーブルの読み込みが発生しないので、実行してもお金がかかりません。

やり方

ARRAY-STRUCT型 を宣言し、データを書き込み、UNNESTしたものをサブクエリとしています。
以下のクエリでは、temp_tableというサブクエリですが、こちらは今回のゴールであげたテーブルとして扱うことができます。

参考:https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#declaring-an-array-type

WITH temp_table AS (
  SELECT
    *
  FROM 
  #UNNESTします。
  UNNEST(
    (
      SELECT
      #以下のようにARRAY型の中にSTRUCT型を宣言します。
      #STRUCTの宣言の中で、列名とその型も宣言します。
      ARRAY<STRUCT<x INT64,y INT64,z STRING>>[
      ##############################################
      ###ここにサンプルデータを、以下の形式で書き込みます。###
      ##############################################
        (1,2,"a"),
        (3,4,"i"),
        (5,6,"u"),
        (7,8,"e"),
        (9,10,"o")
      ] AS sample_data_arr
    )
  )
)
SELECT
  *,
  x * y AS xy,
  CONCAT("k",z) AS kz
FROM
  temp_table #サブクエリとして定義したtemp_tableですが、テーブル代わりとして扱えています。

BigQueryでマルチカーソルを使う

想定する場面

例えば、複数のカラムでSUMをとり、カラム名として元のカラム名をそのままつけたい、
ということは、割とよくあると思います。
そういった時に、この機能が使えます。

作業イメージ


やり方

今回は、Google Analyticsのサンプルデータセットを使用します。なぜか新UIでデータセットが表示されないので、キャプチャは旧UIのものを使用します。
totals内のいくつかのカラムのSUMをとります。

なお、Google Analytics サンプルデータセットへのアクセスについては、以下を参照してください。
support.google.com

  1. まとめて集計したいカラムを書き出します。schemeタブでカラム名をクリックすると、エディタ部分にカラム名が書き出されるので、カラム名をひらすらクリックします。この時、対象のカラムが連続するように書き出しておきます。
  2. ここで一度Format Queryをします。
  3. 対象のカラムが全て書き出されたら、対象のカラムの先頭にマウスカーソルを移動します。
  4. alt を押します。すると、マウスカーソルが十字に変化します。この時マウス左ボタンを押したまま、マウスを真下に動かします。対象のカラムの最後まで移動したタイミングでマウス左ボタンを離します。これでマルチカーソル化が出来ました。
  5. あとは集計関数を書き、カラム名を元の列名にします。
    • まずはSUM( を書き、windowsならctrlmacならaltを押しながらを何度か押します。この時、通常のエディタ同様、shiftで範囲選択、ctrl + cまたはcmd + cでコピーができます。
    • カラム名の終わりまでカーソルが移動したら、SUM( を閉じるために )を書きます。またその後に続けて AS と書きます。
    • コピーしていたカラム名を、ctrl + vまたはcmd + vで貼り付けます。

完成したクエリはこちら

SELECT
  SUM(totals.visits) AS visits,
  SUM(totals.hits) AS hits,
  SUM(totals.pageviews) AS pageviews,
  SUM(totals.timeOnSite) AS timeOnSite,
  SUM(totals.bounces) AS bounces,
  SUM(totals.transactions) AS transactions,[f:id:sem-aa-bq:20181009222900g:plain]
  SUM(totals.transactionRevenue) AS transactionRevenue,
  SUM(totals.newVisits) AS newVisits,
  SUM(totals.screenviews) AS screenviews,
  SUM(totals.uniqueScreenviews) AS uniqueScreenviews,
  SUM(totals.timeOnScreen) AS timeOnScreen,
  SUM(totals.totalTransactionRevenue) AS totalTransactionRevenue,
  SUM(totals.sessionQualityDim) AS sessionQualityDim
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_20170801`

以上で、操作は完了です。