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

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

始める前に

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

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

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

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

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

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

    APIを有効にする

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

テーブルを確認する

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

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

bq show projectId:datasetId.tableId

プロジェクトとデータセットの ID は、bq ツールのデフォルト値の場合は省略できます。次の例では、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 help コマンドライン ツールに関する詳細な情報を表示するには、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: サンプルデータをダウンロードする

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

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

  2. zip ファイルを解凍します。

    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 |
    +----------+-------+
    

クリーンアップ

このチュートリアルで使用したリソースについて GCP アカウントに課金されないようにするために、以下を行ってください。

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

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

次のステップ

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

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

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