【備忘録】BacklogのデータをExcelで操作するためのAzure活用

小ネタの備忘録です。

チケット管理にBacklogを使ってます。プロジェクトが増えてきて、どのチケットが未処理なのかだったり誰がどのプロジェクトにアサインされているのかだったりをエクセルで操作、加工したかったのでさくっと個人開発🌝

[Backlog API](https://developer.nulab.com/ja/docs/backlog/)を叩き、表形式にしてデータストアに格納する処理はGoで記述。GitHub Actionsを使って朝一回の処理を走らせる。最近ちょっとした定期処理はこのやりかたがコスト安なので好きです。
![img.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821082/076825b9-72f5-9798-fb09-3a5dfb367d66.png)

https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#schedule

## データストア
Azure Table Storageにしました。

https://learn.microsoft.com/ja-jp/azure/storage/tables/table-storage-overview

Azure Table Storageであればエクセルの[Power Queryコネクタ](https://learn.microsoft.com/ja-jp/power-query/connectors/)で表形式のデータを簡単に引っ張ってこれるし、なんたって安い。

調べてみるとAzure Table Storageとほぼ同様にAzure Cosmos for Tableという選択肢もあるとの事。ふむふむ。

https://learn.microsoft.com/ja-jp/azure/cosmos-db/table/support?toc=https://learn.microsoft.com/ja-jp/azure/storage/tables/toc.json&bc=https://learn.microsoft.com/ja-jp/azure/bread/toc.json

ざっくり比較すると以下のような感じ。

**1. スピード (待ち時間)**
- **Azure Table Storage**
    - 高速だけど、正確な待ち時間の上限は決まっていない
- **Azure Cosmos DB for Table**
    - 世界中どこでも超高速。読み取りは10ミリ秒以下、書き込みは15ミリ秒以下

**2. 処理能力 (スループット)**
- **Azure Table Storage**
    - 最大1秒に20,000回の操作まで可能
- **Azure Cosmos DB for Table**
    - 1秒に1,000万回以上の操作も対応。必要に応じて処理能力を確保

**3. グローバル対応**
- **Azure Table Storage**
    - 主に1つの地域で利用。オプションでバックアップ用の読み取り地域も追加可能
- **Azure Cosmos DB for Table**
    - 世界中30以上の地域にデータを分散

**4. データ検索 (インデックス作成)**
- **Azure Table Storage**
    - `PartitionKey`と`RowKey`に対するインデックスのみ
- **Azure Cosmos DB for Table**
    - 全てのデータに自動でインデックスがつく

**5. クエリの速度**
- **Azure Table Storage**
    - プライマリキーで高速検索、その他はスキャンになる
- **Azure Cosmos DB for Table**
    - 自動インデックスでクエリが速い

**6. データの整合性**
- **Azure Table Storage**
    - プライマリリージョンは厳密な整合性、セカンダリは最終的な整合性
- **Azure Cosmos DB for Table**
    - 5つの整合性オプションから選べるので、柔軟に対応可能

**7. コスト**
- **Azure Table Storage**
    - 使用量に応じたシンプルな料金
- **Azure Cosmos DB for Table**
    - 使用量に応じた料金か、予め決めた容量に応じた料金のいずれかを選択

**8. 信頼性 (SLA)**

- **Azure Table Storage**
    - 99.99%の可用性
- **Azure Cosmos DB for Table**
    - 単一リージョンとマルチリージョンの両方のアカウントで`緩やかな整合性`を使用した場合、`99.99%`の可用性を保証
    - マルチリージョンのアカウントで読み取り操作に対して`99.999%`の可用性を保証

ふむむー、パフォーマンス的にはCosmos DB for Table。
また、クエリ操作に関してもCosmos DBのほうが優れているが、今回はテーブル間のJoinだったりソートだったりはエクセルでやるのでそこまでこだわらない。
コストはどちらも使用料に応じた課金体系だが、ざっくりAzure Table Storageのほうが安い。よってAzure Table Storageに決定。


## SDK

SDKパッケージはAzure Cosmos DB for Table と Table Storage の両方で機能する。

Cosmos DBに移行したくなったとしてもアカウント名、接続キー、エンドポイントを書き換えればよいだけなので、移行も簡単🙌

https://github.com/Azure/azure-sdk-for-go/tree/main/sdk/data/aztables

## エクセルへのインポート
あとはエクセルでポチポチするだけ

https://learn.microsoft.com/ja-jp/power-query/connectors/azure-table-storage

データタブからテーブルストレージを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821082/18d153d9-c403-4e2c-ce7a-4b50a44f61c8.png)
続けてストレージアカウント名とアクセスキーを入力。
データの変換をクリックし、Content列を展開して必要な列を選択する。
最後に「閉じて読み込む」でインポート完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821082/25510335-3fbc-4b2e-d5b6-9feacc18882f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821082/6026e186-77d3-f318-e43d-7cb2b59dcde5.png)


## さいごに

Azure Cosmos for Tableの存在を知れて試せたのは収穫でした😄

という事でちょっとした表形式のデータはAzure Table Storageオススメです