LoginSignup
23
22

More than 5 years have passed since last update.

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

Posted at

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);  
}
23
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
22