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

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

始める前に

このクイックスタートを始める前に、Google Cloud Platform Console を使用してプロジェクトを作成または選択し、課金を可能にします。また、Google Cloud SDK をインストールする必要もあります。

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

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

  2. GCP プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

  3. プロジェクトに対して課金が有効になっていることを確認します。

    課金を有効にする方法について

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

    Enable the API

テーブルを確認する

BigQuery では、クエリを実行できる複数のサンプル テーブルが提供されています。このクイックスタートでクエリを実行する Shakespeare テーブルには、すべての戯曲のすべての単語のエントリが含まれます。

特定のテーブルのスキーマを調べるには、次のステートメントを実行します。

bq show projectId:datasetId.tableId

プロジェクトとデータセットの ID は、bq ツールのデフォルト値の場合は省略できます。次の例では、samples データセットの shakespeare テーブルを調べます。

bq show publicdata:samples.shakespeare

出力:

Table publicdata: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 内の引用符は \ 記号でエスケープします。

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

次の例では、シェイクスピアのすべての作品で "raisin" というサブ文字列が現れる回数をカウントします。このクエリでは、大文字と小文字が区別されます。SQL の機能 IGNORE CASE を使用しない限り、文字列の比較では大文字と小文字が区別されます。

bq query "SELECT word, SUM(word_count) as count FROM publicdata:samples.shakespeare WHERE word CONTAINS '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 "SELECT word FROM publicdata:samples.shakespeare WHERE word = 'huzzah' IGNORE CASE"

出力:

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

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

次に、新しいテーブルを作成します。すべてのテーブルは、テーブルの単純なグループであるデータセット内に存在する必要があります。データセットは 1 つのプロジェクトに割り当てられます。

ステップ 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 コマンドの引数は次のとおりです。

    • データセット ID: 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 Platform アカウントに課金されないようにする手順は次のとおりです。

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

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

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。