Goocle CloudのBigTableを参照するのに便利なツール

# はじめに
こんにちは、京セラコミュニケーションシステム　宮坂(@kccs_katsuhiro_miyasaka)です。

Bigtable使われている皆様、Bigtableはたくさんのデータを高速で読み書きできて非常に便利です。
しかし、データを参照する時に不便な思いを抱えた事は無いでしょうか。
コンソールから参照する事ができず、公式ツールを使うにも少々データを参照するのにコマンドを利用するのは冗長な気がしてしまいます。
慣れない人は特に難しいです。
そんな方向けに便利なツールをご紹介致します。

# この記事の対象者
Bigtableのデータを参照するのにcbtを使っているが、参照するのみに使うのは少し大変だ。
cbtコマンドを覚えるのが大変だ、SQLで操作できないか。

といった方が対象になります。

:::note info
アプリケーションの安全性を保障するわけではございませんので、
インストールは自己責任でお願い致します。
:::

# Bigtableのデータ構造
前提としてBigtableを簡単に解説します。
BigtableはKey-Value マップ形式でデータが登録されてます。
※RDB等のデータ構造に慣れた人は理解に少し時間がかかると思います。

**[テーブル構造]**
テーブル構造は以下の通り
行キー、列ファミリー、列、値をそれぞれ持っている構造になります。
ぞれぞれの列に複数の値を持たせることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1525729/22eafb6f-62be-abea-20b8-a34b79a16e3c.png)

↓
**[データ例]**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1525729/f19d5e3e-9e2e-93a2-cfa4-14e6e3aacabe.png)


詳細は以下をご参照ください。

[Bigtable ストレージ モデル](https://cloud.google.com/bigtable/docs/overview?hl=ja#storage-model "Bigtable ストレージ モデル")

# CBT(公式ツール)

[インストール手順](https://cloud.google.com/bigtable/docs/cbt-overview?hl=ja "インストール手順")
[リファレンス](https://cloud.google.com/bigtable/docs/cbt-reference?hl=ja "リファレンス")

コマンドで大体なんでもできるツール、コマンドに抵抗が無い人は慣れれば便利に使えます。
環境設定は、インストール後、ログインしてローカルの「.cbtrc」を編集すれば使えます。
```vim
vi .cbtrc
project = [プロジェクト名]
instance = [インスタンス名]
```

良く使うコマンド例
データ登録・参照・削除と言ったコマンドは揃っており、簡単な操作ならこちらのツールを使えば一通りの操作ができます。
```shell
# それぞれオプションが用意されてるので、リファレンスをご参照ください。
# テーブル一覧を参照
cbt ls
test_table1
test_table2
...
test_table3

# テーブルの中身を参照
# prefix=前方一致とか、regexで正規表現とかいろいろ便利な見方があります。
# 前述の[データ例]の状態を作り出してみました。
# cbt read [テーブル名]
# [表示形式]
# ----------------------------------------
# 行キー名
#    列ファミリー名：列名 @登録日時
#    値
# ----------------------------------------

cbt read  test_table1
----------------------------------------
TESTKEY#1
  cf1:cl1                                  @ 2022/12/02-11:39:16.394000
    "test-value1-2"
  cf1:cl1                                  @ 2022/12/02-11:39:15.038000
    "test-value1-1"
  cf1:cl2                                  @ 2022/12/02-11:39:17.796000
    "test-value2"
  cf2:cl1                                  @ 2022/12/02-11:39:21.979000
    "105"
  cf2:cl1                                  @ 2022/12/02-11:39:20.484000
    "101"
  cf2:cl1                                  @ 2022/12/02-11:39:19.109000
    "100"
  cf2:cl2                                  @ 2022/12/02-11:39:23.311000
    "0.2"

----------------------------------------
TESTKEY#2
  cf1:cl1                                  @ 2022/12/02-11:22:52.082000
    "val1"
  cf1:cl2                                  @ 2022/12/02-11:22:53.353000
    "val2"
  cf2:cl1                                  @ 2022/12/02-11:22:54.672000
    "val3"
  cf2:cl2                                  @ 2022/12/02-11:22:55.940000
    "val4"

#テーブルにデータを登録
#cbt set テーブル名 キー カラムファミリ:カラム=値
cbt set test_table1 TESTKEY#1 cf1:cl1=test-value1-1

#テーブルのキーを削除
#cbt deleterow [テーブル名] [キー名]
cbt deleterow test_table1 TESTKEY#1

```

慣れた人は便利に使いこなせますが
・少しデータを見みたい。
・あまりコマンドに慣れてない人がデータを参照したい。
というシチュエーションでは不便です。

そこでオススメなのが以下のツール。
# BigTableViewer
[BigTableViewer](https://github.com/erikmafo/BigTableViewer "BigTableViewer")

JavaのGUIでできており、参照が可能です。
※Windows環境は、インストール用のmsiがあります。

起動すると以下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1525729/9739db98-a746-cf6e-ff67-e86441f1c5b9.png)

まずはファイルからSet credetialsでサービスアカウントの認証ファイルを紐づけます。
※Bigtable参照権限を持つサービスアカウントを作成し、JSONキーファイル形式でダウンロードした認証ファイルになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1525729/5c5dc1c4-6e0c-ddc9-f97b-cf1bca59ae69.png)

紐づけたら、参照したいテーブルのプロジェクトとインスタンスを登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1525729/c114d372-8f3b-2c6a-b869-a474f51deb89.png)

これで準備完了です。

後はテーブルを選択して、「Execute」すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1525729/2404fb59-cf58-267b-25e5-e08513ce9a06.png)

データが参照できます。
コマンドと比べて格段に見やすいです。
※各カラムの最新値を初期表示してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1525729/b1611ba4-f912-c452-27c2-5c1b94e92de8.png)

CSV形式ですが、コピー&ペーストもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1525729/75798104-a781-678a-822d-886e1e2ab5ee.png)

SQL形式の正規表現でキー検索もできますので、例えば以下のような後方一致の条件で検索すると。
```SQL
SELECT * FROM 'test_table1'　WHERE　KEY LIKE '.*#1' LIMIT 1000
```
対象キーだけを検索してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1525729/aba8f794-ff21-edcf-9284-5f79962856bb.png)

**<font color="Red">しかし、惜しいとこが1つだけあります。</font>**
テーブルの設計で1カラムに値が複数件セットされている場合同じ値が何個もあるように見えます。
表示されるタイムスタンプで見分けられますが、データが多いと不便です。

この場合は、詳細をcbtで見る等にした方が良いと思います。
※タイムスタンプである程度見分ける事が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1525729/241ec6c4-47e1-4613-77b5-d6863e40ebca.png)

今までBigtableの参照が不便でしたが、このツールを見つけて非常に便利になりました。
もしよろしければ、ご参考にして頂ければと思います。