ラボの設定手順と要件
アカウントと進行状況を保護します。このラボを実行するには、常にシークレット ブラウジング ウィンドウとラボの認証情報を使用してください。

BigQuery で日付パーティション分割テーブルを作成する

ラボ 15分 universal_currency_alt クレジット: 5 show_chart 中級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
このコンテンツはまだモバイル デバイス向けに最適化されていません。
快適にご利用いただくには、メールで送信されたリンクを使用して、デスクトップ パソコンでアクセスしてください。

GSP414

Google Cloud セルフペース ラボ

概要

BigQuery は、Google が提供する低コスト、NoOps のフルマネージド分析データベースです。BigQuery では、インフラストラクチャを所有して管理したりデータベース管理者を置いたりすることなく、テラバイト単位の大規模なデータでクエリを実行できます。 また、SQL が採用されており、従量課金制というメリットもあります。ユーザーはこのような特徴を活かし、有用な情報を得るためのデータ分析に専念できます。

このラボでは、BigQuery でクエリを実行し、パーティション分割テーブルを作成して、クエリのパフォーマンスを向上させ、リソース使用量を削減する方法を学習します。このラボで使用するデータは、Google Merchandise Store に関する数百万件の Google アナリティクス レコードが格納された e コマース データセットであり、BigQuery に読み込まれています。

演習内容

このラボでは、次の方法について学びます。

  • パーティション分割テーブルに対してクエリを実行する。
  • 独自のパーティション分割テーブルを作成する。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。

このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
  • ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 左側の [ラボの詳細] ペインには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] ペインでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] ペインでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。 ナビゲーション メニュー アイコンと検索フィールド

BigQuery コンソールを開く

  1. Google Cloud コンソールで、ナビゲーション メニュー > [BigQuery] を選択します。

[Cloud コンソールの BigQuery へようこそ] メッセージ ボックスが開きます。このメッセージ ボックスには、クイックスタート ガイドとリリースノートへのリンクが表示されます。

  1. [完了] をクリックします。

BigQuery コンソールが開きます。

タスク 1. 新しいデータセットを作成する

  1. まず、テーブルを保存するためのデータセットを作成します。

  2. [エクスプローラ] ペインで、プロジェクト ID の近くにある [アクションを表示] をクリックし、次に [データセットを作成] をクリックします。

プロジェクトのプルダウン メニュー中でハイライト表示された [データセットを作成] オプション。

  1. [データセット ID] に 「ecommerce」と設定します。

その他のオプションはデフォルト値のままにします([データのロケーション]、[デフォルトのテーブルの有効期限])。

  1. [データセットを作成] をクリックします。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

ecommerce という名前のデータセットを作成する

タスク 2. 日付パーティションを持つテーブルを作成する

パーティション分割テーブルは、パーティションと呼ばれる複数のセグメントに分割されたテーブルです。このテーブルを使用すると、データの管理やクエリが簡単になります。大きなテーブルを小さなパーティションに分割することで、クエリのパフォーマンスが向上します。また、クエリで読み取られるバイト数を減らすことによりコストを抑制できます。

ここでは、新しいテーブルを作成し、日付またはタイムスタンプの列をパーティションとしてバインドします。その前に、パーティション分割されていないテーブルのデータを調べてみましょう。

ウェブページ分析データで 2017 年の訪問者のサンプルをクエリする

  1. [+ SQL クエリ] をクリックし、以下のクエリを追加します。
#standardSQL SELECT DISTINCT fullVisitorId, date, city, pageTitle FROM `data-to-insights.ecommerce.all_sessions_raw` WHERE date = '20170708' LIMIT 5

実行する前に、処理されるデータの総量を確認します。これは、クエリ検証ツールのアイコンの横に「このクエリを実行すると、1.74 GB が処理されます。」のように表示されます。

  1. [実行] をクリックします。

このクエリでは 5 件の結果が返されます。

ウェブページ分析データで 2018 年の訪問者のサンプルをクエリする

次に、このクエリを変更して 2018 年の訪問者を調べてみましょう。

  1. [+ SQL クエリ] をクリックし、クエリエディタをクリアしてから、以下の新しいクエリを追加します。このクエリでは、WHERE date パラメータの値が 20180708 に変更されています。
#standardSQL SELECT DISTINCT fullVisitorId, date, city, pageTitle FROM `data-to-insights.ecommerce.all_sessions_raw` WHERE date = '20180708' LIMIT 5

クエリ検証ツールでは、このクエリで処理されるデータの量が表示されます。

  1. [実行] をクリックします。

返される結果は 0 件なのに、処理されるデータの量は 1.74 GB で前のクエリと変わりません。これは、クエリエンジンがデータセット内のすべてのレコードをスキャンして、WHERE 句の日付の条件と一致しているかどうかを確認する必要があるからです。ここでは、レコードのそれぞれの日付を「20180708」という条件と照合しなければなりません。

なお、よくある誤解ですが、LIMIT 5 を追加しても処理される合計データ量が減ることはありません。

日付パーティション分割テーブルの一般的なユースケース

行を WHERE 条件と照合するために毎回データセット全体をスキャンするのは、無駄の多い作業です。以下のように、特定の期間のレコードのみを対象とする場合は特に当てはまります。

  • 昨年のすべてのトランザクション
  • 過去 7 日間のすべてのユーザー インタラクション
  • 先月販売したすべての商品

今度は、前のクエリのようにデータセット全体をスキャンして日付フィールドでフィルタする代わりに、日付パーティション分割テーブルを作成します。これにより、クエリに無関係なパーティションのレコードを一切スキャンしないということが可能になります。

日付に基づいた新しいパーティション分割テーブルを作成する

  1. [+ SQL クエリ] をクリックし、以下のクエリを追加して [実行] をクリックします。
#standardSQL CREATE OR REPLACE TABLE ecommerce.partition_by_day PARTITION BY date_formatted OPTIONS( description="a table partitioned by date" ) AS SELECT DISTINCT PARSE_DATE("%Y%m%d", date) AS date_formatted, fullvisitorId FROM `data-to-insights.ecommerce.all_sessions_raw`

このクエリには、PARTITION BY <フィールド> という新しいオプションがあります。 パーティション分割に使用できるオプションは DATE と TIMESTAMP の 2 つです。 ここでは、文字列として保存されている日付フィールドをパーティショニングに適した DATE 型に変換するために、PARSE_DATE 関数を使用しています。

  1. ecommerce データセットをクリックし、新しい partition_by_day テーブルを選択します。

ハイライト表示された partition_by_day テーブルのオプション

  1. [詳細] タブをクリックします。

次のようになっていることを確認します。

  • パーティション分割の基準: Day
  • パーティション分割の場所: date_formatted

partition_by_day テーブルの詳細

: ラボアカウントのパーティション分割テーブル内のパーティションは、日付列の値から 60 日後に自動的に期限切れになります。 課金を有効にした個人の Google Cloud アカウントでは、期限切れにならないパーティション分割テーブルを作成できます。このラボの以降のクエリは、すでに作成されているパーティション分割テーブルに対して実行します。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

日付に基づいた新しいパーティション分割テーブルを作成する

タスク 3. パーティション分割テーブルに対するクエリの結果を確認する

  1. 以下のクエリを実行します。処理される合計バイト数を確認してください。
#standardSQL SELECT * FROM `data-to-insights.ecommerce.partition_by_day` WHERE date_formatted = '2016-08-01'

処理されるバイト数が約 25 KB(0.025 MB)になりました。これは、前のクエリに比べるとごくわずかです。

  1. 次に、以下のクエリを実行します。処理される合計バイト数に注目してください。
#standardSQL SELECT * FROM `data-to-insights.ecommerce.partition_by_day` WHERE date_formatted = '2018-07-08'

このクエリを実行すると、0 B が処理されます。」と表示されます。

タスク 4. 自動的に期限切れになるパーティション分割テーブルを作成する

自動的に期限切れになるパーティション分割テーブルは、データ プライバシーに関する法令を遵守するために使用されます。ストレージの不必要な浪費を防ぐために使用することもできます(本番環境では費用の節約になります)。データのローリング ウィンドウを作成するには、使い終わったパーティションが自動的に消去されるように有効期限を追加します。

公開されている NOAA 気象データのテーブルを調べる

  1. 左側のメニューの [エクスプローラ] で、[+ データを追加] をクリックし、[一般公開データセット] を選択します。

[一般公開データセットを調べる]、[プロジェクトを固定]、[外部データソース] を含むデータ追加メニュー。

  1. GSOD NOAA」を検索し、データセットを選択します。

  2. [データセットを表示] をクリックします。

  3. noaa_gsod データセットのテーブル(手動でシャーディングされていて、パーティション分割されていません)のリストをスクロールします。

ハイライト表示された noaa_gsod データセット

ここでの目標は、次のようなテーブルを作成することです。

  • 2018 年以降の気象データに対してクエリを実行する
  • 降水量(雨、雪など)が観測された日のみを含める
  • 各パーティションの保存期間を 90 日に制限する(ローリング ウィンドウ)
  1. まず、以下のクエリをコピーして貼り付けます
#standardSQL SELECT DATE(CAST(year AS INT64), CAST(mo AS INT64), CAST(da AS INT64)) AS date, (SELECT ANY_VALUE(name) FROM `bigquery-public-data.noaa_gsod.stations` AS stations WHERE stations.usaf = stn) AS station_name, -- Stations may have multiple names prcp FROM `bigquery-public-data.noaa_gsod.gsod*` AS weather WHERE prcp < 99.9 -- Filter unknown values AND prcp > 0 -- Filter stations/days with no precipitation AND _TABLE_SUFFIX >= '2018' ORDER BY date DESC -- Where has it rained/snowed recently LIMIT 10 注: TABLE_SUFFIX フィルタで参照されるテーブルの数を制限するために、FROM 句でテーブル ワイルドカード * が使用されています。 注: LIMIT 10 が追加されていますが、まだパーティションがないため、スキャンされるデータの総量(約 1.83 GB)は減りません。
  1. [実行] をクリックします。

  2. 日付の形式が正しいことと、precipitation フィールドの値が 0 でないことを確認します。

タスク 5. 実習: パーティション分割テーブルを作成する

  • 前のクエリを変更してテーブルを作成します。次のように指定します。

    • テーブル名: ecommerce.days_with_rain
    • PARTITION BY に date フィールドを使用
    • OPTIONS に partition_expiration_days=60 を指定
    • description="weather stations with precipitation, partitioned by day" を追加

クエリは次のようになります。

#standardSQL CREATE OR REPLACE TABLE ecommerce.days_with_rain PARTITION BY date OPTIONS ( partition_expiration_days=60, description="weather stations with precipitation, partitioned by day" ) AS SELECT DATE(CAST(year AS INT64), CAST(mo AS INT64), CAST(da AS INT64)) AS date, (SELECT ANY_VALUE(name) FROM `bigquery-public-data.noaa_gsod.stations` AS stations WHERE stations.usaf = stn) AS station_name, -- Stations may have multiple names prcp FROM `bigquery-public-data.noaa_gsod.gsod*` AS weather WHERE prcp < 99.9 -- Filter unknown values AND prcp > 0 -- Filter AND _TABLE_SUFFIX >= '2018'

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

実習: パーティション分割テーブルを作成する

データ パーティションの有効期限が機能していることを確認する

過去60 日間のデータのみが保存されていることを確認するために、60 日後に期限切れになるように設定されているパーティションの経過日数を DATE_DIFF クエリを実行して取得します。

以下のクエリでは、非常に降水量の多い和歌山県にある NOAA の気象観測所の平均降水量を追跡します。

  • 次のクエリを追加して実行します。
#standardSQL # 毎月の平均降水量 SELECT AVG(prcp) AS average, station_name, date, CURRENT_DATE() AS today, DATE_DIFF(CURRENT_DATE(), date, DAY) AS partition_age, EXTRACT(MONTH FROM date) AS month FROM ecommerce.days_with_rain WHERE station_name = 'WAKAYAMA' #日本 GROUP BY station_name, date, today, month, partition_age ORDER BY date DESC; # 日付が新しい順

タスク 6. 最も古い partition_age が 60 日以下であることを確認する

ORDER BY 句を更新して、パーティションを古い順に表示します。

  • 次のクエリを追加して実行します。
#standardSQL # 月あたり平均降水量 SELECT AVG(prcp) AS average, station_name, date, CURRENT_DATE() AS today, DATE_DIFF(CURRENT_DATE(), date, DAY) AS partition_age, EXTRACT(MONTH FROM date) AS month FROM ecommerce.days_with_rain WHERE station_name = 'WAKAYAMA' #日本 GROUP BY station_name, date, today, month, partition_age ORDER BY partition_age DESC 注: 気象データとパーティションは継続的に更新されるため、今後このクエリを再実行したときには結果は変わります。

お疲れさまでした

ここでは、BigQuery でパーティション分割テーブルを作成してクエリを実行しました。

次のステップと詳細情報

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2025 年 11 月 4 日

ラボの最終テスト日: 2025 年 11 月 4 日

Copyright 2026 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

Build Vertex AI Search Apps using AI Applications は現在ご利用いただけません。

close

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボを実行するには、シークレット モードまたはシークレット ブラウジング ウィンドウを使用することをおすすめします。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。