GoogleAppsScript
FusionTables

GoogleAppsScriptからFusion Tablesのテーブルを作成・データ挿入するときのメモ

More than 3 years have passed since last update.

Google Apps ScriptからFusion Tablesを操作する実装について調べているなかで、テーブル作成の実装例が見当たらなかったので、GoogleAppsScriptからFusion Tablesのテーブル作成と、データ挿入について書きとめておきます。

利用するメソッド

  • テーブル作成:Table.insert
  • データ挿入:Query.sql or Table.importRows

テーブル作成

Table.insert

作成するテーブル情報をパラメータに指定して実行します。
テーブル情報の定義はjson形式で行いますが、Fusion Tablesで指定できる項目を把握するところが一番苦労するでしょう。

ちなみに、最低限のテーブルを作成するにはこんな感じになります。

Table.insert
var resource = {
  "name": "hoge",
  "isExportable": false,
  "kind": "fusiontables#table",
  "columns": [
    {
      "name": "id",
      "type": "NUMBER",
      "kind": "fusiontables#column"
    },
    {
      "name": "name",
      "type": "STRING",
      "kind": "fusiontables#column"
    },
    ],
  };
FusionTables.Table.insert(resource);

なお、次のようなテーブルが作成されます。

  • テーブル名は"hoge"
  • テーブルデータのダウンロード不可
  • カラムは数値型の"id"と文字列型の"name"

テーブル設定の詳細はリファレンスを確認してください。

データ挿入

Query.sql

INSERT文をSQL実行することで、データを挿入します。Fusion TablesのINSERT文の書式を知っていれば、利用にはあまり問題ないでしょう。

Table.insertの説明の中で作成したテーブルにデータを3行入れるなら、こんな感じになります。

Query.sql
var sql = "INSERT INTO XXXXXXXXXXX (id,name) VALUES (1,'data1');"
  + "INSERT INTO XXXXXXXXXXX (id,name) VALUES (2,'data2');"
  + "INSERT INTO XXXXXXXXXXX (id,name) VALUES (3,'data3');";

FusionTables.Query.sql(sql);

Table.importRows

SQLを使わずに、Fusion Tablesにデータを挿入します。
Query.sqlよりも比較的早くデータ挿入ができますが、一度実行した後は一定の時間が経過しないと、内部エラーが発生します。

Query.sqlのデータ挿入と同じデータを入れるには、こんな感じになります。

Table.importRows
var rowsData = "1,data1\n" 
  + "2,data2\n" 
  + "3,data3\n";
var rowsBlob = Utilities.newBlob(rowsData, "application/octet-stream");
FusionTables.Table.importRows("XXXXXXXXXXX", rowsBlob);

まとめ

最後にデータ作成とデータ挿入を一度に行うgsコードを掲載しておきます。
runメソッドをトリガーで自動実行させれば、定期的にテーブル作成・データ挿入を行えます。

function run() {
  var tableName = "hoge";
  var tableId = createTable(tableName);
  insertDatas(tableId);
}

function createTable(tableName) {
  var resource = {
  "name": tableName,
  "isExportable": false,
  "kind": "fusiontables#table",
  "columns": [
    {
      "name": "id",
      "type": "NUMBER",
      "kind": "fusiontables#column"
    },
    {
      "name": "name",
      "type": "STRING",
      "kind": "fusiontables#column"
    },
    ],
  };

  return FusionTables.Table.insert(resource).tableId;
}

function insertDatas(tableId) {
  var sql = "INSERT INTO " + tableId + " (id,name) VALUES (1,'data1');"
    + "INSERT INTO " + tableId + " (id,name) VALUES (2,'data2');"
    + "INSERT INTO " + tableId + " (id,name) VALUES (3,'data3');";

  FusionTables.Query.sql(sql);  
}