Upgrade to Pro — share decks privately, control downloads, hide ads and more …

spansql で ENUM を使いたかった話

Sugar Sato
November 08, 2024
140

spansql で ENUM を使いたかった話

Sugar Sato

November 08, 2024
Tweet

Transcript

  1. 自己紹介 Sugar Sato (@satoIsSugar) • 2023年 BuySell Technologies入社 • 基盤チーム所属(Portal/Account/Approval)

    PjM ◦ アソシエイトマネージャー • Go / Angular / Serverless ◦ Go歴: Go 年目くらい • 熱帯植物 ◦ ビカクシダ • 猫 ◦ Lambda (♀ 2才)
  2. プロダクト群「バイセルリユースプラットフォーム Cosmos」の開発が進行中 リユースに必要なすべての機能を提供する 「リユースプラットフォーム Cosmos」の開発が進行中です。 Cosmosを活用して、バイセルグループ全体での業務効率改善やデータドリブン経営の深化を目指しています。 リユースプラットフォーム Cosmos 自社開発のリユース特化業務基幹システムでありサービス群の集合体 買取申込

    買取・査定 在庫管理 販売 多様なチャネルで収益最大化 CRM -顧客対応- 買取種別に応じた最適なシステム構築 Visit -訪問買取 - Store -店舗買取 - Promas -商材マスタ - Appraisal -専門査定 - Stock -在庫管理 - EXS -販売管理 - Core -会員管理- Portal -データ利用- Pocket -データ基盤- 買取 専門チームによる真贋・査定と連携 査定 申込 効率的な顧客対応 在庫 在庫管理の最適・効率化 販売 データ 各事業プロセスにある データを一元管理 :基幹システム
  3. ENUM を使いたかった背景 • 手順 ◦ proto ファイル定義 ◦ pb ファイル生成

    ◦ gcloud コマンドで流し込み (DDL + proto ファイル) • くわしいことは CloudSpannerでENUMを使う方法 を参照
  4. • 公式ライブラリ (google-cloud-go) • > spansql is reusable for anything

    that interacts with Cloud Spanner on a syntactic basis, such as tools for handling Spanner schema (DDL). ◦ google-cloud-go/spanner/spannertest /README.md • リリース予定日遅れがち spansql とは
  5. spansql とは • 「spannertest のおまけとして世に出ることになった」ものらしい ◦ > Neither of these

    packages aims to be performant nor exact replicas of the production Cloud Spanner. ◦ > They are reasonable for building tools, or writing unit or integration tests. ▪ google-cloud-go/spanner/spannertest /README.md
  6. 後日談 • この資料を作ったタイミングで ENUM が使えるように ... ◦ spanner/spansql: support for

    Protobuf column-types ◦ ENUM を使えるようにするPR ◦ v1.72.0 のリリース待ち • ただソースコード読んだだけになってしまった...w ◦ でも楽しかったのでOKです
  7. まとめ • spansql で ENUM が使えるようになっていた • wrench で詰まったら spansql

    のコード見ると良さそう • spansql のリリース頻度が体感で若干遅い • spansql に対応していないクエリがある(あった) ◦ ChangeStreams ◦ (対応済み) CREATE PROTO BUNDLE ◦ (対応済み) ENUM
  8. 引用 • https://github.com/cloudspannerecosystem/wrench • https://cloud.google.com/spanner/docs/reference/standard-sql/protocol-buffers#create_a_protocol_buffer • https://qiita.com/sgash708/items/6813a68eb91e92ca2227 • https://github.com/googleapis/google-cloud-go/tree/f847c75df3bda9d74257ab68e55ac01191c287fc/spanner •

    https://github.com/cloudspannerecosystem/wrench • https://x.com/apstndb/status/1833864450287554840 • https://github.com/googleapis/google-cloud-go/issues/10944 • https://github.com/googleapis/google-cloud-go/pull/10945 • https://github.com/googleapis/google-cloud-go/pull/11088 • https://github.com/cloudspannerecosystem/wrench/blob/3a330a06ffd2149a5bf5143d582b5c637554575d/pkg/spanner/migration.go# L120 • https://x.com/apstndb/status/1833864450287554840 • https://github.com/googleapis/google-cloud-go/blob/main/spanner/spannertest/README.md • https://pkg.go.dev/cloud.google.com/go