Help us understand the problem. What is going on with this article?

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);  
}
U11
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした