データ・連携– category –
JSON、CSV、データベース、API、クラウド連携を扱います。
-
データ・連携
JSON Patchで差分更新を安全に設計する|test・配列・冪等性・Python
APIで一部のfieldだけを更新するとき、単純なJSON objectでは「値を設定する」「memberを削除する」「現在値が一致するときだけ変更する」といった操作を明確に表せないことがあります。 JSON Patchは、JSON documentへの変更をoperationのarrayで表す形式... -
データ・連携
SQLite STRICT tableで型崩れを防ぐ設計|型変換・ANY・CHECK・Python
API、CSV、表計算、CADからSQLiteへデータを取り込むとき、列をINTEGERとして定義しただけで数値以外を完全に拒否できるとは限りません。SQLiteの通常tableは柔軟な型付けを採用し、値を変換できない場合でも別のstorage classのまま保存できるためです。 ... -
データ・連携
Avroで壊れないイベントschemaを設計する|writer・reader・互換性・Python
システム間でeventやrecordを長期間受け渡すと、送信側と受信側を同じ日に更新できないことがあります。新しいfieldを追加しただけでも、古いconsumerが読めなくなれば連携は停止します。 Apache Avroは、JSONで定義したschemaとbinary dataを組み合わせる... -
データ・連携
設計データを型付きで保存するParquet設計|schema・Decimal・UTC日時・Python
CSVやJSONで測定値を保存すると、14.000が数値なのか文字列なのか、日時がUTCなのか、空欄がNULLなのかを別の仕様書で補う必要があります。読み込み側の推測に任せると、Decimalの桁、timezone、先頭ゼロが失われます。 Apache Parquetはschemaを持つ列指... -
データ・連携
DB更新とイベント配信を分離するtransactional outbox設計|SQLite・Python・冪等性
DBの更新後にWebhookやmessage brokerへ通知すると、「DB更新は成功したが通知は失敗した」「通知は届いたがDB更新はrollbackした」という食い違いが起こり得ます。DBと外部systemを同じtransactionへ入れられないことが原因です。 transactional outboxは... -
データ・連携
データの来歴を追跡するprovenance設計|Entity・Activity・Agent・DB実装
設計値や部品表をDBへ保存できても、「この値はどのfileから来たのか」「どの変換programを通ったのか」「なぜ前回と違うのか」が分からなければ、誤りを見つけた後の調査が止まります。 必要なのは最新版だけでなく、入力、処理、出力の関係をデータとし... -
データ・連携
大量JSONをストリーム連携する設計|RFC 7464・JSON Text Sequences・Python
大量のレコードをJSONで受け渡すとき、全件を一つの巨大なarrayへ入れると、送信側も受信側も終端まで待ち、大きなmemoryを確保しがちです。途中で通信が切れれば、どこまで正常だったかも判断しにくくなります。 RFC 7464のJSON Text Sequencesは、独立し... -
データ・連携
CSV一括取込を壊さないstaging table設計|検証・エラー隔離・UPSERT
CSVを直接、本番tableへINSERTすると、途中の1行だけ型が違う、必須値が空、IDが重複するといった問題が、そのまま業務データへ入り込みます。逆に、最初の異常行で処理を止めるだけでは、利用者は修正すべき行を一度に確認できません。 安全な一括取込で... -
データ・連携
BOMデータを正規化する設計|親子関係・revision・再帰SQLの実務
BOM(Bill of Materials、部品表)は、単なる部品一覧ではありません。完成品の下に組立品があり、その下に部品があるという親子関係と、各階層で必要な数量を表す構造です。 Excelの見た目をそのまま一つのtableへ保存すると、同じ部品名が何度も現れ、re... -
データ・連携
データ連携のハッシュ設計|SHA-256・Content-Digest・JSON正規化
ファイルをAPIやクラウドストレージへ送れたとしても、受信したbyte列が送信時と同じとは限りません。文字コード、改行、圧縮、途中の変換、保存ミスによって内容が変わることがあります。 ハッシュ値を使うと、送信側と受信側が同じbyte列を持っているか...
