LoginSignup
3
1

More than 5 years have passed since last update.

GCP利用登録からCloud Spannerのテーブル作成してINSERT/SELECTしてみた手順

Last updated at Posted at 2017-02-24

GCPお試しがてらCloud Spannerのテーブル作成からローカル(Mac OS X)のテストコード(go)でINSERT/SELECTをしてみた手順です。

ローカル環境

  • Mac OS X El Capitan
  • go v1.7.4

やったこと一覧とテストコード

1 Google Cloud Platform の使用登録

  1. 登録 (割愛)
  2. お支払の設定(割愛)

2 Cloud Spannerのインスタンス作成

  1. Cloud Spanner から
    1. インスタンス testinstance 作成
    2. データベース spannertrial 作成
    3. テーブル 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 の有効化

  1. API Manager から
  2. [+] APIを有効にする をClick
  3. Cloud Spanner API を検索して有効化

4. Google Cloud SDK の導入

  1. Download (https://cloud.google.com/sdk/)
  2. インストール
  3. 認証
    1. gcloud beta auth application-default login
    2. ブラウザで認証 3. https://cloud.google.com/sdk/auth_success

5. ドキュメントに沿ってコーディング

  1. https://cloud.google.com/spanner/docs/reference/libraries
  2. 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
3
1
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
3
1