schema-mapping
Skill240 starsChanged 5 months agoApache-2.0View on GitHub
Guides the process of analyzing, mapping, and documenting transformations between source and target schemas for any database, data warehouse, or data platform. Focuses exclusively on creating a high-fidelity mapping plan (Mapping Manifesto). Used when initiating an ETL, ELT, or data integration task with schema mapping specification for multiple tables (i.e. more than 3 tables) before writing code. Do NOT use this skill for basic SQL generation without mapping requirements, or when the user already has a complete mapping specification.
In this repository39 other files it gives its agents.
- accidental-data-loss-preventionSkill
- bigquery-ai-mlSkill
- bigquery-bigframesSkill
- bigquery-data-transfer-serviceSkill
- bigquery-graph-authorSkill
- bigquery-graph-querySkill
- bigquery-observabilitySkill
- bigquery-optimizationSkill
- bigquery-troubleshootingSkill
- bigtable-basicsSkill
- building-data-appsSkill
- cloud-databases-onboardingSkill
- dak-setupSkill
- data-autocleaningSkill
- dataform-bigquerySkill
- dbt-bigquerySkill
- discovering-gcp-data-assetsSkill
- enforcing-resource-attributionSkill
- federate-lakehouse-catalogSkill
- gcp-composer-troubleshootingSkill
- gcp-dataflowSkill
- gcp-data-pipelinesSkill
- gcp-managed-airflow-dag-authoringSkill
- gcp-managed-airflow-migrationsSkill
- gcp-managed-airflow-recommendationsSkill
- gcp-managed-spark-upgradesSkill
- gcp-pipeline-orchestrationSkill
- gcp-pipeline-resource-provisioningSkill
- gcp-spark-observabilitySkill
- gcp-sparkSkill
- gcp-spark-troubleshootingSkill
- gcs-security-assessmentSkill
- google-cloud-storage-basicsSkill
- google-cloud-storage-bucket-architectSkill
- google-cloud-storage-fuseSkill
- managing-python-dependenciesSkill
- ml-best-practicesSkill
- notebook-guidanceSkill
- resolving-mcp-region-configsSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. About 0 are common, 10 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 15
Follow this structured process and procedures for analyzing source-to-target data relationships and creating a high-fidelity Mapping Plan …
- Distinctive: line 23
Use this skill when:
- Distinctive: line 35
Before creating the plan, you must obtain or request:
- Very specific: line 47
KNOWLEDGE_GRAPH: If there's a knowledge graph / property graph available, always inspect the graph for node table definitions, edge table … - Distinctive: line 74
Verify Domain Semantics: Do not rely purely on lexical matching (name similarity).
- Distinctive: line 88
Prefer Structured Tables over Generic Key-Value Tables: If the same attribute exists in both a structured column in a domain table and as a …
- Distinctive: line 96
If a target field mapping is ambiguous or schema types do not tell the whole story (e.g., verifying if a timestamp is ISO-8601, if a string …
- Very specific: line 100
Proactive Inspection: If environment access allows, run platform-specific queries (e.g., SELECT ...
- Distinctive: line 103
User Inquiry: If direct access is not possible, output sample queries and ask the user to provide the output to confirm assumptions before …
- Very specific: line 120
Constraint Checking: Verify whether the target column has a NOT NULL or REQUIRED constraint in the target schema.
- Very specific: line 122
Handling Nullable Gaps: If the target column is nullable, explicitly flag it as NULL or define a default value.
- Very specific: line 124
Handling Non-Nullable Gaps: If the target column is NOT NULL, you MUST NOT map it to NULL.
- Very specific: line 125
MUST NOT map it to NULL. *(Rationale: Mapping NOT NULL target columns to NULL will cause execution-time database constraint violations and …
- Distinctive: line 155
Document potential join challenges:
- Distinctive: line 159
Graph Validation: If a graph was identified in input, cross-reference the proposed join conditions with the graph's edge table definitions …
- Very specific: line 220
Strict Schema Grounding: Every source table and field name referenced in the mapping plan MUST exactly match the names and data types …
- Distinctive: line 229
Exhaustive Field Search: Before declaring a target field as an "Unmapped / Gap", search all available source schemas to verify the data is …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Skill: Semantic Schema Mapping Planning
Follow this structured process and procedures for analyzing source-to-target data relationships and creating a high-fidelity Mapping Plan (also known as a Mapping Manifesto). This process is platform-agnostic and should be used before generating any target-specific pipeline code. When this skill is loaded, you MUST use this plan and replace the existing generic plan.
When to Use
Use this skill when:
- You need to map schemas between a source dataset/database and a target destination database/warehouse.
- You are initiating an ETL, ELT, or data integration task.
- You need to identify schema gaps, data type conflicts, or aggregation requirements.
Required Input Variables
Before creating the plan, you must obtain or request:
SOURCE_SCHEMAS: Definitions (schemas, tables, fields, types) of the source data.TARGET_SCHEMAS: Definitions of the desired target/destination schemas.BUSINESS_CONTEXT: Domain details, business rules, or use case description.TARGET_PLATFORM: The database or execution engine (e.g., BigQuery, Snowflake, Postgres, Spark, Beam).
Optional Input Variables
KNOWLEDGE_GRAPH: If there's a knowledge graph / property graph available, always inspect the graph for node table definitions, edge table definitions, and foreign key bindings (SOURCE/DESTINATIONkey references), etc.
The Schema Mapping Planning Procedure
[!IMPORTANT] Execution Strategy: Table-by-Table Iteration
You MUST execute this procedure iteratively, one target table at a time. For each individual table in the
TARGET_SCHEMAS, complete Steps 1 through 6 sequentially before moving to the next table. Do not attempt to map or summarize multiple tables in a single batch, as this leads to hallucinations, overlooked constraints, and context window bloat.
Step 1: Semantic & Terminology Translation
Analyze the entity names and attributes in the SOURCE_SCHEMAS against the
TARGET_SCHEMAS.
- Synonym Resolution: Using the
BUSINESS_CONTEXT, map matching concepts with different names (e.g.,client_idvscustomer_num). - Identify Domain Standards: Match field values or formats to known standards (e.g., ISO country codes, currency codes, UN/LOCODE, UUIDs) based on the business context.
- Verify Domain Semantics: Do not rely purely on lexical matching (name similarity). Verify the functional business purpose of the entities in both schemas. Ensure that a target table representing a specific business resource maps to a source table modeling that same resource rather than an unrelated administrative log or generic list table sharing a similar name.
Step 2: Establish the Anchor Table
For each table or collection in the TARGET_SCHEMAS:
- Identify the primary source table (the "Anchor Table") that holds the core records for this target.
- Identify contributing/lookup tables in the source that will enrich the target records.
- Prefer Structured Tables over Generic Key-Value Tables: If the same attribute exists in both a structured column in a domain table and as a generic property in an Entity-Attribute-Value (EAV) key-value/properties table, always anchor on the structured table to ensure schema stability and performant joins.
Step 3: Proactive Data Sampling & Inspection
If a target field mapping is ambiguous or schema types do not tell the whole story (e.g., verifying if a timestamp is ISO-8601, if a string is a JSON array, or checking the distribution of values):
- Proactive Inspection: If environment access allows, run
platform-specific queries (e.g.,
SELECT ... LIMIT 10,SELECT COUNT(DISTINCT ... )) to sample values. - User Inquiry: If direct access is not possible, output sample queries and ask the user to provide the output to confirm assumptions before finalizing the plan.
Step 4: Perform Field-Level Gap Analysis & Cleanliness Design
Evaluate every column in each target table to determine its source mapping. Categorize mappings and plan cleanliness transformations:
- Direct Mapping: A 1-to-1 match.
- Derived Mapping: Requires type casting, string manipulation, date formatting, mathematical derivation, or case statement logic.
- Joined Mapping: Requires looking up values from contributing tables using defined join keys.
- Aggregated Mapping: Requires collapsing 1-to-many relationships (e.g.,
calculating
SUM,COUNT,ARRAY_AGGor string concatenation). - Gaps (Unmapped fields): Target fields that do not exist in the source.
- Constraint Checking: Verify whether the target column has a
NOT NULLorREQUIREDconstraint in the target schema. - Handling Nullable Gaps: If the target column is nullable, explicitly
flag it as
NULLor define a default value. - Handling Non-Nullable Gaps: If the target column is
NOT NULL, you MUST NOT map it toNULL. (Rationale: Mapping NOT NULL target columns to NULL will cause execution-time database constraint violations and pipeline failures). You must identify a source field to derive it from, default it to a valid non-null placeholder (e.g.,'UNKNOWN',0, or default dates), or define logic to generate a valid unique reference.
- Constraint Checking: Verify whether the target column has a
Universal Data Cleanliness Rules to Incorporate in Mappings:
- Null Standardization: Map source strings like
"NULL","None","N/A", or empty spaces to true databaseNULLvalues. - Trim & Casing: Plan to trim leading/trailing whitespaces. Convert standardized codes (e.g., ISO codes, status strings) to uppercase.
- Temporal Consistency: Plan to parse all source timestamps into standard
ISO-8601 format (
YYYY-MM-DDTHH:MM:SSZ) or standard destinationTIMESTAMPformat. Plan checks to ensure logical temporal progression (e.g.,start_time <= end_time). - Defensive Checks: Plan checks for strict destination types (e.g.,
checking if string is a valid number before casting to
DECIMAL).
Step 5: Map Relationships & Joins
Specify the logical join path to connect the Anchor Table with all contributing source tables:
- Define the join condition/keys (e.g.,
source_order.customer_id = source_customer.id). - Identify join scale properties:
- Large-to-Large: Joining two high-volume transaction tables.
- Large-to-Small: Joining a transaction table to a static lookup table (ideal for Map-side/Broadcast joins to optimize speed/cost).
- Document potential join challenges:
- Many-to-many risks or potential duplicate generation.
- Type mismatches on join keys (e.g., joining an
INTcolumn to aSTRINGcolumn).
- Graph Validation: If a graph was identified in input, cross-reference the proposed join conditions with the graph's edge table definitions to validate foreign key relationships.
Step 6: Draft the "Mapping Manifesto" (Output Format & Example)
Analyze the schemas and reference the ONE_SHOT_EXAMPLE below to structure your
output.
ONE_SHOT_EXAMPLE (How to Structure the Mapping Manifesto)
Example Source Schemas
dataset: my_music_library
style: {id: int, style: string}
band: {name: string, biography: string, style: int}
cd: {name: string, year: int, artist: string, numbers: array<string>}
track: {id: string, number: int, name: string}Example Target Schemas
dataset: music_standard
artist: {name: string, albums: array<string>}
album: {name: string, year: int, genre: string, tracks: array<string>}The Mapping Manifesto (Expected Output Format)
For each target table, document your column-to-column reasoning:
# Mapping Plan: `album`
* **Anchor Source Table**: `cd`
* **Join Paths & Optimization**:
* `cd` JOIN `band` ON `cd.artist = band.name`
* `band` JOIN `style` ON `band.style = style.id`
* `cd` JOIN `track` ON `track.id IN UNNEST(cd.numbers)`
### Field Mappings
| Target Field | Source Field / Logic | Mapping Type | Rationale / Transformation Details |
| :--- | :--- | :--- | :--- |
| `album.name` | `cd.name` | Direct | A CD is a physical medium representing an album; direct semantic match |
| `album.year` | `cd.year` | Direct | Direct semantic match for release year |
| `album.genre` | `style.style` | Joined | Resolved via `cd.artist` -> `band.name` -> `band.style` (ID) -> `style.id` -> `style.style` (String) |
| `album.tracks` | `ARRAY_AGG(track.name)` | Aggregated | Aggregation Point: Collapses 1-to-many track IDs in `cd.numbers` into an array of track names |Critical Operational Rules
- Plan Before Execution: You MUST NOT generate any ETL code, target-specific pipeline configurations, or migration scripts until the Mapping Manifesto has been presented to and approved by the user. (Rationale: Establishing clear mapping logic first prevents coding errors, avoids circular dependencies, and ensures user alignment on semantic mappings before wasting resources on implementation).
- Strict Schema Grounding: Every source table and field name referenced in
the mapping plan MUST exactly match the names and data types present in the
provided
SOURCE_SCHEMAS. You MUST NOT reference non-existent columns, guess field names, or make assumptions about source schemas without explicitly confirming them in the schema definitions. (Rationale: Proposing guesses leads to compilation errors and invalid mapping specifications). - Target Schema Constraint Integrity: You must never propose a mapping
that writes
NULLto a column defined asNOT NULLorREQUIREDin theTARGET_SCHEMAS. - Exhaustive Field Search: Before declaring a target field as an "Unmapped / Gap", search all available source schemas to verify the data is not in a less-obvious table. (Rationale: Lazy mappings that default target fields to NULL lead to downstream data loss and incomplete pipelines).
- Defensive Type Mapping: Explicitly plan the transformation rules for
strict destination types (e.g.
TIMESTAMP,BOOLEAN,DECIMAL) to avoid load failures. (Rationale: Different databases and platforms handle type validation strictly; pre-planning casts prevents execution-time runtime errors). - Data Integrity Check: Identify join conditions that could cause Cartesian product expansion or data duplication, and note prevention strategies in the plan. (Rationale: Unvalidated joins can distort aggregated metrics or exhaust processing memory on large datasets).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

