サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
www.yasuhisay.info
会社のAdvent Calendarもdatatech-jp Advent Calendar 2024も枠がめでたく埋まってしまったので、12月感は特にないエントリです。 仕事でdbtのリポジトリの初期設定をすることが時々あるけど、ほぼ同じようなことをやっているので、さっと引用できるようにまとめておきます。この辺をやっておくと、大体安心して仕事ができる、という感覚になります。なお、dbtに関連ないチーム開発で必要な要素も入ってます。 優先度: 高い リポジトリの権限設定 CODEOWNERの設定 Pull Requestテンプレートの導入 sqlfmt / sqlfluffの導入 優先度: 普通 READMEの記載 dbt CloudでのCI/CDの設定 レイヤリングのルールを決めておく レビュー依頼の通知設定 Devcontainerの設定 コストの監視 Renovateの設定を行ない、
3行まとめ データに対する期待値を定義するData Reliability Levelという活動を始めています Data Reliability Levelを設定するには「XXXの場合にはAAAの項目は入力が必須」といった条件分岐や項目数も多く、レビューが大変という課題がありました 最近のJSON Schemaは記述力が高いため、上述のような制約も記述することができました 3行まとめ 前提: データの出口に対する期待値を明示的に設定したい 課題感: 各Data Reliability Levelに対する設定が適切に設定されているかを確認するレビューが大変 解決方法: 各Data Reliability Levelに対する必須入力項目をJSON Schemaで機械的にvalidateする 見所 条件分岐を記述する $refと$defsで繰り返しの記述を避ける anyOfでより柔軟な制約を設定
8/26に「全日本dbt-osmosisを愛でる会」を開催しました。パネルディスカッション形式のため、細かい資料はありませんが、当日のアジェンダなどは以下のスライドで公開しているため、雰囲気は感じ取ってもらえるかと思います。 開催の経緯: ノリと勢い 開催当日の盛り上がり 開催時の工夫: 頑張らないを頑張る 地方在住での勉強会との向き合い方 開催の経緯: ノリと勢い きっかけは株式会社ヤプリの山本さんが公開してくださった以下のエントリでした。 私が過去に発表したスライドやエントリを参考にしてもらっていて、めっちゃ嬉しかったです。また、bq_sushiなどの東京の勉強会に参加した際に「dbt-osmosis使ってます」と(リポジトリオーナーではなくただのcontributorである)私に声をかけてもらったりすることもありました。「これだけdbt-osmosisのユーザーが増えてきているのであ
今日もbq loadが失敗して涙を流していたデータエンジニアのid:syou6162です*1。このエントリではbq loadを使ったデータ取り込みで泣かないで済む、あるいは泣いても致命傷まではいかないようにするための色々なTipsを書きます。 bq loadをベースに書いていますが、SDKを使ってBigQueryにデータを取り込む際もほぼ同様のことを考えれば十分な場合が多いです。 bq loadの基本形 スキーマを自分で指定する 取り込み失敗時の対処方法 パーティショニング列やクラスタ列を指定する 必要であればbq queryと組み合わせて使う 洗い替えしたい場合 パーティション指定で洗い替え 一癖あるデータと戦う Shift-JISやEUC-JPのファイルを読み込む レコード内に改行を含むCSVを読み込む --max_bad_recordsオプションは最小限に 運用中のスキーマ変更に立ち
背景: データ品質を担保するにはデータソースの品質が重要 データソースの品質を担保する手段としてのData Contract Data Contractの表現方法の一つとしてのProtocol Buffers Data ContractとしてProtocol Buffersを使う データの入出力を一箇所に集約、Protocol Buffersで抑えるパターン ストレージのスキーマをProtocol Buffersで抑えるパターン 発展的な話題 & 読書会の案内 参考文献 背景: データ品質を担保するにはデータソースの品質が重要 私はデータエンジニアをしており、DWHやデータマートのデータ品質について考えることが多い。BigQueryなどにデータが取り込まれた後のレイヤリングやテスト、改善に向けたデータ品質の可視化について、以前発表した。 データが取り込まれた後の整理は進んでいるものの、やは
自分用のメモです。以下のエントリで便利なスクリプトを作りました。 不可解な現象に遭遇 このスクリプトを使って、いくつかのデータを調べていましたが、ぱっと見不思議な現象に遭遇しました。 比較対象のテーブルAとB(クエリは同一のものを仕様。作成元がprodとdevで異なる)があり、特定のカラムで差分が大量に発生している クエリ内のリネージを調べたところ、元データは完全に一致していることが分かった 罠はウィンドウ関数の利用方法にあった 「じゃあ、どこで差分が発生するんだよ...」となるわけですが、データに原因がないとすると、ありえるのはクエリです。乱数を利用しているわけでもないクエリで何で差分が発生するのか少し調べたところ、ウィンドウ関数を利用している箇所に問題があることが分かりました。 具体例があったほうが分かりやすいので、以下のような注文データを考えてみましょう。ユーザーが購入した金額とその
初めて使ったBIツールはLooker Studioのid:syou6162です。これまでTableau / Looker(≠ Looker Studio) / Metabase / Redash / Connected Sheetsなど色々なBIツールを触ってきましたが、不満は色々ありつつも個人的に一番しっくりきて愛着があるのはLooker Studioです。このエントリでは、その魅力と便利な使い方や注意点について書きます。例によって、社内勉強会向けの内容を外向けに公開しているため、内容の網羅性などは特に担保していないことにご注意ください。 Looker Studioの魅力 利用のハードルが限りなく低い & Google Workspaceとの連携が便利 複雑過ぎることができないので、諦めが付けやすい ちゃんとBIツールになっている Looker Studioの便利な使い方 多様なデータソ
背景 & Disclaimer DuckDB 概念や代表的なユースケース 使ってみる 1週間〜一ヶ月などある程度の期間、分析で使いたい場合 便利なCLIツールとして使う 所感 参考 Dataflow 代表的なユースケース 具体例 参考 背景 & Disclaimer BigQueryは非常に便利で、BigQueryにさえ上がってしまえばSQLで巨大なデータを簡単に相手にできます とはいえ、BigQueryに行きつくまでが大変な場合もありえます 例: 個人情報を含むsensitiveなデータで、BigQueryに気軽に上げられないケース 一時的であっても、相談なしにその手のデータを気軽にアップロードするのはやめてください... 数万件程度であれば手元のエクセルで開いて、問題ない行/列だけに絞る、ということもできるが、もっと量が多いデータだとそういうわけにもいかない。そもそも分析はSQLでやり
最近「ああ、これ前職でも前々職でもやったことあるなぁ」という仕事があった。データエンジニア(やその関連職種)として働き始めて約5年、3社でフルタイムとして働いてきて「このスキルは業界や組織規模が変わってもデータエンジニアとしてスキルを求められることが多いな」と感じたものをまとめてみることにした。棚卸し的な意味はあるが、特に転職用などではないです。 前提 どこでも必要とされたスキル データマネジメントに関する概要レベルの知識と実行力 セキュリティや法令に関する知識 事業ドメインに関する興味関心 他職種とのコミュニケーション能力 コスト管理 / コスト削減のスキル ソフトウェアエンジニアとしてのスキル DataOpsやアラートのハンドリング能力 分析用のSQLを書く力 古いテーブルやデータパイプラインを置き換えていくスキルや胆力 あるとやりやすいスキル 関連部署の動きを何となく把握しておく力
背景: アドホックなモデルをいつまでも残したくない dbtを使う場合、ある程度規則に沿ったレイヤリングの元に運用されることが多いと思う(例: staging / raw vault / fact & dim / martなど)。品質が必要な場合はこのレイヤリングに沿ってモデルを作ることになるが、急なビジネス要求によってこのレイヤリングに沿わないアドホックなモデルを作らなければならない場面は現実的にそれなりにあると思う(例)。こういった要求を受け入れつつ、アドホックなモデルをいつまでも運用しない形にしたい。 アドホックなモデルがいつから運用されているか機械的に把握する ひとまずアドホックなモデルがいつから運用されているかを簡単に知りたい。アドホックなモデルの数が多い場合、それらを手動で洗い出すのは面倒なので、機械的に出したい。テーブルが洗い替えされる場合、INFORMATION_SCHEMA
背景 担保したいこと 1: ホットキーで一撃で呼び出せる 2: ウィンドウを透過させてターミナルと他のウィンドウを同時に眺められること 調査したこと & 解決方法 ホットキーで呼び出せるか => hammerspoonで割り当てで対応 ターミナルの透過 => 無理そうなので、代替手段で対応 メモ: ターミナル関係のキーバインド tmuxっぽくしたい その他キーバインド 背景 iTermをずいぶん長く使ってきたけど*1、VSCodeのターミナルが急速に進化しているので、乗り換えを検討した。 VSCodeが色々便利になってきた 自分が使っている範囲だと、vimキーバインドも特に問題ない*2 普段のコーディングはVSCode、コマンド操作くらいしかiTermは使っていない 特にCopilot系の進化は目覚ましい、長い物には巻かれろというか長期的にはエコシステムに乗っておきたい エディタだけでなく
dbtや同じ系統のDataformなど、ELTの特にTransform部分に強みを持つツールを使い始めて大体3年になる。主観だけど、それなりに使い倒している部類だと思う。 開発効率を計測するデータ基盤の管理にDataformを使ってみた - yasuhisa's blog dbtを触ってみた感想 - yasuhisa's blog dbt カテゴリーの記事一覧 - yasuhisa's blog これらのツールで巷でよく言われる データリネージの可視化ができる データに対するテストが簡単に書ける エンジニア以外の人ともコラボレーションしやすい あたりの話は耳にタコができるくらい聞いていると思うので、ニッチではあるもののそれ以外のdbtの個人的に推しなポイントをダラダラと書いてみたいと思う。データエンジニアやデータガバナンスを推進する人には共感してもらえる内容かもしれない。 推しポイント:
背景: dbtを使っていてもER図は欲しい! どうやってER図を生成するか どうやってER図を見やすくするか まとめ 背景: dbtを使っていてもER図は欲しい! dbtはモデル間のリネージなど可視化が得意なツールではありますが、万能なわけではありません。モデルの生成過程などはリネージで担保できますが、分析時に「どれとどのモデルがJOINできて、JOINする際のキーはこれを使って」というER図で扱うような可視化はディフォルトではできません。 DWHを作っている側からすると「このテーブルはあの辺のテーブルと一緒に使うと便利で、いつもあのキーでJOINして」というのが頭の中に入っていることが多いため、ER図がなくてもどうにかなることも多いでしょう。しかし、分析に慣れていない人や分析に慣れている人であっても、普段と異なるドメインのテーブルを触るときはER図が提供してくれる情報は有用です。ちなみに
前提: これは何? dbtを使ったデータプロダクトを作っている社内のチームメンバー向けに書いた勉強会用のドキュメントです 社外に公開できるように少し抽象化して書いてます DWHに限らずdbtを使ったデータプロダクトで生かせる話ですが、分かりやすさのためにDWHを題材にしています 3行まとめ elementaryはdbtを利用しているデータパイプラインに対してData Observabilityを強化するツールであり、付属のリッチなレポートやSlachへのアラート通知が便利です しかし、実はelementaryが内部で生成している成果物はDWHの改善に役に立つものがたくさんあります 本エントリではelementaryの成果物や役に立つ実例を多めに紹介します 前提: これは何? 3行まとめ 背景: DWHとデータ品質 Observability / Data Observabilityについて
シリーズの第三弾です。読者の宿題にしてたけど、誰も書いてくれなさそうだったので結局自分で書きました。 背景 Looker StudioはGoogle Workspaceを使っていれば基本的に無料で使えますし*1、権限管理にGoogle Groupとも連携できるので、人気のBIの一つだと思います。私が初めて触ったBIもLooker Studioだったので、(API強化して欲しいとか不満は山のようにありつつも)何だかんだで憎めないし、さっとダッシュボード作りたいときはLooker Studioを使うことが多いです。会社によっては社内の公式のダッシュボードをLooker Studioで作っているところもあると思います。 dbtで作ったテーブルがConnected Sheetsから参照されている場合、一定程度利用されているスプレッドシートからのテーブルの参照状況はデータ基盤を管理する人間としては把
以下のConnected Sheets版です。これはかなり便利なものができたと、自画自賛してます。 背景 Connected Sheetsをdbtのexposureとして取り込む 見所 Connected Sheetsからのクエリか判断する BigQuery Scripting経由で発行されたクエリでもreferenced_tablesの情報を取得する クエリ回数やクエリされた週の数をメタデータとして加える まとめ 背景 Tableauと比べると、Connected Sheetsはアドホックな分析で使われることが多いと思います。実際、筆者が所属している会社でも「Tableauは公式のダッシュボード、それ以外のアドホックな分析はConnected Sheetsで行なってね」と案内しています。とはいえ、公式のダッシュボードにするためにはdbtなどを使ってデータソースを信頼できる形に整備する必要
N番煎じですが、やってみる機会があったので一般化してメモしておきます。 背景: コードレビューを素早く行なうことの重要性 レビューのフローを整理する GitHub Actionsでレビュー依頼を自動化する 背景: コードレビューを素早く行なうことの重要性 チーム開発で重要なことは色々あります*1が、Pull Requestを出したときに素早くレビューをしてもらえるというのはとにかく重要なことの一つです(日本語版)。 レビュー依頼がきたら今すぐ仕事をやめてレビューをしなければならない、というわけでないですが、一日に2~3回は見るようにしようと思いながら過ごしています。レビュー依頼を手動で「XXXさん(あるいはチーム)、以下のPull Requestのレビューお願いします!」とmentionしてもいいですが、一日に何回も明示的にレビュー依頼をしていると「ちょっとうるさいかもな、まとめて依頼しよ
3行まとめ テーブルの撤退時にはテーブルの参照回数を見ることが多いと思いますが、テーブル単独の参照回数を見るだけだと不十分なことが多いです 派生先のテーブルの参照回数まで考慮すると、テーブルが撤退できるか安全に判断することができます リネージ上の親子関係をWITH RECURSIVEで考慮しながら、累積参照回数をSQLで導出できるようにし、安全にテーブル撤退を判断できるようにしました 3行まとめ 背景: テーブルの撤退にはテーブル単独の参照回数を見るだけだと不十分 アイディア: 累積参照回数を計算する 実装 テーブル間の親子関係を抽出する WITH RECURSIVEでテーブルの親子関係を辿る テーブルの親子関係を考慮しながら、累積参照回数を計算する まとめ 背景: テーブルの撤退にはテーブル単独の参照回数を見るだけだと不十分 データエンジニアやアナリティクスエンジニアの仕事をしていると、
3行まとめ dbtのジョブが失敗した際やテーブルの廃止検討の際に、BI上のどのダッシュボードで利用されている(データリネージ)か知るのは重要です TableauのGraphQLのAPIからWorkbookとBigQuery上のモデルの埋め込みの関係を知ることができます dbtのモデルとTableau上で使われているWorkbookの依存関係をexposureとして出力するスクリプトにより、dbtのジョブの失敗やテーブルの廃止がTableauのダッシュボードに与える影響などを調べやすくなりました 3行まとめ 背景 課題: dbtのexposureとしてダッシュボードを手動で記入し続けるのは難しい 解決方法: TableauのGraphQLのAPIを使い、 dbtのexposureを自動生成する 発展的話題 背景 業務において、DWHやデータマートの生成にdbtを、BIツールとしてTablea
データの可用性を可視化したい データの可用性の解像度を上げたい: elementary-data elementaryによる細かい可視化 大雑把にデータセット単位で可用性を可視化したい まとめ データの可用性を可視化したい データ品質は正確性や最新性など様々な項目に分解することができますが、可用性(Availability)はその中でも基礎的な項目です。使いたいときにデータが使えないと困るので。 自分が所属しているチームはdbt(cli)およびdbt cloudを使っていますが、可用性を考えるのであれば cli: dbt runの実行結果 dbt cloud: Jobsの実行結果 をそれぞれ確認したり、こけているようであればアラートを飛ばすという運用が多いと思います。これだけだと「いつこけた」しか分からないので、Datadogを使って「いつこけた」「いつ復旧した」「こけて落ちていた時間はど
なぜ列レベルのアクセス制御とポリシータグが必要か Terraformでポリシータグの作成および権限付与 ポリシータグの付与の仕方 dbt経由の場合 bq loadを使う場合 運用上の注意点 まとめ なぜ列レベルのアクセス制御とポリシータグが必要か 「テーブルの全てのカラムは見せたくない」「rawデータは見せたくなくて、統計量だけは許可したい」などセキュリティ面からの要求でこういったことを実現したい / しなければならない場面はそれなりに多い。個別にカスタマイズしようと思うと、承認済みビューがカスタマイズ性があり便利ではあるが、以下のような課題がある。 用途毎にカスタマイズできてしまうがゆえに、都度承認済みビューを作る必要がある データ基盤のチームが少人数の場合、運用負荷がバカにならない 自分がこれまで所属していた組織でも結構辛かった 権限の整合性を担保するのが難しい 承認済みビューAではX
背景 vscode-dbt-power-userがよかったところ 定義にさっと行ける / 戻れる(Go to definitionが使える) VSCode内でモデル間のリネージが見れる VSCode内からdbtのモデルをさっと実行できる モデルファイルの単独の実行も簡単 コンパイル済みのSQLファイルをさっとプレビューできる まとめ 補足: vscode-dbt-power-userの導入方法 背景 dbtは前職時代から含めると二年以上使っていて、SQLでDWHやデータマートの開発をしようと思うともはやこれなしでは生きられないくらいには便利になっている。dbtがあっても大変なクエリは大変ではあるが、大変さは大分緩和してくれる。dbtがなくて、1つのSQLが1000行以上あり、中間クエリがテストもされていない、という状況はもう戻りたくない...。 dbtに限らずであるが、コードは書いていると
Dataplex(旧Data Catalog)によるデータカタログについてあれやこれやれやをまとめておいたポインタが欲しくなってきたので、とりとめもなくつらつらと書きます。 注意点: BigQuery on GCPの運用を前提に書いてます Dataplexはデータカタログ以外の機能もたくさんありますが、データカタログの観点にフォーカスして書いてます 論理的なデータ構造を作成したり、それに基づいた権限管理など 少人数のチームでデータ基盤を運営しており、データカタログの運用自体に工数をなかなか割けない前提で書いてます 自前で作ることも難しいし、ましてそれを継続的に運用するのはさらに難しい 「データカタログ」という言葉が指すスコープも色々ありそうですが、「検索 + メタデータ管理」くらいのスコープで書いてます 包括的に書くつもりはないので、漏れてる観点は多いと思います データカタログがなぜ必要か
SQLをレビューしていて、シャーディングテーブル(日付別テーブル)をサブクエリを使ってフィルタしているものがあった。BigQureyのシャーディングテーブルはWHERE句で日付の条件を書いてやるとスキャン範囲を限定することができるので便利ではあるが、サブクエリを使うなど定数でないものが入るとフルスキャンが走ってしまう。 このように書くことによって、スキャン量は from_date ~ to_date までのテーブルしかスキャンしないので全tableのスキャンすることを防ぐことができます。 しかし、このワイルドカードテーブルへのクエリにサブクエリなどの定数式でない条件を使ってしまうと、途端にフルスキャンを行ってしまいます. このこと自体は覚えていたものの「じゃあ、具体的にどうやって回避すればいいの?」というのをぱっと言語化できなかったので、ちょっとまとめておく。 ちなみに、サブクエリを使って
背景 具体的な設定 コントローラーに設定を生やす workflowを監視するためのカスタムメトリクスを定義する 各workflowに同様のカスタムメトリクスを定義する デバッグ方法 所感 背景 前職に引き続き、現職でもArgo Workflowsを使ってデータエンジニアリング系のバッチ処理を行なっている 以前にCloud Workflowsを調査したことがあったが、まだちょっと厳しい感があった 前職ではCloud Monitoringで監視していたが、現職ではDatadogで監視しているので、全社の体制に合わせてDatadogで監視していきたい Argo WorkflowsはPrometheus Metricsに対応しており、Datadogはagent経由でPrometheus Metricsの収集を容易に行なえることが分かった 同僚のSREであるtapihさんから教えていただいてました、
背景: BigQuery Editionsの登場およびOnDemandの価格変更 注意(Disclaimer) BigQuery Editionsの設定を行なう providerのバージョンを上げる Reservationの作成およびAssignmentの設定 脱線: BigQuery Editionsを選択して、OnDemandよりコストが上がってしまう場合 背景: BigQuery Editionsの登場およびOnDemandの価格変更 2023/03/29からBigQuery Editionsが販売開始され、2023/07/05からBigQueryのOnDemandの価格変更が適用されます(何もしないとコストが上がる)。 趣味プロジェクトでも多少BigQueryを利用していますが、OnDemandを利用しているので何もしないと約25%コストが上がってしまいます。しかし、うまいことBi
3行まとめ ビジネスメタデータはデータ生成者にとってもデータ活用者にとっても重要 しかし、カラムのメタデータを同じ説明をあちこちに書いていくのは大変... dbt-osmosisはビジネスメタデータの管理を省力化したり、自動化できる便利なツール 3行まとめ 背景: メタデータの重要さとメタデータ管理の大変さ 大変さ1: 多段のデータレイヤーにどうメタデータを付与していくか 大変さ2: 継続的な運用をどうするか dbt-osmosisでメタデータ管理を行なう 依存関係を考慮したメタデータの伝播 自動化による継続的な運用 基本的な使い方 使ってみた感想 背景: メタデータの重要さとメタデータ管理の大変さ データマネジメントにおいてメタデータの重要性は今さら説明するまでもないと思います。メタデータは以下の3種類が代表的です。 A: テクニカルメタデータ B: オペレーショナルメタデータ C: ビ
これは何? 背景: 権限管理とTerraform 権限管理の対象 誰に権限を付与するのか どのスコープで権限を付与するのか どの強さで権限を付与するのか Terraformについて Terraformの概要: 権限管理でTerraformを使うと何がうれしいのか 例: roles/bigquery.jobUserを付与してみる コラム: どこでTerraformを実行するか Terraformでの権限管理の例 例: データセットの作成 例: データセットに対する権限付与 サービスアカウントの管理 iam_member関連の注意点: AdditiveとAuthorativeを意識する Terraformで管理されていなかったリソースをTerraform管理下に置く: terraform import Terraformの登場人物 terraform planやterraform applyの
背景: データマネジメントのアセスメントのために各部署に現場の課題感をヒアリングしたい 課題: よいヒアリングをするのは簡単ではない 解決案: ヒアリングの型を決める ヒアリングの質問とリサーチの質問を別々に持っておく ヒアリング対象者について事前に理解を深める 全員に同じ項目を聞かない & 全体のカバレッジも担保する その場で問題解決を始めない まとめ 参考 背景: データマネジメントのアセスメントのために各部署に現場の課題感をヒアリングしたい データガバナンスを強化したいときにアセスメント(データマネジメント成熟度アセスメント)をやる人は多いと思う。データ基盤やデータに強い人だけでアセスメントをやって「えいや!!」と優先度を決めるのも一つの手ではある。 しかし、データを通じてユーザーに価値を届けるということまで考えると、データ活用に関わる幅広い職種の現場へヒアリングに行くことが、データ
次のページ
このページを最初にブックマークしてみませんか?
『yasuhisa's blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く