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

Teradata プロフェッショナル向けの BigQuery テーブル スキーマを設計する

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

概要

BigQuery では、データを BigQuery データセットに整理し、列名とデータ型を使用して各テーブルのスキーマ(構造)を定義します。テーブルのスキーマは、BigQuery でのクエリのパフォーマンスと費用に影響します。テーブルのスキーマによって、BigQuery でテーブル内のデータにアクセスして処理する速度と効率が左右されるためです。BigQuery は柔軟なスキーマをサポートしており、データを書き換えることなくスキーマを変更できます。

このラボの目的は、Teradata プロフェッショナルが効果的な BigQuery テーブル スキーマの設計と実装を開始するうえで必要な知識とスキルを提供することです。このラボを完了すると、Teradata プロフェッショナルは BigQuery でテーブル スキーマを設計、最適化、クエリする方法をより深く理解できるようになります。

このラボでは、データを保存するために BigQuery データセットとテーブルを作成します。また、非正規化されたデータの関係を維持するために、ネストした繰り返しフィールドを作成します。さらには、クエリのパフォーマンスを最適化するために、パーティション分割テーブルとクラスタ化テーブルを作成します。

Teradata から BigQuery への SQL の変換について詳しくは、Teradata から BigQuery への SQL 変換ガイド( https://cloud.google.com/bigquery/docs/migration/teradata-sql)をご覧ください。

目標

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

  • BigQuery でデータセットとテーブルを作成する。
  • BigQuery でネストした繰り返しフィールドを作成してクエリを実行する。
  • BigQuery でパーティション分割テーブルを作成してクエリを実行する。
  • BigQuery でクラスタ化テーブルを作成してクエリを実行する。

設定と要件

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. シークレット ウィンドウを使用して Google Skills にログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。 一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud コンソールにログインする際に使用します。

  5. [Google コンソールを開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。 他の認証情報を使用すると、エラーや料金が発生します。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

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

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側のパネルには、このラボで使用する必要がある一時的な認証情報が表示されます。

    [認証情報] パネル

  2. ユーザー名をコピーし、[Google Console を開く] をクリックします。 ラボでリソースが起動し、別のタブで [アカウントの選択] ページが表示されます。

    注: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
  3. [アカウントの選択] ページで [別のアカウントを使用] をクリックします。[ログイン] ページが開きます。

    [別のアカウントを使用] オプションがハイライト表示されている、アカウントのダイアログ ボックスを選択します。

  4. [接続の詳細] パネルでコピーしたユーザー名を貼り付けます。パスワードもコピーして貼り付けます。

注: 認証情報は [接続の詳細] パネルに表示されたものを使用してください。Google Skills の認証情報は使用しないでください。請求が発生する事態を避けるため、Google Cloud アカウントをお持ちの場合でも、このラボでは使用しないでください。
  1. その後次のように進みます。
  • 利用規約に同意します。
  • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
  • 無料トライアルには登録しないでください。

しばらくすると、このタブで Cloud コンソールが開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 Cloud コンソール メニュー

タスク 1. BigQuery データセットとテーブルを作成する

BigQuery では、データ定義言語(DDL)を使用してデータセットとテーブルを作成できます。また、SQL ステートメント LOAD DATA を使用して、1 つ以上のファイルからデータを新規または既存のテーブルに読み込むこともできます。

DDL ステートメントを使用して BigQuery データセットとテーブルを作成する方法、および LOAD DATA SQL ステートメントを使用してデータを読み込む方法について詳しくは、CREATE SCHEMA ステートメントCREATE TABLE ステートメントLOAD DATA ステートメントに関するドキュメントをご覧ください。

このタスクでは、DDL を使用して BigQuery にデータセットとテーブルを作成し、LOAD DATA ステートメントを使用して新しいテーブルにデータを読み込みます。

  1. Google Cloud コンソールのナビゲーション メニューナビゲーション メニュー)で、[アナリティクス] の [BigQuery] をクリックします。

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

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

  2. SQL ワークスペースのツールバーで、[エディタ] アイコンをクリックして SQL クエリエディタを開きます。

bq_editor.PNG

  1. クエリエディタに以下のクエリをコピーして貼り付け、[実行] をクリックします。
CREATE SCHEMA IF NOT EXISTS ticket_sales OPTIONS( location="us");

このクエリは、ticket_sales という名前の新しい BigQuery データセットを作成します。DDL ステートメントでは、SCHEMA という用語はテーブル、ビュー、その他のリソースの論理的なコレクションを指します。これは BigQuery ではデータセットと呼ばれます。

bq_dataset_created.PNG

  1. [エクスプローラ] ペイン(左側)を開きます。データセットのリストが表示されるので、データセット名 ticket_sales をクリックして、データセットが正常に作成されたことを確認します。

bq_goto_ticket_sales.PNG

  1. クエリエディタで、次のクエリを実行します。
CREATE OR REPLACE TABLE ticket_sales.sales( salesid INT64, listid INT64, sellerid INT64, buyerid INT64, eventid INT64, dateid INT64, qtysold INT64, pricepaid INT64, commission FLOAT64, saletime STRING);

このクエリは、ticket_sales データセットに sales という名前の新しいテーブルを作成します。

bq_statement_created.PNG

  1. [エクスプローラ] ペインを開きます。データセットとテーブルのリストが表示されるので、テーブル名 sales をクリックします。

  2. [詳細] タブと [プレビュー] タブをクリックして、テーブルの詳細情報を確認します。

テーブルにはまだデータがないことに注目してください。

  1. クエリエディタで、次のクエリを実行します。
LOAD DATA INTO ticket_sales.sales ( salesid INT64, listid INT64, sellerid INT64, buyerid INT64, eventid INT64, dateid INT64, qtysold INT64, pricepaid INT64, commission FLOAT64, saletime STRING ) FROM FILES ( skip_leading_rows=1, format = 'CSV', field_delimiter = ',', max_bad_records = 10, uris = ['gs://tcd_repo/data/entertainment_media/ticket-sales/sales.csv']);

このクエリは、明示的なテーブル スキーマ定義を使用して、Cloud Storage の CSV ファイルから sales テーブルにデータを読み込みます。

[結果] ペインに、LOAD ステートメントが正常に実行されたことを示すメッセージが表示されます。

bq_data_loaded.PNG

  1. [エクスプローラ] ペインで、[詳細] タブと [プレビュー] タブをクリックして、sales テーブルにデータが読み込まれたことを確認します。

[プレビュー] タブのデータを更新するには、[更新](右上)をクリックします。

bq_sales_details.PNG

bq_sales_preview1.PNG

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 BigQuery データセットとテーブルを作成する

BigQuery で SQL ステートメントを使用してデータセットとテーブルを作成し、データを読み込みました。さらにテーブルを作成する練習を行います。今度はイベント情報のデータを読み込みます。

  1. クエリエディタで、次のクエリを実行して events という名前の新しいテーブルを作成します。
CREATE OR REPLACE TABLE ticket_sales.events( eventid INT64, venueid INT64, catid INT64, dateid INT64, eventname STRING, starttime TIMESTAMP);

bq_new_table_events.PNG

  1. [エクスプローラ] ペインを確認し、salesevents という名前の 2 つのテーブルがあることを確認します。

bq_new_events_table_explorer.PNG

  1. クエリエディタで、次のクエリを実行して events テーブルにデータを読み込みます。
LOAD DATA INTO ticket_sales.events FROM FILES ( skip_leading_rows=1, format = 'CSV', field_delimiter = ',', max_bad_records = 10, uris =['gs://tcd_repo/data/entertainment_media/ticket-sales/events.csv']);

このクエリは、スキーマの自動検出を使用して、Cloud Storage の CSV ファイルから events テーブルにデータを読み込みます。

[結果] ペインに、LOAD ステートメントが正常に実行されたことを示すメッセージが表示されます。

bq_new_events_loaded.PNG

  1. [詳細] タブと [プレビュー] タブをクリックして、events テーブルにデータが読み込まれたことを確認します。

[プレビュー] タブのデータを更新するには、[更新](右上)をクリックします。

bq_events_preview.PNG

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 イベント テーブルにデータを読み込む

タスク 2. ネストした繰り返しフィールドを作成してクエリを実行する

非正規化は、以前に正規化されたリレーショナル データセットの読み取りパフォーマンスを向上させるための一般的な手法です。BigQuery でデータを非正規化するための推奨される方法は、ネストした繰り返しフィールドを使用することです。データを完全にフラットにするのではなく、ネストした繰り返しフィールドを使用して、非正規化されたデータの関係を維持できます。

BigQuery のネストした繰り返しフィールドの詳細については、ネストされ繰り返されているフィールドを使用するをご覧ください。

このタスクでは、BigQuery でネストした繰り返しフィールドを作成してクエリする方法について説明します。

  1. クエリエディタで、次のクエリを実行します。
SELECT e.eventid, e.eventname, s.saletime, s.qtysold, s.pricepaid, s.commission FROM ticket_sales.events e JOIN ticket_sales.sales s ON e.eventid = s.eventid ORDER BY eventid, eventname;

bq_repeated_fields.PNG

注: events テーブルと sales テーブルの間には、1 対多の関係があります。このクエリを実行すると、1 対多の関係の「1」側のデータが繰り返し表示されます。つまり、sale(販売)のデータごとに event(イベント)が繰り返して表示されます。sales のデータを 1 つの配列に集約することで、繰り返しを取り除くことができます。
  1. クエリエディタで、次のクエリを実行します。
SELECT e.eventid, e.eventname, ARRAY_AGG(STRUCT( s.saletime, s.qtysold, s.pricepaid, s.commission)) as sales FROM ticket_sales.events e JOIN ticket_sales.sales s ON e.eventid = s.eventid GROUP BY eventid, eventname ORDER BY eventid, eventname;

ステップ 2 の SQL はステップ 1 の SQL と似ていますが、ARRAY_AGG 関数、STRUCT 関数、GROUP BY 関数が追加されていることに注目してください。

  1. クエリ結果を確認します。

1 対多の関係の「1」側のデータを繰り返すのではなく、「多」側のデータが 1 つの構造体の配列に含まれるようになりました。

bq_removed_repetition.PNG

前のクエリを CREATE TABLE ステートメントでラップして、ネストした階層テーブルを作成することもできます。

  1. クエリエディタで、次のクエリを実行します。
CREATE OR REPLACE TABLE ticket_sales.event_sales as ( SELECT e.eventid, e.eventname, ARRAY_AGG(STRUCT( s.saletime, s.qtysold, s.pricepaid, s.commission)) as sales FROM ticket_sales.events e JOIN ticket_sales.sales s ON e.eventid = s.eventid GROUP BY eventid, eventname );

bq_event_sales_table_created.PNG

  1. [テーブルに移動] をクリックし、テーブル スキーマを確認します。

スキーマには、ネストした繰り返しフィールド sales が含まれています。このフィールドには、イベントの個々の販売の販売時間、販売数量、支払い価格、手数料が含まれています。

bq_event_sales_schema_2.png

この新しいネストと繰り返しの構造により、クエリの書き方が変わります。

  1. イベント別の販売数をカウントするには、次のクエリを実行します。
SELECT eventid, eventname, ARRAY_LENGTH(sales) AS sale_count FROM ticket_sales.event_sales ORDER BY sale_count DESC;

bq_sales_count.PNG

イベントごとの上位の手数料を確認したい場合はどうすればよいでしょうか?これには、配列内のクエリが必要になります。そのためには、配列のネストを解除(フラット化)する必要があります。

  1. 配列のネストを解除し、イベントごとの上位 2 つの手数料を特定するには、次のクエリを実行します。
SELECT eventid, eventname, ARRAY((SELECT AS STRUCT saletime, commission FROM UNNEST(sales) ORDER BY(commission) DESC LIMIT 2)) as top_2 FROM ticket_sales.event_sales ORDER BY eventid;

sales 配列をフラット化するには UNNEST 演算子を使用します。これにより、クエリした結果が配列に変換されます。

bq_top_commissions.PNG

UNNEST を使用して配列をフラット化する方法について詳しくは、UNNEST 演算子をご覧ください。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 ネストした繰り返しフィールドを作成してクエリを実行する

タスク 3. パーティション分割テーブルを作成してクエリを実行する

BigQuery でクエリによって処理されるバイト数を減らす方法の 1 つに、大きなテーブルをパーティションと呼ばれる小さなセグメントに分割する方法があります。この場合、クエリには目的のパーティションのデータのみを選択するフィルタを含めるようにします。このプロセスはパーティション プルーニングと呼ばれ、クエリの費用を削減するために使用できます。

パーティション分割テーブルとパーティション プルーニングについて詳しくは、パーティション分割テーブルの概要パーティション分割テーブルに対するクエリをご覧ください。

このタスクでは、クエリで処理されるバイト数を最小限に抑えるために、時間単位のパーティション分割テーブル(DATETIME 列)を作成してクエリを実行する方法を学びます。

  1. クエリエディタに次のコードを貼り付けますが、[実行] はクリックしないでください
SELECT * FROM ticket_sales.sales;

BigQuery クエリ検証ツールを使用すると、クエリを実行する前に、クエリで処理される推定バイト数を知ることができます。このクエリの推定バイト数(15.12 MB)をメモしておきます。

bq_ticket_sales_bytes.PNG

  1. 次のクエリを貼り付けますが、[実行] はクリックしないでください
SELECT * FROM ticket_sales.sales WHERE saletime = '12/14/2008 09:13:17';

bq_ticket_sales_time_bytes.PNG

新しいクエリでは、特定の日付の売上のみをリクエストしているにもかかわらず、処理されるバイト数がステップ 1 のクエリと同じ(15.12 MB)であることに注目してください。

  1. saletime 列で日別にパーティション分割された新しい sales テーブルを作成するには、次のクエリを実行します。
CREATE OR REPLACE TABLE ticket_sales.sales_partitioned_by_date PARTITION BY DATETIME_TRUNC(saletime, DAY) AS ( SELECT * except (saletime), PARSE_DATETIME( "%m/%d/%Y %H:%M:%S", saletime) as saletime FROM ticket_sales.sales );

bq_sales_partitioned_by_date_created.PNG

  1. [詳細] タブをクリックして、テーブルが saletime という名前の列の日別にパーティション分割されていることを確認します。

bq_sales_partitioned_field.PNG

  1. 次のクエリを貼り付けます。処理される推定データ量が少なくなっていることに注目してください(18.98 KB)。
SELECT * FROM ticket_sales.sales_partitioned_by_date WHERE saletime = parse_datetime("%m/%d/%Y %H:%M:%S", '12/14/2008 09:13:17');
  1. [実行] をクリックして、クエリ結果を取得します。

パーティション分割テーブルに対してクエリが実行されるため、クエリで処理されるデータは少なくなります(18.98 KB)。BigQuery ではパーティション プルーニングを使用して処理するデータを減らすことができます。これは、コスト削減やクエリの高速化に役立ちます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 パーティション分割テーブルを作成してクエリを実行する

タスク 4. クラスタ化テーブルを作成してクエリを実行する

BigQuery でクエリ パフォーマンスを最適化する別の方法として、テーブル内の値をクラスタ化し、データを並べ替えてグループ化し、論理ストレージ ブロックに格納するという方法があります。クラスタ列でフィルタや集計を行うクエリは、テーブルまたはテーブル パーティション全体をスキャンするのではなく、クラスタ列に基づいて該当するブロックのみをスキャンします。このプロセスはブロック プルーニングと呼ばれ、結合、検索、グループ化、並べ替えを高速化できます。

クラスタ化テーブルとブロック プルーニングについて詳しくは、クラスタ化テーブルの概要クラスタ化テーブルのクエリをご覧ください。

このタスクでは、クラスタ化テーブルを作成してクエリを実行し、クエリのパフォーマンスを最適化する方法を学習します。

  1. クエリエディタで、次のクエリを実行します。
SELECT LANGUAGE, COUNT(views) AS views FROM `cloud-training-demos.wikipedia_benchmark.Wiki1B` GROUP BY LANGUAGE ORDER BY views DESC;

bq_count_by_views.PNG

このクエリでは、大量のデータ(この場合は 10 億行)を含む Google の一般公開データセットの 1 つを使用し、Wikipedia データのテーブルで言語ごとの閲覧数をカウントします。

  1. [結果] ペインで、[実行の詳細] タブをクリックします。

シャッフルされたバイト数(619.68 KB)をメモします。

bq_bytes_shuffled.PNG

  1. Wikipedia データ用の新しいデータセットを作成するには、次のクエリを実行します。
CREATE SCHEMA IF NOT EXISTS wiki_clustered OPTIONS( location="us");
  1. language 列でクラスタ化されたテーブルを作成するには、次のクエリを実行します。
CREATE OR REPLACE TABLE wiki_clustered.Wikipedia_by_language CLUSTER BY language AS ( SELECT * FROM `cloud-training-demos.wikipedia_benchmark.Wiki1B`);

このコマンドの実行には数分かかることがあります。

bq_wiki_clustered_dataset_created.PNG

  1. テーブルの [詳細] タブで、language という名前の列でクラスタ化されていることを確認します。

bq_wikipedia_by_lang_details.PNG

  1. クラスタ化テーブルをクエリするには、次のクエリを実行します。
SELECT LANGUAGE, COUNT(views) AS views FROM wiki_clustered.Wikipedia_by_language GROUP BY language ORDER BY views DESC;

bq-select_count_clustered.PNG

  1. [結果] ペインで、[実行の詳細] タブをクリックします。

同じクエリをクラスタ化テーブルに対して実行すると、シャッフルされるバイト数が少なくなる(47.98 KB)ことに注目してください。シャッフルされるバイト数が少ないほど、BigQuery の実行時間が短くなります。

bq_reduced_bytes_shuffled.PNG

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 クラスタ化テーブルを作成してクエリを実行する

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Skills から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2026 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。

始める前に

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

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

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

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

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

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

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

ありがとうございます。

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

1 回に 1 つのラボ

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

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

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