業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【データ基盤】
データの保守運用
AI

執筆者:Handbook編集部

Dataformメタデータ管理のベストプラクティス

Dataformにおけるメタデータ管理は、データガバナンスと品質保証の基盤となる重要な要素です。本記事では、メタデータ管理のベストプラクティスを体系的に解説します。

メタデータ管理を行うメリット

Dataformにおけるメタデータ管理には、データプロジェクトの成功に直結する多くのメリットがあります。

データの特定が早期に可能

関連するデータの迅速な特定と、その意味・構造・由来の明確化ができます。これにより、データ分析やレポート作成の際に、必要なデータを素早く見つけ出すことが可能になり、開発効率が大幅に向上します。

ガバナンスとコンプライアンス要件への対応

どのテーブルにどのような機密データが含まれているかを正確に把握することが可能です。個人情報保護法やGDPRなどの規制への対応においても、データの分類と管理が適切に行われていることを証明できます。

データ品質の問題の早期発見

正確性、完全性、一貫性の検証によるデータ資産への信頼構築が実現可能です。アサーション機能を活用することで、データ品質の問題を開発段階で発見し、本番環境での障害を未然に防ぐことができます。

変更管理リスクの軽減

データの流れと依存関係の理解、変更影響の事前把握が可能です。上流のデータ変更が下流のテーブルに与える影響を事前に分析できるため、安全なデータパイプラインの変更が実現できます。

組織全体のデータ開発効率の向上

同様のデータ変換が複数のチームで重複して作成されることを防ぎ、組織全体のデータ開発効率向上が目指せます。メタデータによる適切な分類と検索機能により、既存の資産を効率的に再利用できます。

メタデータの分類

Dataformで管理するメタデータは、以下の3つの分類に整理できます。

技術メタデータ

技術メタデータは、データの物理的な構造と処理設定に関する情報です。

  • テーブル・ビュー定義: テーブルの構造、カラム名、データ型などの基本情報
  • データ型、制約情報: NOT NULL制約、主キー、外部キーなどの制約情報
  • 処理設定: スケジュール設定、パーティション設定、増分処理の設定など

運用メタデータ

運用メタデータは、データパイプラインの動作と品質に関する情報です。

  • 依存関係情報: テーブル間の依存関係、データの流れの情報
  • 実行履歴、パフォーマンス情報: ジョブの実行時間、処理時間、リソース使用量
  • データ品質テスト結果: アサーションの実行結果、品質チェックの履歴

ビジネスメタデータ

ビジネスメタデータは、データの意味とビジネス価値に関する情報です。

  • 説明文: テーブルとカラムの詳細な説明、ビジネス的な意味
  • ビジネス用語、定義: 業務で使用される専門用語とその定義
  • 所有者情報、利用目的: データの責任者、利用部門、使用目的

Dataformの標準機能

Dataformには、メタデータ管理を効率化するための豊富な標準機能が備わっています。

configブロック

configブロックは、SQLファイルの冒頭に記述することで、テーブルの設定、説明、品質ルールなどを宣言的に定義できる機能です。バージョン管理やコードレビューの対象となることで、品質と一貫性を保つことが可能です。

config {
  type: "table",
  schema: "intermediate",
  description: "顧客の基本情報を統合したマスターテーブル",
  labels: {
    domain: "customer",
    layer: "intermediate",
    sensitivity: "internal"
  },
  columns: {
    customer_id: "顧客一意識別子",
    email: "連絡先メールアドレス",
    created_at: "顧客登録日時"
  },
  assertions: {
    nonNull: ["customer_id", "email"],
    uniqueKey: ["customer_id"]
  }
}

アサーション

アサーションは、データ問題が起こってから気づくことが多かった従来の問題に対し、データ品質を継続的に監視する仕組みです。

組み込みアサーション

config {
  assertions: {
    nonNull: ["order_id", "customer_id"],
    uniqueKey: ["order_id"],
    rowConditions: [
      "order_amount >= 0",
      "order_date >= '2020-01-01'"
    ]
  }
}

カスタムアサーション(別ファイル)

config { type: "assertion" }

SELECT *
FROM ${ref("target_table")}
WHERE created_at > updated_at

タグ付けシステム

タグ付けシステムにより、選択的な実行や管理が可能になり、必要な部分のみを実行したいケースに対応できます。

config {
  tags: ["daily", "customer_domain", "pii"]
}

Dataformメタデータ機能の概要

機能定義場所目的構文例 (抜粋)
テーブル説明SQLX config descriptionテーブルの目的や内容を文書化description: "顧客の基本情報"
カラム説明SQLX config columns各カラムの意味や形式を文書化columns: customer_id: "顧客ID", email: "連絡先メールアドレス"
タグSQLX config tagsワークフロー要素の分類、選択的実行tags: ["daily", "pii"]
組み込みアサーションSQLX config assertions事前定義されたデータ品質チェックassertions: nonNull: ["id"], uniqueKey: ["id"]
カスタムアサーション別途 SQLXファイル type: "assertion"複雑または再利用可能なカスタムデータ品質チェックconfig type: "assertion" SELECT * FROM table WHERE condition
依存関係 (暗黙的)SQLX本文 ref("table")テーブル間の依存関係を定義SELECT * FROM ref("source_table")
依存関係 (明示的)SQLX config dependenciesテーブル間の依存関係を明示的に定義dependencies: ["table_a", "assertion_b"]
設定上書きSQLX config schema/db/name/labelsデフォルトのスキーマ、DB、名前、ラベルを上書きconfig schema: "staging", name: "stg_users", labels: env: "dev"

他サービス連携

Dataformは、Google Cloudの他のサービスとシームレスに連携します。この統合により、メタデータが孤立した情報ではなく、組織全体のデータガバナンス戦略の一部として機能します。

BigQueryメタデータ同期

  • Dataform実行時に説明・ラベルが自動反映: 定義したメタデータがBigQueryに自動的に同期されます
  • INFORMATION_SCHEMAでの参照可能: BigQueryのシステムビューから直接メタデータを参照できます

Dataformで定義したテーブルやカラムの説明は、実行時に自動的にBigQueryのメタデータストアに同期されます。これにより、BigQueryコンソールやINFORMATION_SCHEMAクエリから直接メタデータを参照できるようになり、Dataform以外のツールからでもデータの意味が理解可能となります。

Dataplexリネージ

  • BigQueryジョブ経由でリネージ自動キャプチャ: データの流れが自動的に記録されます
  • データ依存関係の可視化: 視覚的にデータの流れを把握できます

Dataplexは、DataformがBigQueryで実行するジョブを監視し、自動的にデータリネージ情報を構築します。これにより、データの流れを視覚的に把握でき、上流の変更が下流に与える影響を事前に分析できます。

注意事項: Dataform内部での複雑な依存関係(マクロやJavaScript関数など)は完全には反映されないため、補完的な文書化も重要です。

BigQuery universal catalog

  • リポジトリレベルでの自動登録: プロジェクトが自動的にカタログに登録されます
  • カスタムメタデータのタグ付け: 追加のメタデータを付与できます

Dataformリポジトリは自動的にBigQuery universal catalogに登録され、組織全体のデータ資産として管理されます。

メタデータ統合ポイント

GCPサービスDataformメタデータ要素統合メカニズム主要な考慮事項/制限事項
BigQuery メタデータ説明 (テーブル/カラム)Dataform実行時に自動プッシュDataform SAにBigQuery Data Editor権限が必要、反映遅延の可能性
BigQuery メタデータラベルDataform configで定義、実行時に適用BigQueryリソースの整理、コスト追跡に利用可能
Dataplex Lineage(Dataform実行結果)BigQueryジョブ経由で自動キャプチャ (API有効時)サポートされるBQジョブタイプに依存、Dataform内部構造は不可視、カラムレベルはプレビュー
BigQuery universal catalogリポジトリ自動的にエントリとして表示 (@dataformグループ)リポジトリレベルの情報のみ(名前、場所、Gitソース等)
BigQuery universal catalogタグ/アスペクトリポジトリエントリに手動/APIで付与リポジトリ全体への高レベルなタグ付け、ファイルレベルアセットへの適用は不可
BigQuery ポリシータグ(なし)Dataformネイティブサポートなしテーブル再作成時にタグ消失。外部プロセス(Cloud Function等)による適用/再適用が必要

継続的メタデータ管理の実装方法

リポジトリ構造設計

適切に設計された構造は、データの流れを直感的に理解できるだけでなく、メタデータの管理と検索を大幅に簡素化します。以下の構造は、データの抽象化レベルに応じて段階的にフォルダを分けており、各段階での責任と目的を明確に分離しています。

dataform_project/
├── definitions/
│   ├── sources/           # ソースデータ宣言・基本ビュー
│   │   ├── declare_crm.js
│   │   └── src_crm_customers.sqlx
│   ├── intermediate/      # 変換・統合処理
│   │   ├── stg_customers.sqlx
│   │   └── stg_orders.sqlx
│   ├── output/           # 最終アウトプット
│   │   ├── customer/
│   │   │   ├── dim_customers.sqlx
│   │   │   └── fct_customer_orders.sqlx
│   │   └── product/
│   └── assertions/       # データ品質テスト
│       ├── assert_customer_uniqueness.sqlx
│       └── assert_order_integrity.sqlx
├── includes/             # 共通機能・ドキュメント
│   ├── constants.js
│   ├── utils.js
│   └── docs/
│       ├── customer_docs.js
│       └── product_docs.js
└── workflow_settings.yaml

各層の役割

  • sources層: 生データとの接点を管理し、データの来歴と品質を最初に確認する場所
  • intermediate層: 複数ソースからのデータ統合とクレンジングを行う
  • output層: 最終的な分析用データを提供

階層化により、問題が発生した際の影響範囲を特定しやすくなり、メンテナンスも効率化されます。

命名規則の標準化

ファイル命名

  • sources/: src_SYSTEM_TABLE.sqlx
  • intermediate/: stg_ENTITY_DESCRIPTION.sqlx
  • output/: ENTITY_DESCRIPTION.sqlx または dim_/fct_NAME.sqlx
  • assertions/: assert_TABLE_CONDITION.sqlx

テーブル・スキーマ命名

  • sources → if_SOURCE_SYSTEM
  • intermediate → stg_DOMAIN
  • output → DOMAIN_ENV

メタデータ標準パターン

各層で標準化されたconfigパターンを使用することで、メタデータの一貫性を保ち、レビューと保守を効率化できます。

Sources層パターン

Sources層では、外部システムからのデータの特性と信頼性を記録することが重要です。特に、データの更新頻度やソースシステムの情報は、下流での処理設計において重要な判断材料となります。

config {
  type: "view",
  schema: "if_crm",
  description: "CRMシステムから取得した生の顧客データ。日次バッチで更新。",
  labels: {
    layer: "source",
    domain: "customer",
    system: "crm",
    update_frequency: "daily"
  },
  columns: {
    id: "CRMシステム内の顧客ID(主キー)",
    email: "登録メールアドレス",
    registration_date: "初回登録日"
  }
}

Intermediate層パターン

Intermediate層では、データ品質のチェックが特に重要です。複数のソースからデータを統合する過程で、データの不整合や品質問題が発生しやすいため、アサーションを積極的に活用します。

config {
  type: "table",
  schema: "stg_customer",
  description: "複数ソースの顧客データを統合・クレンジングしたステージングテーブル",
  labels: {
    layer: "intermediate",
    domain: "customer",
    process_type: "integration"
  },
  assertions: {
    nonNull: ["customer_key", "email"],
    uniqueKey: ["customer_key"],
    rowConditions: [
      "email LIKE '%@%'",
      "registration_date <= CURRENT_DATE()"
    ]
  }
}

Output層パターン

Output層では、エンドユーザーの視点を重視したメタデータが必要です。利用者や利用目的を明記することで、適切なデータの選択と活用を促進します。増分処理の場合は、一意キーの指定が必須となります。

config {
  type: "incremental",
  schema: "customer_prod",
  description: "分析・レポート用の顧客ディメンションテーブル。BIツールから参照される。",
  unique_key: ["customer_key"],
  labels: {
    layer: "output",
    domain: "customer",
    consumers: "bi_tools"
  },
  assertions: {
    nonNull: ["customer_key", "customer_name"],
    uniqueKey: ["customer_key"]
  }
}

タグ分類体系

タグシステムは、大規模なデータプロジェクトにおけるデータ資産の分類と管理を効率化する重要な仕組みです。適切に設計されたタグ分類体系により、必要なデータの迅速な発見、選択的な処理実行、そして適切なガバナンス適用が可能になります。

レイヤータグ

データの抽象化レベルを示すタグです。処理の依存関係と実行順序を明確にします。

  • source, intermediate, output

ドメインタグ

ビジネス領域や機能領域を示すタグです。組織の部門構造やデータ所有者の特定に活用されます。

  • customer, product, order, finance, marketing

処理タイプタグ

データ変換の種類を示すタグです。パフォーマンス要件や処理時間の見積もりに役立ちます。

  • aggregation, integration, transformation, reporting

運用タグ

実行頻度や重要度を示すタグです。運用スケジュールとリソース配分の最適化に使用されます。

  • hourly, daily, weekly, monthly
  • critical, standard, experimental

セキュリティタグ

データの機密性レベルやコンプライアンス要件を示すタグです。アクセス制御とコンプライアンス監査に不可欠です。

  • public, internal, confidential, restricted
  • pii, financial, healthcare

タグ設計の注意点: タグは階層的に設計し、相互に排他的でない分類を心がけてください。例えば、同一のテーブルに「daily」と「pii」の両方のタグを適用することで、日次処理かつ個人情報を含むデータとして管理できます。

品質保証とガバナンス

データ品質戦略

データ品質の問題は、発見が遅れるほど修正コストが指数的に増加します。そのため、予防的なアプローチとしてアサーションによる継続的な品質監視が不可欠です。

必須アサーション

すべてのOutputテーブルで実装すべき基本的な品質チェックです。

// 全Outputテーブルで必須
assertions: {
  nonNull: ["primary_key_columns"],
  uniqueKey: ["business_key"]
}

// 増分テーブルで必須
unique_key: ["incremental_key"]

// 日付カラムがある場合
rowConditions: [
  "date_column >= '2020-01-01'",
  "date_column <= CURRENT_DATE()"
]

カスタムアサーション例

より複雑なビジネスルールや参照整合性チェックには、カスタムアサーションを活用します。

-- 参照整合性チェック
config { type: "assertion" }

SELECT o.customer_id
FROM ${ref("orders")} o
LEFT JOIN ${ref("customers")} c
  ON o.customer_id = c.customer_id
WHERE c.customer_id IS NULL
-- ビジネスルールチェック
config { type: "assertion" }

SELECT *
FROM ${ref("sales")}
WHERE sales_amount < 0
   OR discount_rate > 1.0

メタデータ検証プロセス

多層的な検証アプローチにより、メタデータの精度と一貫性を確保します。

自動検証チェックリスト

1. 構文検証

configブロックの構文エラーや参照の不整合を検出します。

dataform compile --json

2. メタデータ完全性チェック

必須メタデータ項目の存在を確認します。

// includes/validation.js
function validateMetadata(config) {
  const required = ['description', 'labels'];
  return required.every(field => config[field]);
}

3. 命名規則チェック

標準化された命名規則への準拠を自動で確認します。

function validateNaming(filename, schema) {
  const patterns = {
    'sources': /^src_\w+_\w+\.sqlx$/,
    'intermediate': /^stg_\w+_\w+\.sqlx$/,
    'output': /^\w+\.sqlx$/
  };
  return patterns[schema].test(filename);
}

コンプライアンス対応

PII管理戦略

// PII識別タグ
config {
  tags: ["pii", "gdpr_relevant"],
  labels: {
    data_classification: "personal",
    retention_period: "7_years"
  }
}
-- マスキング処理
SELECT
  customer_id,
  REGEXP_REPLACE(email, r'(.{3}).*(@.*)', r'\1***\2') as email_masked,
  -- 他のカラム
FROM ${ref("raw_customers")}

外部ポリシータグ適用

// post_operations での権限管理
post_operations {
  GRANT SELECT ON ${self()} TO ('group:analysts@company.com');
  -- BigQuery Policy Tag適用(別プロセス連携)
  CALL project.dataset.apply_policy_tags('${self()}', 'pii_tag');
}

Project Rules設計

メタデータ標準ルール

config生成ルール

必須要素チェック

  • description: 目的・更新頻度・利用者を含む
  • labels: layer, domain, sensitivityを必須設定
  • assertions: primary_keyにuniqueKey設定

自動判定ロジック

  • ファイルパスからlayer判定
  • カラム名パターンからPII判定
  • 参照テーブルからdomain判定

品質チェックルール

アサーション生成ルール

必須チェック

  • ID系カラム: nonNull + uniqueKey
  • 日付カラム: 妥当な範囲チェック
  • 金額カラム: 負数チェック

ビジネスルール

  • Email: 正規表現チェック
  • 外部キー: 参照整合性チェック

まとめ

Dataformにおけるメタデータ管理は、単なる文書化作業ではなく、データプロジェクトの成功を左右する重要な戦略的活動です。適切なメタデータ管理により、データの発見可能性、品質、ガバナンス、開発効率を大幅に改善できます。

継続的なメタデータ管理を成功させるためには、標準化されたプロセス、自動化された検証、そして組織全体でのベストプラクティスの共有が不可欠です。

参考文献

info
備考

Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。

2025年07月06日に最終更新
読み込み中...