
始める前に
- ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
- ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
- 画面左上の [ラボを開始] をクリックして開始します
BigQuery は、Google が提供する低コスト、NoOps のフルマネージド分析データベースです。BigQuery では、インフラストラクチャを所有して管理したりデータベース管理者を置いたりすることなく、テラバイト単位の大規模なデータでクエリを実行できます。また、SQL が採用されており、従量課金制というメリットもあります。そのため、ユーザーは有用な情報を得るためのデータの分析に専念することができます。
ここで使用するのは、Google Merchandise Store に関する数百万件の Google アナリティクス レコードで構成される ecommerce データセットで、すでに BigQuery に読み込まれています。ラボでは、このデータセットのコピーを使用して、使用可能なフィールドや行からどのような分析情報が得られるのかを確認します。
このラボでは、パーティション分割データセットに対してクエリを実行するほか、独自のデータセット パーティションの作成によってクエリのパフォーマンスを高め、コストを削減します。
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
Qwiklabs にシークレット ウィンドウでログインします。
ラボのアクセス時間(例: 1:15:00
)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
準備ができたら、[ラボを開始] をクリックします。
ラボの認証情報(ユーザー名とパスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。
[Google Console を開く] をクリックします。
[別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。
利用規約に同意し、再設定用のリソースページをスキップします。
[Cloud Console の BigQuery へようこそ] メッセージ ボックスが開きます。このメッセージ ボックスにはクイックスタート ガイドへのリンクと、UI の更新情報が表示されます。
まず、テーブルを保存するためのデータセットを作成します。
[データセット ID] に「ecommerce
」と入力します。その他のオプションはデフォルト値のままにします(データのロケーション、[デフォルトのテーブルの有効期限])。
[データセットを作成] をクリックします。
パーティション分割テーブルは、パーティションと呼ばれるセグメントに分割されたテーブルです。このテーブルを使用すると、データの管理や照会が簡単になります。大きなテーブルを小さなパーティションに分割することで、クエリのパフォーマンスを高めたり、クエリによって読み取られるバイト数を減らしてコストを抑えたりすることができます。
ここでは、新しいテーブルを作成し、日付またはタイムスタンプの列をパーティションとしてバインドします。その前に、パーティション分割されていないテーブルのデータを調べてみましょう。
このクエリは 5 件の結果を返します。
次に、このクエリを変更して 2018 年の訪問者を調べてみましょう。
クエリ結果に処理されるデータの量が表示されます。
返される結果が 0 件でも、やはり 1.74 GB のデータが処理されているのが分かります。なぜでしょう。それは、クエリエンジンがデータセット内のすべてのレコードをスキャンして、WHERE 句の日付に一致しているかどうかを確認する必要があるためです。レコードの日付をひとつひとつ '20180708' という条件と比較しなければなりません。
なお、よく誤解されていますが、LIMIT 5 を指定しても処理されるデータの総量が減ることはありません。
行を WHERE 条件と比較するために毎回データセット全体をスキャンするのは、無駄の多い作業です。以下のように、特定の期間のレコードのみを対象とする場合は特に当てはまります。
今度は、前のクエリのようにデータセット全体をスキャンして日付フィールドでフィルタする代わりに、日付パーティション分割テーブルを作成します。これにより、クエリに関係のないパーティションのレコードは一切スキャンする必要がなくなります。
このクエリには、PARTITION BY <フィールド> という新しいオプションがあります。パーティション分割に使用できるオプションは DATE と TIMESTAMP の 2 つです。ここでは、文字列として保存されている日付フィールドをパーティション分割に適した DATE 型に変換するために、PARSE_DATE 関数を使用しています。
ecommerce データセットをクリックし、新しい partiton_by_day テーブルを選択します。
[詳細] タブをクリックします。
[テーブル情報] セクションに次の内容が表示されていることを確認します。
処理されるバイト数が約 25 KB(0.025 MB)になりました。これは、前のクエリに比べるとごくわずかです。
「このクエリを実行すると、0 B が処理されます。
」と表示されます。
処理されるバイト数が 0 バイトになるのはなぜでしょうか。
自動的に期限切れになるパーティション分割テーブルは、データ プライバシーに関する法令を遵守するために使用されます。ストレージの不必要な浪費を防ぐために使用することもできます(本番環境ではコストの節約になります)。データのローリング ウィンドウを作成するには、使い終わったパーティションが自動的に消去されるように有効期限を追加します。
左側のパネルで [+ 追加] をクリックしてから、[公開データセット] を選択します。
「GSOD NOAA」を検索し、データセットを選択します。
[データセットを表示] をクリックします。
noaa_gsod データセットのテーブルのリストをスクロールします(手動でシャーディングされていて、パーティション分割されていません)。
次に、以下のクエリをクエリエディタにコピーして貼り付けます。
TABLE_SUFFIX フィルタで参照されるテーブルの数を制限するために、FROM 句でテーブル ワイルドカード * が使用されています。
LIMIT 10 が追加されていますが、まだパーティションがないため、スキャンされるデータの総量(約 141.6 MB)は減りません。
[実行] をクリックします。
日付の形式が正しいこと、降水量フィールドの値が 0 でないことを確認します。
前のクエリを変更してテーブルを作成します。次のように指定します。
クエリは次のようになります。
60 日前より古いデータが保存されていないことを確認するために、DATE_DIFF クエリを実行してパーティションの経過日数を取得します。パーティションは 60 日後に期限切れになるように設定されています。
以下のクエリは、非常に降水量の多い和歌山市にある NOAA の気象観測所の平均降水量を追跡します。
ORDER BY 句を更新して、パーティションを古い順に表示します。表示されている日付を使用します。
ここでは、BigQuery で分割テーブルを作成してクエリを実行しました。
ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
1 回に 1 つのラボ
既存のラボをすべて終了して、このラボを開始することを確認してください