bq コマンドライン ツールの使用に関するクイックスタート

このページでは、bq コマンドライン ツールを使用してクエリを実行し、データを読み込む方法について説明します。

始める前に

このクイックスタートを始める前に、Google Cloud Console を使用して、プロジェクトを作成または選択し、Cloud SDK をインストールします。

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud SDK をインストールして初期化します。
  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Cloud SDK をインストールして初期化します。
  6. 新しいプロジェクトでは、BigQuery が自動的に有効になります。既存のプロジェクトで BigQuery を有効にするには、 BigQuery API を有効にします。

    API を有効にする

    にアクセスします。
  7. クレジット カード情報の提供やプロジェクトに対する課金の有効化を行わない場合は、BigQuery によってサンドボックスが提供されます。このトピックの手順は、プロジェクトへの課金が有効かどうかに関係なく機能します。必要に応じて課金を有効にする場合は、課金を有効にする方法についてをご覧ください。

テーブルを確認する

BigQuery には、クエリで使用可能なサンプル テーブルがいくつか用意されています。このクイックスタートでクエリを実行する shakespeare テーブルには、シェイクスピアの全戯曲のすべての単語のエントリが含まれます。

特定のテーブルのスキーマを調べるには、次のコマンドを実行します。プロジェクト ID とデータセット ID は、bq ツールのデフォルト値の場合は省略できます。

bq show PROJECT_ID:DATASET_ID.TABLE_ID

次の例では、samples データセットの shakespeare テーブルを調べます。

bq show bigquery-public-data:samples.shakespeare

出力:

Table bigquery-public-data:samples.shakespeare

   Last modified                  Schema                 Total Rows   Total Bytes   Expiration
 ----------------- ------------------------------------ ------------ ------------- ------------
  26 Aug 14:43:49   |- word: string (required)           164656       6432064
                    |- word_count: integer (required)
                    |- corpus: string (required)
                    |- corpus_date: integer (required)

help コマンドを実行する

bq コマンドライン ツールの詳細情報を取得するには、bq help を使用します。

bq help

特定のコマンドについての情報を表示するには、コマンド名を指定します。たとえば、次の bq help の呼び出しでは、query コマンドについての情報が表示されます。

bq help query

クエリの実行

クエリを実行し、シェイクスピアの作品に raisin という部分文字列が出現する回数を調べます。

クエリを実行するには、bq query "SQL_STATEMENT" コマンドを実行します。

  • SQL_STATEMENT 内の引用符は \ 記号でエスケープします。

  • または、全体を囲んでいる記号とは異なる種類の引用符を使用します("')。

次の標準 SQL クエリを使用して、シェイクスピアの作品に raisin という部分文字列が出現する回数を調べます。

bq query --use_legacy_sql=false \
'SELECT
   word,
   SUM(word_count) AS count
 FROM
   `bigquery-public-data`.samples.shakespeare
 WHERE
   word LIKE "%raisin%"
 GROUP BY
   word'

出力:

Waiting on job_dcda37c0bbed4c669b04dfd567859b90 ... (0s) Current status:
DONE
+---------------+-------+
|     word      | count |
+---------------+-------+
| Praising      |   4   |
| raising       |   5   |
| raisins       |   1   |
| praising      |   8   |
| dispraising   |   2   |
| dispraisingly |   1   |
+---------------+-------+

シェイクスピアの作品に出現しない単語を検索すると、結果は返されません。たとえば、次のように huzzah を検索すると一致するものは返されません。

bq query --use_legacy_sql=false \
'SELECT
   word
 FROM
   `bigquery-public-data`.samples.shakespeare
 WHERE
   word = "huzzah"'

出力:

Waiting on job_e19 ... (4s) Current status: DONE
$

新しいテーブルを作成する

次に、新しいテーブルを作成します。すべてのテーブルはデータセットに格納されます。データセットは、テーブルやビューなどのリソースのグループです。

ステップ 1: サンプルデータをダウンロードする

サンプルデータには、人気のある新生児の名前に関する約 7 MB のデータが含まれています。これは米国社会保障局が提供しているものです。

  1. 赤ちゃんの名前の zip ファイルをダウンロードします

  2. ファイルを抽出します。

    zip ファイルには、データセットのスキーマについて説明した README ファイルが含まれています。このデータセットの詳細

  3. yob2010.txt というファイルを開いて、データの内容を確認します。このファイルは、名前、性別(M または F)、その名前の子供の数を示す 3 つの列を含む CSV ファイルです。このファイルにヘッダー行はありません。

  4. bq コマンドライン ツールを実行しているディレクトリに、yob2010.txt ファイルをコピーまたは移動します。Cloud Shell で bq コマンドライン ツールを実行している場合は、yob2010.txt ファイルをアップロードします。Cloud Shell を使用したファイルの管理をご覧ください。

ステップ 2: 新しいデータセットを作成する

  1. デフォルトのプロジェクトに既存のデータセットがあるかどうかを確認するには、bq ls コマンドを使用します。

    bq ls

    出力例:

      datasetId
     -------------
      olddataset
  2. bq ls を再び実行し、コロン(:)を末尾に付加したプロジェクト ID を指定して、特定のプロジェクトに含まれるデータセットの一覧を取得します。次の例では、publicdata プロジェクトのデータセットの一覧を取得しています。
    bq ls publicdata:

    出力:

      datasetId
     -----------
      samples
  3. デフォルトのプロジェクトに babynames という名前の新しいデータセットを作成するには、bq mk コマンドを使用します。データセット名は、最大 1,024 文字で、A~Z、a~z、0~9、アンダースコアで構成できますが、数字またはアンダースコアで始めることはできません。また、スペースを入れることもできません。
    bq mk babynames

    出力例:

    Dataset 'myprojectid:babynames' successfully created.
  4. bq ls を実行して、デフォルトのプロジェクトに新しいデータセットが表示されることを確認します。
    bq ls

    出力例:

      datasetId
     -------------
      olddataset
      babynames

ステップ 3: テーブルをアップロードする

bq load コマンドは、テーブルの作成または更新とデータの読み込みを 1 回のステップで実行します。

  1. bq load コマンドを実行して、作成した babynames データセットの names2010 という新しいテーブルにソースファイルを読み込みます。デフォルトでは、このコマンドは同期的に実行され、完了するまでに数秒かかります。

    bq load babynames.names2010 yob2010.txt name:string,gender:string,count:integer

    bq load コマンドの引数:

    • datasetID: babynames
    • テーブル ID: names2010
    • ソース: yob2010.txt: 必要に応じて、ファイルへのフルパスを含めてください
    • スキーマ: name:string,gender:string,count:integer

    出力例:

    Waiting on job_4f0c0878f6184119abfdae05f5194e65 ... (35s) Current status: DONE
  2. bq ls を実行して、テーブルがデータセットに表示されることを確認します。

    bq ls babynames

    出力:

       tableId    Type
     ----------- -------
      names2010   TABLE
    
  3. bq show を実行して、スキーマを確認します。

    bq show babynames.names2010

    出力:

    Table myprojectid:babynames.names2010
    
       Last modified         Schema         Total Rows   Total Bytes   Expiration
     ----------------- ------------------- ------------ ------------- ------------
      13 Mar 15:31:00   |- name: string     34041        653855
                        |- gender: string
                        |- count: integer
    

デフォルトでは、BigQuery は読み込まれるデータが UTF-8 エンコード データであるものと想定します。ISO-8859-1(または Latin-1)でエンコードされたデータがあり、そのデータに問題がある場合は、-E フラグを使用して、Latin-1 としてデータを処理するように BigQuery に対して指定します。詳細については、エンコードをご覧ください。

ステップ 4: クエリを実行する

  1. 最も人気のある女の子の名前を取得するには、次のコマンドを実行します。

    bq query "SELECT name,count FROM babynames.names2010 WHERE gender = 'F' ORDER BY count DESC LIMIT 5"

    出力:

    Waiting on job_58c0f5ca52764ef1902eba611b71c651 ... (0s) Current status: DONE
    +----------+-------+
    |   name   | COUNT |
    +----------+-------+
    | Isabella | 22731 |
    | Sophia   | 20477 |
    | Emma     | 17179 |
    | Olivia   | 16860 |
    | Ava      | 15300 |
    +----------+-------+
    
  2. 最も珍しい男の子の名前を取得するには、次のコマンドを実行します。ソースデータは出現数が 5 未満の名前を除外するので、最小数は 5 です。
    bq query "SELECT name,count FROM babynames.names2010 WHERE gender = 'M' ORDER BY count ASC LIMIT 5"

    出力:

    Waiting on job_556ba2e5aad340a7b2818c3e3280b7a3 ... (1s) Current status: DONE
    +----------+-------+
    |   name   | COUNT |
    +----------+-------+
    | Aarian   |     5 |
    | Aaidan   |     5 |
    | Aamarion |     5 |
    | Aadhavan |     5 |
    | Aaqib    |     5 |
    +----------+-------+
    

クリーンアップ

このクイックスタートで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。

  1. bq rm コマンドを実行して、babynames データセットを削除します。-r フラグを使用して、names2010 テーブルを含むデータセットのすべてのテーブルを削除します。

    bq rm -r babynames
    
  2. y コマンドを入力して、削除コマンドの結果を確認します。

次のステップ