libro
www.tuyano.com
Google Apps Scriptプログラミング [中級編]

BigQuery APIの利用 (5/5)

作成:2012-06-07 13:36
更新:2012-06-07 13:36

■クエリーでレコードを検索する

全部のレコードをとり出すのではなく、特定の条件に応じてレコードを検索し取り出す場合は、BigQuery.Tabledata.listは使いません。「BigQuery.Jobs.query」というものを利用します。

Jobsは、BigQueryへのさまざまな処理を実行させるための機能を提供するオブジェクトです。この中の「query」によって、基本的な検索などが行えます。

このqueryは、BigQueryでのレコード検索を行うクエリー(命令文)を実行するためのメソッドです。
var 変数 = BigQuery.Jobs.query( クエリー文 );
このように、引数にクエリーのテキストを指定します。SQLデータベースなどを利用したことがあれば、「クエリーを送信して処理を行わせる」というやり方はおなじみでしょう。ただし異なるのは、「実行するのは、SQLではない」という点です。

BigQueryは、SQLデータベースではありません。Google独自のビッグテーブルと呼ばれるビッグデータを扱うためのデータベース機能を用いています。したがって、実行されるクエリーも、Googleによって独自に定義されたものです。ただし、基本的な構文は、SQLに酷似しています。

レコードを取得するクエリーの基本形は、以下のようになります。
SELECT フィールド名,フィールド名,…… FROM [データセット名.テーブル名];
SQLのSELECT文にそっくりですね。SELECTの後に、取得するフィールド名をカンマで区切って記述します(ワイルドカードの*記号は使えません)。そしてFROMの後に、[]をつけてデータセット名とテーブル名をドットでつなげて記述します。例えば、mydatasetというデータセットにあるmytableから、nameとageのフィールドの値だけをとり出すなら、
SELECT name,age FROM [mydataset.mytable];
こんな具合に記述すれば良いわけです。意外と簡単ですね。――これに、「特定の条件に合うレコードだけを検索する」というようにしたい場合は、更にその後に「WHERE」という句をつなげます。
SELECT フィールドの指定 FROM [○○.○○] WHERE …条件となる文…;
こんな具合です。条件となる文は、いろいろとありますが、基本は「等号・不等号の記号」でしょう。例えば、「ageが20以上のレコードだけ検索」というなら、
SELECT name,age FROM [mydataset.mytable] WHERE age >= 20;
このようにすればいいでしょう。注意したいのは、テキストです。例えば、「nameにyamadaというテキストが含まれている」という場合、
SELECT name,age FROM [mydataset.mytable] WHERE name CONTAINS "yamada";
という具合になります。「name = "yamada"」というように等号不等号はテキストでは使えないので注意が必要です。

この条件文の部分では、利用可能な関数類が多数用意されており、それらを使うことでかなり複雑な条件設定も可能です。テキストなどは正規表現を利用したりできますし、タイムスタンプやIPに関する関数もいろいろと用意されていたりして、けっこう充実しています。

とりあえず、ここでは「数値関係の等号不等号と、テキストのCONTAINS」だけ覚えておきましょう。これで、ごく簡単な条件の指定はできるでしょうから。それ以上は、ある程度BigQueryの使い方がわかってきたら、それぞれで勉強してください。

また、クエリーのコマンドも、現時点では「SELECT」しかありません。つまり、レコードを追加したり更新したりするような操作を行うコマンドはまだないのです。したがって、データを改変したい場合は、元になるCSVデータを修正し、再アップしてください。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

function findByQuery(){
  var str = Browser.inputBox("検索テキスト:");
  var query = 'SELECT name,mail,age FROM […データセット名….mytable] WHERE name CONTAINS "' + str + '";';
  var result = BigQuery.Jobs.query("123158439972",query);
  var rows = result.getRows();
  var msg = "";
  for(var i in rows){
    var row = rows[i];
    var f = row.getF();
    msg += f[0].getV() + " ";
  }
  msg += " -- total " + rows.length + " records.";
  Browser.msgBox(msg);
}

※関連コンテンツ

「Google Apps Scriptプログラミング [中級編]」に戻る