GCPお試しがてらCloud Spannerのテーブル作成からローカル(Mac OS X)のテストコード(go)でINSERT/SELECTをしてみた手順です。
ローカル環境
- Mac OS X El Capitan
- go v1.7.4
やったこと一覧とテストコード
1 Google Cloud Platform の使用登録
- 登録 (割愛)
- お支払の設定(割愛)
2 Cloud Spannerのインスタンス作成
-
Cloud Spanner から
- インスタンス
testinstance
作成 - データベース
spannertrial
作成 - テーブル
post
作成
- インスタンス
スキーマはこんな感じ
CREATE TABLE post (
id INT64 NOT NULL,
author_id INT64 NOT NULL,
content STRING(MAX),
created_at TIMESTAMP,
) PRIMARY KEY (id)
3. Spanner API の有効化
- API Manager から
-
[+] APIを有効にする
をClick - Cloud Spanner API を検索して有効化
4. Google Cloud SDK の導入
- Download (https://cloud.google.com/sdk/)
- インストール
- 認証
gcloud beta auth application-default login
- ブラウザで認証
3. https://cloud.google.com/sdk/auth_success
5. ドキュメントに沿ってコーディング
- https://cloud.google.com/spanner/docs/reference/libraries
- https://godoc.org/cloud.google.com/go/spanner
spanner-trial.go
package main
import (
"fmt"
"strconv"
"time"
"cloud.google.com/go/spanner"
"golang.org/x/net/context"
)
// 全体的にエラー処理は割愛
func main() {
ctx := context.Background()
// データベースID
databaseID := "projects/my-project-id/instances/testinstance/databases/spannertrial"
// クライアント生成
client, _ := spanner.NewClient(ctx, databaseID)
// 最大ID取得
var lastid int64
var newid int64
iter := client.Single().Query(ctx, spanner.NewStatement("SELECT id FROM post order by id desc limit 1"))
iter.Do(func(row *spanner.Row) error {
row.Column(0, &lastid)
newid = lastid + 1
fmt.Printf("last id of post: %v\n", lastid)
fmt.Printf("new id: %v\n", newid)
return nil
})
// 新ポストインサート
newcontent := "テストのポスト" + strconv.FormatInt(newid, 10)
client.Apply(ctx, []*spanner.Mutation{
spanner.Insert("post",
[]string{"id", "author_id", "content", "created_at"},
[]interface{}{newid, 1, newcontent, time.Now()})})
// 新ポストをid指定でselect
row, _ := client.Single().ReadRow(ctx, "post",
spanner.Key{newid}, []string{"content"})
var content = ""
row.Column(0, &content)
fmt.Printf("new post id = %v, content = %v", newid, content)
defer client.Close()
}
6. go get & run
$ go get cloud.google.com/go/spanner/...
$ go run spanner-trial.go
7. 何回か実行してみた結果
last id of post: 14
new id: 15
new post id = 15, content = テストのポスト15
おまけ: 上記のSpannerのインスタンスを(Free trial分内で)約一週間放置したレシート
日付 | 内容 | 金額(JPY) |
---|---|---|
2017年2月1日~28日 | Cloud Spanner Server Node for Three-Way Replicated Regional Configuration: 149.473 時間 [Currency conversion: USD to JPY using rate 115.1](ソース: My First Project [**********]) | ¥15,484 |
2017年2月1日~28日 | Credit FreeTrial:2017-02-04T00:00:00.000-08:00 [ Currency conversion: USD to JPY using rate 115.1 ](ソース: My First Project [**********]) | −¥15,484 |
2017年2月1日 | 消費税 | ¥1,237 |
2017年2月1日 | 消費税 | −¥1,237 |
開始残高: ¥0 |