この記事では、GCPの認定試験であるProfessional Data Engineerの模擬試験の解説をします。
模擬試験終了後に簡易的な解説は表示されますが、もっと汎用的な関連知識を深めることを目的としています。

設問1:標準SQLとBigQueryのデータインポートに関する出題

ANSI SQLとはBigQueryの文脈では標準SQLと呼ばれる規格化されたSQLのことです。
BigQueryは従来少し独特なSQLが使われていて、今でもレガシーSQLという形で利用することができます。
MySQLなどで利用できる標準SQLをそのままBigQueryでも利用できるというのがBigQueryの長所の1つです。
BigQuery固有のSQLは今でもレガシーSQLとして残っています。

SQLを利用するために、ストレージにはBigQueryを利用する必要があり、JSONをインポートする際にスキーマの自動検出を有効にすることで、変更されるスキーマにも対応することができます。
スキーマを自動検出するには、テーブル作成時にチェックボックスをONにするだけです。

設問2:DataprocクラスタのライフタイムとGCSとの連携に関する出題

Dataprocでよく問われるポイントは、「1つのクラスタでは1つのジョブを実行し、クラスタのライフタイムはジョブの実行が終わるまで」です。
Dataprocを利用すればクラスタはいつでも用意できるので、クラスタを保持し続ける必要がありません。
そのため、1つのクラスタで複数のジョブを実行するような用途は試験の回答としては不適切です。

また、DataprocはCloud Storageのファイルを利用できますし、BigQueryはParquet形式のファイルをインポートすることができます。
BigQueryがインポートできるファイル形式は、CSV, Avro, JSON, Parquet, ORCです。

設問3:標準SQLの定義済み関数に関する出題

次のクエリをBigQueryで実行してみます。

WITH Numbers AS (
  SELECT 1 as x
  UNION ALL SELECT 3
  UNION ALL SELECT 3
  UNION ALL SELECT 4
  UNION ALL SELECT 8
  UNION ALL SELECT 10
  UNION ALL SELECT 10
),

Rownums AS (
  SELECT *,
  ROW_NUMBER() OVER (PARTITION BY x ORDER BY x ASC) AS row_num
  FROM Numbers
)
SELECT * FROM Rownums;
x row_num
1 1
3 1
3 2
4 1
8 1
10 1
10 2

ROW_NUMBER()PARTITION BYを利用すれば、カラムxの値の出現回数をカウントすることができます。
つまり、 WHERE row_num = 1の条件を加えることで、xの重複を排除することができます。

設問4:Dataflowの各ウィンドウ集計の特徴に関する出題

Dataflowのセッションウィンドウを利用すると、任意のKey毎にデータを集計することができるため、この特徴がプレーヤー毎の集計に役立ちます。
グローバルウィンドウでは時間ベースの集計しかできないため、プレーヤー毎の集計をするのであればセッションウィンドウの方が適しています。
次の図はセッションウィンドウのイメージです。

セッションウィンドウでは、データの集計単位はギャップ時間に依存しています。
最小ギャップ時間を15分と設定した場合、最後にデータが到着したタイミングから15分以内に到着したデータは同じウィンドウ内のデータになります。
つまり、15分遅れて配信されたデータであっても同じウィンドウで集計することができます。

設問5:BigQueryのデータインポートに関する出題

特に追加で解説することがないのですが、全てのデータが正常にインポートできたということから、エラーが発生する選択肢を除けば良いだけです。

設問6:HadoopジョブのGCPへの移行に関する出題

Hadoopジョブを再利用するのであればDataprocを利用します。
逆に、新規にETLジョブを構築するのであればDataflowを利用する選択肢を選びましょう。
Dataprocのクラスタはジョブが終われば破棄されることが前提のため、データをCloud Storageへ保存してクラスタのライフタイムに依存しないようにしましょう。

設問7:BigQueryとBigTableの差に関する出題

BigTableの利用パターンの特徴としては主に以下の2点です。

  • 時間の経過と共に継続的に発生するデータ(時系列データ)
  • 大量のデータの書き込み
  • 低いレイテンシでの読み込みと書き込み

この問題の場合、おそらくBigQueryでも似たようなことはできると思います。
25万台のデバイスが10秒毎にデータを送る程度であれば、BigQueryのストリーミングインサートでも十分対応できる可能性があります。
ストリーミングインサートの具体的な各種上限についてはこちらを参照してください。

こういう微妙なケースでは、より適している方を頑張って選ぶしかないので、時系列データと強調されていることからBigTableを選択します。

cbtツールとHBaseシェルでは、gcloud components install で利用できる点から、cbtツールの方がより簡単に利用することができます。

設問8:PubSubのメッセージ順序指定に関する出題

これは、PubSubメッセージの順序指定を利用することで実現できます。

設問9:メッセージのスケーラビリティ対応と時系列データを扱う製品の選択に関する出題

メトリックのスケールに対応するためにPubSubを利用します。
時系列データに対応するために、書き込み先にBigTableを選択しましょう。

設問10:標準SQLの使用とSpackジョブを実行する製品の選択に関する出題

Sparkのジョブを実行するために、Dataprocを利用します。
標準SQLを利用するために、BigQueryにデータを書き込みます。

設問11:Cloud Spannerの特徴に関する出題

ポイントは以下の通りです。

  • リレーショナルデータであること
  • 世界中からデータの読み書きがあること
  • 水平スケールが必要なこと

この要件を満たせるのはCloud Spannerとなります。
ストレージ容量を計測してもスケールさせるべきかどうかを判断できないため、CPU使用率を計測するのが適切です。

設問12:Airflowとbqコマンドに関する出題

該当Operatorのドキュメントはこちらですが、使ったことがなければ直接正解にたどり着くのは難しいです。
Airflowを理解するのは大変なので、bqコマンドの制約を理解しておきましょう。

設問13:Dataflowのウィンドウ集計に関する出題

任意のKey毎にデータを集計するには、セッションウィンドウが便利です。
30分ごとに必ずセッションIDが更新されることを考慮すれば、セッションウィンドウの最小ギャップ時間を30分とすることで、セッション内の全てのイベントをトラッキングすることができます。

設問14:Dataflowのウィンドウ集計に関する出題

ギャップ時間を60分に設定することで、ユーザが操作をしなくなってから60分後にウィンドウがトリガーされます。
固定ウィンドウやスライディングウィンドウを60分に設定すると、ユーザが最初に操作を行ってから必ず60分後にウィンドウがトリガーされるため不適切です。

設問15:Apache Beamの基本に関する出題

Apache Beamの基本的な知識を問われています。
ParDoCombineはPCollectionの変換や集計を行うものであり、データベースに書き込みをするものではありません。

後編はこちら