Posted at

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);
}