Sign in to create and edit playbooks. Sign In Register

Store Compressed and Partitioned in S3

BPE-3 Order: #3 Datalake Formation Has Dependencies

Updated 1 month, 2 weeks ago

Guidance

Purpose

Turn raw landing-zone JSON into Hive-partitioned Parquet in the curated bucket.

Inputs

  • Raw Operational Events (S3 Landing Zone).
  • CDK Application (ParquetTransformFn lives in IngestionStack).
  • Lake Scope Contract paths: raw vs curated.
  • Populate-Lake Pipeline (batch transform after backfill).
  • Skill S3 Data Partitioning and Compression → Recipe step 2 (event→table map).

Canonical layout (do not invent another)

  • Raw: s3://{raw}/{source}/{yyyy}/{mm}/{dd}/{event-id}.json
  • Curated: s3://{curated}/{table}/source={source}/dt={yyyy-mm-dd}/part-{uuid}.parquet
  • {table} is a name from contract views. Two buckets, always.

Steps

  1. Open skill S3 Data Partitioning and Compression. Handler path: infra/lambdas/parquet_transform.py (_normalize_row omits source).
  2. Event → table map (skill 64 recipe 2): push → github_commits, pull_request → github_pull_requests, issues → github_issues, workflow_run → github_workflow_runs; backfill kind commits/pulls/issues/workflow_runs. Projects v2 → github_project_items only when that poller is real.
  3. ParquetTransformFn writes pyarrow Parquet. Omit source/dt from the row body — they are Hive partitions only.
  4. Webhooks: SQS buffer. Backfill: scripts/sync_raw_to_curated.py from populate-lake only, not a laptop against shared env.
  5. Lifecycle: hot recent partitions Standard; cold raw/history IA or Glacier.
  6. Confirm lake buckets have S3 Bucket Keys (bucket_key_enabled=True) via pytest synth (tests/unit/test_ingestion_stack.py), not the S3 console encryption tab alone.
  7. If jira is scoped, run Backfill Historical Jira Issues and Status History (sibling of GitHub backfill) before Glue — this activity's predecessor is GitHub backfill only because workflows cannot cross-link both.

Done when

  • Curated prefixes exist for every contract views entry that backfill produced.
  • Glue can crawl without "duplicate columns".
  • No EMR/Spark cluster.
  • SSE-KMS Bucket Keys are on (new objects do not call KMS per Put/Get).

Feeds

Catalog with AWS Glue.

Details
Order:
#3
Phase:
Predecessor:
BPE-2 Backfill Historical GitHub Events
Successor:
BPE-4 Catalog with AWS Glue
Created:
Aug 31, 2026
Last Updated:
Sep 17, 2026
Workflow
Build the Operational Data Lake Pipeline

Pull operational history from the systems people actually work in into the lake, including closed work, so duration and wait …

View Workflow
Assigned Agent
Data Platform Engineer

Agent: Data Platform Engineer Role Owns Datalake Formation: Scope Contract → Python CDK (DeployStack + …

Required Skills
Rules
Input Artifacts 5
Output Artifacts 1