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

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

始める前に

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

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

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

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

    API を有効にする

    にアクセスします。
  5. 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 ファイルをコピーまたは移動します。

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

    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 コマンドを入力して、削除コマンドの結果を確認します。

次のステップ