[gcp][java]datastoreへデータを保存する

  gcp

今更需要があるかわかりませんがメモ。
Mavenレポジトリから必要なライブラリをゲットして参照しておきます。

Google Cloud Datastore
Java idiomatic client for Google Cloud Datastore.

Maven Repository: com.google.cloud » google-cloud-datastore (mvnrepository.com)

さらに下記にあるように環境変数GOOGLE_APPLICATION_CREDENTIALSに認証情報の書かれたjsonファイルへのパスを設定しておきます。こうしておくとcloud上のdatastoreへ直接アクセスできるようになります。(エミュレータについてはここでは書きません)

Authenticating with this module

google-cloud-node/authentication.md at master · googleapis/google-cloud-node (github.com)

Google Cloud Platformのデータストアの管理ページがあるので、そこで結果がすぐに確認できます。更新ボタン(グルっとした矢印のアイコン)があるので、そこをクリックして表示データをリフレッシュしましょう。

下記コードはIDを自動採番してデータを保存する例です。
IncompleteKeyというのを作るのがポイント。”gcp-test2″というのがテーブル名みたいなものです。
Datastoreでは各列に暗黙インデックスが作成されていて、1500bytes超の文字列の場合はそれが作成できないためにエンティティの登録に失敗します。そこでsetExcludeFromIndexesにてインデックスから除外指定することで登録できるようになります。代償としてその列を条件にした抽出はヒットしなくなります。

import com.google.cloud.datastore.Datastore;
import com.google.cloud.datastore.DatastoreOptions;
import com.google.cloud.datastore.Entity;
import com.google.cloud.datastore.FullEntity;
import com.google.cloud.datastore.IncompleteKey;

Datastore ds = DatastoreOptions.getDefaultInstance().getService();
IncompleteKey key = ds.newKeyFactory().setKind("gcp-test2").newKey();
FullEntity<IncompleteKey> e = Entity.newBuilder().setKey(key)
        .set("name", "komi")
        .set("age", 99)
        .set("text", StringValue.newBuilder("aaaa").setExcludeFromIndexes(true).build())        .build();
ds.put(e);

LEAVE A COMMENT