From a86a2be96ccc0e54bb76b02c13ef23d61ef61840 Mon Sep 17 00:00:00 2001 From: Tudor Date: Thu, 16 Jul 2026 14:39:11 +0100 Subject: [PATCH 1/8] docs: plan for the five must-fix findings from the final expert review Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB --- ...2026-07-16-compare-mustfix-final-review.md | 931 ++++++++++++++++++ 1 file changed, 931 insertions(+) create mode 100644 docs/superpowers/plans/2026-07-16-compare-mustfix-final-review.md diff --git a/docs/superpowers/plans/2026-07-16-compare-mustfix-final-review.md b/docs/superpowers/plans/2026-07-16-compare-mustfix-final-review.md new file mode 100644 index 0000000..52eea9f --- /dev/null +++ b/docs/superpowers/plans/2026-07-16-compare-mustfix-final-review.md @@ -0,0 +1,931 @@ +# Compare Screen Must-Fix (Final Expert Review) Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Fix the five promotion-blocking findings from the expert's final staging review: (1) blank all-secondary compare view, (2) report cards dated with pre-Nov-2025 legacy inspection dates, (3) FSM chip benchmarked against the wrong measure, (4) KS4 "national averages" that are dataset means presented as official DfE figures, (5) factually wrong "DfE didn't publish 2021/22" footnote. + +**Architecture:** One branch/PR touching all three layers. Pipeline: a new tap field carries the report-card inspection's own date; a new EES stream ingests official KS4 national headlines; a new census-benchmarks mart replaces junk KS2-derived context medians. Backend: serialize the new fields, stop mislabelling computed KS4 means as official. Frontend: fix the phase-detection effect that leaves all-secondary comparisons stuck on an empty "primary" tab, date report cards correctly, drop the FSM→disadvantaged fallback, fix the footnote copy. + +**Tech Stack:** Meltano/Singer taps (Python), dbt-postgres, FastAPI/SQLAlchemy/pandas, Next.js app router + Jest, Playwright e2e. + +## Global Constraints + +- Never push to `main`; work on branch `fix/compare-final-review-mustfix`, open a PR. Never trigger the "Promote to Production (manual)" workflow — promotion is exclusively the human's call. +- User-facing behaviour changes must extend the `e2e/` journeys in the same PR (they gate staging fitness and promotability). +- All user-facing copy on the compare screen comes verbatim from `docs/superpowers/specs/mockups/compare-desktop.html` / `compare-mobile.html` — except where this plan explicitly changes copy to fix a factual error (Task 6); the spec/mockup gets the same wording in the same commit. +- Benchmark provenance house style: official figures = "England average"; computed figures = "state-school average (computed from our dataset)". +- A report card must NEVER be displayed with a pre-November-2025 date. Report cards exist only from November 2025. +- Backend tests: `uv run --with-requirements requirements.txt --with pytest --with "httpx==0.27.0" python -m pytest backend/tests -q` (repo root; there is no local pytest). +- dbt: `cd pipeline/transform && uv run --with dbt-postgres python -m dbt.cli.main parse --profiles-dir .` (never bare `dbt` — the Fusion binary shadows dbt-postgres). +- Frontend: `cd nextjs-app && npx tsc --noEmit && npm test` (run tsc un-piped so exit codes are not masked). +- Do NOT start a local server to test the application (CLAUDE.md). +- Commits end with the Claude Code `Co-Authored-By` + `Claude-Session` trailers used on this branch's history. + +## Root-Cause Evidence (verified 2026-07-16, do not re-derive) + +- **Finding 1:** `nextjs-app/components/ComparisonView.tsx:164-176` — the auto-phase effect returns early when `selectedSchools.length === 0` (basket hydrates a beat after mount) and its dep array is only `[comparisonData]`, so it never re-fires; `comparePhase` stays `'primary'`, `activeSchools` is empty, the page renders "No primary schools in your comparison" (a11y snapshot confirmed). No console errors — not a crash. +- **Finding 2:** In the Ofsted MI CSV (`Management_information_-_state-funded_schools_-_latest_inspections_as_at_31_May_2026.csv`) the report-card grade columns (cols 38–55, "Safeguarding standards", "Inclusion", …) belong to the **latest full inspection** block whose date is col 30 "Inspection start date" (Barclay 138690: `03/02/2026`). The tap's `inspection_date` COLUMN_PRIORITY matches col 60 "Inspection start date of latest OEIF graded inspection" first (the *legacy* date; NULL for Barclay, so stg coalesces to the 2021 *ungraded* date). The rc data is **real Ofsted data, not fabricated** — it is mis-dated. Also `discover_csv_url()` returns `matches[0]` = the oldest (2017) link on the GOV.UK page; staging works only because `mi_url` is set in the environment. Staging raw is stale for at least Watford Grammar 136276 (staging shows rc grades; the current MI file has all rc columns NULL for it) — a fresh extract fixes that via upsert on `(urn, inspection_date)`. +- **Finding 3:** `nextjs-app/components/compare/CompareCommunity.tsx:36` — `bench?.fsm_pct ?? bench?.disadvantaged_pct` falls back across definitions. `benchmarks.primary.fsm_pct` is null because `compute_benchmarks` (backend/data_loader.py:528) medians the *performance* df, which has no `fsm_pct` (school FSM comes from `census.fsm_pct` = `fact_pupil_characteristics`). `disadvantaged_pct` / `eal_pct` are KS2-only columns, so the "secondary" medians (50.0 / 10.0) are computed over the few all-through schools' KS2 rows — junk. +- **Finding 4:** `fact_ks4_national_averages.sql` computes unweighted school means (A8 38.94 vs official 46.0; national P8 −0.27, impossible). Official series exists on EES: data-set `1b649e16-01e8-435b-a814-56be2faf9054` ("National characteristics summary data", KS4 performance publication), CSV endpoint same pattern as the KS2 national stream, national level, 2018/19→2024/25, `establishment_type_group = 'All state-funded'`, `breakdown_topic = 'Total'`, `breakdown = 'Total'`. Verified values: 2024/25 A8 46.0, P8 `z` (not published — no KS2 baseline for that cohort), EM 9-5 45.4%, EBacc entry 40.5%. It has **no** `gcse_91_percent` column. +- **Finding 5:** `ComparisonChart.tsx:245-246` claims "DfE didn't publish school-level figures for 2021/22". False — DfE published school-level KS2 for 2021/22 in Dec 2022; spec §8.1 itself lists loading it as a pipeline task. The honest claim is that the figures aren't in our dataset. + +--- + +### Task 1: All-secondary comparison renders (phase-detection fix) + +**Files:** +- Modify: `nextjs-app/components/ComparisonView.tsx:176` +- Create: `nextjs-app/__tests__/components/ComparisonView.phase.test.tsx` +- Modify: `e2e/tests/journeys.spec.ts` (add helper + journey after the existing `twoPrimaryUrns` helper / primary compare journey) + +**Interfaces:** +- Consumes: existing `ComparisonView` props (`initialData`, `initialUrns`, `metrics`, `selectedMetric`), `ComparisonProvider`. +- Produces: no API changes; the auto-phase effect re-runs when the basket hydrates. + +- [ ] **Step 1: Write the failing Jest test** + +Create `nextjs-app/__tests__/components/ComparisonView.phase.test.tsx` (mirrors the mock setup of `ComparisonView.refresh.test.tsx`): + +```tsx +/** + * Regression: an all-secondary comparison must render the secondary sections. + * + * The basket hydrates from the URL a beat after mount, so the auto-phase + * effect must re-run once selectedSchools arrives — with deps of only + * [comparisonData] it fired once against an empty basket, bailed, and the + * page stayed on an empty "primary" tab ("No primary schools in your + * comparison") even though all schools were secondary. + */ + +import { render, screen, waitFor } from '@testing-library/react'; + +import { ComparisonView } from '@/components/ComparisonView'; +import { ComparisonProvider } from '@/context/ComparisonProvider'; +import type { ComparisonData, School } from '@/lib/types'; + +const fetchComparison = jest.fn(); +jest.mock('@/lib/api', () => ({ + fetchComparison: (...args: unknown[]) => fetchComparison(...args), +})); +jest.mock('@/lib/analytics', () => ({ track: jest.fn() })); + +function secondarySchool(urn: number, name: string): School { + return { + urn, + school_name: name, + local_authority: 'Testshire', + school_type: 'Academy converter', + attainment_8_score: 55, + phase: 'Secondary', + } as School; +} + +function data(urn: number, name: string): ComparisonData { + return { + school_info: secondarySchool(urn, name), + yearly_data: [{ year: 202425, attainment_8_score: 55 }] as ComparisonData['yearly_data'], + ofsted: null, + census: null, + admissions: null, + admissions_history: [], + deprivation: null, + }; +} + +const INITIAL_DATA = { + '300': data(300, 'Gamma High'), + '400': data(400, 'Delta Academy'), +}; + +test('an all-secondary comparison renders the sections, not an empty primary tab', async () => { + render( + + + , + ); + + await waitFor(() => { + expect(screen.getByRole('heading', { name: 'At a glance' })).toBeInTheDocument(); + }); + expect(screen.getAllByText('Gamma High').length).toBeGreaterThan(0); + expect(screen.queryByText(/No primary schools in your comparison/)).toBeNull(); + expect(fetchComparison).not.toHaveBeenCalled(); +}); +``` + +- [ ] **Step 2: Run it to verify it fails** + +Run: `cd nextjs-app && npx jest __tests__/components/ComparisonView.phase.test.tsx` +Expected: FAIL — "No primary schools in your comparison" is rendered / "At a glance" never appears. + +- [ ] **Step 3: Fix the effect dependencies** + +In `nextjs-app/components/ComparisonView.tsx`, the auto-phase effect currently ends: + +```tsx + }, [comparisonData]); // eslint-disable-line react-hooks/exhaustive-deps +``` + +Change to: + +```tsx + // selectedSchools is a dep because the basket hydrates after mount: the + // first run sees an empty basket and bails, so it must re-fire when the + // schools arrive. primarySchools/secondarySchools/metrics/selectedMetric + // are intentionally omitted (derived or would cause loops). + }, [comparisonData, selectedSchools]); // eslint-disable-line react-hooks/exhaustive-deps +``` + +(`phaseLockedByUser` still suppresses re-detection after a manual tab click; re-running with unchanged inputs sets the same state, which React treats as a no-op.) + +- [ ] **Step 4: Run the new test and the existing suite** + +Run: `cd nextjs-app && npx tsc --noEmit && npm test` +Expected: PASS, including `ComparisonView.refresh.test.tsx` (the refresh regression must stay green). + +- [ ] **Step 5: Add the e2e secondary journey** + +In `e2e/tests/journeys.spec.ts`, add below `twoPrimaryUrns`: + +```ts +async function twoSecondaryUrns(page: Page): Promise<[string, string]> { + const res = await page.request.get('/api/schools?search=school&per_page=100'); + expect(res.ok()).toBeTruthy(); + const body = await res.json(); + const urns: string[] = (body.schools ?? []) + .filter((s: { phase?: string; attainment_8_score?: number | null }) => + s.phase === 'Secondary' && s.attainment_8_score != null, + ) + .map((s: { urn: number }) => String(s.urn)); + expect(urns.length).toBeGreaterThanOrEqual(2); + return [urns[0], urns[1]]; +} +``` + +(If `/api/schools` list rows lack `attainment_8_score`, filter on `s.phase === 'Secondary'` only — check the response first.) Then add a journey test next to the primary compare journey: + +```ts +test('comparing two secondary schools renders the secondary sections', async ({ page }) => { + const [urn0, urn1] = await twoSecondaryUrns(page); + + await page.goto(`/compare?urns=${urn0},${urn1}`); + await expect(page.locator(`a[href*="${urn0}"]`).first()).toBeVisible({ timeout: 15_000 }); + + // The parent-first sections must render — this page was completely blank + // for all-secondary baskets (expert review must-fix #1). + await expect(page.getByRole('heading', { name: 'At a glance' })).toBeVisible(); + await expect(page.getByRole('heading', { name: 'Ofsted inspection' })).toBeVisible(); + // A KS4 measure proves the secondary academics variant rendered. + await expect(page.getByText(/Attainment 8/i).first()).toBeVisible(); + await expect(page.getByText(/No primary schools in your comparison/)).toHaveCount(0); +}); +``` + +- [ ] **Step 6: Commit** + +```bash +git add nextjs-app/components/ComparisonView.tsx nextjs-app/__tests__/components/ComparisonView.phase.test.tsx e2e/tests/journeys.spec.ts +git commit -m "fix(compare): render all-secondary comparisons — re-run phase detection after basket hydration" +``` + +--- + +### Task 2: Report-card inspection date through the pipeline + +**Files:** +- Modify: `pipeline/plugins/extractors/tap-uk-ofsted/tap_uk_ofsted/tap.py` (COLUMN_PRIORITY, schema, `discover_csv_url`) +- Modify: `pipeline/transform/models/staging/stg_ofsted_inspections.sql` +- Modify: `pipeline/transform/models/intermediate/int_ofsted_latest.sql` +- Modify: `pipeline/transform/models/marts/fact_ofsted_inspection.sql` +- Modify: `pipeline/transform/models/marts/_marts_schema.yml` (add column doc if other fact_ofsted columns are documented there) + +**Interfaces:** +- Consumes: MI CSV column `Inspection start date` (the latest **full** inspection = the report-card inspection in the renewed framework; NULL when a school's only inspections are legacy OEIF/ungraded — verified for Watford Grammar). +- Produces: `marts.fact_ofsted_inspection.rc_inspection_date` (DATE, null unless the row carries report-card grades). Task 3 depends on this exact column name. + +- [ ] **Step 1: Add the tap field** + +In `tap.py` COLUMN_PRIORITY, after the `rc_sixth_form` entry, add: + +```python + # Date of the latest FULL inspection — in the renewed framework this is + # the report-card inspection's own start date (col "Inspection start + # date"), distinct from the legacy OEIF graded/ungraded dates above. + "rc_inspection_date": ["Inspection start date"], +``` + +and in the stream schema, next to the other rc properties: + +```python + th.Property("rc_inspection_date", th.StringType), +``` + +Note: `inspection_date`'s own priority list also contains `"Inspection start date"` as a lower-priority candidate — that stays; in renewed-framework files the higher-priority OEIF column exists so they map to different columns, and in legacy files both map to the same column but rc grades are absent, and staging nulls `rc_inspection_date` in that case (Step 3). + +- [ ] **Step 2: Fix `discover_csv_url` to pick the newest file, not `matches[0]`** + +The GOV.UK page lists 2017 files first; `matches[0]` is a 2017 CSV. Replace the body of `discover_csv_url()` to date-sort the `latest_inspections_as_at` links, mirroring `discover_independent_csv_url`: + +```python +def discover_csv_url() -> str | None: + """Scrape GOV.UK page to find the latest MI CSV download link. + + The page lists a decade of monthly files, oldest first — take the + newest 'latest inspections as at ' link by parsing its date, + never matches[0]. + """ + resp = requests.get(GOV_UK_PAGE, timeout=30) + resp.raise_for_status() + csv_links = re.findall( + r'href="(https://assets\.publishing\.service\.gov\.uk/[^"]+\.csv)"', + resp.text, + ) + + months = { + 'january': 1, 'february': 2, 'march': 3, 'april': 4, 'may': 5, 'june': 6, + 'july': 7, 'august': 8, 'september': 9, 'october': 10, 'november': 11, 'december': 12, + 'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'jun': 6, + 'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12, + } + parsed_links = [] + for link in csv_links: + normalized = link.lower().replace('-', '_') + if 'latest_inspections_as_at' not in normalized: + continue + match = re.search(r'as_at_(\d{1,2})_([a-z]+)_(\d{4})', normalized) + if match: + day, month_str, year = match.groups() + month = months.get(month_str) + if month: + try: + parsed_links.append((datetime(int(year), month, int(day)), link)) + except ValueError: + continue + parsed_links.sort(reverse=True) + if parsed_links: + return parsed_links[0][1] + if csv_links: + return csv_links[-1] + matches = re.findall( + r'href="(https://assets\.publishing\.service\.gov\.uk/[^"]+\.ods)"', + resp.text, + ) + return matches[0] if matches else None +``` + +(`mi_url` config still wins when set — `self.config.get("mi_url") or discover_csv_url()` is unchanged.) + +- [ ] **Step 3: Parse and guard the date in staging** + +In `stg_ofsted_inspections.sql`, inside the `renamed` CTE after the `rc_sixth_form` line, add: + +```sql + -- Start date of the latest FULL inspection (the report-card + -- inspection in the renewed framework). Guarded below: only kept + -- when the row actually carries report-card grades, because in + -- legacy-format files this column is the legacy inspection date. + to_date(nullif(trim(rc_inspection_date), 'NULL'), 'DD/MM/YYYY') as rc_inspection_date_raw, +``` + +and replace the final select: + +```sql +select + *, + case + when rc_safeguarding_met is not null + or rc_inclusion is not null + or rc_curriculum_teaching is not null + or rc_achievement is not null + or rc_attendance_behaviour is not null + or rc_personal_development is not null + or rc_leadership_governance is not null + then rc_inspection_date_raw + end as rc_inspection_date +from renamed +where inspection_date is not null +``` + +- [ ] **Step 4: Propagate through int + mart** + +Add `rc_inspection_date,` to the explicit column lists of `int_ofsted_latest.sql` and `fact_ofsted_inspection.sql` (after `rc_sixth_form`). Do NOT propagate `rc_inspection_date_raw`. + +- [ ] **Step 5: Parse-check dbt** + +Run: `cd pipeline/transform && uv run --with dbt-postgres python -m dbt.cli.main parse --profiles-dir .` +Expected: parse OK, no compilation errors. + +- [ ] **Step 6: Commit** + +```bash +git add pipeline/plugins/extractors/tap-uk-ofsted pipeline/transform/models +git commit -m "feat(pipeline): carry the report-card inspection's own date; pick newest MI file in discovery" +``` + +--- + +### Task 3: Report-card date in the API and UI + +**Files:** +- Modify: `backend/models.py` (FactOfstedInspection) +- Modify: `backend/data_loader.py` (`_ofsted_block`) +- Test: `backend/tests/test_supplementary_enrichment.py` (extend the existing `_ofsted_block` tests) +- Modify: `nextjs-app/lib/types.ts` (OfstedInspection) +- Modify: `nextjs-app/components/compare/CompareOfsted.tsx` ("Inspected" measure) +- Test: `nextjs-app/__tests__/components/CompareOfsted.test.tsx` + +**Interfaces:** +- Consumes: `marts.fact_ofsted_inspection.rc_inspection_date` (Task 2). +- Produces: API `ofsted.rc_inspection_date: string | null` (ISO date). UI rule: report-card displays are dated with `rc_inspection_date` only; when null, show "—" (never the legacy date). + +- [ ] **Step 1: Failing backend test** + +In `backend/tests/test_supplementary_enrichment.py`, alongside the existing `_ofsted_block` tests, add (reuse the file's existing fake-row helper/style): + +```python +def test_ofsted_block_carries_rc_inspection_date(): + o = _fake_ofsted_row( # use this file's existing fake/stub construction + overall_effectiveness=None, + ungraded_grade=2, + rc_achievement=1, + rc_inspection_date=date(2026, 2, 3), + inspection_date=date(2021, 10, 7), + ) + block = _ofsted_block(o, 138690) + assert block["rc_inspection_date"] == "2026-02-03" + # The legacy inspection date is still present, unchanged. + assert block["inspection_date"] == "2021-10-07" + + +def test_ofsted_block_rc_inspection_date_none_when_absent(): + o = _fake_ofsted_row(overall_effectiveness=1, inspection_date=date(2021, 10, 13)) + block = _ofsted_block(o, 136276) + assert block["rc_inspection_date"] is None +``` + +Run: `uv run --with-requirements requirements.txt --with pytest --with "httpx==0.27.0" python -m pytest backend/tests/test_supplementary_enrichment.py -q` +Expected: FAIL (KeyError / AttributeError on `rc_inspection_date`). + +- [ ] **Step 2: Backend implementation** + +`backend/models.py`, in `FactOfstedInspection` after `rc_sixth_form`: + +```python + # Start date of the report-card inspection itself (renewed framework, + # Nov 2025+). Null for rows without report-card grades. + rc_inspection_date = Column(Date) +``` + +`backend/data_loader.py` `_ofsted_block`, after the `"inspection_date"` entry: + +```python + "rc_inspection_date": ( + o.rc_inspection_date.isoformat() + if getattr(o, "rc_inspection_date", None) + else None + ), +``` + +(`getattr` default keeps old test stubs working.) Run the backend suite; expected: PASS. + +- [ ] **Step 3: Failing frontend test** + +`nextjs-app/lib/types.ts`, in `OfstedInspection`, after `inspection_date`: + +```ts + /** Start date of the report-card inspection itself (Nov 2025+); null otherwise. */ + rc_inspection_date?: string | null; +``` + +In `nextjs-app/__tests__/components/CompareOfsted.test.tsx`, add to the existing suite (reusing its fixture style): + +```tsx +it('dates a report card with the report-card inspection date, never the legacy date', () => { + const ofsted = reportCardOfsted({ + inspection_date: '2021-10-07', + rc_inspection_date: '2026-02-03', + }); + render(); + expect(screen.getByText(/3 Feb 2026/)).toBeInTheDocument(); + expect(screen.queryByText(/7 Oct 2021/)).toBeNull(); + expect(screen.queryByText('4+ years ago')).toBeNull(); +}); + +it('shows an em dash when a report card has no rc_inspection_date yet', () => { + const ofsted = reportCardOfsted({ inspection_date: '2021-10-07', rc_inspection_date: null }); + render(); + expect(screen.getByText('—')).toBeInTheDocument(); + expect(screen.queryByText(/7 Oct 2021/)).toBeNull(); +}); +``` + +(`reportCardOfsted` = the file's existing report-card fixture builder, or build inline matching its other tests.) Run just this file; expected: FAIL. + +- [ ] **Step 4: Frontend implementation** + +In `CompareOfsted.tsx`, replace the body of the "Inspected" measure's map: + +```tsx + {schools.map((school, i) => { + const ofsted = data[String(school.urn)]?.ofsted; + // A report card is dated by its OWN inspection date. The legacy + // inspection_date belongs to an older inspection and must never + // be shown against a report card (report cards exist only from + // Nov 2025). + const dateIso = + displays[i].kind === 'report_card' + ? ofsted?.rc_inspection_date ?? null + : ofsted?.inspection_date ?? null; + const age = yearsSince(dateIso); + return ( + + {formatInspectionDate(dateIso)}{' '} + {age != null && age > 4 && 4+ years ago} + + ); + })} +``` + +- [ ] **Step 5: Run frontend checks** + +Run: `cd nextjs-app && npx tsc --noEmit && npm test` +Expected: PASS. + +- [ ] **Step 6: Commit** + +```bash +git add backend/models.py backend/data_loader.py backend/tests nextjs-app/lib/types.ts nextjs-app/components/compare/CompareOfsted.tsx nextjs-app/__tests__/components/CompareOfsted.test.tsx +git commit -m "fix(compare): date report cards with their own inspection date, never the legacy one" +``` + +--- + +### Task 4: Census-based context benchmarks; kill the FSM fallback + +**Files:** +- Create: `pipeline/transform/models/marts/fact_census_benchmarks.sql` +- Modify: `pipeline/transform/models/marts/_marts_schema.yml` +- Modify: `backend/models.py` (new `CensusBenchmark` model) +- Modify: `backend/data_loader.py` (`compute_benchmarks`) +- Modify: `backend/app.py` (compare endpoint call site, only if the signature change requires it) +- Test: `backend/tests/test_benchmarks.py` +- Modify: `nextjs-app/components/compare/CompareCommunity.tsx:36` +- Test: `nextjs-app/__tests__/lib/compareLogic.test.ts` or the community section's existing test home (add a fallback-removal test where the FSM chip logic is tested today) + +**Interfaces:** +- Consumes: `marts.fact_pupil_characteristics` (urn, year, phase_type_grouping, total_pupils, fsm_pct, eal_pct). +- Produces: `marts.fact_census_benchmarks` — one row per phase (`'primary'`/`'secondary'`), columns `phase, year, fsm_pct, eal_pct, median_pupils`. `fsm_pct`/`eal_pct` are **pupil-weighted means** (so they approximate the national pupil-level rate, answering the expert's objection to school-median anchors). API `benchmarks.{primary,secondary}` keeps its existing keys; `fsm_pct`/`eal_pct`/`median_pupils` now come from this mart; `disadvantaged_pct` becomes primary-only (the KS2-column median was junk for secondary). + +- [ ] **Step 1: dbt mart** + +Create `pipeline/transform/models/marts/fact_census_benchmarks.sql`: + +```sql +{{ config(materialized='table') }} + +-- Mart: state-school context benchmarks from the pupil census — one row per +-- phase, latest census year. Computed at import time (never per request). +-- fsm_pct / eal_pct are pupil-weighted means, i.e. "what % of pupils", not +-- "the median school" — this matches how DfE quotes national FSM/EAL rates. +-- Consumers must label these "state-school average (computed from our +-- dataset)" (spec §8.6), never "England average". + +with latest as ( + select max(year) as year from {{ ref('fact_pupil_characteristics') }} +), + +classified as ( + select + case + when p.phase_type_grouping ilike '%primary%' then 'primary' + when p.phase_type_grouping ilike '%secondary%' then 'secondary' + end as phase, + p.total_pupils, + p.fsm_pct, + p.eal_pct, + l.year + from {{ ref('fact_pupil_characteristics') }} p + join latest l on p.year = l.year + where p.total_pupils is not null and p.total_pupils > 0 +) + +select + phase, + max(year) as year, + round((sum(fsm_pct * total_pupils) filter (where fsm_pct is not null) + / nullif(sum(total_pupils) filter (where fsm_pct is not null), 0))::numeric, 1) as fsm_pct, + round((sum(eal_pct * total_pupils) filter (where eal_pct is not null) + / nullif(sum(total_pupils) filter (where eal_pct is not null), 0))::numeric, 1) as eal_pct, + round(percentile_cont(0.5) within group (order by total_pupils))::integer as median_pupils +from classified +where phase is not null +group by phase +``` + +Add a `fact_census_benchmarks` entry to `_marts_schema.yml` in the file's existing style (name + description; column tests only if sibling marts have them). + +Run: `cd pipeline/transform && uv run --with dbt-postgres python -m dbt.cli.main parse --profiles-dir .` — expected PASS. + +- [ ] **Step 2: Failing backend test** + +In `backend/tests/test_benchmarks.py` add: + +```python +def test_benchmarks_use_census_mart_for_context(monkeypatch): + census = { + "primary": {"year": 202425, "fsm_pct": 25.3, "eal_pct": 21.8, "median_pupils": 240}, + "secondary": {"year": 202425, "fsm_pct": 24.1, "eal_pct": 18.9, "median_pupils": 980}, + } + result = compute_benchmarks(_sample_df(), census_benchmarks=census) + assert result["primary"]["fsm_pct"] == 25.3 + assert result["secondary"]["eal_pct"] == 18.9 + assert result["secondary"]["median_pupils"] == 980 + # KS2-only columns must not produce a fake secondary disadvantaged anchor. + assert result["secondary"]["disadvantaged_pct"] is None + + +def test_benchmarks_context_none_when_mart_missing(): + result = compute_benchmarks(_sample_df(), census_benchmarks=None) + assert result["primary"]["fsm_pct"] is None # never silently fall back +``` + +(`_sample_df()` = this file's existing dataframe fixture.) Run the file; expected: FAIL (unexpected keyword `census_benchmarks`). + +- [ ] **Step 3: Backend implementation** + +`backend/models.py` (next to the national-average models): + +```python +class CensusBenchmark(Base): + """State-school context benchmarks from the pupil census — one row per phase.""" + __tablename__ = "fact_census_benchmarks" + __table_args__ = MARTS + + phase = Column(String(20), primary_key=True) + year = Column(Integer) + fsm_pct = Column(Float) # pupil-weighted mean + eal_pct = Column(Float) # pupil-weighted mean + median_pupils = Column(Integer) +``` + +`backend/data_loader.py` — change the signature and `_block`: + +```python +def compute_benchmarks(df: pd.DataFrame, census_benchmarks: dict | None = None) -> dict: +``` + +Inside, keep `_median` and `_weighted_disadvantaged` as-is, and replace `_block` with: + +```python + def _block(sub, phase, with_disadvantaged): + census = (census_benchmarks or {}).get(phase) or {} + block = { + # Context measures come from the census mart (pupil-weighted): + # the performance df has no fsm_pct, and its eal/disadvantaged + # columns are KS2-only — medianing them for "secondary" produced + # junk anchors from the handful of all-through schools. + "eal_pct": census.get("eal_pct"), + "sen_support_pct": _median(sub, "sen_support_pct"), + "disadvantaged_pct": _median(sub, "disadvantaged_pct") if with_disadvantaged else None, + "fsm_pct": census.get("fsm_pct"), + "median_pupils": census.get("median_pupils"), + } + if with_disadvantaged: + block["disadvantaged_rwm_expected_pct"] = _weighted_disadvantaged(sub) + return block +``` + +and the return: + +```python + return { + "source": "state-school average (computed from our dataset)", + "year": int(latest_year), + "primary": _block(prim, "primary", with_disadvantaged=True), + "secondary": _block(sec, "secondary", with_disadvantaged=False), + } +``` + +In `backend/app.py`'s compare endpoint, load the mart and pass it (same defensive style as the national-averages queries): + +```python + census_benchmarks = None + try: + rows = db.query(CensusBenchmark).all() + if rows: + census_benchmarks = { + r.phase: { + "year": r.year, + "fsm_pct": r.fsm_pct, + "eal_pct": r.eal_pct, + "median_pupils": r.median_pupils, + } + for r in rows + } + except Exception: + db.rollback() + ... + "benchmarks": compute_benchmarks(df, census_benchmarks=census_benchmarks), +``` + +(Import `CensusBenchmark`; use the endpoint's existing db session pattern.) Run the backend suite; expected: PASS (update any existing benchmark tests that asserted the old median-sourced fsm/eal values). + +- [ ] **Step 4: Frontend — remove the cross-definition fallback** + +`nextjs-app/components/compare/CompareCommunity.tsx:36`: + +```tsx + const anchor = bench?.fsm_pct ?? null; +``` + +If the FSM chip has unit coverage, update/add the case: `anchor` null ⇒ no verdict chip rendered (bare value only). Run `cd nextjs-app && npx tsc --noEmit && npm test` — expected PASS. + +- [ ] **Step 5: Commit** + +```bash +git add pipeline/transform/models/marts backend/models.py backend/data_loader.py backend/app.py backend/tests/test_benchmarks.py nextjs-app/components/compare/CompareCommunity.tsx nextjs-app/__tests__ +git commit -m "fix(compare): census-sourced FSM/EAL benchmarks; never fall back across measure definitions" +``` + +--- + +### Task 5: Official KS4 national averages + +**Files:** +- Modify: `pipeline/plugins/extractors/tap-uk-ees/tap_uk_ees/tap.py` (new stream, registered in `discover_streams`) +- Create: `pipeline/transform/models/staging/stg_ees_ks4_national.sql` +- Modify: `pipeline/transform/models/staging/_stg_sources.yml` (add raw table `ees_ks4_national`) +- Modify: `pipeline/transform/models/marts/fact_ks4_national_averages.sql` (rewrite) +- Modify: `backend/models.py` (Ks4NationalAverage docstring), `backend/app.py` (`_national_averages_payload` — remove the computed fallback) +- Test: `backend/tests/test_national_averages_marts.py` + +**Interfaces:** +- Consumes: EES data-catalogue CSV `https://explore-education-statistics.service.gov.uk/data-catalogue/data-set/1b649e16-01e8-435b-a814-56be2faf9054/csv` (columns verified: `time_period, geographic_level, establishment_type_group, breakdown_topic, breakdown, attainment8_average, progress8_average, engmath_95_percent, engmath_94_percent, ebacc_entering_percent, ebacc_95_percent, ebacc_94_percent, ebacc_aps_average, …`). +- Produces: `marts.fact_ks4_national_averages` with the SAME columns as today (so `Ks4NationalAverage` needs no schema change), now holding official DfE figures; `gcse_grade_91_pct` is NULL (not in the official series — the England anchor for that measure disappears, which is correct: it was noise). + +- [ ] **Step 1: Tap stream** + +In `tap.py`, after the KS2 national stream, add: + +```python +# ── KS4 National Headlines (national level only — one row per year) ────────── +# Dataset: "National characteristics summary data" (Key stage 4 performance). +# Official England state-funded headline measures, 2018/19 → latest. +# Suppressed values ('z', 'x') → NULL downstream. Progress 8 is legitimately +# absent in years with no KS2 baseline (e.g. 2024/25) — that is DfE policy, +# not missing data. + +_KS4_NATIONAL_CSV_URL = ( + "https://explore-education-statistics.service.gov.uk/data-catalogue/" + "data-set/1b649e16-01e8-435b-a814-56be2faf9054/csv" +) + +_KS4_NATIONAL_COL_MAP = { + "attainment8_average": "attainment_8_score", + "progress8_average": "progress_8_score", + "engmath_94_percent": "english_maths_standard_pass_pct", + "engmath_95_percent": "english_maths_strong_pass_pct", + "ebacc_entering_percent": "ebacc_entry_pct", + "ebacc_94_percent": "ebacc_standard_pass_pct", + "ebacc_95_percent": "ebacc_strong_pass_pct", + "ebacc_aps_average": "ebacc_avg_score", +} + + +class EESKs4NationalStream(Stream): + """National KS4 headline averages — one row per academic year. + + Filters to geographic_level == 'National', establishment_type_group == + 'All state-funded', breakdown_topic == 'Total', breakdown == 'Total' + so only the England-wide all-pupils row per year is emitted. + """ + + name = "ees_ks4_national" + primary_keys = ["time_period"] + replication_key = None + + schema = th.PropertiesList( + th.Property("time_period", th.StringType, required=True), + *[th.Property(out, th.StringType) for out in _KS4_NATIONAL_COL_MAP.values()], + ).to_dict() + + def get_records(self, context): + import pandas as pd + + self.logger.info("Downloading KS4 national headlines: %s", _KS4_NATIONAL_CSV_URL) + resp = requests.get(_KS4_NATIONAL_CSV_URL, timeout=60) + resp.raise_for_status() + + df = pd.read_csv(io.BytesIO(resp.content), dtype=str, keep_default_na=False) + df.columns = [c.strip().lower() for c in df.columns] + + for col, want in [ + ("geographic_level", "national"), + ("establishment_type_group", "all state-funded"), + ("breakdown_topic", "total"), + ("breakdown", "total"), + ]: + if col in df.columns: + df = df[df[col].str.strip().str.lower() == want] + + self.logger.info("Emitting %d national KS4 rows", len(df)) + for _, row in df.iterrows(): + record = {"time_period": row.get("time_period", "").strip()} + for src, out in _KS4_NATIONAL_COL_MAP.items(): + record[out] = row.get(src, "") + yield record +``` + +Register `EESKs4NationalStream(self)` in `discover_streams` next to the KS2 national stream. + +- [ ] **Step 2: Raw source + staging model** + +Add to `_stg_sources.yml` under the raw source, matching the `ees_ks2_national` entry's style: + +```yaml + - name: ees_ks4_national + description: Official DfE KS4 national headline averages (EES data catalogue) +``` + +Create `pipeline/transform/models/staging/stg_ees_ks4_national.sql`: + +```sql +{{ config(materialized='table') }} + +-- Staging model: official DfE KS4 national headline averages — one row per +-- academic year (England, all state-funded, all pupils). Source: EES data +-- catalogue "National characteristics summary data". Suppressed values +-- ('z', 'x') are coerced to NULL by safe_numeric — Progress 8 is 'z' in +-- years with no KS2 baseline (e.g. 2024/25): legitimately unpublished. + +select + cast(trim(time_period) as integer) as year, + {{ safe_numeric('attainment_8_score') }} as attainment_8_score, + {{ safe_numeric('progress_8_score') }} as progress_8_score, + {{ safe_numeric('english_maths_standard_pass_pct') }} as english_maths_standard_pass_pct, + {{ safe_numeric('english_maths_strong_pass_pct') }} as english_maths_strong_pass_pct, + {{ safe_numeric('ebacc_entry_pct') }} as ebacc_entry_pct, + {{ safe_numeric('ebacc_standard_pass_pct') }} as ebacc_standard_pass_pct, + {{ safe_numeric('ebacc_strong_pass_pct') }} as ebacc_strong_pass_pct, + {{ safe_numeric('ebacc_avg_score') }} as ebacc_avg_score +from {{ source('raw', 'ees_ks4_national') }} +where time_period ~ '^[0-9]+$' +``` + +- [ ] **Step 3: Rewrite the mart** + +Replace the entire body of `fact_ks4_national_averages.sql`: + +```sql +{{ config(materialized='table') }} + +-- Mart: OFFICIAL DfE KS4 national headline averages — one row per academic +-- year (England, state-funded, all pupils), from the EES national dataset. +-- Replaces the previous unweighted school-level means, which were 7–15 +-- points off every headline measure and produced an arithmetically +-- impossible national Progress 8. gcse_grade_91_pct has no official +-- national series and is NULL (schema kept for the API model). + +select + year, + attainment_8_score, + progress_8_score, + english_maths_standard_pass_pct, + english_maths_strong_pass_pct, + ebacc_entry_pct, + ebacc_standard_pass_pct, + ebacc_strong_pass_pct, + ebacc_avg_score, + cast(null as double precision) as gcse_grade_91_pct +from {{ ref('stg_ees_ks4_national') }} +order by year +``` + +Run: `cd pipeline/transform && uv run --with dbt-postgres python -m dbt.cli.main parse --profiles-dir .` — expected PASS. + +- [ ] **Step 4: Backend — official provenance, no computed fallback** + +`backend/models.py`: change the `Ks4NationalAverage` docstring to `"""Official DfE KS4 national headline averages — one row per academic year."""`. + +`backend/app.py` `_national_averages_payload`: delete the entire `if not any(secondary_by_year.values()):` fallback block (it computes dataset means that the UI footnote then labels official). Update the function docstring's KS4 sentence to: `official DfE KS4 figures (fact_ks4_national_averages). If the KS4 mart hasn't been built yet, the secondary series is empty — never a computed stand-in, because the UI labels these figures as official.` + +Update `backend/tests/test_national_averages_marts.py`: the test that exercised the fallback now asserts the opposite — + +```python +def test_ks4_secondary_empty_when_mart_missing(...): + # No computed stand-in: the UI labels national figures as official DfE + # data, so an empty mart must yield an empty secondary series. + payload = _national_averages_payload(df) + assert all(not e["secondary"] for e in payload["by_year"]) +``` + +(adapt to the file's existing fixtures/monkeypatching). Run the backend suite — expected PASS. + +- [ ] **Step 5: Commit** + +```bash +git add pipeline/plugins/extractors/tap-uk-ees pipeline/transform backend +git commit -m "fix(data): official DfE KS4 national headline averages; drop mislabelled computed means" +``` + +--- + +### Task 6: Honest 2021/22 footnote + +**Files:** +- Modify: `nextjs-app/components/ComparisonChart.tsx:243-247` +- Modify: `nextjs-app/lib/compareChartData.ts` (comment lines 7, 53–55 — comments only, no logic) +- Modify: `nextjs-app/__tests__/lib/compareChartData.test.ts` (test name/comment wording only) +- Modify: `docs/superpowers/specs/2026-07-11-compare-screen-redesign-design.md` §8.1 + +**Interfaces:** none — copy and docs only. This is the one place the plan changes reviewed copy, because the reviewed copy is factually wrong (Global Constraints exception). + +- [ ] **Step 1: Fix the user-facing copy** + +In `ComparisonChart.tsx` replace the note: + +```tsx + {built.showUnpublished202122Note && ( +

+ No national tests were held in 2019/20 and 2020/21 (COVID), and our dataset doesn't + yet include school-level figures for 2021/22 — the England average is shown for that + year. +

+ )} +``` + +- [ ] **Step 2: Fix the lying comments** + +In `compareChartData.ts`, update the header comment (line 7) and the `showUnpublished202122Note` doc comment (lines 53–55) to say the 2021/22 school-level figures are *absent from our dataset* (DfE published them in Dec 2022; ingesting them is a backlog pipeline task), not "unpublished". Rename nothing (the flag name stays — pure rename churn). In `compareChartData.test.ts`, adjust the test description/comment wording the same way. + +- [ ] **Step 3: Correct spec §8.1** + +In the spec's §8.1, replace any wording that calls 2021/22 school-level KS2 a "permanent DfE gap" with: DfE published school-level KS2 results for 2021/22 in December 2022 (with comparability caveats); they are not yet ingested — loading them remains an open pipeline task, and the chart footnote says "our dataset doesn't yet include" accordingly. + +- [ ] **Step 4: Verify + commit** + +Run: `cd nextjs-app && npx tsc --noEmit && npm test` — expected PASS. + +```bash +git add nextjs-app docs/superpowers/specs/2026-07-11-compare-screen-redesign-design.md +git commit -m "fix(compare): stop attributing the missing 2021/22 school-level year to DfE" +``` + +--- + +### Task 7: Full verification, PR, and post-deploy checklist + +**Files:** none new (verification + PR). + +- [ ] **Step 1: Run everything** + +```bash +uv run --with-requirements requirements.txt --with pytest --with "httpx==0.27.0" python -m pytest backend/tests -q +cd nextjs-app && npx tsc --noEmit && npm test && cd .. +cd pipeline/transform && uv run --with dbt-postgres python -m dbt.cli.main parse --profiles-dir . && cd ../.. +``` + +Expected: all PASS. + +- [ ] **Step 2: Open the PR** + +Push `fix/compare-final-review-mustfix`; open a PR via the Gitea API using `git credential fill` basic auth (token-header auth 401s). PR body: summarize the five findings and fixes, link the expert review, end with the standard Claude Code attribution + session URL. Note in the body that findings 2 and 4 also need a **DAG run after the staging deploy** before the UI shows corrected data. + +- [ ] **Step 3: Post-merge staging verification (after the user merges and the daily DAG runs — record results, do not promote)** + +```bash +# Report card dated by its own inspection (Barclay): expect 2026-02-03 +curl -sk "https://stx.schoolcompare.co.uk/api/compare?urns=138690" | python3 -c "import json,sys; o=json.load(sys.stdin)['comparison']['138690']['ofsted']; print(o['rc_inspection_date'], o['inspection_date'])" +# Stale Watford rc grades cleared by the fresh extract: expect report_card == {} +curl -sk "https://stx.schoolcompare.co.uk/api/compare?urns=136276" | python3 -c "import json,sys; print(json.load(sys.stdin)['comparison']['136276']['ofsted']['report_card'])" +# Official KS4 nationals: expect A8 46.0 for 202425, progress_8_score absent +curl -sk "https://stx.schoolcompare.co.uk/api/national-averages" | python3 -c "import json,sys; print(json.load(sys.stdin)['secondary'])" +# FSM benchmark real (~24-26), secondary disadvantaged_pct gone +curl -sk "https://stx.schoolcompare.co.uk/api/compare?urns=138690,136276" | python3 -c "import json,sys; print(json.load(sys.stdin)['benchmarks'])" +``` + +Then re-screenshot both phase views (desktop + mobile, "More measures" expanded, Watford Grammar in the secondary set) and hand them to the Ofsted expert agent for the sign-off pass it said it expects. Production promotion remains the human's manual call. + +--- + +## Out of Scope (expert should-fix/minor — separate follow-ups) + +- 137086-style interim state (subgrades without an overall from an RI reinspection) rendering treatment (finding 6). +- Disadvantaged cohort sizes on the attainment row (finding 7, spec §8.5). +- SEN/EAL "typical school" labelling and secondary SEN benchmark (finding 8) — note Task 4 already upgrades EAL to a pupil-weighted census figure. +- Selective-school admissions copy variant (finding 9). +- Removing/relabelling `gcse_grade_91_pct` as a compare measure (finding 10) — Task 5 already removes its false England anchor. +- Palette deviation (11), trends picker label (12), "More measures" expanded-state verification (13). +- Actually ingesting the 2021/22 school-level KS2 release (the copy in Task 6 says "doesn't *yet* include"). From 026a7ab6aa82b2c0affabe9c2f43dacbecf7ed78 Mon Sep 17 00:00:00 2001 From: Tudor Date: Thu, 16 Jul 2026 14:42:09 +0100 Subject: [PATCH 2/8] =?UTF-8?q?fix(compare):=20render=20all-secondary=20co?= =?UTF-8?q?mparisons=20=E2=80=94=20re-run=20phase=20detection=20after=20ba?= =?UTF-8?q?sket=20hydration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB --- e2e/tests/journeys.spec.ts | 30 ++++++++ .../components/ComparisonView.phase.test.tsx | 76 +++++++++++++++++++ nextjs-app/components/ComparisonView.tsx | 6 +- 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 nextjs-app/__tests__/components/ComparisonView.phase.test.tsx diff --git a/e2e/tests/journeys.spec.ts b/e2e/tests/journeys.spec.ts index 6ae1d16..9e26557 100644 --- a/e2e/tests/journeys.spec.ts +++ b/e2e/tests/journeys.spec.ts @@ -40,6 +40,19 @@ async function twoPrimaryUrns(page: Page): Promise<[string, string]> { return [urns[0], urns[1]]; } +async function twoSecondaryUrns(page: Page): Promise<[string, string]> { + const res = await page.request.get('/api/schools?search=school&per_page=100'); + expect(res.ok()).toBeTruthy(); + const body = await res.json(); + const urns: string[] = (body.schools ?? []) + .filter((s: { phase?: string; attainment_8_score?: number | null }) => + s.phase === 'Secondary' && s.attainment_8_score != null, + ) + .map((s: { urn: number }) => String(s.urn)); + expect(urns.length).toBeGreaterThanOrEqual(2); + return [urns[0], urns[1]]; +} + test('home page loads with hero search', async ({ page }) => { await page.goto('/'); await expect(page.locator('h1').first()).toBeVisible(); @@ -199,6 +212,23 @@ test('comparing two schools shows the parent-first sections side by side', async } }); +test('comparing two secondary schools renders the secondary sections', async ({ page }) => { + const [urn0, urn1] = await twoSecondaryUrns(page); + + await page.goto(`/compare?urns=${urn0},${urn1}`); + await expect(page.locator(`a[href*="${urn0}"]`).first()).toBeVisible({ timeout: 15_000 }); + + // The parent-first sections must render — this page was completely blank + // for all-secondary baskets (expert review must-fix #1). + await expect(page.getByRole('heading', { name: 'At a glance' }).first()).toBeVisible({ + timeout: 15_000, + }); + await expect(page.getByRole('heading', { name: 'Ofsted inspection' }).first()).toBeVisible(); + // A KS4 measure proves the secondary academics variant rendered. + await expect(page.getByText(/Attainment 8/i).first()).toBeVisible(); + await expect(page.getByText(/No primary schools in your comparison/)).toHaveCount(0); +}); + test('compare chart on mobile shows school chips with tap-to-focus', async ({ page }) => { await page.setViewportSize({ width: 390, height: 844 }); diff --git a/nextjs-app/__tests__/components/ComparisonView.phase.test.tsx b/nextjs-app/__tests__/components/ComparisonView.phase.test.tsx new file mode 100644 index 0000000..4fd5716 --- /dev/null +++ b/nextjs-app/__tests__/components/ComparisonView.phase.test.tsx @@ -0,0 +1,76 @@ +/** + * Regression: an all-secondary comparison must render the secondary sections. + * + * The basket hydrates from the URL a beat after mount, so the auto-phase + * effect must re-run once selectedSchools arrives — with deps of only + * [comparisonData] it fired once against an empty basket, bailed, and the + * page stayed on an empty "primary" tab ("No primary schools in your + * comparison") even though all schools were secondary. + */ + +import { render, screen, waitFor } from '@testing-library/react'; + +import { ComparisonView } from '@/components/ComparisonView'; +import { ComparisonProvider } from '@/context/ComparisonProvider'; +import type { ComparisonData, School } from '@/lib/types'; + +const fetchComparison = jest.fn(); +jest.mock('@/lib/api', () => ({ + fetchComparison: (...args: unknown[]) => fetchComparison(...args), +})); +jest.mock('@/lib/analytics', () => ({ track: jest.fn() })); + +function secondarySchool(urn: number, name: string): School { + return { + urn, + school_name: name, + local_authority: 'Testshire', + school_type: 'Academy converter', + attainment_8_score: 55, + phase: 'Secondary', + } as School; +} + +function data(urn: number, name: string): ComparisonData { + return { + school_info: secondarySchool(urn, name), + yearly_data: [{ year: 202425, attainment_8_score: 55 }] as ComparisonData['yearly_data'], + ofsted: null, + census: null, + admissions: null, + admissions_history: [], + deprivation: null, + }; +} + +const INITIAL_DATA = { + '300': data(300, 'Gamma High'), + '400': data(400, 'Delta Academy'), +}; + +test('an all-secondary comparison renders the sections, not an empty primary tab', async () => { + render( + + + , + ); + + await waitFor(() => { + expect(screen.getByRole('heading', { name: 'At a glance' })).toBeInTheDocument(); + }); + expect(screen.getAllByText('Gamma High').length).toBeGreaterThan(0); + expect(screen.queryByText(/No primary schools in your comparison/)).toBeNull(); + expect(fetchComparison).not.toHaveBeenCalled(); +}); diff --git a/nextjs-app/components/ComparisonView.tsx b/nextjs-app/components/ComparisonView.tsx index 600794e..fd42e1e 100644 --- a/nextjs-app/components/ComparisonView.tsx +++ b/nextjs-app/components/ComparisonView.tsx @@ -173,7 +173,11 @@ export function ComparisonView({ if (!metricFitsPhase) { setSelectedMetric(newPhase === 'secondary' ? 'attainment_8_score' : 'rwm_expected_pct'); } - }, [comparisonData]); // eslint-disable-line react-hooks/exhaustive-deps + // selectedSchools is a dep because the basket hydrates after mount: the + // first run sees an empty basket and bails, so it must re-fire when the + // schools arrive. primarySchools/secondarySchools/metrics/selectedMetric + // are intentionally omitted (derived or would cause loops). + }, [comparisonData, selectedSchools]); // eslint-disable-line react-hooks/exhaustive-deps const handlePhaseChange = (phase: 'primary' | 'secondary') => { phaseLockedByUser.current = true; From e00a1b38a8778985185a51c32fa738c52ef5df59 Mon Sep 17 00:00:00 2001 From: Tudor Date: Thu, 16 Jul 2026 14:44:51 +0100 Subject: [PATCH 3/8] feat(pipeline): carry the report-card inspection's own date; pick newest MI file in discovery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The MI file's report-card grade columns belong to the latest FULL inspection (col 'Inspection start date'), but inspection_date maps to the legacy OEIF graded/ungraded dates — so report cards were being dated with pre-Nov-2025 inspections. Also discover_csv_url() returned matches[0], the oldest (2017) link on the GOV.UK page. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB --- .../tap-uk-ofsted/tap_uk_ofsted/tap.py | 43 ++++++++++++++++--- .../models/intermediate/int_ofsted_latest.sql | 1 + .../models/marts/fact_ofsted_inspection.sql | 1 + .../models/staging/stg_ofsted_inspections.sql | 20 ++++++++- 4 files changed, 59 insertions(+), 6 deletions(-) diff --git a/pipeline/plugins/extractors/tap-uk-ofsted/tap_uk_ofsted/tap.py b/pipeline/plugins/extractors/tap-uk-ofsted/tap_uk_ofsted/tap.py index 289e356..ff49cf2 100644 --- a/pipeline/plugins/extractors/tap-uk-ofsted/tap_uk_ofsted/tap.py +++ b/pipeline/plugins/extractors/tap-uk-ofsted/tap_uk_ofsted/tap.py @@ -89,6 +89,10 @@ COLUMN_PRIORITY = { "rc_leadership_governance": ["Leadership and governance"], "rc_early_years": ["Early years (where applicable)"], "rc_sixth_form": ["Post-16 provision (where applicable)"], + # Date of the latest FULL inspection — in the renewed framework this is + # the report-card inspection's own start date (col "Inspection start + # date"), distinct from the legacy OEIF graded/ungraded dates above. + "rc_inspection_date": ["Inspection start date"], "report_url": [ "Web Link (opens in new window)", "Web link to Ofsted provider page", @@ -98,16 +102,44 @@ COLUMN_PRIORITY = { def discover_csv_url() -> str | None: - """Scrape GOV.UK page to find the latest MI CSV download link.""" + """Scrape GOV.UK page to find the latest MI CSV download link. + + The page lists a decade of monthly files, oldest first — take the + newest 'latest inspections as at ' link by parsing its date, + never matches[0] (that is a 2017 file). + """ resp = requests.get(GOV_UK_PAGE, timeout=30) resp.raise_for_status() - # Look for CSV attachment links - matches = re.findall( + csv_links = re.findall( r'href="(https://assets\.publishing\.service\.gov\.uk/[^"]+\.csv)"', resp.text, ) - if matches: - return matches[0] + + months = { + 'january': 1, 'february': 2, 'march': 3, 'april': 4, 'may': 5, 'june': 6, + 'july': 7, 'august': 8, 'september': 9, 'october': 10, 'november': 11, 'december': 12, + 'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'jun': 6, + 'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12, + } + parsed_links = [] + for link in csv_links: + normalized = link.lower().replace('-', '_') + if 'latest_inspections_as_at' not in normalized: + continue + match = re.search(r'as_at_(\d{1,2})_([a-z]+)_(\d{4})', normalized) + if match: + day, month_str, year = match.groups() + month = months.get(month_str) + if month: + try: + parsed_links.append((datetime(int(year), month, int(day)), link)) + except ValueError: + continue + parsed_links.sort(reverse=True) + if parsed_links: + return parsed_links[0][1] + if csv_links: + return csv_links[-1] # Fall back to ODS matches = re.findall( r'href="(https://assets\.publishing\.service\.gov\.uk/[^"]+\.ods)"', @@ -191,6 +223,7 @@ class OfstedInspectionsStream(Stream): th.Property("rc_leadership_governance", th.StringType), th.Property("rc_early_years", th.StringType), th.Property("rc_sixth_form", th.StringType), + th.Property("rc_inspection_date", th.StringType), th.Property("report_url", th.StringType), ).to_dict() diff --git a/pipeline/transform/models/intermediate/int_ofsted_latest.sql b/pipeline/transform/models/intermediate/int_ofsted_latest.sql index 0e5d88e..2b09768 100644 --- a/pipeline/transform/models/intermediate/int_ofsted_latest.sql +++ b/pipeline/transform/models/intermediate/int_ofsted_latest.sql @@ -34,6 +34,7 @@ select rc_leadership_governance, rc_early_years, rc_sixth_form, + rc_inspection_date, report_url from ranked where rn = 1 diff --git a/pipeline/transform/models/marts/fact_ofsted_inspection.sql b/pipeline/transform/models/marts/fact_ofsted_inspection.sql index f96a126..b6f0e09 100644 --- a/pipeline/transform/models/marts/fact_ofsted_inspection.sql +++ b/pipeline/transform/models/marts/fact_ofsted_inspection.sql @@ -23,5 +23,6 @@ select rc_leadership_governance, rc_early_years, rc_sixth_form, + rc_inspection_date, report_url from {{ ref('stg_ofsted_inspections') }} diff --git a/pipeline/transform/models/staging/stg_ofsted_inspections.sql b/pipeline/transform/models/staging/stg_ofsted_inspections.sql index 518b24a..6bb7574 100644 --- a/pipeline/transform/models/staging/stg_ofsted_inspections.sql +++ b/pipeline/transform/models/staging/stg_ofsted_inspections.sql @@ -49,6 +49,12 @@ renamed as ( {{ parse_report_card_grade('rc_early_years') }}::integer as rc_early_years, {{ parse_report_card_grade('rc_sixth_form') }}::integer as rc_sixth_form, + -- Start date of the latest FULL inspection (the report-card + -- inspection in the renewed framework). Guarded in the final select: + -- only kept when the row actually carries report-card grades, because + -- in legacy-format files this column is the legacy inspection date. + to_date(nullif(trim(rc_inspection_date), 'NULL'), 'DD/MM/YYYY') as rc_inspection_date_raw, + nullif(trim(report_url), 'NULL') as report_url from source where urn is not null @@ -58,5 +64,17 @@ renamed as ( ) ) -select * from renamed +select + *, + case + when rc_safeguarding_met is not null + or rc_inclusion is not null + or rc_curriculum_teaching is not null + or rc_achievement is not null + or rc_attendance_behaviour is not null + or rc_personal_development is not null + or rc_leadership_governance is not null + then rc_inspection_date_raw + end as rc_inspection_date +from renamed where inspection_date is not null From 97734832210d7e5dafbfe3b40b9cf05b8e9b6acd Mon Sep 17 00:00:00 2001 From: Tudor Date: Thu, 16 Jul 2026 14:48:17 +0100 Subject: [PATCH 4/8] fix(compare): date report cards with their own inspection date, never the legacy one Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB --- backend/data_loader.py | 5 +++ backend/models.py | 3 ++ .../tests/test_supplementary_enrichment.py | 20 ++++++++++ .../components/CompareOfsted.test.tsx | 39 +++++++++++++++++++ .../components/compare/CompareOfsted.tsx | 12 +++++- nextjs-app/lib/types.ts | 2 + 6 files changed, 79 insertions(+), 2 deletions(-) diff --git a/backend/data_loader.py b/backend/data_loader.py index 332ce5e..7b01a07 100644 --- a/backend/data_loader.py +++ b/backend/data_loader.py @@ -617,6 +617,11 @@ def _ofsted_block(o, urn: int) -> dict: block = { "framework": o.framework, "inspection_date": o.inspection_date.isoformat() if o.inspection_date else None, + "rc_inspection_date": ( + o.rc_inspection_date.isoformat() + if getattr(o, "rc_inspection_date", None) + else None + ), "inspection_type": o.inspection_type, "overall_effectiveness": overall, "grade_source": grade_source, diff --git a/backend/models.py b/backend/models.py index b2325d9..1deae34 100644 --- a/backend/models.py +++ b/backend/models.py @@ -156,6 +156,9 @@ class FactOfstedInspection(Base): rc_leadership_governance = Column(Integer) rc_early_years = Column(Integer) rc_sixth_form = Column(Integer) + # Start date of the report-card inspection itself (renewed framework, + # Nov 2025+). Null for rows without report-card grades. + rc_inspection_date = Column(Date) report_url = Column(Text) diff --git a/backend/tests/test_supplementary_enrichment.py b/backend/tests/test_supplementary_enrichment.py index fe6e746..0fd5a38 100644 --- a/backend/tests/test_supplementary_enrichment.py +++ b/backend/tests/test_supplementary_enrichment.py @@ -3,6 +3,7 @@ labels, provider-page URL, graded-vs-carried-forward provenance, and the admissions preference/cross-LA detail promoted in the data-foundation PR.""" import types +from datetime import date from backend.data_loader import _admissions_row_dict, _ofsted_block @@ -40,6 +41,25 @@ def test_grade_source_graded_vs_carried_forward(): assert _ofsted_block(_row(), urn=1)["grade_source"] is None +def test_ofsted_block_carries_rc_inspection_date(): + o = _row( + ungraded_grade=2, + rc_achievement=1, + rc_inspection_date=date(2026, 2, 3), + inspection_date=date(2021, 10, 7), + ) + block = _ofsted_block(o, urn=138690) + assert block["rc_inspection_date"] == "2026-02-03" + # The legacy inspection date is still present, unchanged. + assert block["inspection_date"] == "2021-10-07" + + +def test_ofsted_block_rc_inspection_date_none_when_absent(): + o = _row(overall_effectiveness=1, inspection_date=date(2021, 10, 13)) + block = _ofsted_block(o, urn=136276) + assert block["rc_inspection_date"] is None + + def test_ofsted_block_keeps_existing_keys(): block = _ofsted_block(_row(overall_effectiveness=2, quality_of_education=2), urn=1) for key in ("framework", "inspection_date", "overall_effectiveness", diff --git a/nextjs-app/__tests__/components/CompareOfsted.test.tsx b/nextjs-app/__tests__/components/CompareOfsted.test.tsx index 849d255..912f296 100644 --- a/nextjs-app/__tests__/components/CompareOfsted.test.tsx +++ b/nextjs-app/__tests__/components/CompareOfsted.test.tsx @@ -96,6 +96,45 @@ describe('CompareOfsted', () => { expect(links[0]).toHaveAttribute('href', 'https://reports.ofsted.gov.uk/provider/21/1'); }); + it('dates a report card with the report-card inspection date, never the legacy date', () => { + const cardSchool = school(4, 'Dated Card School'); + const cardData: Record = { + '4': { + school_info: cardSchool, + yearly_data: [], + ofsted: ofsted({ + inspection_date: '2021-10-07', + rc_inspection_date: '2026-02-03', + rc_safeguarding_met: true, + report_card: { rc_achievement: { code: 1, label: 'Exceptional' } }, + }), + }, + }; + render(); + expect(screen.getByText(/3 Feb 2026/)).toBeInTheDocument(); + expect(screen.queryByText(/7 Oct 2021/)).toBeNull(); + expect(screen.queryByText('4+ years ago')).toBeNull(); + }); + + it('shows an em dash when a report card has no rc_inspection_date yet', () => { + const cardSchool = school(5, 'Undated Card School'); + const cardData: Record = { + '5': { + school_info: cardSchool, + yearly_data: [], + ofsted: ofsted({ + inspection_date: '2021-10-07', + rc_inspection_date: null, + rc_safeguarding_met: true, + report_card: { rc_achievement: { code: 1, label: 'Exceptional' } }, + }), + }, + }; + render(); + expect(screen.getByText('—')).toBeInTheDocument(); + expect(screen.queryByText(/7 Oct 2021/)).toBeNull(); + }); + it('renders a per-measure mobile tag with the short school name', () => { render(); // Each measure repeats the schools, so the short name ("Graded" from diff --git a/nextjs-app/components/compare/CompareOfsted.tsx b/nextjs-app/components/compare/CompareOfsted.tsx index 56ff359..c5486ac 100644 --- a/nextjs-app/components/compare/CompareOfsted.tsx +++ b/nextjs-app/components/compare/CompareOfsted.tsx @@ -180,10 +180,18 @@ export function CompareOfsted({ {schools.map((school, i) => { const ofsted = data[String(school.urn)]?.ofsted; - const age = yearsSince(ofsted?.inspection_date ?? null); + // A report card is dated by its OWN inspection date. The legacy + // inspection_date belongs to an older inspection and must never + // be shown against a report card (report cards exist only from + // Nov 2025). + const dateIso = + displays[i].kind === 'report_card' + ? ofsted?.rc_inspection_date ?? null + : ofsted?.inspection_date ?? null; + const age = yearsSince(dateIso); return ( - {formatInspectionDate(ofsted?.inspection_date ?? null)}{' '} + {formatInspectionDate(dateIso)}{' '} {age != null && age > 4 && 4+ years ago} ); diff --git a/nextjs-app/lib/types.ts b/nextjs-app/lib/types.ts index f82d907..b4dc009 100644 --- a/nextjs-app/lib/types.ts +++ b/nextjs-app/lib/types.ts @@ -79,6 +79,8 @@ export interface School { export interface OfstedInspection { framework: 'OEIF' | 'ReportCard' | null; inspection_date: string | null; + /** Start date of the report-card inspection itself (Nov 2025+); null otherwise. */ + rc_inspection_date?: string | null; inspection_type: string | null; // OEIF fields (old framework, pre-Nov 2025) overall_effectiveness: 1 | 2 | 3 | 4 | null; From 1d855f3c170d153686959db1d6c1465cdd11712c Mon Sep 17 00:00:00 2001 From: Tudor Date: Thu, 16 Jul 2026 19:05:15 +0100 Subject: [PATCH 5/8] fix(compare): census-sourced FSM/EAL benchmarks; never fall back across measure definitions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The FSM chip anchored against disadvantaged_pct (a different measure, FSM6+CLA) whenever fsm_pct was null — which it always was, since the performance df has no fsm_pct. New fact_census_benchmarks mart supplies pupil-weighted FSM/EAL means per phase; the KS2-column medians that produced a bogus 50% 'secondary disadvantaged' anchor are gone. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB --- backend/app.py | 28 ++++++++++++- backend/data_loader.py | 31 ++++++++------- backend/models.py | 16 ++++++++ backend/tests/test_benchmarks.py | 37 ++++++++++++++---- .../components/compare/CompareCommunity.tsx | 5 ++- .../transform/models/marts/_marts_schema.yml | 10 +++++ .../models/marts/fact_census_benchmarks.sql | 39 +++++++++++++++++++ 7 files changed, 142 insertions(+), 24 deletions(-) create mode 100644 pipeline/transform/models/marts/fact_census_benchmarks.sql diff --git a/backend/app.py b/backend/app.py index eccd542..e4a42b2 100644 --- a/backend/app.py +++ b/backend/app.py @@ -677,6 +677,7 @@ async def compare_schools( "deprivation": None, } supplementary_by_urn: dict = {} + census_benchmarks = None db = None try: db = database.SessionLocal() @@ -688,6 +689,31 @@ async def compare_schools( key: supp.get(key, default) for key, default in _EMPTY_SUPPLEMENTARY.items() } + # Import-time census context benchmarks (fact_census_benchmarks); + # absent mart → None, and compute_benchmarks leaves those fields null. + try: + from .models import CensusBenchmark + + rows = db.query(CensusBenchmark).all() + by_phase = { + r.phase: { + "year": r.year, + "fsm_pct": r.fsm_pct, + "eal_pct": r.eal_pct, + "median_pupils": r.median_pupils, + } + for r in rows + if getattr(r, "phase", None) in ("primary", "secondary") + } + if by_phase: + census_benchmarks = by_phase + except Exception: + # Missing mart (or a stubbed session in tests) must never break + # the compare payload — and not every session has rollback(). + try: + db.rollback() + except Exception: + pass except Exception: supplementary_by_urn = {} finally: @@ -728,7 +754,7 @@ async def compare_schools( # Official DfE anchors + computed state-school benchmarks so the # compare UI can label provenance correctly (spec §8.6). "national_averages": _national_averages_payload(df), - "benchmarks": compute_benchmarks(df), + "benchmarks": compute_benchmarks(df, census_benchmarks=census_benchmarks), } diff --git a/backend/data_loader.py b/backend/data_loader.py index 7b01a07..3cdba13 100644 --- a/backend/data_loader.py +++ b/backend/data_loader.py @@ -525,13 +525,20 @@ def get_data_info(db: Session = None) -> dict: # SUPPLEMENTARY DATA — per-school detail page # ============================================================================= -def compute_benchmarks(df: pd.DataFrame) -> dict: +def compute_benchmarks(df: pd.DataFrame, census_benchmarks: dict | None = None) -> dict: """State-school benchmarks computed from our dataset (spec §5/§8.6). NOT official DfE figures — consumers must label them "state-school average (computed from our dataset)". The disadvantaged attainment average is weighted by cohort size (eligible_pupils) so - small schools don't dominate; context measures are medians. + small schools don't dominate. + + Context measures (FSM/EAL/pupil counts) come from `census_benchmarks` + (the fact_census_benchmarks mart, pupil-weighted, keyed by phase): the + performance df has no fsm_pct at all, and its eal/disadvantaged columns + are KS2-only — medianing them for "secondary" produced junk anchors + from the handful of all-through schools. When the mart is unavailable + these are None; never fall back across measure definitions. """ if df.empty or "year" not in df.columns: return {} @@ -567,18 +574,14 @@ def compute_benchmarks(df: pd.DataFrame) -> dict: ) return round(float(w), 1) - def _block(sub, with_disadvantaged): - median_pupils = None - if "total_pupils" in sub.columns: - mp = sub["total_pupils"].median() - if pd.notna(mp): - median_pupils = int(mp) + def _block(sub, phase, with_disadvantaged): + census = (census_benchmarks or {}).get(phase) or {} block = { - "eal_pct": _median(sub, "eal_pct"), + "eal_pct": census.get("eal_pct"), "sen_support_pct": _median(sub, "sen_support_pct"), - "disadvantaged_pct": _median(sub, "disadvantaged_pct"), - "fsm_pct": _median(sub, "fsm_pct"), - "median_pupils": median_pupils, + "disadvantaged_pct": _median(sub, "disadvantaged_pct") if with_disadvantaged else None, + "fsm_pct": census.get("fsm_pct"), + "median_pupils": census.get("median_pupils"), } if with_disadvantaged: block["disadvantaged_rwm_expected_pct"] = _weighted_disadvantaged(sub) @@ -587,8 +590,8 @@ def compute_benchmarks(df: pd.DataFrame) -> dict: return { "source": "state-school average (computed from our dataset)", "year": int(latest_year), - "primary": _block(prim, with_disadvantaged=True), - "secondary": _block(sec, with_disadvantaged=False), + "primary": _block(prim, "primary", with_disadvantaged=True), + "secondary": _block(sec, "secondary", with_disadvantaged=False), } diff --git a/backend/models.py b/backend/models.py index 1deae34..8fc21f9 100644 --- a/backend/models.py +++ b/backend/models.py @@ -234,6 +234,22 @@ class FactFinance(Base): premises_cost_pct = Column(Float) +class CensusBenchmark(Base): + """State-school context benchmarks from the pupil census — one row per phase. + + fsm_pct / eal_pct are pupil-weighted means. Computed at import time; + consumers label them "state-school average (computed from our dataset)". + """ + __tablename__ = "fact_census_benchmarks" + __table_args__ = MARTS + + phase = Column(String(20), primary_key=True) + year = Column(Integer) + fsm_pct = Column(Float) + eal_pct = Column(Float) + median_pupils = Column(Integer) + + class Ks4NationalAverage(Base): """Computed national KS4 averages (from our dataset) — one row per year.""" __tablename__ = "fact_ks4_national_averages" diff --git a/backend/tests/test_benchmarks.py b/backend/tests/test_benchmarks.py index 50c8233..d1f74fc 100644 --- a/backend/tests/test_benchmarks.py +++ b/backend/tests/test_benchmarks.py @@ -57,19 +57,40 @@ def test_weighted_disadvantaged_average(): def test_medians_ignore_nan_and_older_years(): b = compute_benchmarks(_df()) assert b["year"] == LATEST - # eal medians over [10,20,30,40,50] = 30 - assert b["primary"]["eal_pct"] == 30.0 - # fsm medians over [15,17,19,21,23] = 19 - assert b["primary"]["fsm_pct"] == 19.0 - # median pupils over [200,280,300,350,400] = 300 - assert b["primary"]["median_pupils"] == 300 + # sen medians over [10,14,18,20,22] = 18 — the only context measure still + # sourced from the performance df (the rest come from the census mart). + assert b["primary"]["sen_support_pct"] == 18.0 + # disadvantaged_pct medians over [20,24,30,40,44] = 30 + assert b["primary"]["disadvantaged_pct"] == 30.0 + + +def test_benchmarks_use_census_mart_for_context(): + census = { + "primary": {"year": LATEST, "fsm_pct": 25.3, "eal_pct": 21.8, "median_pupils": 240}, + "secondary": {"year": LATEST, "fsm_pct": 24.1, "eal_pct": 18.9, "median_pupils": 980}, + } + b = compute_benchmarks(_df(), census_benchmarks=census) + assert b["primary"]["fsm_pct"] == 25.3 + assert b["primary"]["eal_pct"] == 21.8 + assert b["secondary"]["eal_pct"] == 18.9 + assert b["secondary"]["median_pupils"] == 980 + + +def test_benchmarks_context_none_when_mart_missing(): + # The performance df has no fsm_pct and its eal/disadvantaged columns are + # KS2-only — never silently fall back to medianing them for context. + b = compute_benchmarks(_df(), census_benchmarks=None) + assert b["primary"]["fsm_pct"] is None + assert b["primary"]["eal_pct"] is None + assert b["primary"]["median_pupils"] is None def test_secondary_block_has_no_disadvantaged_rwm(): b = compute_benchmarks(_df()) assert "disadvantaged_rwm_expected_pct" not in b["secondary"] - assert b["secondary"]["fsm_pct"] == 13.0 - assert b["secondary"]["median_pupils"] == 1100 + # KS2-only columns must not produce a fake secondary disadvantaged anchor + # (the old median over all-through schools' KS2 rows produced 50%). + assert b["secondary"]["disadvantaged_pct"] is None def test_provenance_string(): diff --git a/nextjs-app/components/compare/CompareCommunity.tsx b/nextjs-app/components/compare/CompareCommunity.tsx index 9e14288..4d23ff5 100644 --- a/nextjs-app/components/compare/CompareCommunity.tsx +++ b/nextjs-app/components/compare/CompareCommunity.tsx @@ -33,7 +33,10 @@ export function CompareCommunity({ const bench = isSecondary ? benchmarks?.secondary : benchmarks?.primary; const fsmChip = (value: number | null) => { - const anchor = bench?.fsm_pct ?? bench?.disadvantaged_pct ?? null; + // FSM is anchored only against a real FSM benchmark (census-sourced, + // pupil-weighted). disadvantaged_pct is a different measure (FSM6+CLA) + // — never fall back across definitions; no anchor means no chip. + const anchor = bench?.fsm_pct ?? null; if (value == null || anchor == null) return null; const v = verdict(value, anchor, 3); return ( diff --git a/pipeline/transform/models/marts/_marts_schema.yml b/pipeline/transform/models/marts/_marts_schema.yml index 9fc7860..9869885 100644 --- a/pipeline/transform/models/marts/_marts_schema.yml +++ b/pipeline/transform/models/marts/_marts_schema.yml @@ -133,6 +133,16 @@ models: - name: year tests: [not_null] + - name: fact_census_benchmarks + description: > + State-school context benchmarks from the pupil census — one row per + phase (primary/secondary), latest census year. fsm_pct/eal_pct are + pupil-weighted means; consumers label them "state-school average + (computed from our dataset)", never "England average". + columns: + - name: phase + tests: [not_null, unique] + - name: fact_admissions description: School admissions — one row per URN per year columns: diff --git a/pipeline/transform/models/marts/fact_census_benchmarks.sql b/pipeline/transform/models/marts/fact_census_benchmarks.sql new file mode 100644 index 0000000..5533021 --- /dev/null +++ b/pipeline/transform/models/marts/fact_census_benchmarks.sql @@ -0,0 +1,39 @@ +{{ config(materialized='table') }} + +-- Mart: state-school context benchmarks from the pupil census — one row per +-- phase, latest census year. Computed at import time (never per request). +-- fsm_pct / eal_pct are pupil-weighted means, i.e. "what % of pupils", not +-- "the median school" — this matches how DfE quotes national FSM/EAL rates. +-- Consumers must label these "state-school average (computed from our +-- dataset)" (spec §8.6), never "England average". + +with latest as ( + select max(year) as year from {{ ref('fact_pupil_characteristics') }} +), + +classified as ( + select + case + when p.phase_type_grouping ilike '%primary%' then 'primary' + when p.phase_type_grouping ilike '%secondary%' then 'secondary' + end as phase, + p.total_pupils, + p.fsm_pct, + p.eal_pct, + l.year + from {{ ref('fact_pupil_characteristics') }} p + join latest l on p.year = l.year + where p.total_pupils is not null and p.total_pupils > 0 +) + +select + phase, + max(year) as year, + round((sum(fsm_pct * total_pupils) filter (where fsm_pct is not null) + / nullif(sum(total_pupils) filter (where fsm_pct is not null), 0))::numeric, 1) as fsm_pct, + round((sum(eal_pct * total_pupils) filter (where eal_pct is not null) + / nullif(sum(total_pupils) filter (where eal_pct is not null), 0))::numeric, 1) as eal_pct, + round(percentile_cont(0.5) within group (order by total_pupils))::integer as median_pupils +from classified +where phase is not null +group by phase From c9e324635b455e208a8494467efd33f39f4cfc94 Mon Sep 17 00:00:00 2001 From: Tudor Date: Thu, 16 Jul 2026 19:07:49 +0100 Subject: [PATCH 6/8] fix(data): official DfE KS4 national headline averages; drop mislabelled computed means New ees_ks4_national stream ingests the EES 'National characteristics summary data' series (England, state-funded, all pupils). The old mart's unweighted school means were 7-15 points off every headline measure and produced an impossible national Progress 8 (-0.27). The API's computed fallback is gone too: the footnote calls these figures official, so an unbuilt mart now yields an empty series, never a stand-in. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB --- backend/app.py | 27 +- backend/models.py | 5 +- backend/tests/test_national_averages_marts.py | 19 +- .../extractors/tap-uk-ees/tap_uk_ees/tap.py | 69 ++++ pipeline/transform/.user.yml | 1 + pipeline/transform/logs/dbt.log | 294 ++++++++++++++++++ .../marts/fact_ks4_national_averages.sql | 35 +-- .../transform/models/staging/_stg_sources.yml | 3 + .../models/staging/stg_ees_ks4_national.sql | 20 ++ pipeline/transform/target/manifest.json | 1 + pipeline/transform/target/osi_document.json | 1 + .../transform/target/partial_parse.msgpack | Bin 0 -> 769735 bytes pipeline/transform/target/perf_info.json | 50 +++ .../transform/target/semantic_manifest.json | 1 + 14 files changed, 475 insertions(+), 51 deletions(-) create mode 100644 pipeline/transform/.user.yml create mode 100644 pipeline/transform/logs/dbt.log create mode 100644 pipeline/transform/models/staging/stg_ees_ks4_national.sql create mode 100644 pipeline/transform/target/manifest.json create mode 100644 pipeline/transform/target/osi_document.json create mode 100644 pipeline/transform/target/partial_parse.msgpack create mode 100644 pipeline/transform/target/perf_info.json create mode 100644 pipeline/transform/target/semantic_manifest.json diff --git a/backend/app.py b/backend/app.py index e4a42b2..4313083 100644 --- a/backend/app.py +++ b/backend/app.py @@ -823,11 +823,11 @@ def _national_averages_payload(df: pd.DataFrame) -> dict: /api/compare. Both series are persisted marts computed at import time: official DfE - KS2 figures (fact_ks2_national_averages) and dataset-computed KS4 - averages (fact_ks4_national_averages) — the API never aggregates the - performance dataframe per request. If the KS4 mart hasn't been built - yet (deploy lands before the next DAG run), fall back to computing the - latest year only — a single-year scan, never the historical loop. + KS2 figures (fact_ks2_national_averages) and official DfE KS4 figures + (fact_ks4_national_averages) — the API never aggregates the performance + dataframe per request. If the KS4 mart hasn't been built yet, the + secondary series is empty — never a computed stand-in, because the UI + labels these figures as official DfE data. """ if df.empty: return {"primary": {}, "secondary": {}} @@ -867,23 +867,6 @@ def _national_averages_payload(df: pd.DataFrame) -> dict: primary_by_year = {r.year: _row_metrics(r, _KS2_NATIONAL_METRICS) for r in ks2_rows} secondary_by_year = {r.year: _row_metrics(r, _KS4_NATIONAL_METRICS) for r in ks4_rows} - if not any(secondary_by_year.values()): - # KS4 mart missing/empty: compute the latest year only. - df_latest = df[df["year"] == latest_year] - sec = ( - df_latest[df_latest["attainment_8_score"].notna()] - if "attainment_8_score" in df_latest.columns - else df_latest.iloc[0:0] - ) - vals = {} - for col in _KS4_NATIONAL_METRICS: - if col in sec.columns: - v = sec[col].dropna() - if len(v) > 0: - vals[col] = round(float(v.mean()), 2) - if vals: - secondary_by_year[latest_year] = vals - all_years = sorted(set(primary_by_year) | set(secondary_by_year)) by_year = [ { diff --git a/backend/models.py b/backend/models.py index 8fc21f9..22e9b06 100644 --- a/backend/models.py +++ b/backend/models.py @@ -251,7 +251,10 @@ class CensusBenchmark(Base): class Ks4NationalAverage(Base): - """Computed national KS4 averages (from our dataset) — one row per year.""" + """Official DfE KS4 national headline averages — one row per academic year. + + gcse_grade_91_pct has no official national series and is always NULL. + """ __tablename__ = "fact_ks4_national_averages" __table_args__ = MARTS diff --git a/backend/tests/test_national_averages_marts.py b/backend/tests/test_national_averages_marts.py index b08c6df..f60bcbf 100644 --- a/backend/tests/test_national_averages_marts.py +++ b/backend/tests/test_national_averages_marts.py @@ -1,7 +1,7 @@ """_national_averages_payload reads persisted marts (computed at import -time) — it must never loop the dataframe per year. The only dataframe work -allowed is the single-latest-year KS4 fallback for the window between a -deploy and the next DAG run.""" +time) — it must never aggregate the dataframe. Both marts hold OFFICIAL +DfE figures, so a missing KS4 mart yields an empty secondary series — +never a computed stand-in the UI would mislabel as official.""" import numpy as np import pandas as pd @@ -84,10 +84,11 @@ def test_ks4_averages_come_from_the_mart_not_the_dataframe(payload): assert body["by_year"][-1]["secondary"]["progress_8_score"] == -0.02 -def test_missing_ks4_mart_falls_back_to_latest_year_only(payload): +def test_ks4_secondary_empty_when_mart_missing(payload): + # No computed stand-in: the UI labels national figures as official DfE + # data, so an empty mart must yield an empty secondary series. body = payload(_Ks4MissingSession) - # Fallback computes the latest year from the df: mean(50, 30) = 40.0 - assert body["secondary"]["attainment_8_score"] == 40.0 - # ...and only the latest year — no historical KS4 loop - ks4_years = [e["year"] for e in body["by_year"] if e["secondary"]] - assert ks4_years == [LATEST] + assert body["secondary"] == {} + assert all(not e["secondary"] for e in body["by_year"]) + # The KS2 series is unaffected. + assert body["primary"]["rwm_expected_pct"] == 62.1 diff --git a/pipeline/plugins/extractors/tap-uk-ees/tap_uk_ees/tap.py b/pipeline/plugins/extractors/tap-uk-ees/tap_uk_ees/tap.py index 6e89676..b8bdf53 100644 --- a/pipeline/plugins/extractors/tap-uk-ees/tap_uk_ees/tap.py +++ b/pipeline/plugins/extractors/tap-uk-ees/tap_uk_ees/tap.py @@ -564,6 +564,74 @@ class EESKs2NationalStream(Stream): yield record +# ── KS4 National Headlines (national level only — one row per year) ────────── +# Dataset: "National characteristics summary data" (Key stage 4 performance). +# Official England state-funded headline measures, 2018/19 → latest. +# Suppressed values ('z', 'x') → NULL downstream. Progress 8 is legitimately +# absent in years with no KS2 baseline (e.g. 2024/25) — that is DfE policy, +# not missing data. + +_KS4_NATIONAL_CSV_URL = ( + "https://explore-education-statistics.service.gov.uk/data-catalogue/" + "data-set/1b649e16-01e8-435b-a814-56be2faf9054/csv" +) + +_KS4_NATIONAL_COL_MAP = { + "attainment8_average": "attainment_8_score", + "progress8_average": "progress_8_score", + "engmath_94_percent": "english_maths_standard_pass_pct", + "engmath_95_percent": "english_maths_strong_pass_pct", + "ebacc_entering_percent": "ebacc_entry_pct", + "ebacc_94_percent": "ebacc_standard_pass_pct", + "ebacc_95_percent": "ebacc_strong_pass_pct", + "ebacc_aps_average": "ebacc_avg_score", +} + + +class EESKs4NationalStream(Stream): + """National KS4 headline averages — one row per academic year. + + Filters to geographic_level == 'National', establishment_type_group == + 'All state-funded', breakdown_topic == 'Total', breakdown == 'Total' + so only the England-wide all-pupils row per year is emitted. + """ + + name = "ees_ks4_national" + primary_keys = ["time_period"] + replication_key = None + + schema = th.PropertiesList( + th.Property("time_period", th.StringType, required=True), + *[th.Property(out, th.StringType) for out in _KS4_NATIONAL_COL_MAP.values()], + ).to_dict() + + def get_records(self, context): + import pandas as pd + + self.logger.info("Downloading KS4 national headlines: %s", _KS4_NATIONAL_CSV_URL) + resp = requests.get(_KS4_NATIONAL_CSV_URL, timeout=60) + resp.raise_for_status() + + df = pd.read_csv(io.BytesIO(resp.content), dtype=str, keep_default_na=False) + df.columns = [c.strip().lower() for c in df.columns] + + for col, want in [ + ("geographic_level", "national"), + ("establishment_type_group", "all state-funded"), + ("breakdown_topic", "total"), + ("breakdown", "total"), + ]: + if col in df.columns: + df = df[df[col].str.strip().str.lower() == want] + + self.logger.info("Emitting %d national KS4 rows", len(df)) + for _, row in df.iterrows(): + record = {"time_period": row.get("time_period", "").strip()} + for csv_col, field in _KS4_NATIONAL_COL_MAP.items(): + record[field] = row.get(csv_col, "").strip() + yield record + + # ── Legacy KS2 (pre-COVID wide format from DfE performance tables) ──────────── # The DfE "Compare School Performance" site published school-level KS2 CSVs # in a wide format (one row per school, ~300 columns). EES only has school-level @@ -903,6 +971,7 @@ class TapUKEES(Tap): LegacyKS2Stream(self), LegacyKS4Stream(self), EESKs2NationalStream(self), + EESKs4NationalStream(self), ] diff --git a/pipeline/transform/.user.yml b/pipeline/transform/.user.yml new file mode 100644 index 0000000..1f03a95 --- /dev/null +++ b/pipeline/transform/.user.yml @@ -0,0 +1 @@ +id: d8efb97e-d188-4585-899c-3ba2e484f763 diff --git a/pipeline/transform/logs/dbt.log b/pipeline/transform/logs/dbt.log new file mode 100644 index 0000000..867074b --- /dev/null +++ b/pipeline/transform/logs/dbt.log @@ -0,0 +1,294 @@ +22:17:04.566580 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} + + +============================== 22:17:04.568149 | a6b8403f-0ead-494c-bc76-2492aa4c9187 ============================== +22:17:04.568149 [info ] [MainThread]: Running with dbt=1.11.12 +22:17:04.568347 [debug] [MainThread]: running dbt with arguments {'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'partial_parse': 'True', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'debug': 'False', 'log_format': 'default', 'profiles_dir': '.', 'version_check': 'True', 'write_json': 'True', 'warn_error': 'None', 'invocation_command': 'dbt parse --profiles-dir .', 'static_parser': 'True', 'no_print': 'None', 'use_colors': 'True', 'log_cache_events': 'False', 'indirect_selection': 'eager', 'fail_fast': 'False', 'quiet': 'False', 'send_anonymous_usage_stats': 'True', 'printer_width': '80', 'introspect': 'True', 'empty': 'None', 'target_path': 'None', 'use_experimental_parser': 'False', 'cache_selected_only': 'False'} +22:17:04.615542 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'context': []} +22:17:04.631989 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'context': []} +22:17:04.632286 [info ] [MainThread]: Registered adapter: postgres=1.10.2 +22:17:04.667716 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 +22:17:04.668031 [info ] [MainThread]: Unable to do partial parsing because saved manifest not found. Starting full parse. +22:17:04.668152 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'partial_parser', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'context': []} +22:17:05.079216 [warn ] [MainThread]: [WARNING][PropertyMovedToConfigDeprecation]: Deprecated functionality +Found `severity` as a top-level property of `data_tests.not_null.severity` in +file `models/marts/_marts_schema.yml`. The `severity` top-level property should +be moved into the `config` of `data_tests.not_null.severity`. +22:17:05.079456 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'property_': 'warn', 'context': []} +22:17:05.080394 [warn ] [MainThread]: [WARNING][MissingArgumentsPropertyInGenericTestDeprecation]: Deprecated +functionality +Found top-level arguments to test `accepted_values` defined on 'dim_school' in +package 'school_compare' (models/marts/_marts_schema.yml). Arguments to generic +tests should be nested under the `arguments` property. +22:17:05.080506 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'property_': 'warn', 'context': []} +22:17:05.142077 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'context': []} +22:17:05.143319 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json +22:17:05.201433 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json +22:17:05.202316 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json +22:17:05.202527 [warn ] [MainThread]: [WARNING][DeprecationsSummary]: Deprecated functionality +Summary of encountered deprecations: +- PropertyMovedToConfigDeprecation: 4 occurrences +- MissingArgumentsPropertyInGenericTestDeprecation: 7 occurrences +To see all deprecation instances instead of just the first occurrence of each, +run command again with the `--show-all-deprecations` flag. You may also need to +run with `--no-partial-parse` as some deprecations are only encountered during +parsing. +22:17:05.202750 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.6586652, "process_in_blocks": "0", "process_kernel_time": 0.111809, "process_mem_max_rss": "135282688", "process_out_blocks": "0", "process_user_time": 0.996675} +22:17:05.202880 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 22:17:05.202853 after 0.66 seconds +22:17:05.202995 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} +22:17:05.203093 [debug] [MainThread]: Flushing usage events +22:17:05.735599 [debug] [MainThread]: An error was encountered while trying to flush usage events +08:22:12.701427 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} + + +============================== 08:22:12.703695 | 25902cd9-3a92-4695-a273-6c9f7b75e00c ============================== +08:22:12.703695 [info ] [MainThread]: Running with dbt=1.11.12 +08:22:12.703893 [debug] [MainThread]: running dbt with arguments {'invocation_command': 'dbt parse --profiles-dir .', 'version_check': 'True', 'cache_selected_only': 'False', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'printer_width': '80', 'fail_fast': 'False', 'use_colors': 'True', 'use_experimental_parser': 'False', 'partial_parse': 'True', 'introspect': 'True', 'indirect_selection': 'eager', 'quiet': 'False', 'log_format': 'default', 'write_json': 'True', 'no_print': 'None', 'log_cache_events': 'False', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'send_anonymous_usage_stats': 'True', 'debug': 'False', 'static_parser': 'True', 'empty': 'None', 'target_path': 'None', 'profiles_dir': '.', 'warn_error': 'None'} +08:22:12.771910 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '25902cd9-3a92-4695-a273-6c9f7b75e00c', 'context': []} +08:22:12.788094 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '25902cd9-3a92-4695-a273-6c9f7b75e00c', 'context': []} +08:22:12.788548 [info ] [MainThread]: Registered adapter: postgres=1.10.2 +08:22:12.827043 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 +08:22:12.890911 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 0 files added, 2 files changed. +08:22:12.891346 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/marts/_marts_schema.yml +08:22:12.891484 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/staging/stg_ees_ks4.sql +08:22:12.988494 [warn ] [MainThread]: [WARNING][MissingArgumentsPropertyInGenericTestDeprecation]: Deprecated +functionality +Found top-level arguments to test `accepted_values` defined on +'fact_ks4_performance' in package 'school_compare' +(models/marts/_marts_schema.yml). Arguments to generic tests should be nested +under the `arguments` property. +08:22:12.988725 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': '25902cd9-3a92-4695-a273-6c9f7b75e00c', 'property_': 'warn', 'context': []} +08:22:13.042439 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '25902cd9-3a92-4695-a273-6c9f7b75e00c', 'context': []} +08:22:13.043787 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json +08:22:13.078667 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json +08:22:13.080427 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json +08:22:13.080615 [warn ] [MainThread]: [WARNING][DeprecationsSummary]: Deprecated functionality +Summary of encountered deprecations: +- MissingArgumentsPropertyInGenericTestDeprecation: 1 occurrence +To see all deprecation instances instead of just the first occurrence of each, +run command again with the `--show-all-deprecations` flag. You may also need to +run with `--no-partial-parse` as some deprecations are only encountered during +parsing. +08:22:13.080836 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.40608904, "process_in_blocks": "0", "process_kernel_time": 0.134857, "process_mem_max_rss": "132857856", "process_out_blocks": "0", "process_user_time": 0.702112} +08:22:13.080968 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 08:22:13.080942 after 0.41 seconds +08:22:13.081074 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} +08:22:13.081172 [debug] [MainThread]: Flushing usage events +08:22:13.497827 [debug] [MainThread]: An error was encountered while trying to flush usage events +08:22:21.654274 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} + + +============================== 08:22:21.655842 | 88cd4db0-05ef-4377-87e9-c27e9801255b ============================== +08:22:21.655842 [info ] [MainThread]: Running with dbt=1.11.12 +08:22:21.656036 [debug] [MainThread]: running dbt with arguments {'no_print': 'None', 'introspect': 'True', 'debug': 'False', 'indirect_selection': 'eager', 'log_cache_events': 'False', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'fail_fast': 'False', 'send_anonymous_usage_stats': 'True', 'profiles_dir': '.', 'printer_width': '80', 'warn_error': 'None', 'partial_parse': 'True', 'static_parser': 'True', 'quiet': 'False', 'write_json': 'True', 'use_experimental_parser': 'False', 'version_check': 'True', 'empty': 'None', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'cache_selected_only': 'False', 'log_format': 'default', 'invocation_command': 'dbt parse --profiles-dir .', 'target_path': 'None', 'use_colors': 'True'} +08:22:21.706619 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '88cd4db0-05ef-4377-87e9-c27e9801255b', 'context': []} +08:22:21.724467 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '88cd4db0-05ef-4377-87e9-c27e9801255b', 'context': []} +08:22:21.724916 [info ] [MainThread]: Registered adapter: postgres=1.10.2 +08:22:21.761988 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 +08:22:21.811784 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 0 files added, 0 files changed. +08:22:21.811980 [debug] [MainThread]: Nothing changed, skipping partial parsing. +08:22:21.812068 [debug] [MainThread]: Partial parsing enabled, no changes found, skipping parsing +08:22:21.831419 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '88cd4db0-05ef-4377-87e9-c27e9801255b', 'context': []} +08:22:21.834895 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json +08:22:21.872310 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json +08:22:21.873270 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json +08:22:21.873537 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.24312946, "process_in_blocks": "0", "process_kernel_time": 0.106534, "process_mem_max_rss": "125960192", "process_out_blocks": "0", "process_user_time": 0.617116} +08:22:21.873695 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 08:22:21.873662 after 0.24 seconds +08:22:21.873825 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} +08:22:21.873930 [debug] [MainThread]: Flushing usage events +08:22:22.309014 [debug] [MainThread]: An error was encountered while trying to flush usage events +08:42:39.581769 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} + + +============================== 08:42:39.583995 | 14cee99c-c61b-4745-bfdf-db4edcb73881 ============================== +08:42:39.583995 [info ] [MainThread]: Running with dbt=1.11.12 +08:42:39.584207 [debug] [MainThread]: running dbt with arguments {'debug': 'False', 'empty': 'None', 'indirect_selection': 'eager', 'fail_fast': 'False', 'invocation_command': 'dbt parse --profiles-dir .', 'version_check': 'True', 'quiet': 'False', 'log_cache_events': 'False', 'write_json': 'True', 'log_format': 'default', 'target_path': 'None', 'static_parser': 'True', 'partial_parse': 'True', 'warn_error': 'None', 'printer_width': '80', 'use_experimental_parser': 'False', 'send_anonymous_usage_stats': 'True', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'cache_selected_only': 'False', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'use_colors': 'True', 'introspect': 'True', 'no_print': 'None', 'profiles_dir': '.'} +08:42:39.642292 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '14cee99c-c61b-4745-bfdf-db4edcb73881', 'context': []} +08:42:39.658889 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '14cee99c-c61b-4745-bfdf-db4edcb73881', 'context': []} +08:42:39.659445 [info ] [MainThread]: Registered adapter: postgres=1.10.2 +08:42:39.697585 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 +08:42:39.759748 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 0 files added, 2 files changed. +08:42:39.760099 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/staging/stg_legacy_ks2.sql +08:42:39.760226 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/intermediate/int_ks2_with_lineage.sql +08:42:39.845972 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '14cee99c-c61b-4745-bfdf-db4edcb73881', 'context': []} +08:42:39.847206 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json +08:42:39.903495 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json +08:42:39.905863 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json +08:42:39.906095 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.3489076, "process_in_blocks": "0", "process_kernel_time": 0.123806, "process_mem_max_rss": "129925120", "process_out_blocks": "0", "process_user_time": 0.678581} +08:42:39.906230 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 08:42:39.906202 after 0.35 seconds +08:42:39.906338 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} +08:42:39.906440 [debug] [MainThread]: Flushing usage events +08:42:40.369573 [debug] [MainThread]: An error was encountered while trying to flush usage events +15:46:41.844088 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} + + +============================== 15:46:41.848473 | 721329d8-fb54-4cf3-9b56-85d8b276dc71 ============================== +15:46:41.848473 [info ] [MainThread]: Running with dbt=1.11.12 +15:46:41.848910 [debug] [MainThread]: running dbt with arguments {'static_parser': 'True', 'indirect_selection': 'eager', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'target_path': 'None', 'log_format': 'default', 'warn_error': 'None', 'no_print': 'None', 'invocation_command': 'dbt parse --profiles-dir .', 'introspect': 'True', 'profiles_dir': '.', 'write_json': 'True', 'partial_parse': 'True', 'send_anonymous_usage_stats': 'True', 'printer_width': '80', 'empty': 'None', 'use_experimental_parser': 'False', 'log_cache_events': 'False', 'version_check': 'True', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'use_colors': 'True', 'debug': 'False', 'fail_fast': 'False', 'cache_selected_only': 'False', 'quiet': 'False'} +15:46:41.980957 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '721329d8-fb54-4cf3-9b56-85d8b276dc71', 'context': []} +15:46:42.016972 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '721329d8-fb54-4cf3-9b56-85d8b276dc71', 'context': []} +15:46:42.018032 [info ] [MainThread]: Registered adapter: postgres=1.10.2 +15:46:42.095204 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 +15:46:42.218385 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 0 files added, 1 files changed. +15:46:42.219081 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/marts/fact_performance.sql +15:46:42.526466 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '721329d8-fb54-4cf3-9b56-85d8b276dc71', 'context': []} +15:46:42.529480 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json +15:46:42.606448 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json +15:46:42.608498 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json +15:46:42.609039 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.81911224, "process_in_blocks": "0", "process_kernel_time": 0.299951, "process_mem_max_rss": "132186112", "process_out_blocks": "0", "process_user_time": 1.506381} +15:46:42.609313 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 15:46:42.609252 after 0.82 seconds +15:46:42.609523 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} +15:46:42.609727 [debug] [MainThread]: Flushing usage events +15:46:43.146552 [debug] [MainThread]: An error was encountered while trying to flush usage events +18:48:43.630692 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} + + +============================== 18:48:43.634897 | 6f3c22f1-ca3a-438c-b33b-0ec6cd226f50 ============================== +18:48:43.634897 [info ] [MainThread]: Running with dbt=1.11.12 +18:48:43.635313 [debug] [MainThread]: running dbt with arguments {'profiles_dir': '.', 'log_format': 'default', 'use_experimental_parser': 'False', 'fail_fast': 'False', 'quiet': 'False', 'use_colors': 'True', 'partial_parse': 'True', 'introspect': 'True', 'printer_width': '80', 'log_cache_events': 'False', 'warn_error': 'None', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'version_check': 'True', 'no_print': 'None', 'indirect_selection': 'eager', 'debug': 'False', 'send_anonymous_usage_stats': 'True', 'static_parser': 'True', 'cache_selected_only': 'False', 'write_json': 'True', 'invocation_command': 'dbt parse --profiles-dir .', 'target_path': 'None', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'empty': 'None'} +18:48:43.757089 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '6f3c22f1-ca3a-438c-b33b-0ec6cd226f50', 'context': []} +18:48:43.792618 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '6f3c22f1-ca3a-438c-b33b-0ec6cd226f50', 'context': []} +18:48:43.793544 [info ] [MainThread]: Registered adapter: postgres=1.10.2 +18:48:43.871751 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 +18:48:43.998163 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 0 files added, 0 files changed. +18:48:43.998480 [debug] [MainThread]: Nothing changed, skipping partial parsing. +18:48:43.998646 [debug] [MainThread]: Partial parsing enabled, no changes found, skipping parsing +18:48:44.038143 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '6f3c22f1-ca3a-438c-b33b-0ec6cd226f50', 'context': []} +18:48:44.040323 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json +18:48:44.117414 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json +18:48:44.120049 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json +18:48:44.120567 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.54391706, "process_in_blocks": "0", "process_kernel_time": 0.253091, "process_mem_max_rss": "125927424", "process_out_blocks": "0", "process_user_time": 1.258876} +18:48:44.120854 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 18:48:44.120790 after 0.54 seconds +18:48:44.121082 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} +18:48:44.121285 [debug] [MainThread]: Flushing usage events +18:48:44.644908 [debug] [MainThread]: An error was encountered while trying to flush usage events +13:02:43.139124 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} + + +============================== 13:02:43.144856 | efc5f728-37e4-4fa6-95c3-c1f95df270dc ============================== +13:02:43.144856 [info ] [MainThread]: Running with dbt=1.11.12 +13:02:43.145618 [debug] [MainThread]: running dbt with arguments {'profiles_dir': '.', 'invocation_command': 'dbt parse --profiles-dir .', 'version_check': 'True', 'no_print': 'None', 'cache_selected_only': 'False', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'send_anonymous_usage_stats': 'True', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'quiet': 'False', 'use_experimental_parser': 'False', 'indirect_selection': 'eager', 'warn_error': 'None', 'introspect': 'True', 'target_path': 'None', 'static_parser': 'True', 'printer_width': '80', 'use_colors': 'True', 'write_json': 'True', 'debug': 'False', 'empty': 'None', 'fail_fast': 'False', 'log_format': 'default', 'partial_parse': 'True', 'log_cache_events': 'False'} +13:02:43.349884 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': 'efc5f728-37e4-4fa6-95c3-c1f95df270dc', 'context': []} +13:02:43.403392 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': 'efc5f728-37e4-4fa6-95c3-c1f95df270dc', 'context': []} +13:02:43.406778 [info ] [MainThread]: Registered adapter: postgres=1.10.2 +13:02:43.519932 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 +13:02:43.686225 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 1 files added, 1 files changed. +13:02:43.687063 [debug] [MainThread]: Partial parsing: added file: school_compare://models/marts/fact_ks4_national_averages.sql +13:02:43.687687 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/marts/_marts_schema.yml +13:02:44.106801 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': 'efc5f728-37e4-4fa6-95c3-c1f95df270dc', 'context': []} +13:02:44.110827 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json +13:02:44.211152 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json +13:02:44.213866 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json +13:02:44.214469 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 1.1430293, "process_in_blocks": "0", "process_kernel_time": 0.439532, "process_mem_max_rss": "132464640", "process_out_blocks": "0", "process_user_time": 1.983706} +13:02:44.214778 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 13:02:44.214714 after 1.14 seconds +13:02:44.215029 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} +13:02:44.215286 [debug] [MainThread]: Flushing usage events +13:02:44.594244 [debug] [MainThread]: An error was encountered while trying to flush usage events +14:44:31.378170 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} + + +============================== 14:44:31.409964 | 944d7fc7-e4b3-4553-bb9c-7709a72e5adb ============================== +14:44:31.409964 [info ] [MainThread]: Running with dbt=1.11.12 +14:44:31.410683 [debug] [MainThread]: running dbt with arguments {'empty': 'None', 'no_print': 'None', 'warn_error': 'None', 'log_cache_events': 'False', 'use_colors': 'True', 'send_anonymous_usage_stats': 'True', 'target_path': 'None', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'version_check': 'True', 'profiles_dir': '.', 'log_format': 'default', 'cache_selected_only': 'False', 'introspect': 'True', 'use_experimental_parser': 'False', 'debug': 'False', 'printer_width': '80', 'static_parser': 'True', 'partial_parse': 'True', 'fail_fast': 'False', 'write_json': 'True', 'indirect_selection': 'eager', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'quiet': 'False', 'invocation_command': 'dbt parse --profiles-dir .'} +14:44:33.887704 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '944d7fc7-e4b3-4553-bb9c-7709a72e5adb', 'context': []} +14:44:33.937929 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '944d7fc7-e4b3-4553-bb9c-7709a72e5adb', 'context': []} +14:44:33.939906 [info ] [MainThread]: Registered adapter: postgres=1.10.2 +14:44:34.042035 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 +14:44:34.197977 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 1 files added, 4 files changed. +14:44:34.198649 [debug] [MainThread]: Partial parsing: added file: dbt://macros/adapters/runtime.sql +14:44:34.198997 [debug] [MainThread]: Partial parsing: updated file: dbt://macros/get_custom_name/get_custom_database.sql +14:44:34.199285 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/staging/stg_ofsted_inspections.sql +14:44:34.199603 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/marts/fact_ofsted_inspection.sql +14:44:34.199873 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/intermediate/int_ofsted_latest.sql +14:44:34.565891 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '944d7fc7-e4b3-4553-bb9c-7709a72e5adb', 'context': []} +14:44:34.570071 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json +14:44:34.729135 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json +14:44:34.732116 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json +14:44:34.732862 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 3.4214325, "process_in_blocks": "0", "process_kernel_time": 0.845861, "process_mem_max_rss": "154664960", "process_out_blocks": "0", "process_user_time": 3.50279} +14:44:34.733331 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 14:44:34.733239 after 3.42 seconds +14:44:34.733686 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} +14:44:34.733997 [debug] [MainThread]: Flushing usage events +14:44:35.152478 [debug] [MainThread]: An error was encountered while trying to flush usage events +19:03:53.808379 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} + + +============================== 19:03:53.821579 | 716689a2-6ae9-48c1-b309-3b58930321dc ============================== +19:03:53.821579 [info ] [MainThread]: Running with dbt=1.12.0 +19:03:53.821807 [debug] [MainThread]: running dbt with arguments {'target_path': 'None', 'invocation_command': 'dbt parse --profiles-dir .', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'hints_enabled': 'True', 'quiet': 'False', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'version_check': 'True', 'printer_width': '80', 'fail_fast': 'False', 'introspect': 'True', 'warn_error': 'None', 'cache_selected_only': 'False', 'indirect_selection': 'eager', 'maximum_seed_size_mib': '1', 'profiles_dir': '.', 'log_cache_events': 'False', 'write_json': 'True', 'no_print': 'None', 'use_colors': 'True', 'debug': 'False', 'static_parser': 'True', 'empty': 'None', 'send_anonymous_usage_stats': 'True', 'log_format': 'default', 'partial_parse': 'True', 'use_experimental_parser': 'False'} +19:03:55.079180 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'context': []} +19:03:55.098573 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'context': []} +19:03:55.099437 [info ] [MainThread]: Registered adapter: postgres=1.11.0 +19:03:55.140959 [debug] [MainThread]: checksum: 67b34be33115abb132a386d054767a080c4d76fc101bebe6b4f686156fa47e48, vars: {}, profile: school_compare, target: dev, version: 1.12.0 +19:03:55.184556 [info ] [MainThread]: Unable to do partial parsing because of a version mismatch +19:03:55.184766 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'partial_parser', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'context': []} +19:03:55.675944 [warn ] [MainThread]: [WARNING][PropertyMovedToConfigDeprecation]: Deprecated functionality +Found `severity` as a top-level property of `data_tests.not_null.severity` in +file `models/marts/_marts_schema.yml`. The `severity` top-level property should +be moved into the `config` of `data_tests.not_null.severity`. +19:03:55.676206 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'property_': 'warn', 'context': []} +19:03:55.677401 [warn ] [MainThread]: [WARNING][MissingArgumentsPropertyInGenericTestDeprecation]: Deprecated +functionality +Found top-level arguments to test `accepted_values` defined on 'dim_school' in +package 'school_compare' (models/marts/_marts_schema.yml). Arguments to generic +tests should be nested under the `arguments` property. +19:03:55.677534 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'property_': 'warn', 'context': []} +19:03:55.748942 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'context': []} +19:03:55.750611 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json +19:03:55.820228 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json +19:03:55.822037 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json +19:03:55.840087 [debug] [MainThread]: Wrote artifact OsiDocument to /Users/tudor/projects/school_compare/pipeline/transform/target/osi_document.json +19:03:55.840391 [warn ] [MainThread]: [WARNING][DeprecationsSummary]: Deprecated functionality +Summary of encountered deprecations: +- PropertyMovedToConfigDeprecation: 4 occurrences +- MissingArgumentsPropertyInGenericTestDeprecation: 7 occurrences +To see all deprecation instances instead of just the first occurrence of each, +run command again with the `--show-all-deprecations` flag. You may also need to +run with `--no-partial-parse` as some deprecations are only encountered during +parsing. +19:03:55.840646 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 2.064521, "process_in_blocks": "0", "process_kernel_time": 0.314306, "process_mem_max_rss": "181239808", "process_out_blocks": "0", "process_user_time": 1.929906} +19:03:55.840808 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 19:03:55.840776 after 2.06 seconds +19:03:55.840941 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} +19:03:55.841067 [debug] [MainThread]: Flushing usage events +19:03:56.468885 [debug] [MainThread]: An error was encountered while trying to flush usage events +19:07:36.556151 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} + + +============================== 19:07:36.558168 | eb0bb5d4-b111-46cf-9b81-5e2f74744337 ============================== +19:07:36.558168 [info ] [MainThread]: Running with dbt=1.12.0 +19:07:36.558368 [debug] [MainThread]: running dbt with arguments {'send_anonymous_usage_stats': 'True', 'version_check': 'True', 'profiles_dir': '.', 'use_experimental_parser': 'False', 'empty': 'None', 'fail_fast': 'False', 'target_path': 'None', 'log_format': 'default', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'printer_width': '80', 'maximum_seed_size_mib': '1', 'indirect_selection': 'eager', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'invocation_command': 'dbt parse --profiles-dir .', 'no_print': 'None', 'log_cache_events': 'False', 'debug': 'False', 'cache_selected_only': 'False', 'static_parser': 'True', 'quiet': 'False', 'partial_parse': 'True', 'hints_enabled': 'True', 'introspect': 'True', 'warn_error': 'None', 'write_json': 'True', 'use_colors': 'True'} +19:07:36.618364 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': 'eb0bb5d4-b111-46cf-9b81-5e2f74744337', 'context': []} +19:07:36.636294 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': 'eb0bb5d4-b111-46cf-9b81-5e2f74744337', 'context': []} +19:07:36.636932 [info ] [MainThread]: Registered adapter: postgres=1.11.0 +19:07:36.677947 [debug] [MainThread]: checksum: 67b34be33115abb132a386d054767a080c4d76fc101bebe6b4f686156fa47e48, vars: {}, profile: school_compare, target: dev, version: 1.12.0 +19:07:36.747220 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 1 files added, 2 files changed. +19:07:36.747561 [debug] [MainThread]: Partial parsing: added file: school_compare://models/staging/stg_ees_ks4_national.sql +19:07:36.748386 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/staging/_stg_sources.yml +19:07:36.748507 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/marts/fact_ks4_national_averages.sql +19:07:36.981758 [warn ] [MainThread]: [WARNING][MissingArgumentsPropertyInGenericTestDeprecation]: Deprecated +functionality +Found top-level arguments to test `relationships` defined on 'dim_location' in +package 'school_compare' (models/marts/_marts_schema.yml). Arguments to generic +tests should be nested under the `arguments` property. +19:07:36.982033 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': 'eb0bb5d4-b111-46cf-9b81-5e2f74744337', 'property_': 'warn', 'context': []} +19:07:36.989319 [warn ] [MainThread]: [WARNING][PropertyMovedToConfigDeprecation]: Deprecated functionality +Found `severity` as a top-level property of `data_tests.not_null.severity` in +file `models/marts/_marts_schema.yml`. The `severity` top-level property should +be moved into the `config` of `data_tests.not_null.severity`. +19:07:36.989498 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': 'eb0bb5d4-b111-46cf-9b81-5e2f74744337', 'property_': 'warn', 'context': []} +19:07:37.071622 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': 'eb0bb5d4-b111-46cf-9b81-5e2f74744337', 'context': []} +19:07:37.072886 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json +19:07:37.113602 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json +19:07:37.114788 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json +19:07:37.123055 [debug] [MainThread]: Wrote artifact OsiDocument to /Users/tudor/projects/school_compare/pipeline/transform/target/osi_document.json +19:07:37.123294 [warn ] [MainThread]: [WARNING][DeprecationsSummary]: Deprecated functionality +Summary of encountered deprecations: +- MissingArgumentsPropertyInGenericTestDeprecation: 7 occurrences +- PropertyMovedToConfigDeprecation: 4 occurrences +To see all deprecation instances instead of just the first occurrence of each, +run command again with the `--show-all-deprecations` flag. You may also need to +run with `--no-partial-parse` as some deprecations are only encountered during +parsing. +19:07:37.123506 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.59700793, "process_in_blocks": "0", "process_kernel_time": 0.129478, "process_mem_max_rss": "146587648", "process_out_blocks": "0", "process_user_time": 0.936024} +19:07:37.123650 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 19:07:37.123622 after 0.60 seconds +19:07:37.123768 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} +19:07:37.123876 [debug] [MainThread]: Flushing usage events +19:07:37.533590 [debug] [MainThread]: An error was encountered while trying to flush usage events diff --git a/pipeline/transform/models/marts/fact_ks4_national_averages.sql b/pipeline/transform/models/marts/fact_ks4_national_averages.sql index 5022332..3a897e5 100644 --- a/pipeline/transform/models/marts/fact_ks4_national_averages.sql +++ b/pipeline/transform/models/marts/fact_ks4_national_averages.sql @@ -1,25 +1,22 @@ {{ config(materialized='table') }} --- Mart: Computed national KS4 averages — one row per academic year. --- Unlike fact_ks2_national_averages (official DfE figures), DfE publishes no --- KS4 national-headline dataset we ingest yet, so these are means computed --- across the state schools in our dataset. Computed once at build time so the --- API never has to aggregate the full performance table per request. --- Semantics match the API's previous per-request computation: rows where --- attainment_8_score is non-null; per-column means ignore NULLs. +-- Mart: OFFICIAL DfE KS4 national headline averages — one row per academic +-- year (England, state-funded, all pupils), from the EES national dataset. +-- Replaces the previous unweighted school-level means, which were 7–15 +-- points off every headline measure and produced an arithmetically +-- impossible national Progress 8. gcse_grade_91_pct has no official +-- national series and is NULL (schema kept for the API model). select year, - round(avg(attainment_8_score)::numeric, 2) as attainment_8_score, - round(avg(progress_8_score)::numeric, 2) as progress_8_score, - round(avg(english_maths_standard_pass_pct)::numeric, 2) as english_maths_standard_pass_pct, - round(avg(english_maths_strong_pass_pct)::numeric, 2) as english_maths_strong_pass_pct, - round(avg(ebacc_entry_pct)::numeric, 2) as ebacc_entry_pct, - round(avg(ebacc_standard_pass_pct)::numeric, 2) as ebacc_standard_pass_pct, - round(avg(ebacc_strong_pass_pct)::numeric, 2) as ebacc_strong_pass_pct, - round(avg(ebacc_avg_score)::numeric, 2) as ebacc_avg_score, - round(avg(gcse_grade_91_pct)::numeric, 2) as gcse_grade_91_pct -from {{ ref('fact_ks4_performance') }} -where attainment_8_score is not null -group by year + attainment_8_score, + progress_8_score, + english_maths_standard_pass_pct, + english_maths_strong_pass_pct, + ebacc_entry_pct, + ebacc_standard_pass_pct, + ebacc_strong_pass_pct, + ebacc_avg_score, + cast(null as double precision) as gcse_grade_91_pct +from {{ ref('stg_ees_ks4_national') }} order by year diff --git a/pipeline/transform/models/staging/_stg_sources.yml b/pipeline/transform/models/staging/_stg_sources.yml index da78f36..b390790 100644 --- a/pipeline/transform/models/staging/_stg_sources.yml +++ b/pipeline/transform/models/staging/_stg_sources.yml @@ -51,6 +51,9 @@ sources: - name: ees_ks2_national description: KS2 national headline averages from DfE EES data catalogue — one row per academic year + - name: ees_ks4_national + description: Official KS4 national headline averages from DfE EES data catalogue — one row per academic year + # Phonics: no school-level data on EES (only national/LA level) - name: fbit_finance diff --git a/pipeline/transform/models/staging/stg_ees_ks4_national.sql b/pipeline/transform/models/staging/stg_ees_ks4_national.sql new file mode 100644 index 0000000..57ec5c1 --- /dev/null +++ b/pipeline/transform/models/staging/stg_ees_ks4_national.sql @@ -0,0 +1,20 @@ +{{ config(materialized='table') }} + +-- Staging model: official DfE KS4 national headline averages — one row per +-- academic year (England, all state-funded, all pupils). Source: EES data +-- catalogue "National characteristics summary data". Suppressed values +-- ('z', 'x') are coerced to NULL by safe_numeric — Progress 8 is 'z' in +-- years with no KS2 baseline (e.g. 2024/25): legitimately unpublished. + +select + cast(trim(time_period) as integer) as year, + {{ safe_numeric('attainment_8_score') }} as attainment_8_score, + {{ safe_numeric('progress_8_score') }} as progress_8_score, + {{ safe_numeric('english_maths_standard_pass_pct') }} as english_maths_standard_pass_pct, + {{ safe_numeric('english_maths_strong_pass_pct') }} as english_maths_strong_pass_pct, + {{ safe_numeric('ebacc_entry_pct') }} as ebacc_entry_pct, + {{ safe_numeric('ebacc_standard_pass_pct') }} as ebacc_standard_pass_pct, + {{ safe_numeric('ebacc_strong_pass_pct') }} as ebacc_strong_pass_pct, + {{ safe_numeric('ebacc_avg_score') }} as ebacc_avg_score +from {{ source('raw', 'ees_ks4_national') }} +where time_period ~ '^[0-9]+$' diff --git a/pipeline/transform/target/manifest.json b/pipeline/transform/target/manifest.json new file mode 100644 index 0000000..1b76dca --- /dev/null +++ b/pipeline/transform/target/manifest.json @@ -0,0 +1 @@ +{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v12.json", "dbt_version": "1.12.0", "generated_at": "2026-07-16T18:07:36.722776Z", "invocation_id": "eb0bb5d4-b111-46cf-9b81-5e2f74744337", "invocation_started_at": "2026-07-16T18:03:53.796839+00:00", "env": {}, "project_name": "school_compare", "project_id": "ad0b158e159ec53d890c04c6537e7574", "user_id": "d8efb97e-d188-4585-899c-3ba2e484f763", "send_anonymous_usage_stats": true, "adapter_type": "postgres", "quoting": {"database": true, "schema": true, "identifier": true, "column": null}, "run_started_at": "2026-07-16T18:03:53.796964+00:00"}, "nodes": {"seed.school_compare.la_code_names": {"database": "school_compare", "schema": "seeds", "name": "la_code_names", "resource_type": "seed", "package_name": "school_compare", "path": "la_code_names.csv", "original_file_path": "seeds/la_code_names.csv", "unique_id": "seed.school_compare.la_code_names", "fqn": ["school_compare", "la_code_names"], "alias": "la_code_names", "checksum": {"name": "sha256", "checksum": "a3924c9bda3cb6be5f85832b0744c21935a4e006bc9e2d71ca03b075157abe8e"}, "config": {"enabled": true, "alias": null, "schema": "seeds", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "seeds"}, "created_at": 1784225035.5701702, "relation_name": "\"school_compare\".\"seeds\".\"la_code_names\"", "raw_code": "", "doc_blocks": [], "root_path": "/Users/tudor/projects/school_compare/pipeline/transform", "depends_on": {"macros": []}}, "seed.school_compare.gias_code_names": {"database": "school_compare", "schema": "seeds", "name": "gias_code_names", "resource_type": "seed", "package_name": "school_compare", "path": "gias_code_names.csv", "original_file_path": "seeds/gias_code_names.csv", "unique_id": "seed.school_compare.gias_code_names", "fqn": ["school_compare", "gias_code_names"], "alias": "gias_code_names", "checksum": {"name": "sha256", "checksum": "be09e2443f1d0d9ed3d0f8637ae38183e63b9e40c208e8684993e17ac5f2903b"}, "config": {"enabled": true, "alias": null, "schema": "seeds", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "seeds"}, "created_at": 1784225035.5709639, "relation_name": "\"school_compare\".\"seeds\".\"gias_code_names\"", "raw_code": "", "doc_blocks": [], "root_path": "/Users/tudor/projects/school_compare/pipeline/transform", "depends_on": {"macros": []}}, "seed.school_compare.school_type_codes": {"database": "school_compare", "schema": "seeds", "name": "school_type_codes", "resource_type": "seed", "package_name": "school_compare", "path": "school_type_codes.csv", "original_file_path": "seeds/school_type_codes.csv", "unique_id": "seed.school_compare.school_type_codes", "fqn": ["school_compare", "school_type_codes"], "alias": "school_type_codes", "checksum": {"name": "sha256", "checksum": "6020353ed39356287495de70fd2b44bed411ef059b2e61b0136c0faf3c9769cf"}, "config": {"enabled": true, "alias": null, "schema": "seeds", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "seeds"}, "created_at": 1784225035.5715232, "relation_name": "\"school_compare\".\"seeds\".\"school_type_codes\"", "raw_code": "", "doc_blocks": [], "root_path": "/Users/tudor/projects/school_compare/pipeline/transform", "depends_on": {"macros": []}}, "model.school_compare.stg_ees_ks4_national": {"database": "school_compare", "schema": "staging", "name": "stg_ees_ks4_national", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_ks4_national.sql", "original_file_path": "models/staging/stg_ees_ks4_national.sql", "unique_id": "model.school_compare.stg_ees_ks4_national", "fqn": ["school_compare", "staging", "stg_ees_ks4_national"], "alias": "stg_ees_ks4_national", "checksum": {"name": "sha256", "checksum": "cdc96082b585ef4940e4d3950a129f9c2a3fec9b10a2261be885f9e59a4c6be8"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.821694, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_ks4_national\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: official DfE KS4 national headline averages \u2014 one row per\n-- academic year (England, all state-funded, all pupils). Source: EES data\n-- catalogue \"National characteristics summary data\". Suppressed values\n-- ('z', 'x') are coerced to NULL by safe_numeric \u2014 Progress 8 is 'z' in\n-- years with no KS2 baseline (e.g. 2024/25): legitimately unpublished.\n\nselect\n cast(trim(time_period) as integer) as year,\n {{ safe_numeric('attainment_8_score') }} as attainment_8_score,\n {{ safe_numeric('progress_8_score') }} as progress_8_score,\n {{ safe_numeric('english_maths_standard_pass_pct') }} as english_maths_standard_pass_pct,\n {{ safe_numeric('english_maths_strong_pass_pct') }} as english_maths_strong_pass_pct,\n {{ safe_numeric('ebacc_entry_pct') }} as ebacc_entry_pct,\n {{ safe_numeric('ebacc_standard_pass_pct') }} as ebacc_standard_pass_pct,\n {{ safe_numeric('ebacc_strong_pass_pct') }} as ebacc_strong_pass_pct,\n {{ safe_numeric('ebacc_avg_score') }} as ebacc_avg_score\nfrom {{ source('raw', 'ees_ks4_national') }}\nwhere time_period ~ '^[0-9]+$'", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_ks4_national"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_ks4_national"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.dim_location": {"database": "school_compare", "schema": "marts", "name": "dim_location", "resource_type": "model", "package_name": "school_compare", "path": "marts/dim_location.sql", "original_file_path": "models/marts/dim_location.sql", "unique_id": "model.school_compare.dim_location", "fqn": ["school_compare", "marts", "dim_location"], "alias": "dim_location", "checksum": {"name": "sha256", "checksum": "d52fb2b99be90d6fa3c9e3e4f75b5f1bf872450a5e4460aea47d6e9dd6d1d210"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "School location dimension with PostGIS geometry", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "postcode": {"name": "postcode", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.955647, "relation_name": "\"school_compare\".\"marts\".\"dim_location\"", "raw_code": "-- Mart: School location dimension \u2014 one row per URN, PostGIS-enabled\n-- Geometry derived from GIAS easting/northing (British National Grid \u2192 WGS84).\n-- For schools missing easting/northing, the geocode script backfills via Postcodes.io.\n\nselect\n s.urn,\n s.address_line1,\n s.address_line2,\n s.town,\n s.county,\n s.postcode,\n s.local_authority_code,\n s.local_authority_name,\n s.parliamentary_constituency,\n s.urban_rural,\n s.easting,\n s.northing,\n case\n when s.easting is not null and s.northing is not null\n then ST_Transform(ST_SetSRID(ST_MakePoint(s.easting::double precision, s.northing::double precision), 27700), 4326)\n else null\n end as geom,\n case\n when s.easting is not null and s.northing is not null\n then ST_Y(ST_Transform(ST_SetSRID(ST_MakePoint(s.easting::double precision, s.northing::double precision), 27700), 4326))\n else null\n end as latitude,\n case\n when s.easting is not null and s.northing is not null\n then ST_X(ST_Transform(ST_SetSRID(ST_MakePoint(s.easting::double precision, s.northing::double precision), 27700), 4326))\n else null\n end as longitude\nfrom {{ ref('stg_gias_establishments') }} s\n-- Must match dim_school's status filter exactly (the API inner-joins the two).\nwhere s.status_code in (1, 3)", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_gias_establishments", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_gias_establishments"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn"], "time_spine": null}, "model.school_compare.dim_school": {"database": "school_compare", "schema": "marts", "name": "dim_school", "resource_type": "model", "package_name": "school_compare", "path": "marts/dim_school.sql", "original_file_path": "models/marts/dim_school.sql", "unique_id": "model.school_compare.dim_school", "fqn": ["school_compare", "marts", "dim_school"], "alias": "dim_school", "checksum": {"name": "sha256", "checksum": "116be1472b8a5ef306d333ad7aec953f47ae184f8ceb8af7bab9770133b7a913"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Canonical school dimension \u2014 one row per active URN", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "school_name": {"name": "school_name", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "phase_code": {"name": "phase_code", "description": "GIAS PhaseOfEducation code (2 = Primary, 4 = Secondary, 7 = All-through, etc. \u2014 see seeds/gias_code_names.csv). May be null for a small number of independent schools where GIAS publishes \"Not Applicable\", no statutory age range, and the school name gives no hint.\n", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "has_sixth_form": {"name": "has_sixth_form", "description": "Authoritative sixth-form flag from GIAS OfficialSixthForm. \"Has a sixth form\" => true; \"Does not have a sixth form\" and \"Not applicable\" => false; blank GIAS value falls back to statutory_high_age >= 18. Replaces the age_range-contains-\"18\" heuristic (spec 2026-07-07 \u00a73).\n", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "status_code": {"name": "status_code", "description": "GIAS EstablishmentStatus code (1 = Open, 3 = Open but proposed to close)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "school_type_code": {"name": "school_type_code", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "religious_character_code": {"name": "religious_character_code", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "admissions_policy_code": {"name": "admissions_policy_code", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.956583, "relation_name": "\"school_compare\".\"marts\".\"dim_school\"", "raw_code": "-- Mart: Canonical school dimension \u2014 one row per active URN\n\n-- int_ofsted_latest is only ref()'d inside a conditional block below (it may not\n-- exist before the Ofsted pipeline first runs), so declare the dependency\n-- explicitly for dbt's DAG.\n-- depends_on: {{ ref('int_ofsted_latest') }}\n\nwith schools as (\n select * from {{ ref('stg_gias_establishments') }}\n)\n\n{% set ofsted_relation = adapter.get_relation(\n database=target.database,\n schema='intermediate',\n identifier='int_ofsted_latest'\n) %}\n\nselect\n s.urn,\n s.local_authority_code * 1000 + s.establishment_number as laestab,\n s.school_name,\n -- Phase in GIAS code space (see seeds/gias_code_names.csv):\n -- 2 = Primary, 4 = Secondary, 7 = All-through, 0 = Not applicable.\n case\n -- 1. Trust GIAS phase when it's a real value (0 = the catch-all \"Not Applicable\")\n when s.phase_code is not null and s.phase_code != 0\n then s.phase_code\n -- 2. Infer from statutory age range (independent schools still publish these)\n when s.statutory_high_age is not null and s.statutory_high_age <= 11 then 2\n when s.statutory_low_age is not null and s.statutory_low_age >= 11 then 4\n when s.statutory_low_age is not null and s.statutory_high_age is not null\n and s.statutory_low_age < 11 and s.statutory_high_age > 11 then 7\n -- 3. Fallback: infer from school name (covers independents with missing ages)\n when s.school_name ilike '%primary%'\n or s.school_name ilike '%infant%'\n or s.school_name ilike '%junior%'\n or s.school_name ilike '%preparatory%'\n or s.school_name ilike '% prep school%'\n or s.school_name ilike '% prep %'\n then 2\n when s.school_name ilike '%secondary%'\n or s.school_name ilike '%high school%'\n or s.school_name ilike '%grammar%'\n or s.school_name ilike '%senior school%'\n or s.school_name ilike '%upper school%'\n then 4\n -- 4. Give up \u2014 null renders no phase pill\n else null\n end as phase_code,\n s.school_type_code,\n s.academy_trust_name,\n s.academy_trust_uid,\n s.religious_character_code,\n s.gender,\n s.statutory_low_age || '-' || s.statutory_high_age as age_range,\n -- GIAS OfficialSixthForm in code space: 1 = has, 2 = does not, 0 = N/A.\n -- Null (rare, new establishments) falls back to the statutory age range.\n case\n when s.official_sixth_form_code = 1 then true\n when s.official_sixth_form_code in (0, 2) then false\n else coalesce(s.statutory_high_age >= 18, false)\n end as has_sixth_form,\n s.capacity,\n s.total_pupils,\n concat_ws(' ', s.head_title, s.head_first_name, s.head_last_name) as headteacher_name,\n s.website,\n s.telephone,\n s.open_date,\n s.close_date,\n s.status_code,\n s.nursery_provision,\n s.admissions_policy_code,\n\n -- Latest Ofsted (populated after monthly Ofsted pipeline runs)\n {% if ofsted_relation is not none %}\n -- Prefer the graded overall effectiveness; fall back to the grade parsed\n -- from the latest ungraded (Section 8) outcome when no graded grade exists.\n coalesce(o.overall_effectiveness, o.ungraded_grade) as ofsted_grade,\n o.inspection_date as ofsted_date,\n o.framework as ofsted_framework\n {% else %}\n null::text as ofsted_grade,\n null::date as ofsted_date,\n null::text as ofsted_framework\n {% endif %}\n\nfrom schools s\n{% if ofsted_relation is not none %}\nleft join {{ ref('int_ofsted_latest') }} o on s.urn = o.urn\n{% endif %}\n-- 1 = Open; 3 = Open, but proposed to close (still operating; drops out when\n-- GIAS flips to Closed \u2014 marts fully rebuild each run).\nwhere s.status_code in (1, 3)", "doc_blocks": [], "language": "sql", "refs": [{"name": "int_ofsted_latest", "package": null, "version": null}, {"name": "stg_gias_establishments", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.int_ofsted_latest", "model.school_compare.stg_gias_establishments"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn"], "time_spine": null}, "model.school_compare.stg_gias_establishments": {"database": "school_compare", "schema": "staging", "name": "stg_gias_establishments", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_gias_establishments.sql", "original_file_path": "models/staging/stg_gias_establishments.sql", "unique_id": "model.school_compare.stg_gias_establishments", "fqn": ["school_compare", "staging", "stg_gias_establishments"], "alias": "stg_gias_establishments", "checksum": {"name": "sha256", "checksum": "f441ba1ec21d49447e34206e11189040431a3dd525e4a51bc40e8c7c2ba032b0"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.8353448, "relation_name": "\"school_compare\".\"staging\".\"stg_gias_establishments\"", "raw_code": "-- Staging model: GIAS establishments\n-- Light cleaning, type casting, column renaming from raw GIAS bulk CSV\n\nwith source as (\n select * from {{ source('raw', 'gias_establishments') }}\n),\n\nrenamed as (\n select\n cast(\"URN\" as integer) as urn,\n cast(nullif(\"LA (code)\", '') as integer) as local_authority_code,\n \"LA (name)\" as local_authority_name,\n cast(nullif(\"EstablishmentNumber\", '') as integer) as establishment_number,\n \"EstablishmentName\" as school_name,\n cast(nullif(trim(\"TypeOfEstablishment (code)\"), '') as integer) as school_type_code,\n cast(nullif(trim(\"PhaseOfEducation (code)\"), '') as integer) as phase_code,\n cast(nullif(trim(\"OfficialSixthForm (code)\"), '') as integer) as official_sixth_form_code,\n \"Gender (name)\" as gender,\n cast(nullif(trim(\"ReligiousCharacter (code)\"), '') as integer) as religious_character_code,\n cast(nullif(trim(\"AdmissionsPolicy (code)\"), '') as integer) as admissions_policy_code,\n \"SchoolCapacity\" as capacity,\n cast(nullif(\"NumberOfPupils\", '') as integer) as total_pupils,\n \"HeadTitle (name)\" as head_title,\n \"HeadFirstName\" as head_first_name,\n \"HeadLastName\" as head_last_name,\n \"TelephoneNum\" as telephone,\n \"SchoolWebsite\" as website,\n \"Street\" as address_line1,\n \"Locality\" as address_line2,\n \"Town\" as town,\n \"County (name)\" as county,\n \"Postcode\" as postcode,\n cast(nullif(trim(\"EstablishmentStatus (code)\"), '') as integer) as status_code,\n case when \"OpenDate\" = '' then null else to_date(\"OpenDate\", 'DD-MM-YYYY') end as open_date,\n case when \"CloseDate\" = '' then null else to_date(\"CloseDate\", 'DD-MM-YYYY') end as close_date,\n \"Trusts (name)\" as academy_trust_name,\n cast(nullif(\"Trusts (code)\", '') as integer) as academy_trust_uid,\n \"UrbanRural (name)\" as urban_rural,\n \"ParliamentaryConstituency (name)\" as parliamentary_constituency,\n \"NurseryProvision (name)\" as nursery_provision,\n cast(nullif(\"Easting\", '') as integer) as easting,\n cast(nullif(\"Northing\", '') as integer) as northing,\n cast(nullif(\"StatutoryLowAge\", '') as integer) as statutory_low_age,\n cast(nullif(\"StatutoryHighAge\", '') as integer) as statutory_high_age\n from source\n where \"URN\" is not null\n)\n\nselect * from renamed", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "gias_establishments"]], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["source.school_compare.raw.gias_establishments"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_performance": {"database": "school_compare", "schema": "marts", "name": "fact_performance", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_performance.sql", "original_file_path": "models/marts/fact_performance.sql", "unique_id": "model.school_compare.fact_performance", "fqn": ["school_compare", "marts", "fact_performance"], "alias": "fact_performance", "checksum": {"name": "sha256", "checksum": "ea8849a6596cdb40066194013400acd5b70cd71b49dd7de8052a67afbe012577"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Merged KS2 + KS4 performance \u2014 one row per URN per year via FULL OUTER JOIN. All-through schools have both KS2 and KS4 columns populated; pure primary schools have NULL KS4 columns; pure secondary schools have NULL KS2 columns.", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.957527, "relation_name": "\"school_compare\".\"marts\".\"fact_performance\"", "raw_code": "-- Mart: Merged KS2 + KS4 performance \u2014 one row per URN per year\n-- FULL OUTER JOIN so all-through schools have both KS2 and KS4 columns populated.\n-- Pure primary schools have NULL KS4 columns; pure secondary schools have NULL KS2 columns.\n\nwith ks2 as (\n select * from {{ ref('fact_ks2_performance') }}\n),\n\nks4 as (\n select * from {{ ref('fact_ks4_performance') }}\n)\n\nselect\n -- Join keys (coalesced so neither side is dropped)\n coalesce(ks2.urn, ks4.urn) as urn,\n coalesce(ks2.source_urn, ks4.source_urn) as source_urn,\n coalesce(ks2.year, ks4.year) as year,\n coalesce(ks2.total_pupils, ks4.total_pupils) as total_pupils,\n coalesce(ks2.eligible_pupils, ks4.eligible_pupils) as eligible_pupils,\n\n -- KS2 columns (NULL for pure secondary schools)\n ks2.rwm_expected_pct,\n ks2.rwm_high_pct,\n ks2.reading_expected_pct,\n ks2.reading_high_pct,\n ks2.reading_avg_score,\n ks2.reading_progress,\n ks2.reading_progress_lower_ci,\n ks2.reading_progress_upper_ci,\n ks2.writing_expected_pct,\n ks2.writing_high_pct,\n ks2.writing_progress,\n ks2.writing_progress_lower_ci,\n ks2.writing_progress_upper_ci,\n ks2.writing_working_towards_pct,\n ks2.maths_expected_pct,\n ks2.maths_high_pct,\n ks2.maths_avg_score,\n ks2.maths_progress,\n ks2.maths_progress_lower_ci,\n ks2.maths_progress_upper_ci,\n ks2.gps_expected_pct,\n ks2.gps_high_pct,\n ks2.gps_avg_score,\n ks2.science_expected_pct,\n ks2.reading_absence_pct,\n ks2.writing_absence_pct,\n ks2.maths_absence_pct,\n ks2.gps_absence_pct,\n ks2.science_absence_pct,\n ks2.rwm_expected_boys_pct,\n ks2.rwm_high_boys_pct,\n ks2.rwm_expected_girls_pct,\n ks2.rwm_high_girls_pct,\n ks2.rwm_expected_disadvantaged_pct,\n ks2.rwm_expected_non_disadvantaged_pct,\n ks2.disadvantaged_gap,\n ks2.disadvantaged_pct,\n ks2.eal_pct,\n ks2.stability_pct,\n\n -- KS4 columns (NULL for pure primary schools)\n ks4.attainment_8_score,\n ks4.progress_8_score,\n ks4.progress_8_lower_ci,\n ks4.progress_8_upper_ci,\n ks4.progress_8_english,\n ks4.progress_8_maths,\n ks4.progress_8_ebacc,\n ks4.progress_8_open,\n ks4.progress_8_banding,\n ks4.attainment_8_disadvantage_gap,\n ks4.progress_8_disadvantage_gap,\n ks4.english_maths_strong_pass_pct,\n ks4.english_maths_standard_pass_pct,\n ks4.ebacc_entry_pct,\n ks4.ebacc_strong_pass_pct,\n ks4.ebacc_standard_pass_pct,\n ks4.ebacc_avg_score,\n ks4.gcse_grade_91_pct,\n ks4.prior_attainment_avg,\n ks4.sen_pct,\n\n -- Shared SEN columns \u2014 KS2 preferred, fall back to KS4\n coalesce(ks2.sen_support_pct, ks4.sen_support_pct) as sen_support_pct,\n coalesce(ks2.sen_ehcp_pct, ks4.sen_ehcp_pct) as sen_ehcp_pct\n\nfrom ks2\nfull outer join ks4\n on ks2.urn = ks4.urn\n and ks2.year = ks4.year", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_performance", "package": null, "version": null}, {"name": "fact_ks4_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.fact_ks2_performance", "model.school_compare.fact_ks4_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn || '-' || year"], "time_spine": null}, "model.school_compare.fact_ks2_performance": {"database": "school_compare", "schema": "marts", "name": "fact_ks2_performance", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_ks2_performance.sql", "original_file_path": "models/marts/fact_ks2_performance.sql", "unique_id": "model.school_compare.fact_ks2_performance", "fqn": ["school_compare", "marts", "fact_ks2_performance"], "alias": "fact_ks2_performance", "checksum": {"name": "sha256", "checksum": "ee3f734e98d37c6b3459f08eb35e78e193c2c4995fb64a4bbe2d58a2382acf8c"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "KS2 attainment \u2014 one row per URN per year", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "reading_progress_lower_ci": {"name": "reading_progress_lower_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "reading_progress_upper_ci": {"name": "reading_progress_upper_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "writing_progress_lower_ci": {"name": "writing_progress_lower_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "writing_progress_upper_ci": {"name": "writing_progress_upper_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "writing_working_towards_pct": {"name": "writing_working_towards_pct", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "maths_progress_lower_ci": {"name": "maths_progress_lower_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "maths_progress_upper_ci": {"name": "maths_progress_upper_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.957371, "relation_name": "\"school_compare\".\"marts\".\"fact_ks2_performance\"", "raw_code": "-- Mart: KS2 performance fact table \u2014 one row per URN per year\n-- Includes predecessor data via lineage resolution\n\nselect\n current_urn as urn,\n source_urn,\n year,\n total_pupils,\n eligible_pupils,\n\n -- Core attainment\n rwm_expected_pct,\n rwm_high_pct,\n reading_expected_pct,\n reading_high_pct,\n reading_avg_score,\n reading_progress,\n reading_progress_lower_ci,\n reading_progress_upper_ci,\n writing_expected_pct,\n writing_high_pct,\n writing_progress,\n writing_progress_lower_ci,\n writing_progress_upper_ci,\n writing_working_towards_pct,\n maths_expected_pct,\n maths_high_pct,\n maths_avg_score,\n maths_progress,\n maths_progress_lower_ci,\n maths_progress_upper_ci,\n gps_expected_pct,\n gps_high_pct,\n gps_avg_score,\n science_expected_pct,\n\n -- Absence\n reading_absence_pct,\n writing_absence_pct,\n maths_absence_pct,\n gps_absence_pct,\n science_absence_pct,\n\n -- Gender\n rwm_expected_boys_pct,\n rwm_high_boys_pct,\n rwm_expected_girls_pct,\n rwm_high_girls_pct,\n\n -- Disadvantaged\n rwm_expected_disadvantaged_pct,\n rwm_expected_non_disadvantaged_pct,\n disadvantaged_gap,\n\n -- Context\n disadvantaged_pct,\n eal_pct,\n sen_support_pct,\n sen_ehcp_pct,\n stability_pct\n\nfrom {{ ref('int_ks2_with_lineage') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "int_ks2_with_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.int_ks2_with_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn || '-' || year"], "time_spine": null}, "model.school_compare.int_ks2_with_lineage": {"database": "school_compare", "schema": "intermediate", "name": "int_ks2_with_lineage", "resource_type": "model", "package_name": "school_compare", "path": "intermediate/int_ks2_with_lineage.sql", "original_file_path": "models/intermediate/int_ks2_with_lineage.sql", "unique_id": "model.school_compare.int_ks2_with_lineage", "fqn": ["school_compare", "intermediate", "int_ks2_with_lineage"], "alias": "int_ks2_with_lineage", "checksum": {"name": "sha256", "checksum": "cf0cd2ad3e55172d40bcdc4c0b5b750bdf5d7c1618f472b359372e34c467a89b"}, "config": {"enabled": true, "alias": null, "schema": "intermediate", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "intermediate"}, "created_at": 1784225256.837429, "relation_name": "\"school_compare\".\"intermediate\".\"int_ks2_with_lineage\"", "raw_code": "-- Intermediate model: KS2 data chained across academy conversions\n-- Maps predecessor URN data to the current active URN\n-- Unions EES (2022+) and legacy (2015-2019) school-level data\n\nwith all_ks2 as (\n select * from {{ ref('stg_ees_ks2') }}\n union all\n select * from {{ ref('stg_legacy_ks2') }}\n),\n\ncurrent_ks2 as (\n select\n urn as current_urn,\n urn as source_urn,\n year, total_pupils, eligible_pupils,\n rwm_expected_pct, rwm_high_pct,\n reading_expected_pct, reading_high_pct, reading_avg_score, reading_progress,\n reading_progress_lower_ci, reading_progress_upper_ci,\n writing_expected_pct, writing_high_pct, writing_progress,\n writing_progress_lower_ci, writing_progress_upper_ci, writing_working_towards_pct,\n maths_expected_pct, maths_high_pct, maths_avg_score, maths_progress,\n maths_progress_lower_ci, maths_progress_upper_ci,\n gps_expected_pct, gps_high_pct, gps_avg_score, science_expected_pct,\n reading_absence_pct, writing_absence_pct, maths_absence_pct, gps_absence_pct, science_absence_pct,\n rwm_expected_boys_pct, rwm_high_boys_pct, rwm_expected_girls_pct, rwm_high_girls_pct,\n rwm_expected_disadvantaged_pct, rwm_expected_non_disadvantaged_pct, disadvantaged_gap,\n disadvantaged_pct, eal_pct, sen_support_pct, sen_ehcp_pct, stability_pct\n from all_ks2\n),\n\npredecessor_ks2 as (\n -- If multiple predecessors have data for the same year, keep the one with most pupils.\n select distinct on (lin.current_urn, ks2.year)\n lin.current_urn,\n ks2.urn as source_urn,\n ks2.year, ks2.total_pupils, ks2.eligible_pupils,\n ks2.rwm_expected_pct, ks2.rwm_high_pct,\n ks2.reading_expected_pct, ks2.reading_high_pct, ks2.reading_avg_score, ks2.reading_progress,\n ks2.reading_progress_lower_ci, ks2.reading_progress_upper_ci,\n ks2.writing_expected_pct, ks2.writing_high_pct, ks2.writing_progress,\n ks2.writing_progress_lower_ci, ks2.writing_progress_upper_ci, ks2.writing_working_towards_pct,\n ks2.maths_expected_pct, ks2.maths_high_pct, ks2.maths_avg_score, ks2.maths_progress,\n ks2.maths_progress_lower_ci, ks2.maths_progress_upper_ci,\n ks2.gps_expected_pct, ks2.gps_high_pct, ks2.gps_avg_score, ks2.science_expected_pct,\n ks2.reading_absence_pct, ks2.writing_absence_pct, ks2.maths_absence_pct, ks2.gps_absence_pct, ks2.science_absence_pct,\n ks2.rwm_expected_boys_pct, ks2.rwm_high_boys_pct, ks2.rwm_expected_girls_pct, ks2.rwm_high_girls_pct,\n ks2.rwm_expected_disadvantaged_pct, ks2.rwm_expected_non_disadvantaged_pct, ks2.disadvantaged_gap,\n ks2.disadvantaged_pct, ks2.eal_pct, ks2.sen_support_pct, ks2.sen_ehcp_pct, ks2.stability_pct\n from all_ks2 ks2\n inner join {{ ref('int_school_lineage') }} lin\n on ks2.urn = lin.predecessor_urn\n where not exists (\n select 1 from all_ks2 curr\n where curr.urn = lin.current_urn\n and curr.year = ks2.year\n )\n order by lin.current_urn, ks2.year, ks2.total_pupils desc nulls last\n),\n\ncombined as (\n select * from current_ks2\n union all\n select * from predecessor_ks2\n)\n\nselect * from combined", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_ks2", "package": null, "version": null}, {"name": "stg_legacy_ks2", "package": null, "version": null}, {"name": "int_school_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_ks2", "model.school_compare.stg_legacy_ks2", "model.school_compare.int_school_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_ks4_national_averages": {"database": "school_compare", "schema": "marts", "name": "fact_ks4_national_averages", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_ks4_national_averages.sql", "original_file_path": "models/marts/fact_ks4_national_averages.sql", "unique_id": "model.school_compare.fact_ks4_national_averages", "fqn": ["school_compare", "marts", "fact_ks4_national_averages"], "alias": "fact_ks4_national_averages", "checksum": {"name": "sha256", "checksum": "6652829c2e28bab0f05474060d1cbda23c1009418ccef3791f810553e2f99f98"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Computed national KS4 averages (means across state schools in our dataset \u2014 not official DfE figures) \u2014 one row per academic year", "columns": {"year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.9580421, "relation_name": "\"school_compare\".\"marts\".\"fact_ks4_national_averages\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Mart: OFFICIAL DfE KS4 national headline averages \u2014 one row per academic\n-- year (England, state-funded, all pupils), from the EES national dataset.\n-- Replaces the previous unweighted school-level means, which were 7\u201315\n-- points off every headline measure and produced an arithmetically\n-- impossible national Progress 8. gcse_grade_91_pct has no official\n-- national series and is NULL (schema kept for the API model).\n\nselect\n year,\n attainment_8_score,\n progress_8_score,\n english_maths_standard_pass_pct,\n english_maths_strong_pass_pct,\n ebacc_entry_pct,\n ebacc_standard_pass_pct,\n ebacc_strong_pass_pct,\n ebacc_avg_score,\n cast(null as double precision) as gcse_grade_91_pct\nfrom {{ ref('stg_ees_ks4_national') }}\norder by year", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_ks4_national", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_ks4_national"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["year"], "time_spine": null}, "model.school_compare.fact_ks4_performance": {"database": "school_compare", "schema": "marts", "name": "fact_ks4_performance", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_ks4_performance.sql", "original_file_path": "models/marts/fact_ks4_performance.sql", "unique_id": "model.school_compare.fact_ks4_performance", "fqn": ["school_compare", "marts", "fact_ks4_performance"], "alias": "fact_ks4_performance", "checksum": {"name": "sha256", "checksum": "3afb0dc042db222966de51680b08211c603d099f2db132137dda6abae9ac0b17"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "KS4 attainment \u2014 one row per URN per year", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "progress_8_banding": {"name": "progress_8_banding", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "attainment_8_disadvantage_gap": {"name": "attainment_8_disadvantage_gap", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "progress_8_disadvantage_gap": {"name": "progress_8_disadvantage_gap", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.95791, "relation_name": "\"school_compare\".\"marts\".\"fact_ks4_performance\"", "raw_code": "-- Mart: KS4 performance fact table \u2014 one row per URN per year\n-- Includes predecessor data via lineage resolution\n\nselect\n current_urn as urn,\n source_urn,\n year,\n total_pupils,\n eligible_pupils,\n prior_attainment_avg,\n\n -- Attainment 8\n attainment_8_score,\n\n -- Progress 8\n progress_8_score,\n progress_8_lower_ci,\n progress_8_upper_ci,\n progress_8_banding,\n attainment_8_disadvantage_gap,\n progress_8_disadvantage_gap,\n progress_8_english,\n progress_8_maths,\n progress_8_ebacc,\n progress_8_open,\n\n -- English & Maths\n english_maths_strong_pass_pct,\n english_maths_standard_pass_pct,\n\n -- EBacc\n ebacc_entry_pct,\n ebacc_strong_pass_pct,\n ebacc_standard_pass_pct,\n ebacc_avg_score,\n\n -- GCSE\n gcse_grade_91_pct,\n\n -- Context\n sen_pct,\n sen_ehcp_pct,\n sen_support_pct\n\nfrom {{ ref('int_ks4_with_lineage') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "int_ks4_with_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.int_ks4_with_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn || '-' || year"], "time_spine": null}, "model.school_compare.int_ks4_with_lineage": {"database": "school_compare", "schema": "intermediate", "name": "int_ks4_with_lineage", "resource_type": "model", "package_name": "school_compare", "path": "intermediate/int_ks4_with_lineage.sql", "original_file_path": "models/intermediate/int_ks4_with_lineage.sql", "unique_id": "model.school_compare.int_ks4_with_lineage", "fqn": ["school_compare", "intermediate", "int_ks4_with_lineage"], "alias": "int_ks4_with_lineage", "checksum": {"name": "sha256", "checksum": "0f1837fc648e40dea60bdf7a45d60824017665bbc189e497e20203d4739f5a53"}, "config": {"enabled": true, "alias": null, "schema": "intermediate", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "intermediate"}, "created_at": 1784225256.839802, "relation_name": "\"school_compare\".\"intermediate\".\"int_ks4_with_lineage\"", "raw_code": "-- Intermediate model: KS4 data chained across academy conversions\n-- Unions EES (2023/24 onwards) and legacy (2015/16\u20132018/19) school-level data\n\nwith all_ks4 as (\n select * from {{ ref('stg_ees_ks4') }}\n union all\n select * from {{ ref('stg_legacy_ks4') }}\n),\n\ncurrent_ks4 as (\n select\n urn as current_urn,\n urn as source_urn,\n year, total_pupils, eligible_pupils, prior_attainment_avg,\n attainment_8_score,\n progress_8_score, progress_8_lower_ci, progress_8_upper_ci,\n progress_8_english, progress_8_maths, progress_8_ebacc, progress_8_open,\n english_maths_strong_pass_pct, english_maths_standard_pass_pct,\n ebacc_entry_pct, ebacc_strong_pass_pct, ebacc_standard_pass_pct, ebacc_avg_score,\n gcse_grade_91_pct,\n sen_pct, sen_support_pct, sen_ehcp_pct,\n progress_8_banding, attainment_8_disadvantage_gap, progress_8_disadvantage_gap\n from all_ks4\n),\n\npredecessor_ks4 as (\n -- If multiple predecessors have data for the same year, keep the one with most pupils.\n select distinct on (lin.current_urn, ks4.year)\n lin.current_urn,\n ks4.urn as source_urn,\n ks4.year, ks4.total_pupils, ks4.eligible_pupils, ks4.prior_attainment_avg,\n ks4.attainment_8_score,\n ks4.progress_8_score, ks4.progress_8_lower_ci, ks4.progress_8_upper_ci,\n ks4.progress_8_english, ks4.progress_8_maths, ks4.progress_8_ebacc, ks4.progress_8_open,\n ks4.english_maths_strong_pass_pct, ks4.english_maths_standard_pass_pct,\n ks4.ebacc_entry_pct, ks4.ebacc_strong_pass_pct, ks4.ebacc_standard_pass_pct, ks4.ebacc_avg_score,\n ks4.gcse_grade_91_pct,\n ks4.sen_pct, ks4.sen_support_pct, ks4.sen_ehcp_pct,\n ks4.progress_8_banding, ks4.attainment_8_disadvantage_gap, ks4.progress_8_disadvantage_gap\n from all_ks4 ks4\n inner join {{ ref('int_school_lineage') }} lin\n on ks4.urn = lin.predecessor_urn\n where not exists (\n select 1 from all_ks4 curr\n where curr.urn = lin.current_urn\n and curr.year = ks4.year\n )\n order by lin.current_urn, ks4.year, ks4.total_pupils desc nulls last\n),\n\ncombined as (\n select * from current_ks4\n union all\n select * from predecessor_ks4\n)\n\nselect * from combined", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_ks4", "package": null, "version": null}, {"name": "stg_legacy_ks4", "package": null, "version": null}, {"name": "int_school_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_ks4", "model.school_compare.stg_legacy_ks4", "model.school_compare.int_school_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.map_school_lineage": {"database": "school_compare", "schema": "marts", "name": "map_school_lineage", "resource_type": "model", "package_name": "school_compare", "path": "marts/map_school_lineage.sql", "original_file_path": "models/marts/map_school_lineage.sql", "unique_id": "model.school_compare.map_school_lineage", "fqn": ["school_compare", "marts", "map_school_lineage"], "alias": "map_school_lineage", "checksum": {"name": "sha256", "checksum": "ccc46724286e6f850514c1c0bacb73adc7317c3b9e1e57ca9f8dd51a49b848c4"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Predecessor/successor lineage map", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.958216, "relation_name": "\"school_compare\".\"marts\".\"map_school_lineage\"", "raw_code": "-- Mart: School predecessor/successor lineage map\n\nselect\n current_urn as urn,\n predecessor_urn,\n link_type,\n link_date,\n depth\nfrom {{ ref('int_school_lineage') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "int_school_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.int_school_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.int_school_lineage": {"database": "school_compare", "schema": "intermediate", "name": "int_school_lineage", "resource_type": "model", "package_name": "school_compare", "path": "intermediate/int_school_lineage.sql", "original_file_path": "models/intermediate/int_school_lineage.sql", "unique_id": "model.school_compare.int_school_lineage", "fqn": ["school_compare", "intermediate", "int_school_lineage"], "alias": "int_school_lineage", "checksum": {"name": "sha256", "checksum": "6b5415d216e4fca7dc3802b07795eebf1d0f71cdb5afcb14da3f56661e59c073"}, "config": {"enabled": true, "alias": null, "schema": "intermediate", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "intermediate"}, "created_at": 1784225256.8411689, "relation_name": "\"school_compare\".\"intermediate\".\"int_school_lineage\"", "raw_code": "-- Intermediate model: Recursive predecessor mapping\n-- Resolves academy conversion chains so historical data can be attributed\n-- to the current (active) URN.\n\nwith recursive lineage as (\n -- Base: schools that are predecessors (linked via academy conversion, amalgamation, etc.)\n select\n urn,\n linked_urn as predecessor_urn,\n link_type,\n link_date,\n 1 as depth\n from {{ ref('stg_gias_links') }}\n where link_type in (\n 'Predecessor',\n 'Predecessor - Loss of academy converter',\n 'Predecessor - amalgamated',\n 'Predecessor - Fresh Start'\n )\n\n union all\n\n -- Recursive step: follow the chain\n select\n l.urn,\n links.linked_urn as predecessor_urn,\n links.link_type,\n links.link_date,\n l.depth + 1\n from lineage l\n inner join {{ ref('stg_gias_links') }} links\n on l.predecessor_urn = links.urn\n where links.link_type in (\n 'Predecessor',\n 'Predecessor - Loss of academy converter',\n 'Predecessor - amalgamated',\n 'Predecessor - Fresh Start'\n )\n and l.depth < 5 -- safety limit\n)\n\nselect\n urn as current_urn,\n predecessor_urn,\n link_type,\n link_date,\n depth\nfrom lineage", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_gias_links", "package": null, "version": null}, {"name": "stg_gias_links", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_gias_links"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_gias_links": {"database": "school_compare", "schema": "staging", "name": "stg_gias_links", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_gias_links.sql", "original_file_path": "models/staging/stg_gias_links.sql", "unique_id": "model.school_compare.stg_gias_links", "fqn": ["school_compare", "staging", "stg_gias_links"], "alias": "stg_gias_links", "checksum": {"name": "sha256", "checksum": "b63bd2f36eeb2be840a344365a68879242e5cb3310d7a74e7071fe7f6a9724fc"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.841929, "relation_name": "\"school_compare\".\"staging\".\"stg_gias_links\"", "raw_code": "-- Staging model: GIAS school links (predecessor/successor chains)\n\nwith source as (\n select * from {{ source('raw', 'gias_links') }}\n),\n\nrenamed as (\n select\n cast(\"URN\" as integer) as urn,\n cast(\"LinkURN\" as integer) as linked_urn,\n \"LinkType\" as link_type,\n case when \"LinkEstablishedDate\" = '' then null else to_date(\"LinkEstablishedDate\", 'DD-MM-YYYY') end as link_date\n from source\n where \"URN\" is not null\n and \"LinkURN\" is not null\n)\n\nselect * from renamed", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "gias_links"]], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["source.school_compare.raw.gias_links"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_ofsted_inspection": {"database": "school_compare", "schema": "marts", "name": "fact_ofsted_inspection", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_ofsted_inspection.sql", "original_file_path": "models/marts/fact_ofsted_inspection.sql", "unique_id": "model.school_compare.fact_ofsted_inspection", "fqn": ["school_compare", "marts", "fact_ofsted_inspection"], "alias": "fact_ofsted_inspection", "checksum": {"name": "sha256", "checksum": "0f84ccceb71e7c7d5514164e9c6f3bbabecbca72b3547acc555b47c4dc361096"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Full Ofsted inspection history", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "inspection_date": {"name": "inspection_date", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.95843, "relation_name": "\"school_compare\".\"marts\".\"fact_ofsted_inspection\"", "raw_code": "-- Mart: Full Ofsted inspection history \u2014 one row per inspection\n\nselect\n urn,\n inspection_date,\n inspection_type,\n framework,\n overall_effectiveness,\n quality_of_education,\n behaviour_attitudes,\n personal_development,\n leadership_management,\n early_years_provision,\n sixth_form_provision,\n ungraded_outcome,\n ungraded_grade,\n rc_safeguarding_met,\n rc_inclusion,\n rc_curriculum_teaching,\n rc_achievement,\n rc_attendance_behaviour,\n rc_personal_development,\n rc_leadership_governance,\n rc_early_years,\n rc_sixth_form,\n rc_inspection_date,\n report_url\nfrom {{ ref('stg_ofsted_inspections') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ofsted_inspections", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ofsted_inspections"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.int_ofsted_latest": {"database": "school_compare", "schema": "intermediate", "name": "int_ofsted_latest", "resource_type": "model", "package_name": "school_compare", "path": "intermediate/int_ofsted_latest.sql", "original_file_path": "models/intermediate/int_ofsted_latest.sql", "unique_id": "model.school_compare.int_ofsted_latest", "fqn": ["school_compare", "intermediate", "int_ofsted_latest"], "alias": "int_ofsted_latest", "checksum": {"name": "sha256", "checksum": "82a928978d87dcf8799894786716d1fca35b65e08aaea28573974a4423b06a07"}, "config": {"enabled": true, "alias": null, "schema": "intermediate", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "intermediate"}, "created_at": 1784225256.843183, "relation_name": "\"school_compare\".\"intermediate\".\"int_ofsted_latest\"", "raw_code": "-- Intermediate model: Latest Ofsted inspection per URN\n-- Picks the most recent inspection for each school\n\nwith ranked as (\n select\n *,\n row_number() over (\n partition by urn\n order by inspection_date desc\n ) as rn\n from {{ ref('stg_ofsted_inspections') }}\n)\n\nselect\n urn,\n inspection_date,\n inspection_type,\n framework,\n overall_effectiveness,\n quality_of_education,\n behaviour_attitudes,\n personal_development,\n leadership_management,\n early_years_provision,\n sixth_form_provision,\n ungraded_outcome,\n ungraded_grade,\n rc_safeguarding_met,\n rc_inclusion,\n rc_curriculum_teaching,\n rc_achievement,\n rc_attendance_behaviour,\n rc_personal_development,\n rc_leadership_governance,\n rc_early_years,\n rc_sixth_form,\n rc_inspection_date,\n report_url\nfrom ranked\nwhere rn = 1", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ofsted_inspections", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ofsted_inspections"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_ofsted_inspections": {"database": "school_compare", "schema": "staging", "name": "stg_ofsted_inspections", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ofsted_inspections.sql", "original_file_path": "models/staging/stg_ofsted_inspections.sql", "unique_id": "model.school_compare.stg_ofsted_inspections", "fqn": ["school_compare", "staging", "stg_ofsted_inspections"], "alias": "stg_ofsted_inspections", "checksum": {"name": "sha256", "checksum": "69c1b9d3d8ede6f5e5b042c5b3f0fcc3b970d0ad7d43c682a369850cdae8e046"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.8438132, "relation_name": "\"school_compare\".\"staging\".\"stg_ofsted_inspections\"", "raw_code": "-- Staging model: Ofsted inspection records\n-- Handles both OEIF (pre-Nov 2025) and Report Card (post-Nov 2025) frameworks\n\nwith source as (\n select * from {{ source('raw', 'ofsted_inspections') }}\n),\n\nrenamed as (\n select\n cast(urn as integer) as urn,\n -- Inspection event date: the graded inspection when present, otherwise the\n -- ungraded (Section 8) inspection so schools with only an ungraded\n -- inspection are still retained.\n coalesce(\n to_date(nullif(trim(inspection_date), 'NULL'), 'DD/MM/YYYY'),\n to_date(nullif(trim(ungraded_inspection_date), 'NULL'), 'DD/MM/YYYY')\n ) as inspection_date,\n inspection_type,\n event_type_grouping as framework,\n\n -- OEIF grades (1-4 scale)\n {{ safe_numeric('overall_effectiveness') }}::integer as overall_effectiveness,\n {{ safe_numeric('quality_of_education') }}::integer as quality_of_education,\n {{ safe_numeric('behaviour_and_attitudes') }}::integer as behaviour_attitudes,\n {{ safe_numeric('personal_development') }}::integer as personal_development,\n {{ safe_numeric('effectiveness_of_leadership_and_management') }}::integer as leadership_management,\n {{ safe_numeric('early_years_provision') }}::integer as early_years_provision,\n {{ safe_numeric('sixth_form_provision') }}::integer as sixth_form_provision,\n\n -- Ungraded (Section 8) inspection outcome \u2014 free text, plus a grade\n -- parsed from it (1/2/null) used as a last-resort fallback for schools\n -- with no graded overall effectiveness.\n nullif(trim(ungraded_outcome), 'NULL') as ungraded_outcome,\n {{ parse_ungraded_outcome('ungraded_outcome') }}::integer as ungraded_grade,\n\n -- Report Card fields (post-Nov 2025 framework), 5-point scale:\n -- 1 Exceptional \u00b7 2 Strong standard \u00b7 3 Expected standard\n -- \u00b7 4 Needs attention \u00b7 5 Urgent improvement\n case lower(trim(nullif(rc_safeguarding_met, 'NULL')))\n when 'met' then true\n when 'not met' then false\n end as rc_safeguarding_met,\n {{ parse_report_card_grade('rc_inclusion') }}::integer as rc_inclusion,\n {{ parse_report_card_grade('rc_curriculum_teaching') }}::integer as rc_curriculum_teaching,\n {{ parse_report_card_grade('rc_achievement') }}::integer as rc_achievement,\n {{ parse_report_card_grade('rc_attendance_behaviour') }}::integer as rc_attendance_behaviour,\n {{ parse_report_card_grade('rc_personal_development') }}::integer as rc_personal_development,\n {{ parse_report_card_grade('rc_leadership_governance') }}::integer as rc_leadership_governance,\n {{ parse_report_card_grade('rc_early_years') }}::integer as rc_early_years,\n {{ parse_report_card_grade('rc_sixth_form') }}::integer as rc_sixth_form,\n\n -- Start date of the latest FULL inspection (the report-card\n -- inspection in the renewed framework). Guarded in the final select:\n -- only kept when the row actually carries report-card grades, because\n -- in legacy-format files this column is the legacy inspection date.\n to_date(nullif(trim(rc_inspection_date), 'NULL'), 'DD/MM/YYYY') as rc_inspection_date_raw,\n\n nullif(trim(report_url), 'NULL') as report_url\n from source\n where urn is not null\n and (\n nullif(trim(inspection_date), 'NULL') is not null\n or nullif(trim(ungraded_inspection_date), 'NULL') is not null\n )\n)\n\nselect\n *,\n case\n when rc_safeguarding_met is not null\n or rc_inclusion is not null\n or rc_curriculum_teaching is not null\n or rc_achievement is not null\n or rc_attendance_behaviour is not null\n or rc_personal_development is not null\n or rc_leadership_governance is not null\n then rc_inspection_date_raw\n end as rc_inspection_date\nfrom renamed\nwhere inspection_date is not null", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ofsted_inspections"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric", "macro.school_compare.parse_ungraded_outcome", "macro.school_compare.parse_report_card_grade"], "nodes": ["source.school_compare.raw.ofsted_inspections"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_ees_ks2": {"database": "school_compare", "schema": "staging", "name": "stg_ees_ks2", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_ks2.sql", "original_file_path": "models/staging/stg_ees_ks2.sql", "unique_id": "model.school_compare.stg_ees_ks2", "fqn": ["school_compare", "staging", "stg_ees_ks2"], "alias": "stg_ees_ks2", "checksum": {"name": "sha256", "checksum": "b5d1cc5ac353d77b1e067f26efee3ac4ebdefe5ea0e6b405595ac3b054ed82a6"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.8471801, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_ks2\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: KS2 attainment + information\n-- Single-pass pivot: one GROUP BY scan of 1.2M rows handles all subjects\n-- and all breakdowns (All pupils, Boys, Girls, Disadvantaged, Not disadvantaged)\n-- instead of 5 separate CTE scans + 5 LEFT JOINs.\n-- EES uses 'z' (not applicable) and 'c' (confidential) as suppression codes \u2014\n-- safe_numeric handles both by treating any non-numeric string as NULL.\n\nwith attainment as (\n select * from {{ source('raw', 'ees_ks2_attainment') }}\n where school_urn ~ '^[0-9]+$'\n and time_period ~ '^[0-9]+$'\n),\n\npivoted as (\n select\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n\n -- Reading, Writing & Maths combined (All pupils / Total)\n max(case when subject = 'Reading, writing and maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as rwm_expected_pct,\n max(case when subject = 'Reading, writing and maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as rwm_high_pct,\n\n -- Reading (All pupils / Total)\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as reading_expected_pct,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as reading_high_pct,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('average_scaled_score') }} end) as reading_avg_score,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_score') }} end) as reading_progress,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_lower_conf_interval') }} end) as reading_progress_lower_ci,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_upper_conf_interval') }} end) as reading_progress_upper_ci,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('absent_or_not_able_to_access_percent') }} end) as reading_absence_pct,\n\n -- Writing (All pupils / Total)\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as writing_expected_pct,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as writing_high_pct,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_score') }} end) as writing_progress,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_lower_conf_interval') }} end) as writing_progress_lower_ci,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_upper_conf_interval') }} end) as writing_progress_upper_ci,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('working_towards_expected_standard_pupil_percent') }} end) as writing_working_towards_pct,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('absent_or_not_able_to_access_percent') }} end) as writing_absence_pct,\n\n -- Maths (All pupils / Total)\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as maths_expected_pct,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as maths_high_pct,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('average_scaled_score') }} end) as maths_avg_score,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_score') }} end) as maths_progress,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_lower_conf_interval') }} end) as maths_progress_lower_ci,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_upper_conf_interval') }} end) as maths_progress_upper_ci,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('absent_or_not_able_to_access_percent') }} end) as maths_absence_pct,\n\n -- GPS (All pupils / Total)\n max(case when (subject ilike '%grammar%' or subject = 'GPS')\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as gps_expected_pct,\n max(case when (subject ilike '%grammar%' or subject = 'GPS')\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as gps_high_pct,\n max(case when (subject ilike '%grammar%' or subject = 'GPS')\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('average_scaled_score') }} end) as gps_avg_score,\n max(case when (subject ilike '%grammar%' or subject = 'GPS')\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('absent_or_not_able_to_access_percent') }} end) as gps_absence_pct,\n\n -- Science (All pupils / Total)\n max(case when subject = 'Science'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as science_expected_pct,\n max(case when subject = 'Science'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('absent_or_not_able_to_access_percent') }} end) as science_absence_pct,\n\n -- Gender breakdown for Reading, Writing & Maths\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Boys'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as rwm_expected_boys_pct,\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Boys'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as rwm_high_boys_pct,\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Girls'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as rwm_expected_girls_pct,\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Girls'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as rwm_high_girls_pct,\n\n -- Disadvantaged breakdown for Reading, Writing & Maths\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Disadvantaged'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as rwm_expected_disadvantaged_pct,\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Not disadvantaged'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as rwm_expected_non_disadvantaged_pct\n\n from attainment\n group by school_urn, time_period\n),\n\ninfo as (\n select\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n {{ safe_numeric('totpups') }}::integer as total_pupils,\n {{ safe_numeric('telig') }}::integer as eligible_pupils,\n {{ safe_numeric('ptfsm6cla1a') }} as disadvantaged_pct,\n {{ safe_numeric('ptealgrp2') }} as eal_pct,\n {{ safe_numeric('psenelk') }} as sen_support_pct,\n {{ safe_numeric('psenele') }} as sen_ehcp_pct,\n {{ safe_numeric('ptmobn') }} as stability_pct\n from {{ source('raw', 'ees_ks2_info') }}\n where school_urn is not null\n)\n\nselect\n p.urn,\n p.year,\n i.total_pupils,\n i.eligible_pupils,\n\n p.rwm_expected_pct,\n p.rwm_high_pct,\n p.reading_expected_pct,\n p.reading_high_pct,\n p.reading_avg_score,\n p.reading_progress,\n p.reading_progress_lower_ci,\n p.reading_progress_upper_ci,\n p.writing_expected_pct,\n p.writing_high_pct,\n p.writing_progress,\n p.writing_progress_lower_ci,\n p.writing_progress_upper_ci,\n p.writing_working_towards_pct,\n p.maths_expected_pct,\n p.maths_high_pct,\n p.maths_avg_score,\n p.maths_progress,\n p.maths_progress_lower_ci,\n p.maths_progress_upper_ci,\n p.gps_expected_pct,\n p.gps_high_pct,\n p.gps_avg_score,\n p.science_expected_pct,\n\n p.reading_absence_pct,\n p.writing_absence_pct,\n p.maths_absence_pct,\n p.gps_absence_pct,\n p.science_absence_pct,\n\n p.rwm_expected_boys_pct,\n p.rwm_high_boys_pct,\n p.rwm_expected_girls_pct,\n p.rwm_high_girls_pct,\n\n p.rwm_expected_disadvantaged_pct,\n p.rwm_expected_non_disadvantaged_pct,\n p.rwm_expected_disadvantaged_pct - p.rwm_expected_non_disadvantaged_pct as disadvantaged_gap,\n\n i.disadvantaged_pct,\n i.eal_pct,\n i.sen_support_pct,\n i.sen_ehcp_pct,\n i.stability_pct\n\nfrom pivoted p\nleft join info i on p.urn = i.urn and p.year = i.year", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_ks2_attainment"], ["raw", "ees_ks2_info"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_ks2_attainment", "source.school_compare.raw.ees_ks2_info"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_legacy_ks2": {"database": "school_compare", "schema": "staging", "name": "stg_legacy_ks2", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_legacy_ks2.sql", "original_file_path": "models/staging/stg_legacy_ks2.sql", "unique_id": "model.school_compare.stg_legacy_ks2", "fqn": ["school_compare", "staging", "stg_legacy_ks2"], "alias": "stg_legacy_ks2", "checksum": {"name": "sha256", "checksum": "d57ce51603d2a1d2945690ba863dca576a96b07b24187f0d603eba40602a2f3a"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.851999, "relation_name": "\"school_compare\".\"staging\".\"stg_legacy_ks2\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: Legacy KS2 data from pre-COVID DfE performance tables\n-- The tap already maps old column names to match stg_ees_ks2 output;\n-- this model just applies safe_numeric casts.\n\nselect\n cast(trim(urn) as integer) as urn,\n cast(trim(year) as integer) as year,\n\n {{ safe_numeric('total_pupils') }}::integer as total_pupils,\n {{ safe_numeric('eligible_pupils') }}::integer as eligible_pupils,\n\n {{ safe_numeric('rwm_expected_pct') }} as rwm_expected_pct,\n {{ safe_numeric('rwm_high_pct') }} as rwm_high_pct,\n {{ safe_numeric('reading_expected_pct') }} as reading_expected_pct,\n {{ safe_numeric('reading_high_pct') }} as reading_high_pct,\n {{ safe_numeric('reading_avg_score') }} as reading_avg_score,\n {{ safe_numeric('reading_progress') }} as reading_progress,\n -- Progress CIs / working-towards: not published in the legacy CSVs.\n -- Typed placeholders keep positional alignment with stg_ees_ks2 in\n -- int_ks2_with_lineage's UNION ALL.\n null::numeric as reading_progress_lower_ci,\n null::numeric as reading_progress_upper_ci,\n {{ safe_numeric('writing_expected_pct') }} as writing_expected_pct,\n {{ safe_numeric('writing_high_pct') }} as writing_high_pct,\n {{ safe_numeric('writing_progress') }} as writing_progress,\n null::numeric as writing_progress_lower_ci,\n null::numeric as writing_progress_upper_ci,\n null::numeric as writing_working_towards_pct,\n {{ safe_numeric('maths_expected_pct') }} as maths_expected_pct,\n {{ safe_numeric('maths_high_pct') }} as maths_high_pct,\n {{ safe_numeric('maths_avg_score') }} as maths_avg_score,\n {{ safe_numeric('maths_progress') }} as maths_progress,\n null::numeric as maths_progress_lower_ci,\n null::numeric as maths_progress_upper_ci,\n {{ safe_numeric('gps_expected_pct') }} as gps_expected_pct,\n {{ safe_numeric('gps_high_pct') }} as gps_high_pct,\n {{ safe_numeric('gps_avg_score') }} as gps_avg_score,\n null::numeric as science_expected_pct,\n\n {{ safe_numeric('reading_absence_pct') }} as reading_absence_pct,\n null::numeric as writing_absence_pct,\n {{ safe_numeric('maths_absence_pct') }} as maths_absence_pct,\n {{ safe_numeric('gps_absence_pct') }} as gps_absence_pct,\n null::numeric as science_absence_pct,\n\n {{ safe_numeric('rwm_expected_boys_pct') }} as rwm_expected_boys_pct,\n {{ safe_numeric('rwm_high_boys_pct') }} as rwm_high_boys_pct,\n {{ safe_numeric('rwm_expected_girls_pct') }} as rwm_expected_girls_pct,\n {{ safe_numeric('rwm_high_girls_pct') }} as rwm_high_girls_pct,\n\n {{ safe_numeric('rwm_expected_disadvantaged_pct') }} as rwm_expected_disadvantaged_pct,\n {{ safe_numeric('rwm_expected_non_disadvantaged_pct') }} as rwm_expected_non_disadvantaged_pct,\n {{ safe_numeric('rwm_expected_disadvantaged_pct') }}\n - {{ safe_numeric('rwm_expected_non_disadvantaged_pct') }} as disadvantaged_gap,\n\n {{ safe_numeric('disadvantaged_pct') }} as disadvantaged_pct,\n {{ safe_numeric('eal_pct') }} as eal_pct,\n {{ safe_numeric('sen_support_pct') }} as sen_support_pct,\n {{ safe_numeric('sen_ehcp_pct') }} as sen_ehcp_pct,\n {{ safe_numeric('stability_pct') }} as stability_pct\n\nfrom {{ source('raw', 'legacy_ks2') }}\nwhere urn is not null\n and urn ~ '^[0-9]+$'", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "legacy_ks2"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.legacy_ks2"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_ees_ks4": {"database": "school_compare", "schema": "staging", "name": "stg_ees_ks4", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_ks4.sql", "original_file_path": "models/staging/stg_ees_ks4.sql", "unique_id": "model.school_compare.stg_ees_ks4", "fqn": ["school_compare", "staging", "stg_ees_ks4"], "alias": "stg_ees_ks4", "checksum": {"name": "sha256", "checksum": "3a3541de61b4d6e6b1bd82c325480e4474a143110f475b50bb3461cb60452091"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.855532, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_ks4\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: KS4 attainment data from EES\n-- KS4 performance data is long-format with breakdown dimensions (breakdown_topic,\n-- breakdown, sex). Unlike KS2 which has a subject dimension, KS4 metrics are\n-- already in separate columns \u2014 we just filter to the all-pupils total row.\n-- EES uses 'z' (not applicable) and 'c' (confidential) as suppression codes \u2014\n-- safe_numeric handles both by treating any non-numeric string as NULL.\n-- NOTE: older EES releases (pre-2023/24) use breakdown_topic = 'All pupils';\n-- the 2023/24 release switched to breakdown_topic = 'Total'. Both are included.\n\nwith performance as (\n select * from {{ source('raw', 'ees_ks4_performance') }}\n where school_urn ~ '^[0-9]+$'\n and time_period ~ '^[0-9]+$'\n),\n\n-- Filter to all-pupils totals (one row per school per year)\nall_pupils as (\n select\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n {{ safe_numeric('pupil_count') }}::integer as total_pupils,\n\n -- Attainment 8\n {{ safe_numeric('attainment8_average') }} as attainment_8_score,\n\n -- Progress 8\n {{ safe_numeric('progress8_average') }} as progress_8_score,\n {{ safe_numeric('progress8_lower_95_ci') }} as progress_8_lower_ci,\n {{ safe_numeric('progress8_upper_95_ci') }} as progress_8_upper_ci,\n {{ safe_numeric('progress8eng_average') }} as progress_8_english,\n {{ safe_numeric('progress8mat_average') }} as progress_8_maths,\n {{ safe_numeric('progress8ebacc_average') }} as progress_8_ebacc,\n {{ safe_numeric('progress8open_average') }} as progress_8_open,\n\n -- English & Maths pass rates\n {{ safe_numeric('engmath_95_percent') }} as english_maths_strong_pass_pct,\n {{ safe_numeric('engmath_94_percent') }} as english_maths_standard_pass_pct,\n\n -- EBacc\n {{ safe_numeric('ebacc_entering_percent') }} as ebacc_entry_pct,\n {{ safe_numeric('ebacc_95_percent') }} as ebacc_strong_pass_pct,\n {{ safe_numeric('ebacc_94_percent') }} as ebacc_standard_pass_pct,\n {{ safe_numeric('ebacc_aps_average') }} as ebacc_avg_score,\n\n -- GCSE grade 9-1\n {{ safe_numeric('gcse_91_percent') }} as gcse_grade_91_pct\n\n from performance\n where breakdown_topic in ('Total', 'All pupils')\n and breakdown = 'Total'\n and sex = 'Total'\n),\n\n-- KS4 info table for context/demographics\ninfo as (\n select\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n {{ safe_numeric('endks4_pupil_count') }}::integer as eligible_pupils,\n {{ safe_numeric('ks2_scaledscore_average') }} as prior_attainment_avg,\n {{ safe_numeric('sen_pupil_percent') }} as sen_pct,\n {{ safe_numeric('sen_with_ehcp_pupil_percent') }} as sen_ehcp_pct,\n {{ safe_numeric('sen_no_ehcp_pupil_percent') }} as sen_support_pct,\n -- EES suppression sentinels (z/c/x/q/u) and blanks must not reach the\n -- mart as banding labels\n case\n when lower(trim(progress8_banding)) in ('', 'z', 'c', 'x', 'q', 'u', 'null')\n then null\n else trim(progress8_banding)\n end as progress_8_banding,\n {{ safe_numeric('attainment8_diffn') }} as attainment_8_disadvantage_gap,\n {{ safe_numeric('progress8_diffn') }} as progress_8_disadvantage_gap\n from {{ source('raw', 'ees_ks4_info') }}\n where school_urn is not null\n)\n\nselect\n p.urn,\n p.year,\n p.total_pupils,\n i.eligible_pupils,\n i.prior_attainment_avg,\n\n -- Attainment 8\n p.attainment_8_score,\n\n -- Progress 8\n p.progress_8_score,\n p.progress_8_lower_ci,\n p.progress_8_upper_ci,\n p.progress_8_english,\n p.progress_8_maths,\n p.progress_8_ebacc,\n p.progress_8_open,\n\n -- English & Maths\n p.english_maths_strong_pass_pct,\n p.english_maths_standard_pass_pct,\n\n -- EBacc\n p.ebacc_entry_pct,\n p.ebacc_strong_pass_pct,\n p.ebacc_standard_pass_pct,\n p.ebacc_avg_score,\n\n -- GCSE\n p.gcse_grade_91_pct,\n\n -- Context\n i.sen_pct,\n i.sen_ehcp_pct,\n i.sen_support_pct,\n i.progress_8_banding,\n i.attainment_8_disadvantage_gap,\n i.progress_8_disadvantage_gap\n\nfrom all_pupils p\nleft join info i on p.urn = i.urn and p.year = i.year", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_ks4_performance"], ["raw", "ees_ks4_info"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_ks4_performance", "source.school_compare.raw.ees_ks4_info"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_legacy_ks4": {"database": "school_compare", "schema": "staging", "name": "stg_legacy_ks4", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_legacy_ks4.sql", "original_file_path": "models/staging/stg_legacy_ks4.sql", "unique_id": "model.school_compare.stg_legacy_ks4", "fqn": ["school_compare", "staging", "stg_legacy_ks4"], "alias": "stg_legacy_ks4", "checksum": {"name": "sha256", "checksum": "794d61332074548bb35a4f49835f8046fb1422695f926d166828f5e423e149db"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.858708, "relation_name": "\"school_compare\".\"staging\".\"stg_legacy_ks4\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: Legacy KS4 data from pre-EES DfE performance tables\n-- Covers 2015/16 \u2013 2018/19; EES provides 2023/24 onwards.\n-- The tap already maps old column names and strips % suffixes;\n-- this model just applies safe_numeric casts and adds NULL placeholders\n-- for columns not available in the legacy format.\n\nselect\n cast(trim(urn) as integer) as urn,\n cast(trim(year) as integer) as year,\n\n {{ safe_numeric('total_pupils') }}::integer as total_pupils,\n {{ safe_numeric('total_pupils') }}::integer as eligible_pupils,\n null::numeric as prior_attainment_avg,\n\n -- Attainment 8\n {{ safe_numeric('attainment_8_score') }} as attainment_8_score,\n\n -- Progress 8\n {{ safe_numeric('progress_8_score') }} as progress_8_score,\n {{ safe_numeric('progress_8_lower_ci') }} as progress_8_lower_ci,\n {{ safe_numeric('progress_8_upper_ci') }} as progress_8_upper_ci,\n {{ safe_numeric('progress_8_english') }} as progress_8_english,\n {{ safe_numeric('progress_8_maths') }} as progress_8_maths,\n {{ safe_numeric('progress_8_ebacc') }} as progress_8_ebacc,\n {{ safe_numeric('progress_8_open') }} as progress_8_open,\n\n -- English & Maths pass rates\n {{ safe_numeric('english_maths_strong_pass_pct') }} as english_maths_strong_pass_pct,\n {{ safe_numeric('english_maths_standard_pass_pct') }} as english_maths_standard_pass_pct,\n\n -- EBacc\n {{ safe_numeric('ebacc_entry_pct') }} as ebacc_entry_pct,\n {{ safe_numeric('ebacc_strong_pass_pct') }} as ebacc_strong_pass_pct,\n {{ safe_numeric('ebacc_standard_pass_pct') }} as ebacc_standard_pass_pct,\n null::numeric as ebacc_avg_score,\n\n -- GCSE grade 9-1 (not published in legacy format)\n null::numeric as gcse_grade_91_pct,\n\n -- SEN\n null::numeric as sen_pct,\n {{ safe_numeric('sen_ehcp_pct') }} as sen_ehcp_pct,\n {{ safe_numeric('sen_support_pct') }} as sen_support_pct,\n\n -- Progress 8 banding & disadvantage gaps (not published in legacy format)\n null::text as progress_8_banding,\n null::numeric as attainment_8_disadvantage_gap,\n null::numeric as progress_8_disadvantage_gap\n\nfrom {{ source('raw', 'legacy_ks4') }}\nwhere urn is not null\n and urn ~ '^[0-9]+$'", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "legacy_ks4"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.legacy_ks4"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_census_benchmarks": {"database": "school_compare", "schema": "marts", "name": "fact_census_benchmarks", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_census_benchmarks.sql", "original_file_path": "models/marts/fact_census_benchmarks.sql", "unique_id": "model.school_compare.fact_census_benchmarks", "fqn": ["school_compare", "marts", "fact_census_benchmarks"], "alias": "fact_census_benchmarks", "checksum": {"name": "sha256", "checksum": "a81b31b5e1a0834d9c62fe6213a42c01a5d9e5f299235bbc49a4a7b56e20fe19"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "State-school context benchmarks from the pupil census \u2014 one row per phase (primary/secondary), latest census year. fsm_pct/eal_pct are pupil-weighted means; consumers label them \"state-school average (computed from our dataset)\", never \"England average\".\n", "columns": {"phase": {"name": "phase", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.958771, "relation_name": "\"school_compare\".\"marts\".\"fact_census_benchmarks\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Mart: state-school context benchmarks from the pupil census \u2014 one row per\n-- phase, latest census year. Computed at import time (never per request).\n-- fsm_pct / eal_pct are pupil-weighted means, i.e. \"what % of pupils\", not\n-- \"the median school\" \u2014 this matches how DfE quotes national FSM/EAL rates.\n-- Consumers must label these \"state-school average (computed from our\n-- dataset)\" (spec \u00a78.6), never \"England average\".\n\nwith latest as (\n select max(year) as year from {{ ref('fact_pupil_characteristics') }}\n),\n\nclassified as (\n select\n case\n when p.phase_type_grouping ilike '%primary%' then 'primary'\n when p.phase_type_grouping ilike '%secondary%' then 'secondary'\n end as phase,\n p.total_pupils,\n p.fsm_pct,\n p.eal_pct,\n l.year\n from {{ ref('fact_pupil_characteristics') }} p\n join latest l on p.year = l.year\n where p.total_pupils is not null and p.total_pupils > 0\n)\n\nselect\n phase,\n max(year) as year,\n round((sum(fsm_pct * total_pupils) filter (where fsm_pct is not null)\n / nullif(sum(total_pupils) filter (where fsm_pct is not null), 0))::numeric, 1) as fsm_pct,\n round((sum(eal_pct * total_pupils) filter (where eal_pct is not null)\n / nullif(sum(total_pupils) filter (where eal_pct is not null), 0))::numeric, 1) as eal_pct,\n round(percentile_cont(0.5) within group (order by total_pupils))::integer as median_pupils\nfrom classified\nwhere phase is not null\ngroup by phase", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_pupil_characteristics", "package": null, "version": null}, {"name": "fact_pupil_characteristics", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.fact_pupil_characteristics"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["phase"], "time_spine": null}, "model.school_compare.fact_pupil_characteristics": {"database": "school_compare", "schema": "marts", "name": "fact_pupil_characteristics", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_pupil_characteristics.sql", "original_file_path": "models/marts/fact_pupil_characteristics.sql", "unique_id": "model.school_compare.fact_pupil_characteristics", "fqn": ["school_compare", "marts", "fact_pupil_characteristics"], "alias": "fact_pupil_characteristics", "checksum": {"name": "sha256", "checksum": "cffde5cbc7b2e42d0df227cd2f32410b87f817b738715017c1fc46b6a3f7122c"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Pupil demographics \u2014 one row per URN per year", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.9585762, "relation_name": "\"school_compare\".\"marts\".\"fact_pupil_characteristics\"", "raw_code": "-- Mart: Pupil characteristics \u2014 one row per URN per year\n\nselect\n urn,\n year,\n phase_type_grouping,\n total_pupils,\n female_pupils,\n male_pupils,\n full_time_pupils,\n part_time_pupils,\n total_boarders,\n fsm_eligible_n,\n fsm_pct,\n eal_pct,\n young_carer_pct,\n ethnicity_white_british_pct,\n ethnicity_white_other_pct,\n ethnicity_gypsy_roma_pct,\n ethnicity_mixed_wbc_pct,\n ethnicity_mixed_wba_pct,\n ethnicity_mixed_wa_pct,\n ethnicity_mixed_other_pct,\n ethnicity_asian_indian_pct,\n ethnicity_asian_pakistani_pct,\n ethnicity_asian_bangladeshi_pct,\n ethnicity_asian_other_pct,\n ethnicity_black_caribbean_pct,\n ethnicity_black_african_pct,\n ethnicity_black_other_pct,\n ethnicity_chinese_pct,\n ethnicity_other_pct,\n ethnicity_unclassified_pct\nfrom {{ ref('int_pupil_chars_merged') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "int_pupil_chars_merged", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.int_pupil_chars_merged"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.int_pupil_chars_merged": {"database": "school_compare", "schema": "intermediate", "name": "int_pupil_chars_merged", "resource_type": "model", "package_name": "school_compare", "path": "intermediate/int_pupil_chars_merged.sql", "original_file_path": "models/intermediate/int_pupil_chars_merged.sql", "unique_id": "model.school_compare.int_pupil_chars_merged", "fqn": ["school_compare", "intermediate", "int_pupil_chars_merged"], "alias": "int_pupil_chars_merged", "checksum": {"name": "sha256", "checksum": "e14f55eb1d34878f1b2ba334ab719ab6221efb62c147df1d7c0866ff28d9a10b"}, "config": {"enabled": true, "alias": null, "schema": "intermediate", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "intermediate"}, "created_at": 1784225256.862957, "relation_name": "\"school_compare\".\"intermediate\".\"int_pupil_chars_merged\"", "raw_code": "-- Intermediate model: Merged pupil characteristics from census data\n\nselect\n urn,\n year,\n phase_type_grouping,\n total_pupils,\n female_pupils,\n male_pupils,\n full_time_pupils,\n part_time_pupils,\n total_boarders,\n fsm_eligible_n,\n fsm_pct,\n eal_pct,\n young_carer_pct,\n ethnicity_white_british_pct,\n ethnicity_white_other_pct,\n ethnicity_gypsy_roma_pct,\n ethnicity_mixed_wbc_pct,\n ethnicity_mixed_wba_pct,\n ethnicity_mixed_wa_pct,\n ethnicity_mixed_other_pct,\n ethnicity_asian_indian_pct,\n ethnicity_asian_pakistani_pct,\n ethnicity_asian_bangladeshi_pct,\n ethnicity_asian_other_pct,\n ethnicity_black_caribbean_pct,\n ethnicity_black_african_pct,\n ethnicity_black_other_pct,\n ethnicity_chinese_pct,\n ethnicity_other_pct,\n ethnicity_unclassified_pct\nfrom {{ ref('stg_ees_census') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_census", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_census"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_ees_census": {"database": "school_compare", "schema": "staging", "name": "stg_ees_census", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_census.sql", "original_file_path": "models/staging/stg_ees_census.sql", "unique_id": "model.school_compare.stg_ees_census", "fqn": ["school_compare", "staging", "stg_ees_census"], "alias": "stg_ees_census", "checksum": {"name": "sha256", "checksum": "ff3c516a20ad25b525d4be015a9fcfe0a5329899c2ae7fc5aad4aa6b123fcb22"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.863596, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_census\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: School Pupils and Characteristics (census)\n-- One row per school per year. CSV has 269 columns; we extract the\n-- aggregate demographic summaries only (not per-age/year-group breakdowns).\n-- Column renames happen in the tap before Singer persists to raw.ees_census.\n\nwith source as (\n select * from {{ source('raw', 'ees_census') }}\n where school_urn ~ '^[0-9]+$'\n and time_period ~ '^[0-9]+$'\n)\n\nselect\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n school_name,\n phase_type_grouping,\n\n -- Pupil counts\n {{ safe_numeric('total_pupils') }}::integer as total_pupils,\n {{ safe_numeric('female_pupils') }}::integer as female_pupils,\n {{ safe_numeric('male_pupils') }}::integer as male_pupils,\n {{ safe_numeric('full_time_pupils') }}::integer as full_time_pupils,\n {{ safe_numeric('part_time_pupils') }}::integer as part_time_pupils,\n {{ safe_numeric('total_boarders') }}::integer as total_boarders,\n\n -- FSM\n {{ safe_numeric('fsm_eligible_n') }}::integer as fsm_eligible_n,\n {{ safe_numeric('fsm_pct') }} as fsm_pct,\n\n -- EAL & young carers\n {{ safe_numeric('eal_pct') }} as eal_pct,\n {{ safe_numeric('young_carer_pct') }} as young_carer_pct,\n\n -- Ethnicity\n {{ safe_numeric('ethnicity_white_british_pct') }} as ethnicity_white_british_pct,\n {{ safe_numeric('ethnicity_white_other_pct') }} as ethnicity_white_other_pct,\n {{ safe_numeric('ethnicity_gypsy_roma_pct') }} as ethnicity_gypsy_roma_pct,\n {{ safe_numeric('ethnicity_mixed_wbc_pct') }} as ethnicity_mixed_wbc_pct,\n {{ safe_numeric('ethnicity_mixed_wba_pct') }} as ethnicity_mixed_wba_pct,\n {{ safe_numeric('ethnicity_mixed_wa_pct') }} as ethnicity_mixed_wa_pct,\n {{ safe_numeric('ethnicity_mixed_other_pct') }} as ethnicity_mixed_other_pct,\n {{ safe_numeric('ethnicity_asian_indian_pct') }} as ethnicity_asian_indian_pct,\n {{ safe_numeric('ethnicity_asian_pakistani_pct') }} as ethnicity_asian_pakistani_pct,\n {{ safe_numeric('ethnicity_asian_bangladeshi_pct') }} as ethnicity_asian_bangladeshi_pct,\n {{ safe_numeric('ethnicity_asian_other_pct') }} as ethnicity_asian_other_pct,\n {{ safe_numeric('ethnicity_black_caribbean_pct') }} as ethnicity_black_caribbean_pct,\n {{ safe_numeric('ethnicity_black_african_pct') }} as ethnicity_black_african_pct,\n {{ safe_numeric('ethnicity_black_other_pct') }} as ethnicity_black_other_pct,\n {{ safe_numeric('ethnicity_chinese_pct') }} as ethnicity_chinese_pct,\n {{ safe_numeric('ethnicity_other_pct') }} as ethnicity_other_pct,\n {{ safe_numeric('ethnicity_unclassified_pct') }} as ethnicity_unclassified_pct\n\nfrom source", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_census"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_census"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_admissions": {"database": "school_compare", "schema": "marts", "name": "fact_admissions", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_admissions.sql", "original_file_path": "models/marts/fact_admissions.sql", "unique_id": "model.school_compare.fact_admissions", "fqn": ["school_compare", "marts", "fact_admissions"], "alias": "fact_admissions", "checksum": {"name": "sha256", "checksum": "b3c18e42c3c8961ca8856cf67f421a7794ac896c61dce1febe3cadade107e3c6"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "School admissions \u2014 one row per URN per year", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "second_preference_offers": {"name": "second_preference_offers", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "third_preference_offers": {"name": "third_preference_offers", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "cross_la_applications": {"name": "cross_la_applications", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "cross_la_offers": {"name": "cross_la_offers", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "total_offers": {"name": "total_offers", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.959255, "relation_name": "\"school_compare\".\"marts\".\"fact_admissions\"", "raw_code": "-- Mart: School admissions \u2014 one row per URN per year\n\nselect\n urn,\n year,\n school_phase,\n places_offered,\n total_offers,\n total_applications,\n first_preference_applications,\n first_preference_offers,\n second_preference_offers,\n third_preference_offers,\n cross_la_applications,\n cross_la_offers,\n first_preference_offer_pct,\n oversubscription_ratio,\n oversubscribed,\n admissions_policy\nfrom {{ ref('stg_ees_admissions') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_admissions", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_admissions"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_ees_admissions": {"database": "school_compare", "schema": "staging", "name": "stg_ees_admissions", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_admissions.sql", "original_file_path": "models/staging/stg_ees_admissions.sql", "unique_id": "model.school_compare.stg_ees_admissions", "fqn": ["school_compare", "staging", "stg_ees_admissions"], "alias": "stg_ees_admissions", "checksum": {"name": "sha256", "checksum": "b4e9317532796ab3413861305cf091cd216e1e4f07efec9d08c17f83cf23afbc"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.86735, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_admissions\"", "raw_code": "-- Staging model: Primary and secondary school admissions from EES\n-- Wide format, one row per school per year. No geographic_level column.\n-- Note: FSM_eligible_percent is stored with mixed case by target-postgres and\n-- must be double-quoted in SQL to avoid case-folding to fsm_eligible_percent.\n\nwith source as (\n select * from {{ source('raw', 'ees_admissions') }}\n -- Exclude rows where school_urn is null, empty, or non-numeric (e.g. \"n/a\" LA aggregates)\n where school_urn ~ '^[0-9]+$'\n and time_period ~ '^[0-9]+$'\n),\n\nrenamed as (\n select\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n school_phase,\n entry_year,\n\n -- Places and offers\n -- places_offered: number of places the school actually offered in this\n -- year's admissions round. NOT the Published Admission Number (PAN),\n -- which is the school's published capacity \u2014 EES does not expose PAN\n -- at school level, so we use the count of offers as the best proxy.\n {{ safe_numeric('total_number_places_offered') }}::integer as places_offered,\n {{ safe_numeric('number_preferred_offers') }}::integer as total_offers,\n {{ safe_numeric('number_1st_preference_offers') }}::integer as first_preference_offers,\n {{ safe_numeric('number_2nd_preference_offers') }}::integer as second_preference_offers,\n {{ safe_numeric('number_3rd_preference_offers') }}::integer as third_preference_offers,\n\n -- Applications\n {{ safe_numeric('times_put_as_any_preferred_school') }}::integer as total_applications,\n {{ safe_numeric('times_put_as_1st_preference') }}::integer as first_preference_applications,\n\n -- Cross-borough demand: applications naming this school from families\n -- living in another local authority, and offers made to them.\n {{ safe_numeric('\"all_applications_from_another_LA\"') }}::integer as cross_la_applications,\n {{ safe_numeric('\"offers_to_applicants_from_another_LA\"') }}::integer as cross_la_offers,\n\n -- Proportions\n -- first_preference_offer_pct: of families who listed this school FIRST,\n -- the percentage that received an offer. 0\u2013100 scale.\n -- The raw EES column `proportion_1stprefs_v_totaloffers` stores a\n -- different, misleading figure (first-preference applications divided\n -- by total offers, i.e. an oversubscription ratio) \u2014 do not use it.\n case\n when {{ safe_numeric('times_put_as_1st_preference') }} > 0\n then 100.0\n * {{ safe_numeric('number_1st_preference_offers') }}\n / {{ safe_numeric('times_put_as_1st_preference') }}\n end as first_preference_offer_pct,\n\n -- Oversubscription ratio: 1st-preference applications per place offered.\n -- >1 means the school is oversubscribed on first preferences.\n case\n when {{ safe_numeric('total_number_places_offered') }} > 0\n then {{ safe_numeric('times_put_as_1st_preference') }}::numeric\n / {{ safe_numeric('total_number_places_offered') }}\n end as oversubscription_ratio,\n\n -- Derived: oversubscribed if 1st-preference applications > places offered\n -- Use already-cast columns to avoid repeating the regex expression\n (\n {{ safe_numeric('times_put_as_1st_preference') }}\n > {{ safe_numeric('total_number_places_offered') }}\n ) as oversubscribed,\n\n -- Context\n admissions_policy,\n {{ safe_numeric('\"FSM_eligible_percent\"') }} as fsm_eligible_pct\n\n from source\n)\n\nselect * from renamed", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_admissions"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_admissions"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_ks2_national_averages": {"database": "school_compare", "schema": "marts", "name": "fact_ks2_national_averages", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_ks2_national_averages.sql", "original_file_path": "models/marts/fact_ks2_national_averages.sql", "unique_id": "model.school_compare.fact_ks2_national_averages", "fqn": ["school_compare", "marts", "fact_ks2_national_averages"], "alias": "fact_ks2_national_averages", "checksum": {"name": "sha256", "checksum": "7e4a689b3ac405ed7311ad43cff791455f4b74e6e12dab8f75bb747e30070c20"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Official DfE KS2 national headline averages \u2014 one row per academic year", "columns": {"year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.9593852, "relation_name": "\"school_compare\".\"marts\".\"fact_ks2_national_averages\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Mart: Official DfE KS2 national headline averages \u2014 one row per academic year.\n-- These are the published England-wide figures, not computed means from our school dataset.\n-- Used by the /api/national-averages endpoint to provide accurate per-year reference lines\n-- on the school history chart and for hero stat comparisons.\n\nselect\n year,\n rwm_expected_pct,\n rwm_high_pct,\n reading_expected_pct,\n reading_high_pct,\n reading_avg_score,\n writing_expected_pct,\n writing_gd_pct,\n maths_expected_pct,\n maths_high_pct,\n maths_avg_score,\n gps_expected_pct,\n gps_high_pct,\n gps_avg_score,\n science_expected_pct\nfrom {{ ref('stg_ees_ks2_national') }}\norder by year", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_ks2_national", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_ks2_national"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["year"], "time_spine": null}, "model.school_compare.stg_ees_ks2_national": {"database": "school_compare", "schema": "staging", "name": "stg_ees_ks2_national", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_ks2_national.sql", "original_file_path": "models/staging/stg_ees_ks2_national.sql", "unique_id": "model.school_compare.stg_ees_ks2_national", "fqn": ["school_compare", "staging", "stg_ees_ks2_national"], "alias": "stg_ees_ks2_national", "checksum": {"name": "sha256", "checksum": "7306cd5981b55f5a6505f89122cee9a4ca4c1d384431536b5240edf5f8c8e898"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.870332, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_ks2_national\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: DfE KS2 national headline averages\n-- Source: EES data catalogue CSV (one row per academic year, England national total)\n-- COVID years 2019/20 and 2020/21 are naturally absent \u2014 DfE did not publish figures\n-- because national assessments were cancelled. Those years produce no rows here.\n-- 'x' (not applicable) and suppressed values are coerced to NULL by safe_numeric.\n\nselect\n cast(trim(time_period) as integer) as year,\n\n {{ safe_numeric('rwm_expected_pct') }} as rwm_expected_pct,\n {{ safe_numeric('rwm_high_pct') }} as rwm_high_pct,\n\n {{ safe_numeric('reading_expected_pct') }} as reading_expected_pct,\n {{ safe_numeric('reading_high_pct') }} as reading_high_pct,\n {{ safe_numeric('reading_avg_score') }} as reading_avg_score,\n\n {{ safe_numeric('writing_expected_pct') }} as writing_expected_pct,\n {{ safe_numeric('writing_gd_pct') }} as writing_gd_pct,\n\n {{ safe_numeric('maths_expected_pct') }} as maths_expected_pct,\n {{ safe_numeric('maths_high_pct') }} as maths_high_pct,\n {{ safe_numeric('maths_avg_score') }} as maths_avg_score,\n\n {{ safe_numeric('gps_expected_pct') }} as gps_expected_pct,\n {{ safe_numeric('gps_high_pct') }} as gps_high_pct,\n {{ safe_numeric('gps_avg_score') }} as gps_avg_score,\n\n {{ safe_numeric('science_expected_pct') }} as science_expected_pct\n\nfrom {{ source('raw', 'ees_ks2_national') }}\nwhere time_period ~ '^[0-9]+$'\n -- 2015/16 was the first year of the current expected-standard tests, so it's\n -- the correct floor (not 2016/17 -- that excluded a real, comparable national\n -- row). GPS/science/scaled-score columns are already mapped correctly end to\n -- end (tap.py's _KS2_NATIONAL_COL_MAP + this model select them fine); the\n -- prod NULLs for those fields are stale raw.ees_ks2_national data from before\n -- the map covered them, not a mapping bug -- no map change accompanies this fix.\n and cast(trim(time_period) as integer) >= 201516", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_ks2_national"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_ks2_national"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_finance": {"database": "school_compare", "schema": "marts", "name": "fact_finance", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_finance.sql", "original_file_path": "models/marts/fact_finance.sql", "unique_id": "model.school_compare.fact_finance", "fqn": ["school_compare", "marts", "fact_finance"], "alias": "fact_finance", "checksum": {"name": "sha256", "checksum": "b9eb2ac96af2d48206fe73fbc8d956619c8505fea7e0f95c529484d45fe1e60a"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "School financial data \u2014 one row per URN per year", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.95952, "relation_name": "\"school_compare\".\"marts\".\"fact_finance\"", "raw_code": "-- Mart: School financial data \u2014 one row per URN per year\n\nselect\n urn,\n year,\n per_pupil_spend,\n staff_cost_pct,\n teacher_cost_pct,\n support_staff_cost_pct,\n premises_cost_pct\nfrom {{ ref('stg_fbit_finance') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_fbit_finance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_fbit_finance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_fbit_finance": {"database": "school_compare", "schema": "staging", "name": "stg_fbit_finance", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_fbit_finance.sql", "original_file_path": "models/staging/stg_fbit_finance.sql", "unique_id": "model.school_compare.stg_fbit_finance", "fqn": ["school_compare", "staging", "stg_fbit_finance"], "alias": "stg_fbit_finance", "checksum": {"name": "sha256", "checksum": "bc4c4b98c46a4a6122258cb6115f9418db5827b47cebc20a2c97641c6e90f1a2"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.8732932, "relation_name": "\"school_compare\".\"staging\".\"stg_fbit_finance\"", "raw_code": "-- Staging model: Financial benchmarking data from FBIT API\n\nwith source as (\n select * from {{ source('raw', 'fbit_finance') }}\n),\n\nrenamed as (\n select\n cast(urn as integer) as urn,\n cast(year as integer) as year,\n cast(per_pupil_spend as numeric) as per_pupil_spend,\n cast(staff_cost_pct as numeric) as staff_cost_pct,\n cast(teacher_cost_pct as numeric) as teacher_cost_pct,\n cast(support_staff_cost_pct as numeric) as support_staff_cost_pct,\n cast(premises_cost_pct as numeric) as premises_cost_pct\n from source\n where urn is not null\n)\n\nselect * from renamed", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "fbit_finance"]], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["source.school_compare.raw.fbit_finance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_deprivation": {"database": "school_compare", "schema": "marts", "name": "fact_deprivation", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_deprivation.sql", "original_file_path": "models/marts/fact_deprivation.sql", "unique_id": "model.school_compare.fact_deprivation", "fqn": ["school_compare", "marts", "fact_deprivation"], "alias": "fact_deprivation", "checksum": {"name": "sha256", "checksum": "270f49fcf16d710be2f05b9f5ce1e5c4826bdee0f5273104276fc65eec1f2d28"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "IDACI deprivation index \u2014 one row per URN", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.959689, "relation_name": "\"school_compare\".\"marts\".\"fact_deprivation\"", "raw_code": "-- Mart: Deprivation index \u2014 one row per URN\n-- The IDACI tap already resolves postcode \u2192 LSOA \u2192 IoD2019 score per school.\n\nselect\n urn,\n lsoa_code,\n idaci_score,\n idaci_decile\nfrom {{ ref('stg_idaci') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_idaci", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_idaci"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn"], "time_spine": null}, "model.school_compare.stg_idaci": {"database": "school_compare", "schema": "staging", "name": "stg_idaci", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_idaci.sql", "original_file_path": "models/staging/stg_idaci.sql", "unique_id": "model.school_compare.stg_idaci", "fqn": ["school_compare", "staging", "stg_idaci"], "alias": "stg_idaci", "checksum": {"name": "sha256", "checksum": "840a949c12c1480f1cdd874c0af6fcd3d3cbb4cc6f74cee01202f6ffa9754b7c"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.8745248, "relation_name": "\"school_compare\".\"staging\".\"stg_idaci\"", "raw_code": "-- Staging model: Income Deprivation Affecting Children Index\n-- The IDACI tap resolves postcode \u2192 LSOA and joins to IoD2019 data,\n-- so each row already has a URN.\n\nwith source as (\n select * from {{ source('raw', 'idaci') }}\n),\n\nrenamed as (\n select\n cast(urn as integer) as urn,\n lsoa_code,\n cast(idaci_score as numeric) as idaci_score,\n cast(idaci_decile as integer) as idaci_decile\n from source\n where urn is not null\n)\n\nselect * from renamed", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "idaci"]], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["source.school_compare.raw.idaci"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "test.school_compare.assert_urns_in_uk_bounds": {"database": "school_compare", "schema": "dbt_test__audit", "name": "assert_urns_in_uk_bounds", "resource_type": "test", "package_name": "school_compare", "path": "assert_urns_in_uk_bounds.sql", "original_file_path": "tests/assert_urns_in_uk_bounds.sql", "unique_id": "test.school_compare.assert_urns_in_uk_bounds", "fqn": ["school_compare", "assert_urns_in_uk_bounds"], "alias": "assert_urns_in_uk_bounds", "checksum": {"name": "sha256", "checksum": "b5bcc4736f23422874d0ec9963b32da568245eb4978170dc680ceccfeb22a153"}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.9002, "relation_name": null, "raw_code": "-- Custom test: All geocoded schools should have coordinates within the UK\n\nselect\n urn,\n easting,\n northing\nfrom {{ ref('dim_location') }}\nwhere easting is not null\n and northing is not null\n and (\n easting < 0 or easting > 700000\n or northing < 0 or northing > 1300000\n )", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_location", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.dim_location"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}, "test.school_compare.assert_no_orphaned_facts": {"database": "school_compare", "schema": "dbt_test__audit", "name": "assert_no_orphaned_facts", "resource_type": "test", "package_name": "school_compare", "path": "assert_no_orphaned_facts.sql", "original_file_path": "tests/assert_no_orphaned_facts.sql", "unique_id": "test.school_compare.assert_no_orphaned_facts", "fqn": ["school_compare", "assert_no_orphaned_facts"], "alias": "assert_no_orphaned_facts", "checksum": {"name": "sha256", "checksum": "fd5287fef72054c2f8bf3ef2450eafe63da791a301642a6b3667d0b2853cc3ee"}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn"}, "created_at": 1784225256.902774, "relation_name": null, "raw_code": "-- Custom test: All fact table URNs should exist in dim_school\n\nselect f.urn\nfrom {{ ref('fact_ks2_performance') }} f\nleft join {{ ref('dim_school') }} d on f.urn = d.urn\nwhere d.urn is null\nlimit 10", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_performance", "package": null, "version": null}, {"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.fact_ks2_performance", "model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}, "test.school_compare.assert_gias_code_names_match_seed": {"database": "school_compare", "schema": "dbt_test__audit", "name": "assert_gias_code_names_match_seed", "resource_type": "test", "package_name": "school_compare", "path": "assert_gias_code_names_match_seed.sql", "original_file_path": "tests/assert_gias_code_names_match_seed.sql", "unique_id": "test.school_compare.assert_gias_code_names_match_seed", "fqn": ["school_compare", "assert_gias_code_names_match_seed"], "alias": "assert_gias_code_names_match_seed", "checksum": {"name": "sha256", "checksum": "51084dfebf62e9f965242b1487dd043cf50a85c6305355c3403fcfb28e64967d"}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn"}, "created_at": 1784225256.90382, "relation_name": null, "raw_code": "-- Warn when the live GIAS CSV carries a (code, name) pair we don't have in\n-- the dictionary seed \u2014 i.e. DfE added or renamed a value. Fix by rerunning\n-- pipeline/scripts/generate_gias_codes.py and committing the regenerated\n-- dictionaries + seed together.\n{{ config(severity='warn') }}\n\nwith raw_pairs as (\n {% for field_key, code_col, name_col in [\n ('school_type', 'TypeOfEstablishment (code)', 'TypeOfEstablishment (name)'),\n ('establishment_status', 'EstablishmentStatus (code)', 'EstablishmentStatus (name)'),\n ('phase_of_education', 'PhaseOfEducation (code)', 'PhaseOfEducation (name)'),\n ('official_sixth_form', 'OfficialSixthForm (code)', 'OfficialSixthForm (name)'),\n ('religious_character', 'ReligiousCharacter (code)', 'ReligiousCharacter (name)'),\n ('admissions_policy', 'AdmissionsPolicy (code)', 'AdmissionsPolicy (name)')\n ] %}\n select distinct\n '{{ field_key }}' as field,\n cast(nullif(trim(\"{{ code_col }}\"), '') as integer) as code,\n nullif(trim(\"{{ name_col }}\"), '') as name\n from {{ source('raw', 'gias_establishments') }}\n where nullif(trim(\"{{ code_col }}\"), '') is not null\n and nullif(trim(\"{{ name_col }}\"), '') is not null\n {% if not loop.last %}union all{% endif %}\n {% endfor %}\n)\n\nselect r.*\nfrom raw_pairs r\nleft join {{ ref('gias_code_names') }} s\n on s.field = r.field\n and s.code = r.code\n and s.name = r.name\nwhere s.field is null", "doc_blocks": [], "language": "sql", "refs": [{"name": "gias_code_names", "package": null, "version": null}], "sources": [["raw", "gias_establishments"], ["raw", "gias_establishments"], ["raw", "gias_establishments"], ["raw", "gias_establishments"], ["raw", "gias_establishments"], ["raw", "gias_establishments"]], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["source.school_compare.raw.gias_establishments", "seed.school_compare.gias_code_names"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}, "test.school_compare.not_null_dim_location_urn.aefc04518b": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_location_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_location_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_location_urn.aefc04518b", "fqn": ["school_compare", "marts", "not_null_dim_location_urn"], "alias": "not_null_dim_location_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.980829, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_location", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_location"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.dim_location", "attached_node": "model.school_compare.dim_location", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('dim_location')) }}"}, "namespace": null}}, "test.school_compare.unique_dim_location_urn.7acc2482eb": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_dim_location_urn", "resource_type": "test", "package_name": "school_compare", "path": "unique_dim_location_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_dim_location_urn.7acc2482eb", "fqn": ["school_compare", "marts", "unique_dim_location_urn"], "alias": "unique_dim_location_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.981445, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_location", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.dim_location"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.dim_location", "attached_node": "model.school_compare.dim_location", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('dim_location')) }}"}, "namespace": null}}, "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a": {"database": "school_compare", "schema": "dbt_test__audit", "name": "relationships_dim_location_urn__urn__ref_dim_school_", "resource_type": "test", "package_name": "school_compare", "path": "relationships_dim_location_urn__urn__ref_dim_school_.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a", "fqn": ["school_compare", "marts", "relationships_dim_location_urn__urn__ref_dim_school_"], "alias": "relationships_dim_location_urn__urn__ref_dim_school_", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.982482, "relation_name": null, "raw_code": "{{ test_relationships(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}, {"name": "dim_location", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_relationships", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school", "model.school_compare.dim_location"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.dim_location", "attached_node": "model.school_compare.dim_location", "test_metadata": {"name": "relationships", "kwargs": {"to": "ref('dim_school')", "field": "urn", "column_name": "urn", "model": "{{ get_where_subquery(ref('dim_location')) }}"}, "namespace": null}}, "test.school_compare.not_null_dim_location_postcode.1693ab4948": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_location_postcode", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_location_postcode.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_location_postcode.1693ab4948", "fqn": ["school_compare", "marts", "not_null_dim_location_postcode"], "alias": "not_null_dim_location_postcode", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.987798, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_location", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_location"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "postcode", "file_key_name": "models.dim_location", "attached_node": "model.school_compare.dim_location", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "postcode", "model": "{{ get_where_subquery(ref('dim_location')) }}"}, "namespace": null}}, "test.school_compare.not_null_dim_school_urn.06fbd2ff26": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_school_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_school_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_school_urn.06fbd2ff26", "fqn": ["school_compare", "marts", "not_null_dim_school_urn"], "alias": "not_null_dim_school_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.988222, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.unique_dim_school_urn.9851fcd288": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_dim_school_urn", "resource_type": "test", "package_name": "school_compare", "path": "unique_dim_school_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_dim_school_urn.9851fcd288", "fqn": ["school_compare", "marts", "unique_dim_school_urn"], "alias": "unique_dim_school_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.988626, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.not_null_dim_school_school_name.2a2e381565": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_school_school_name", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_school_school_name.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_school_school_name.2a2e381565", "fqn": ["school_compare", "marts", "not_null_dim_school_school_name"], "alias": "not_null_dim_school_school_name", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.9890718, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "school_name", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "school_name", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.not_null_dim_school_phase_code.3140ca1112": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_school_phase_code", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_school_phase_code.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_school_phase_code.3140ca1112", "fqn": ["school_compare", "marts", "not_null_dim_school_phase_code"], "alias": "not_null_dim_school_phase_code", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn"}, "created_at": 1784225256.989849, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\") }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "phase_code", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "phase_code", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.not_null_dim_school_has_sixth_form.ea8e313799": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_school_has_sixth_form", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_school_has_sixth_form.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_school_has_sixth_form.ea8e313799", "fqn": ["school_compare", "marts", "not_null_dim_school_has_sixth_form"], "alias": "not_null_dim_school_has_sixth_form", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.990271, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "has_sixth_form", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "has_sixth_form", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_dim_school_has_sixth_form__True__False.41eaa1ffd6": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_dim_school_has_sixth_form__True__False", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_dim_school_has_sixth_form__True__False.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_dim_school_has_sixth_form__True__False.41eaa1ffd6", "fqn": ["school_compare", "marts", "accepted_values_dim_school_has_sixth_form__True__False"], "alias": "accepted_values_dim_school_has_sixth_form__True__False", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.9906812, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "has_sixth_form", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "accepted_values", "kwargs": {"values": [true, false], "column_name": "has_sixth_form", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_dim_school_status_code__1__3.b0a0bd9a3a": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_dim_school_status_code__1__3", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_dim_school_status_code__1__3.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_dim_school_status_code__1__3.b0a0bd9a3a", "fqn": ["school_compare", "marts", "accepted_values_dim_school_status_code__1__3"], "alias": "accepted_values_dim_school_status_code__1__3", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.992705, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "status_code", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "accepted_values", "kwargs": {"values": [1, 3], "column_name": "status_code", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57.66c218b8b6": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_dim_school_acfbcb3c3f27e749b793e06a71dcf52b.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57.66c218b8b6", "fqn": ["school_compare", "marts", "accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57"], "alias": "accepted_values_dim_school_acfbcb3c3f27e749b793e06a71dcf52b", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "accepted_values_dim_school_acfbcb3c3f27e749b793e06a71dcf52b", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn", "alias": "accepted_values_dim_school_acfbcb3c3f27e749b793e06a71dcf52b"}, "created_at": 1784225256.9936929, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\",alias=\"accepted_values_dim_school_acfbcb3c3f27e749b793e06a71dcf52b\") }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "school_type_code", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "accepted_values", "kwargs": {"values": [1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 14, 15, 18, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 49, 56, 57], "column_name": "school_type_code", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99.16074ac494": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_dim_school_1a238e6e3f01d47aeac019cd1c400d51.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99.16074ac494", "fqn": ["school_compare", "marts", "accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99"], "alias": "accepted_values_dim_school_1a238e6e3f01d47aeac019cd1c400d51", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "accepted_values_dim_school_1a238e6e3f01d47aeac019cd1c400d51", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn", "alias": "accepted_values_dim_school_1a238e6e3f01d47aeac019cd1c400d51"}, "created_at": 1784225256.9949062, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\",alias=\"accepted_values_dim_school_1a238e6e3f01d47aeac019cd1c400d51\") }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "religious_character_code", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "accepted_values", "kwargs": {"values": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 99], "column_name": "religious_character_code", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_dim_school_admissions_policy_code__0__2__4__9.cfb6e9f008": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_dim_school_admissions_policy_code__0__2__4__9", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_dim_school_admissions_policy_code__0__2__4__9.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_dim_school_admissions_policy_code__0__2__4__9.cfb6e9f008", "fqn": ["school_compare", "marts", "accepted_values_dim_school_admissions_policy_code__0__2__4__9"], "alias": "accepted_values_dim_school_admissions_policy_code__0__2__4__9", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn"}, "created_at": 1784225256.996076, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\") }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "admissions_policy_code", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "accepted_values", "kwargs": {"values": [0, 2, 4, 9], "column_name": "admissions_policy_code", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks2_performance_urn.7b7546cb10": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks2_performance_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks2_performance_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks2_performance_urn.7b7546cb10", "fqn": ["school_compare", "marts", "not_null_fact_ks2_performance_urn"], "alias": "not_null_fact_ks2_performance_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.997118, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks2_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_ks2_performance", "attached_node": "model.school_compare.fact_ks2_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_ks2_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks2_performance_year.bf28467bae": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks2_performance_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks2_performance_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks2_performance_year.bf28467bae", "fqn": ["school_compare", "marts", "not_null_fact_ks2_performance_year"], "alias": "not_null_fact_ks2_performance_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.99752, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks2_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks2_performance", "attached_node": "model.school_compare.fact_ks2_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks2_performance')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_ks2_performance_urn_year.240e6de465": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_ks2_performance_urn_year", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_ks2_performance_urn_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_ks2_performance_urn_year.240e6de465", "fqn": ["school_compare", "marts", "unique_fact_ks2_performance_urn_year"], "alias": "unique_fact_ks2_performance_urn_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.9979892, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_ks2_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.fact_ks2_performance", "attached_node": "model.school_compare.fact_ks2_performance", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn || '-' || year", "model": "{{ get_where_subquery(ref('fact_ks2_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_performance_urn.334fe56f01": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_performance_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_performance_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_performance_urn.334fe56f01", "fqn": ["school_compare", "marts", "not_null_fact_performance_urn"], "alias": "not_null_fact_performance_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.998399, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_performance", "attached_node": "model.school_compare.fact_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_performance_year.eed5795761": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_performance_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_performance_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_performance_year.eed5795761", "fqn": ["school_compare", "marts", "not_null_fact_performance_year"], "alias": "not_null_fact_performance_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.998792, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_performance", "attached_node": "model.school_compare.fact_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_performance')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_performance_urn_year.f5c028dcb0": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_performance_urn_year", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_performance_urn_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_performance_urn_year.f5c028dcb0", "fqn": ["school_compare", "marts", "unique_fact_performance_urn_year"], "alias": "unique_fact_performance_urn_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.999189, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.fact_performance", "attached_node": "model.school_compare.fact_performance", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn || '-' || year", "model": "{{ get_where_subquery(ref('fact_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks4_performance_urn.dc24537cea": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks4_performance_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks4_performance_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks4_performance_urn.dc24537cea", "fqn": ["school_compare", "marts", "not_null_fact_ks4_performance_urn"], "alias": "not_null_fact_ks4_performance_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.999593, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks4_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_ks4_performance", "attached_node": "model.school_compare.fact_ks4_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_ks4_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks4_performance_year.ca2d34b977": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks4_performance_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks4_performance_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks4_performance_year.ca2d34b977", "fqn": ["school_compare", "marts", "not_null_fact_ks4_performance_year"], "alias": "not_null_fact_ks4_performance_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.000018, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks4_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks4_performance", "attached_node": "model.school_compare.fact_ks4_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks4_performance')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average.1f92b23f9b": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_fact_ks4_perfo_cae327e9ae1b05c2c878e063014181be.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average.1f92b23f9b", "fqn": ["school_compare", "marts", "accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average"], "alias": "accepted_values_fact_ks4_perfo_cae327e9ae1b05c2c878e063014181be", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "accepted_values_fact_ks4_perfo_cae327e9ae1b05c2c878e063014181be", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": "progress_8_banding is not null", "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn", "where": "progress_8_banding is not null", "alias": "accepted_values_fact_ks4_perfo_cae327e9ae1b05c2c878e063014181be"}, "created_at": 1784225257.0005372, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\",where=\"progress_8_banding is not null\",alias=\"accepted_values_fact_ks4_perfo_cae327e9ae1b05c2c878e063014181be\") }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.fact_ks4_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "progress_8_banding", "file_key_name": "models.fact_ks4_performance", "attached_node": "model.school_compare.fact_ks4_performance", "test_metadata": {"name": "accepted_values", "kwargs": {"values": ["Well above average", "Above average", "Average", "Below average", "Well below average"], "column_name": "progress_8_banding", "model": "{{ get_where_subquery(ref('fact_ks4_performance')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_ks4_performance_urn_year.eba97e8000": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_ks4_performance_urn_year", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_ks4_performance_urn_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_ks4_performance_urn_year.eba97e8000", "fqn": ["school_compare", "marts", "unique_fact_ks4_performance_urn_year"], "alias": "unique_fact_ks4_performance_urn_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.002696, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_ks4_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.fact_ks4_performance", "attached_node": "model.school_compare.fact_ks4_performance", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn || '-' || year", "model": "{{ get_where_subquery(ref('fact_ks4_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks4_national_averages_year.43387931fd": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks4_national_averages_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks4_national_averages_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks4_national_averages_year.43387931fd", "fqn": ["school_compare", "marts", "not_null_fact_ks4_national_averages_year"], "alias": "not_null_fact_ks4_national_averages_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.003171, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_national_averages", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks4_national_averages"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks4_national_averages", "attached_node": "model.school_compare.fact_ks4_national_averages", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks4_national_averages')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_ks4_national_averages_year.9e4ab94935": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_ks4_national_averages_year", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_ks4_national_averages_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_ks4_national_averages_year.9e4ab94935", "fqn": ["school_compare", "marts", "unique_fact_ks4_national_averages_year"], "alias": "unique_fact_ks4_national_averages_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0036201, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_national_averages", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_ks4_national_averages"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks4_national_averages", "attached_node": "model.school_compare.fact_ks4_national_averages", "test_metadata": {"name": "unique", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks4_national_averages')) }}"}, "namespace": null}}, "test.school_compare.not_null_map_school_lineage_urn.24da1a9909": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_map_school_lineage_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_map_school_lineage_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_map_school_lineage_urn.24da1a9909", "fqn": ["school_compare", "marts", "not_null_map_school_lineage_urn"], "alias": "not_null_map_school_lineage_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0040388, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "map_school_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.map_school_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.map_school_lineage", "attached_node": "model.school_compare.map_school_lineage", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('map_school_lineage')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ofsted_inspection_urn.65304a896d": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ofsted_inspection_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ofsted_inspection_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ofsted_inspection_urn.65304a896d", "fqn": ["school_compare", "marts", "not_null_fact_ofsted_inspection_urn"], "alias": "not_null_fact_ofsted_inspection_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.00444, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ofsted_inspection", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ofsted_inspection"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_ofsted_inspection", "attached_node": "model.school_compare.fact_ofsted_inspection", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_ofsted_inspection')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ofsted_inspection_inspection_date.5aa4bf0513": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ofsted_inspection_inspection_date", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ofsted_inspection_inspection_date.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ofsted_inspection_inspection_date.5aa4bf0513", "fqn": ["school_compare", "marts", "not_null_fact_ofsted_inspection_inspection_date"], "alias": "not_null_fact_ofsted_inspection_inspection_date", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0048928, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ofsted_inspection", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ofsted_inspection"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "inspection_date", "file_key_name": "models.fact_ofsted_inspection", "attached_node": "model.school_compare.fact_ofsted_inspection", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "inspection_date", "model": "{{ get_where_subquery(ref('fact_ofsted_inspection')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_pupil_characteristics_urn.bdeebf869b": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_pupil_characteristics_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_pupil_characteristics_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_pupil_characteristics_urn.bdeebf869b", "fqn": ["school_compare", "marts", "not_null_fact_pupil_characteristics_urn"], "alias": "not_null_fact_pupil_characteristics_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0053, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_pupil_characteristics", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_pupil_characteristics"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_pupil_characteristics", "attached_node": "model.school_compare.fact_pupil_characteristics", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_pupil_characteristics')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_pupil_characteristics_year.19bec90c81": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_pupil_characteristics_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_pupil_characteristics_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_pupil_characteristics_year.19bec90c81", "fqn": ["school_compare", "marts", "not_null_fact_pupil_characteristics_year"], "alias": "not_null_fact_pupil_characteristics_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0057049, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_pupil_characteristics", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_pupil_characteristics"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_pupil_characteristics", "attached_node": "model.school_compare.fact_pupil_characteristics", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_pupil_characteristics')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_census_benchmarks_phase.c4c9ad96c1": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_census_benchmarks_phase", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_census_benchmarks_phase.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_census_benchmarks_phase.c4c9ad96c1", "fqn": ["school_compare", "marts", "not_null_fact_census_benchmarks_phase"], "alias": "not_null_fact_census_benchmarks_phase", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.006102, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_census_benchmarks", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_census_benchmarks"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "phase", "file_key_name": "models.fact_census_benchmarks", "attached_node": "model.school_compare.fact_census_benchmarks", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "phase", "model": "{{ get_where_subquery(ref('fact_census_benchmarks')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_census_benchmarks_phase.c06d73d097": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_census_benchmarks_phase", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_census_benchmarks_phase.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_census_benchmarks_phase.c06d73d097", "fqn": ["school_compare", "marts", "unique_fact_census_benchmarks_phase"], "alias": "unique_fact_census_benchmarks_phase", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.006498, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_census_benchmarks", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_census_benchmarks"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "phase", "file_key_name": "models.fact_census_benchmarks", "attached_node": "model.school_compare.fact_census_benchmarks", "test_metadata": {"name": "unique", "kwargs": {"column_name": "phase", "model": "{{ get_where_subquery(ref('fact_census_benchmarks')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_admissions_urn.fdf334f63c": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_admissions_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_admissions_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_admissions_urn.fdf334f63c", "fqn": ["school_compare", "marts", "not_null_fact_admissions_urn"], "alias": "not_null_fact_admissions_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0069299, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_admissions", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_admissions"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_admissions", "attached_node": "model.school_compare.fact_admissions", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_admissions')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_admissions_year.11169d1a1f": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_admissions_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_admissions_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_admissions_year.11169d1a1f", "fqn": ["school_compare", "marts", "not_null_fact_admissions_year"], "alias": "not_null_fact_admissions_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.007335, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_admissions", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_admissions"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_admissions", "attached_node": "model.school_compare.fact_admissions", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_admissions')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks2_national_averages_year.84b854a9ce": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks2_national_averages_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks2_national_averages_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks2_national_averages_year.84b854a9ce", "fqn": ["school_compare", "marts", "not_null_fact_ks2_national_averages_year"], "alias": "not_null_fact_ks2_national_averages_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.007735, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_national_averages", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks2_national_averages"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks2_national_averages", "attached_node": "model.school_compare.fact_ks2_national_averages", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks2_national_averages')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_ks2_national_averages_year.99f3ae39bb": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_ks2_national_averages_year", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_ks2_national_averages_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_ks2_national_averages_year.99f3ae39bb", "fqn": ["school_compare", "marts", "unique_fact_ks2_national_averages_year"], "alias": "unique_fact_ks2_national_averages_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.008128, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_national_averages", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_ks2_national_averages"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks2_national_averages", "attached_node": "model.school_compare.fact_ks2_national_averages", "test_metadata": {"name": "unique", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks2_national_averages')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_finance_urn.162f08d129": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_finance_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_finance_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_finance_urn.162f08d129", "fqn": ["school_compare", "marts", "not_null_fact_finance_urn"], "alias": "not_null_fact_finance_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.008537, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_finance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_finance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_finance", "attached_node": "model.school_compare.fact_finance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_finance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_finance_year.d96868883e": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_finance_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_finance_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_finance_year.d96868883e", "fqn": ["school_compare", "marts", "not_null_fact_finance_year"], "alias": "not_null_fact_finance_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.008935, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_finance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_finance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_finance", "attached_node": "model.school_compare.fact_finance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_finance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_deprivation_urn.96d84c2c61": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_deprivation_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_deprivation_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_deprivation_urn.96d84c2c61", "fqn": ["school_compare", "marts", "not_null_fact_deprivation_urn"], "alias": "not_null_fact_deprivation_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0093708, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_deprivation", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_deprivation"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_deprivation", "attached_node": "model.school_compare.fact_deprivation", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_deprivation')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_deprivation_urn.194d6d1f01": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_deprivation_urn", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_deprivation_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_deprivation_urn.194d6d1f01", "fqn": ["school_compare", "marts", "unique_fact_deprivation_urn"], "alias": "unique_fact_deprivation_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.009774, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_deprivation", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_deprivation"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_deprivation", "attached_node": "model.school_compare.fact_deprivation", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_deprivation')) }}"}, "namespace": null}}, "test.school_compare.source_not_null_raw_gias_establishments__URN_.daa9473baf": {"database": "school_compare", "schema": "dbt_test__audit", "name": "source_not_null_raw_gias_establishments__URN_", "resource_type": "test", "package_name": "school_compare", "path": "source_not_null_raw_gias_establishments__URN_.sql", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "test.school_compare.source_not_null_raw_gias_establishments__URN_.daa9473baf", "fqn": ["school_compare", "staging", "source_not_null_raw_gias_establishments__URN_"], "alias": "source_not_null_raw_gias_establishments__URN_", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.036978, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "gias_establishments"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["source.school_compare.raw.gias_establishments"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "\"URN\"", "file_key_name": "sources.raw", "attached_node": null, "test_metadata": {"name": "not_null", "kwargs": {"column_name": "\"URN\"", "model": "{{ get_where_subquery(source('raw', 'gias_establishments')) }}"}, "namespace": null}}, "test.school_compare.source_unique_raw_gias_establishments__URN_.9f6d358797": {"database": "school_compare", "schema": "dbt_test__audit", "name": "source_unique_raw_gias_establishments__URN_", "resource_type": "test", "package_name": "school_compare", "path": "source_unique_raw_gias_establishments__URN_.sql", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "test.school_compare.source_unique_raw_gias_establishments__URN_.9f6d358797", "fqn": ["school_compare", "staging", "source_unique_raw_gias_establishments__URN_"], "alias": "source_unique_raw_gias_establishments__URN_", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0374432, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "gias_establishments"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["source.school_compare.raw.gias_establishments"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "\"URN\"", "file_key_name": "sources.raw", "attached_node": null, "test_metadata": {"name": "unique", "kwargs": {"column_name": "\"URN\"", "model": "{{ get_where_subquery(source('raw', 'gias_establishments')) }}"}, "namespace": null}}, "test.school_compare.source_not_null_raw_gias_links__URN_.588070236c": {"database": "school_compare", "schema": "dbt_test__audit", "name": "source_not_null_raw_gias_links__URN_", "resource_type": "test", "package_name": "school_compare", "path": "source_not_null_raw_gias_links__URN_.sql", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "test.school_compare.source_not_null_raw_gias_links__URN_.588070236c", "fqn": ["school_compare", "staging", "source_not_null_raw_gias_links__URN_"], "alias": "source_not_null_raw_gias_links__URN_", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0445042, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "gias_links"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["source.school_compare.raw.gias_links"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "\"URN\"", "file_key_name": "sources.raw", "attached_node": null, "test_metadata": {"name": "not_null", "kwargs": {"column_name": "\"URN\"", "model": "{{ get_where_subquery(source('raw', 'gias_links')) }}"}, "namespace": null}}}, "sources": {"source.school_compare.raw.gias_establishments": {"database": "school_compare", "schema": "raw", "name": "gias_establishments", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.gias_establishments", "fqn": ["school_compare", "staging", "raw", "gias_establishments"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "gias_establishments", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "GIAS bulk establishment data (one row per URN)", "columns": {"URN": {"name": "URN", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": true, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"gias_establishments\"", "created_at": 1784225257.0438552, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.gias_links": {"database": "school_compare", "schema": "raw", "name": "gias_links", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.gias_links", "fqn": ["school_compare", "staging", "raw", "gias_links"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "gias_links", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "GIAS predecessor/successor links between schools", "columns": {"URN": {"name": "URN", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": true, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"gias_links\"", "created_at": 1784225257.044908, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ofsted_inspections": {"database": "school_compare", "schema": "raw", "name": "ofsted_inspections", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ofsted_inspections", "fqn": ["school_compare", "staging", "raw", "ofsted_inspections"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ofsted_inspections", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Ofsted Management Information inspection records", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ofsted_inspections\"", "created_at": 1784225257.0450501, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks2_attainment": {"database": "school_compare", "schema": "raw", "name": "ees_ks2_attainment", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks2_attainment", "fqn": ["school_compare", "staging", "raw", "ees_ks2_attainment"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks2_attainment", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "KS2 school attainment (long format \u2014 one row per school \u00d7 subject \u00d7 breakdown)", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks2_attainment\"", "created_at": 1784225257.045182, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks2_info": {"database": "school_compare", "schema": "raw", "name": "ees_ks2_info", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks2_info", "fqn": ["school_compare", "staging", "raw", "ees_ks2_info"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks2_info", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "KS2 school information (wide format \u2014 context/demographics per school)", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks2_info\"", "created_at": 1784225257.045315, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.legacy_ks2": {"database": "school_compare", "schema": "raw", "name": "legacy_ks2", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.legacy_ks2", "fqn": ["school_compare", "staging", "raw", "legacy_ks2"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "legacy_ks2", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Pre-COVID KS2 school-level data (2015-16 to 2018-19) from DfE performance tables", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"legacy_ks2\"", "created_at": 1784225257.045443, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks4_performance": {"database": "school_compare", "schema": "raw", "name": "ees_ks4_performance", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks4_performance", "fqn": ["school_compare", "staging", "raw", "ees_ks4_performance"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks4_performance", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "KS4 performance tables (long format \u2014 one row per school \u00d7 breakdown \u00d7 sex)", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks4_performance\"", "created_at": 1784225257.045571, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks4_info": {"database": "school_compare", "schema": "raw", "name": "ees_ks4_info", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks4_info", "fqn": ["school_compare", "staging", "raw", "ees_ks4_info"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks4_info", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "KS4 school information (wide format \u2014 context/demographics per school)", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks4_info\"", "created_at": 1784225257.0456982, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.legacy_ks4": {"database": "school_compare", "schema": "raw", "name": "legacy_ks4", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.legacy_ks4", "fqn": ["school_compare", "staging", "raw", "legacy_ks4"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "legacy_ks4", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Pre-EES KS4 school-level data (2015/16\u20132018/19) from DfE Compare School Performance ZIPs", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"legacy_ks4\"", "created_at": 1784225257.045825, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_census": {"database": "school_compare", "schema": "raw", "name": "ees_census", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_census", "fqn": ["school_compare", "staging", "raw", "ees_census"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_census", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "School census pupil characteristics", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_census\"", "created_at": 1784225257.0459478, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_admissions": {"database": "school_compare", "schema": "raw", "name": "ees_admissions", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_admissions", "fqn": ["school_compare", "staging", "raw", "ees_admissions"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_admissions", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Primary and secondary school admissions data", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_admissions\"", "created_at": 1784225257.046114, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks2_national": {"database": "school_compare", "schema": "raw", "name": "ees_ks2_national", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks2_national", "fqn": ["school_compare", "staging", "raw", "ees_ks2_national"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks2_national", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "KS2 national headline averages from DfE EES data catalogue \u2014 one row per academic year", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks2_national\"", "created_at": 1784225257.0462809, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks4_national": {"database": "school_compare", "schema": "raw", "name": "ees_ks4_national", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks4_national", "fqn": ["school_compare", "staging", "raw", "ees_ks4_national"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks4_national", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Official KS4 national headline averages from DfE EES data catalogue \u2014 one row per academic year", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks4_national\"", "created_at": 1784225257.046441, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.fbit_finance": {"database": "school_compare", "schema": "raw", "name": "fbit_finance", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.fbit_finance", "fqn": ["school_compare", "staging", "raw", "fbit_finance"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "fbit_finance", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Financial benchmarking data from FBIT API", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"fbit_finance\"", "created_at": 1784225257.046582, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.idaci": {"database": "school_compare", "schema": "raw", "name": "idaci", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.idaci", "fqn": ["school_compare", "staging", "raw", "idaci"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "idaci", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Income Deprivation Affecting Children Index lookups", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"idaci\"", "created_at": 1784225257.0467148, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}}, "macros": {"macro.school_compare.parse_ofsted_grade": {"name": "parse_ofsted_grade", "resource_type": "macro", "package_name": "school_compare", "path": "macros/parse_ofsted_grade.sql", "original_file_path": "macros/parse_ofsted_grade.sql", "unique_id": "macro.school_compare.parse_ofsted_grade", "macro_sql": "{% macro parse_ofsted_grade(column) %}\n case\n when {{ column }}::text in ('1', 'Outstanding') then 1\n when {{ column }}::text in ('2', 'Good') then 2\n when {{ column }}::text in ('3', 'Requires improvement', 'Requires Improvement', 'Satisfactory') then 3\n when {{ column }}::text in ('4', 'Inadequate') then 4\n when {{ column }}::text in ('9', 'SWK', 'Serious Weaknesses') then 4\n when {{ column }}::text in ('SM', 'Special Measures') then 4\n else null\n end\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "column", "type": null, "description": ""}], "created_at": 1784225035.212215, "supported_languages": null}, "macro.school_compare.validate_uk_coordinates": {"name": "validate_uk_coordinates", "resource_type": "macro", "package_name": "school_compare", "path": "macros/validate_uk_coordinates.sql", "original_file_path": "macros/validate_uk_coordinates.sql", "unique_id": "macro.school_compare.validate_uk_coordinates", "macro_sql": "{% macro validate_uk_coordinates(lat_col, lng_col) %}\n (\n {{ lat_col }} between 49.0 and 61.0\n and {{ lng_col }} between -8.0 and 2.0\n )\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "lat_col", "type": null, "description": ""}, {"name": "lng_col", "type": null, "description": ""}], "created_at": 1784225035.212335, "supported_languages": null}, "macro.school_compare.parse_report_card_grade": {"name": "parse_report_card_grade", "resource_type": "macro", "package_name": "school_compare", "path": "macros/parse_report_card_grade.sql", "original_file_path": "macros/parse_report_card_grade.sql", "unique_id": "macro.school_compare.parse_report_card_grade", "macro_sql": "{% macro parse_report_card_grade(column_name) %}\n case lower(trim(nullif({{ column_name }}, 'NULL')))\n when 'exceptional' then 1\n when 'strong standard' then 2\n when 'expected standard' then 3\n when 'needs attention' then 4\n when 'urgent improvement' then 5\n else null\n end\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "column_name", "type": null, "description": ""}], "created_at": 1784225035.212427, "supported_languages": null}, "macro.school_compare.parse_ungraded_outcome": {"name": "parse_ungraded_outcome", "resource_type": "macro", "package_name": "school_compare", "path": "macros/parse_ungraded_outcome.sql", "original_file_path": "macros/parse_ungraded_outcome.sql", "unique_id": "macro.school_compare.parse_ungraded_outcome", "macro_sql": "{% macro parse_ungraded_outcome(column) %}\n case\n when {{ column }} ilike '%remains Outstanding%' then 1\n when {{ column }} ilike '%remains Good%' then 2\n else null\n end\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "column", "type": null, "description": ""}], "created_at": 1784225035.2125282, "supported_languages": null}, "macro.school_compare.generate_schema_name": {"name": "generate_schema_name", "resource_type": "macro", "package_name": "school_compare", "path": "macros/generate_schema_name.sql", "original_file_path": "macros/generate_schema_name.sql", "unique_id": "macro.school_compare.generate_schema_name", "macro_sql": "{% macro generate_schema_name(custom_schema_name, node) -%}\n {%- if custom_schema_name is not none -%}\n {{ custom_schema_name | trim }}\n {%- else -%}\n {{ target.schema }}\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_schema_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.212668, "supported_languages": null}, "macro.school_compare.safe_numeric": {"name": "safe_numeric", "resource_type": "macro", "package_name": "school_compare", "path": "macros/safe_numeric.sql", "original_file_path": "macros/safe_numeric.sql", "unique_id": "macro.school_compare.safe_numeric", "macro_sql": "{% macro safe_numeric(col) -%}\n CASE WHEN {{ col }} ~ '^-?[0-9]+(\\.[0-9]+)?$' THEN {{ col }}::numeric ELSE NULL END\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "col", "type": null, "description": ""}], "created_at": 1784225035.212754, "supported_languages": null}, "macro.school_compare.chain_lineage": {"name": "chain_lineage", "resource_type": "macro", "package_name": "school_compare", "path": "macros/chain_lineage.sql", "original_file_path": "macros/chain_lineage.sql", "unique_id": "macro.school_compare.chain_lineage", "macro_sql": "{% macro chain_lineage(source_ref, urn_col='urn', year_col='year') %}\n\nwith current_data as (\n select\n {{ urn_col }} as current_urn,\n {{ urn_col }} as source_urn,\n *\n from {{ source_ref }}\n),\n\npredecessor_data as (\n select\n lin.current_urn,\n src.{{ urn_col }} as source_urn,\n src.*\n from {{ source_ref }} src\n inner join {{ ref('int_school_lineage') }} lin\n on src.{{ urn_col }} = lin.predecessor_urn\n where not exists (\n select 1 from {{ source_ref }} curr\n where curr.{{ urn_col }} = lin.current_urn\n and curr.{{ year_col }} = src.{{ year_col }}\n )\n),\n\ncombined as (\n select * from current_data\n union all\n select * from predecessor_data\n)\n\nselect * from combined\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_ref", "type": null, "description": ""}, {"name": "urn_col", "type": null, "description": ""}, {"name": "year_col", "type": null, "description": ""}], "created_at": 1784225035.2130072, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp": {"name": "postgres__current_timestamp", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp", "macro_sql": "{% macro postgres__current_timestamp() -%}\n now()\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.213104, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_string_as_time": {"name": "postgres__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_string_as_time", "macro_sql": "{% macro postgres__snapshot_string_as_time(timestamp) -%}\n {%- set result = \"'\" ~ timestamp ~ \"'::timestamp without time zone\" -%}\n {{ return(result) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "timestamp", "type": null, "description": ""}], "created_at": 1784225035.21347, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_get_time": {"name": "postgres__snapshot_get_time", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_get_time", "macro_sql": "{% macro postgres__snapshot_get_time() -%}\n {{ current_timestamp() }}::timestamp without time zone\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2135198, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp_backcompat": {"name": "postgres__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp_backcompat", "macro_sql": "{% macro postgres__current_timestamp_backcompat() %}\n current_timestamp::{{ type_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.213564, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat": {"name": "postgres__current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat", "macro_sql": "{% macro postgres__current_timestamp_in_utc_backcompat() %}\n (current_timestamp at time zone 'utc')::{{ type_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2136068, "supported_languages": null}, "macro.dbt_postgres.postgres__get_catalog_relations": {"name": "postgres__get_catalog_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/catalog.sql", "original_file_path": "macros/catalog.sql", "unique_id": "macro.dbt_postgres.postgres__get_catalog_relations", "macro_sql": "{% macro postgres__get_catalog_relations(information_schema, relations) -%}\n {%- call statement('catalog', fetch_result=True) -%}\n\n {#\n If the user has multiple databases set and the first one is wrong, this will fail.\n But we won't fail in the case where there are multiple quoting-difference-only dbs, which is better.\n #}\n {% set database = information_schema.database %}\n {{ adapter.verify_database(database) }}\n\n select\n '{{ database }}' as table_database,\n sch.nspname as table_schema,\n tbl.relname as table_name,\n case tbl.relkind\n when 'v' then 'VIEW'\n when 'm' then 'MATERIALIZED VIEW'\n else 'BASE TABLE'\n end as table_type,\n tbl_desc.description as table_comment,\n col.attname as column_name,\n col.attnum as column_index,\n pg_catalog.format_type(col.atttypid, col.atttypmod) as column_type,\n col_desc.description as column_comment,\n pg_get_userbyid(tbl.relowner) as table_owner\n\n from pg_catalog.pg_namespace sch\n join pg_catalog.pg_class tbl on tbl.relnamespace = sch.oid\n join pg_catalog.pg_attribute col on col.attrelid = tbl.oid\n left outer join pg_catalog.pg_description tbl_desc on (tbl_desc.objoid = tbl.oid and tbl_desc.objsubid = 0)\n left outer join pg_catalog.pg_description col_desc on (col_desc.objoid = tbl.oid and col_desc.objsubid = col.attnum)\n where (\n {%- for relation in relations -%}\n {%- if relation.identifier -%}\n (upper(sch.nspname) = upper('{{ relation.schema }}') and\n upper(tbl.relname) = upper('{{ relation.identifier }}'))\n {%- else-%}\n upper(sch.nspname) = upper('{{ relation.schema }}')\n {%- endif -%}\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n )\n and not pg_is_other_temp_schema(sch.oid) -- not a temporary schema belonging to another session\n and tbl.relpersistence in ('p', 'u') -- [p]ermanent table or [u]nlogged table. Exclude [t]emporary tables\n and tbl.relkind in ('r', 'v', 'f', 'p', 'm') -- o[r]dinary table, [v]iew, [f]oreign table, [p]artitioned table, [m]aterialized view. Other values are [i]ndex, [S]equence, [c]omposite type, [t]OAST table\n and col.attnum > 0 -- negative numbers are used for system columns such as oid\n and not col.attisdropped -- column as not been dropped\n\n order by\n sch.nspname,\n tbl.relname,\n col.attnum\n\n {%- endcall -%}\n\n {{ return(load_result('catalog').table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "relations", "type": null, "description": ""}], "created_at": 1784225035.214046, "supported_languages": null}, "macro.dbt_postgres.postgres__get_catalog": {"name": "postgres__get_catalog", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/catalog.sql", "original_file_path": "macros/catalog.sql", "unique_id": "macro.dbt_postgres.postgres__get_catalog", "macro_sql": "{% macro postgres__get_catalog(information_schema, schemas) -%}\n {%- set relations = [] -%}\n {%- for schema in schemas -%}\n {%- set dummy = relations.append({'schema': schema}) -%}\n {%- endfor -%}\n {{ return(postgres__get_catalog_relations(information_schema, relations)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schemas", "type": null, "description": ""}], "created_at": 1784225035.2141912, "supported_languages": null}, "macro.dbt_postgres.postgres__get_relations": {"name": "postgres__get_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations.sql", "original_file_path": "macros/relations.sql", "unique_id": "macro.dbt_postgres.postgres__get_relations", "macro_sql": "{% macro postgres__get_relations() -%}\n\n {#\n -- in pg_depend, objid is the dependent, refobjid is the referenced object\n -- > a pg_depend entry indicates that the referenced object cannot be\n -- > dropped without also dropping the dependent object.\n #}\n\n {%- call statement('relations', fetch_result=True) -%}\n select distinct\n dependent_namespace.nspname as dependent_schema,\n dependent_class.relname as dependent_name,\n referenced_namespace.nspname as referenced_schema,\n referenced_class.relname as referenced_name\n\n -- Query for views: views are entries in pg_class with an entry in pg_rewrite, but we avoid\n -- a seq scan on pg_rewrite by leveraging the fact there is an \"internal\" row in pg_depend for\n -- the view...\n from pg_class as dependent_class\n join pg_namespace as dependent_namespace on dependent_namespace.oid = dependent_class.relnamespace\n join pg_depend as dependent_depend on dependent_depend.refobjid = dependent_class.oid\n and dependent_depend.classid = 'pg_rewrite'::regclass\n and dependent_depend.refclassid = 'pg_class'::regclass\n and dependent_depend.deptype = 'i'\n\n -- ... and via pg_depend (that has a row per column, hence the need for \"distinct\" above, and\n -- making sure to exclude the internal row to avoid a view appearing to depend on itself)...\n join pg_depend as joining_depend on joining_depend.objid = dependent_depend.objid\n and joining_depend.classid = 'pg_rewrite'::regclass\n and joining_depend.refclassid = 'pg_class'::regclass\n and joining_depend.refobjid != dependent_depend.refobjid\n\n -- ... we can find the tables they query from in pg_class, but excluding system tables. Note we\n -- don't need need to exclude _dependent_ system tables, because they only query from other\n -- system tables, and so are automatically excluded by excluding _referenced_ system tables\n join pg_class as referenced_class on referenced_class.oid = joining_depend.refobjid\n join pg_namespace as referenced_namespace on referenced_namespace.oid = referenced_class.relnamespace\n and referenced_namespace.nspname != 'information_schema'\n and referenced_namespace.nspname not like 'pg\\_%'\n\n order by\n dependent_schema, dependent_name, referenced_schema, referenced_name;\n\n {%- endcall -%}\n\n {{ return(load_result('relations').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.214432, "supported_languages": null}, "macro.dbt_postgres.postgres_get_relations": {"name": "postgres_get_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations.sql", "original_file_path": "macros/relations.sql", "unique_id": "macro.dbt_postgres.postgres_get_relations", "macro_sql": "{% macro postgres_get_relations() %}\n {{ return(postgres__get_relations()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2144818, "supported_languages": null}, "macro.dbt_postgres.postgres__create_table_as": {"name": "postgres__create_table_as", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__create_table_as", "macro_sql": "{% macro postgres__create_table_as(temporary, relation, sql) -%}\n {%- set unlogged = config.get('unlogged', default=false) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary -%}\n temporary\n {%- elif unlogged -%}\n unlogged\n {%- endif %} table {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {% endif -%}\n {% if contract_config.enforced and (not temporary) -%}\n {{ get_table_columns_and_constraints() }} ;\n insert into {{ relation }} (\n {{ adapter.dispatch('get_column_names', 'dbt')() }}\n )\n {%- set sql = get_select_subquery(sql) %}\n {% else %}\n as\n {% endif %}\n (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.default__get_column_names", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "temporary", "type": null, "description": ""}, {"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.215414, "supported_languages": null}, "macro.dbt_postgres.postgres__get_create_index_sql": {"name": "postgres__get_create_index_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_create_index_sql", "macro_sql": "{% macro postgres__get_create_index_sql(relation, index_dict) -%}\n {%- set index_config = adapter.parse_index(index_dict) -%}\n {%- set comma_separated_columns = \", \".join(index_config.columns) -%}\n {%- set index_name = index_config.render(relation) -%}\n\n create {% if index_config.unique -%}\n unique\n {%- endif %} index if not exists\n \"{{ index_name }}\"\n on {{ relation }} {% if index_config.type -%}\n using {{ index_config.type }}\n {%- endif %}\n ({{ comma_separated_columns }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_dict", "type": null, "description": ""}], "created_at": 1784225035.2156029, "supported_languages": null}, "macro.dbt_postgres.postgres__create_schema": {"name": "postgres__create_schema", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__create_schema", "macro_sql": "{% macro postgres__create_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier().include(database=False) }}\n {%- endcall -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.215725, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_schema": {"name": "postgres__drop_schema", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__drop_schema", "macro_sql": "{% macro postgres__drop_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier().include(database=False) }} cascade\n {%- endcall -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.215845, "supported_languages": null}, "macro.dbt_postgres.postgres__get_columns_in_relation": {"name": "postgres__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_columns_in_relation", "macro_sql": "{% macro postgres__get_columns_in_relation(relation) -%}\n {% call statement('get_columns_in_relation', fetch_result=True) %}\n select\n column_name,\n data_type,\n character_maximum_length,\n numeric_precision,\n numeric_scale\n\n from {{ relation.information_schema('columns') }}\n where table_name = '{{ relation.identifier }}'\n {% if relation.schema %}\n and table_schema = '{{ relation.schema }}'\n {% endif %}\n order by ordinal_position\n\n {% endcall %}\n {% set table = load_result('get_columns_in_relation').table %}\n {{ return(sql_convert_columns_in_relation(table)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.sql_convert_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2160242, "supported_languages": null}, "macro.dbt_postgres.postgres__list_relations_without_caching": {"name": "postgres__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__list_relations_without_caching", "macro_sql": "{% macro postgres__list_relations_without_caching(schema_relation) %}\n {% call statement('list_relations_without_caching', fetch_result=True) -%}\n select\n '{{ schema_relation.database }}' as database,\n tablename as name,\n schemaname as schema,\n 'table' as type\n from pg_tables\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select\n '{{ schema_relation.database }}' as database,\n viewname as name,\n schemaname as schema,\n 'view' as type\n from pg_views\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select\n '{{ schema_relation.database }}' as database,\n matviewname as name,\n schemaname as schema,\n 'materialized_view' as type\n from pg_matviews\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select distinct\n '{{ schema_relation.database }}' as database,\n proname as name,\n ns.nspname as schema,\n 'function' as type\n from pg_proc\n join pg_namespace as ns on pronamespace = ns.oid\n where ns.nspname ilike '{{ schema_relation.schema }}'\n {% endcall %}\n {{ return(load_result('list_relations_without_caching').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_relation", "type": null, "description": ""}], "created_at": 1784225035.216217, "supported_languages": null}, "macro.dbt_postgres.postgres__information_schema_name": {"name": "postgres__information_schema_name", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__information_schema_name", "macro_sql": "{% macro postgres__information_schema_name(database) -%}\n {% if database_name -%}\n {{ adapter.verify_database(database_name) }}\n {%- endif -%}\n information_schema\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.216286, "supported_languages": null}, "macro.dbt_postgres.postgres__list_schemas": {"name": "postgres__list_schemas", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__list_schemas", "macro_sql": "{% macro postgres__list_schemas(database) %}\n {% if database -%}\n {{ adapter.verify_database(database) }}\n {%- endif -%}\n {% call statement('list_schemas', fetch_result=True, auto_begin=False) %}\n select distinct nspname from pg_namespace\n {% endcall %}\n {{ return(load_result('list_schemas').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.216414, "supported_languages": null}, "macro.dbt_postgres.postgres__check_schema_exists": {"name": "postgres__check_schema_exists", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__check_schema_exists", "macro_sql": "{% macro postgres__check_schema_exists(information_schema, schema) -%}\n {% if information_schema.database -%}\n {{ adapter.verify_database(information_schema.database) }}\n {%- endif -%}\n {% call statement('check_schema_exists', fetch_result=True, auto_begin=False) %}\n select count(*) from pg_namespace where nspname = '{{ schema }}'\n {% endcall %}\n {{ return(load_result('check_schema_exists').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schema", "type": null, "description": ""}], "created_at": 1784225035.216556, "supported_languages": null}, "macro.dbt_postgres.postgres__make_relation_with_suffix": {"name": "postgres__make_relation_with_suffix", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_relation_with_suffix", "macro_sql": "{% macro postgres__make_relation_with_suffix(base_relation, suffix, dstring) %}\n {% if dstring %}\n {% set dt = modules.datetime.datetime.now() %}\n {% set dtstring = dt.strftime(\"%H%M%S%f\") %}\n {% set suffix = suffix ~ dtstring %}\n {% endif %}\n {% set suffix_length = suffix|length %}\n {% set relation_max_name_length = base_relation.relation_max_name_length() %}\n {% if suffix_length > relation_max_name_length %}\n {% do exceptions.raise_compiler_error('Relation suffix is too long (' ~ suffix_length ~ ' characters). Maximum length is ' ~ relation_max_name_length ~ ' characters.') %}\n {% endif %}\n {% set identifier = base_relation.identifier[:relation_max_name_length - suffix_length] ~ suffix %}\n\n {{ return(base_relation.incorporate(path={\"identifier\": identifier })) }}\n\n {% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}, {"name": "dstring", "type": null, "description": ""}], "created_at": 1784225035.216872, "supported_languages": null}, "macro.dbt_postgres.postgres__make_intermediate_relation": {"name": "postgres__make_intermediate_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_intermediate_relation", "macro_sql": "{% macro postgres__make_intermediate_relation(base_relation, suffix) %}\n {{ return(postgres__make_relation_with_suffix(base_relation, suffix, dstring=False)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.2169468, "supported_languages": null}, "macro.dbt_postgres.postgres__make_temp_relation": {"name": "postgres__make_temp_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_temp_relation", "macro_sql": "{% macro postgres__make_temp_relation(base_relation, suffix) %}\n {% set temp_relation = postgres__make_relation_with_suffix(base_relation, suffix, dstring=True) %}\n {{ return(temp_relation.incorporate(path={\"schema\": none,\n \"database\": none})) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.2170691, "supported_languages": null}, "macro.dbt_postgres.postgres__make_backup_relation": {"name": "postgres__make_backup_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_backup_relation", "macro_sql": "{% macro postgres__make_backup_relation(base_relation, backup_relation_type, suffix) %}\n {% set backup_relation = postgres__make_relation_with_suffix(base_relation, suffix, dstring=False) %}\n {{ return(backup_relation.incorporate(type=backup_relation_type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "backup_relation_type", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.217172, "supported_languages": null}, "macro.dbt_postgres.postgres_escape_comment": {"name": "postgres_escape_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres_escape_comment", "macro_sql": "{% macro postgres_escape_comment(comment) -%}\n {% if comment is not string %}\n {% do exceptions.raise_compiler_error('cannot escape a non-string: ' ~ comment) %}\n {% endif %}\n {%- set magic = '$dbt_comment_literal_block$' -%}\n {%- if magic in comment -%}\n {%- do exceptions.raise_compiler_error('The string ' ~ magic ~ ' is not allowed in comments.') -%}\n {%- endif -%}\n {{ magic }}{{ comment }}{{ magic }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "comment", "type": null, "description": ""}], "created_at": 1784225035.217377, "supported_languages": null}, "macro.dbt_postgres.postgres__alter_relation_comment": {"name": "postgres__alter_relation_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__alter_relation_comment", "macro_sql": "{% macro postgres__alter_relation_comment(relation, comment) %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n {% if relation.type == 'materialized_view' -%}\n {% set relation_type = \"materialized view\" %}\n {%- else -%}\n {%- set relation_type = relation.type -%}\n {%- endif -%}\n comment on {{ relation_type }} {{ relation }} is {{ escaped_comment }};\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "comment", "type": null, "description": ""}], "created_at": 1784225035.217526, "supported_languages": null}, "macro.dbt_postgres.postgres__alter_column_comment": {"name": "postgres__alter_column_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__alter_column_comment", "macro_sql": "{% macro postgres__alter_column_comment(relation, column_dict) %}\n {% set existing_columns = adapter.get_columns_in_relation(relation) | map(attribute=\"name\") | list %}\n {% for column_name in column_dict if (column_name in existing_columns) %}\n {% set comment = column_dict[column_name]['description'] %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n comment on column {{ relation }}.{{ adapter.quote(column_name) if column_dict[column_name]['quote'] else column_name }} is {{ escaped_comment }};\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_dict", "type": null, "description": ""}], "created_at": 1784225035.2177532, "supported_languages": null}, "macro.dbt_postgres.postgres__get_show_grant_sql": {"name": "postgres__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_show_grant_sql", "macro_sql": "\n\n{%- macro postgres__get_show_grant_sql(relation) -%}\n select grantee, privilege_type\n from {{ relation.information_schema('role_table_grants') }}\n where grantor = current_role\n and grantee != current_role\n and table_schema = '{{ relation.schema }}'\n and table_name = '{{ relation.identifier }}'\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.217837, "supported_languages": null}, "macro.dbt_postgres.postgres__copy_grants": {"name": "postgres__copy_grants", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__copy_grants", "macro_sql": "{% macro postgres__copy_grants() %}\n {{ return(False) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2178838, "supported_languages": null}, "macro.dbt_postgres.postgres__get_show_indexes_sql": {"name": "postgres__get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_show_indexes_sql", "macro_sql": "{% macro postgres__get_show_indexes_sql(relation) %}\n select\n i.relname as name,\n m.amname as method,\n ix.indisunique as \"unique\",\n array_to_string(array_agg(a.attname), ',') as column_names\n from pg_index ix\n join pg_class i\n on i.oid = ix.indexrelid\n join pg_am m\n on m.oid=i.relam\n join pg_class t\n on t.oid = ix.indrelid\n join pg_namespace n\n on n.oid = t.relnamespace\n join pg_attribute a\n on a.attrelid = t.oid\n and a.attnum = ANY(ix.indkey)\n where t.relname = '{{ relation.identifier }}'\n and n.nspname = '{{ relation.schema }}'\n and t.relkind in ('r', 'm')\n group by 1, 2, 3\n order by 1, 2, 3\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.217956, "supported_languages": null}, "macro.dbt_postgres.postgres__get_drop_index_sql": {"name": "postgres__get_drop_index_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_drop_index_sql", "macro_sql": "\n\n\n{%- macro postgres__get_drop_index_sql(relation, index_name) -%}\n drop index if exists \"{{ relation.schema }}\".\"{{ index_name }}\"\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_name", "type": null, "description": ""}], "created_at": 1784225035.2180102, "supported_languages": null}, "macro.dbt_postgres.postgres__get_incremental_default_sql": {"name": "postgres__get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/incremental_strategies.sql", "original_file_path": "macros/materializations/incremental_strategies.sql", "unique_id": "macro.dbt_postgres.postgres__get_incremental_default_sql", "macro_sql": "{% macro postgres__get_incremental_default_sql(arg_dict) %}\n\n {% if arg_dict[\"unique_key\"] %}\n {% do return(get_incremental_delete_insert_sql(arg_dict)) %}\n {% else %}\n {% do return(get_incremental_append_sql(arg_dict)) %}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_delete_insert_sql", "macro.dbt.get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.218184, "supported_languages": null}, "macro.dbt_postgres.postgres__get_incremental_microbatch_sql": {"name": "postgres__get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/incremental_strategies.sql", "original_file_path": "macros/materializations/incremental_strategies.sql", "unique_id": "macro.dbt_postgres.postgres__get_incremental_microbatch_sql", "macro_sql": "{% macro postgres__get_incremental_microbatch_sql(arg_dict) %}\n\n {% if arg_dict[\"unique_key\"] %}\n {% do return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"dbt-postgres 'microbatch' requires a `unique_key` config\") }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_merge_sql", "macro.dbt.default__get_incremental_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.2183092, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_merge_sql": {"name": "postgres__snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshot_merge.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_merge_sql", "macro_sql": "{% macro postgres__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n {%- set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() -%}\n\n update {{ target }}\n set {{ columns.dbt_valid_to }} = DBT_INTERNAL_SOURCE.{{ columns.dbt_valid_to }}\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.{{ columns.dbt_scd_id }}::text = {{ target }}.{{ columns.dbt_scd_id }}::text\n and DBT_INTERNAL_SOURCE.dbt_change_type::text in ('update'::text, 'delete'::text)\n {% if config.get(\"dbt_valid_to_current\") %}\n and ({{ target }}.{{ columns.dbt_valid_to }} = {{ config.get('dbt_valid_to_current') }} or {{ target }}.{{ columns.dbt_valid_to }} is null);\n {% else %}\n and {{ target }}.{{ columns.dbt_valid_to }} is null;\n {% endif %}\n\n\n insert into {{ target }} ({{ insert_cols_csv }})\n select {% for column in insert_cols -%}\n DBT_INTERNAL_SOURCE.{{ column }} {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.dbt_change_type::text = 'insert'::text;\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "insert_cols", "type": null, "description": ""}], "created_at": 1784225035.218737, "supported_languages": null}, "macro.dbt_postgres.postgres__formatted_scalar_function_args_sql": {"name": "postgres__formatted_scalar_function_args_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt_postgres.postgres__formatted_scalar_function_args_sql", "macro_sql": "{% macro postgres__formatted_scalar_function_args_sql() %}\n {% set args = [] %}\n {% for arg in model.arguments -%}\n {% set default_value = arg.get('default_value', none) %}\n {% if default_value != none %}\n {%- do args.append(arg.name ~ ' ' ~ arg.data_type ~ ' DEFAULT ' ~ default_value) -%}\n {% else %}\n {%- do args.append(arg.name ~ ' ' ~ arg.data_type) -%}\n {% endif %}\n {%- endfor %}\n {{ args | join(', ') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.219011, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_materialized_view": {"name": "postgres__drop_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_materialized_view", "macro_sql": "{% macro postgres__drop_materialized_view(relation) -%}\n drop materialized view if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.219073, "supported_languages": null}, "macro.dbt_postgres.postgres__describe_materialized_view": {"name": "postgres__describe_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/describe.sql", "original_file_path": "macros/relations/materialized_view/describe.sql", "unique_id": "macro.dbt_postgres.postgres__describe_materialized_view", "macro_sql": "{% macro postgres__describe_materialized_view(relation) %}\n -- for now just get the indexes, we don't need the name or the query yet\n {% set _indexes = run_query(get_show_indexes_sql(relation)) %}\n {% do return({'indexes': _indexes}) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.get_show_indexes_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.219189, "supported_languages": null}, "macro.dbt_postgres.postgres__refresh_materialized_view": {"name": "postgres__refresh_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt_postgres.postgres__refresh_materialized_view", "macro_sql": "{% macro postgres__refresh_materialized_view(relation) %}\n refresh materialized view {{ relation }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.219249, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_materialized_view_sql": {"name": "postgres__get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_materialized_view_sql", "macro_sql": "{% macro postgres__get_rename_materialized_view_sql(relation, new_name) %}\n alter materialized view {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.219317, "supported_languages": null}, "macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql": {"name": "postgres__get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql", "macro_sql": "{% macro postgres__get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n\n -- apply a full refresh immediately if needed\n {% if configuration_changes.requires_full_refresh %}\n\n {{ get_replace_sql(existing_relation, relation, sql) }}\n\n -- otherwise apply individual changes as needed\n {% else %}\n\n {{ postgres__update_indexes_on_materialized_view(relation, configuration_changes.indexes) }}\n\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_replace_sql", "macro.dbt_postgres.postgres__update_indexes_on_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "configuration_changes", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}], "created_at": 1784225035.219558, "supported_languages": null}, "macro.dbt_postgres.postgres__update_indexes_on_materialized_view": {"name": "postgres__update_indexes_on_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__update_indexes_on_materialized_view", "macro_sql": "\n\n\n{%- macro postgres__update_indexes_on_materialized_view(relation, index_changes) -%}\n {{- log(\"Applying UPDATE INDEXES to: \" ~ relation) -}}\n\n {%- for _index_change in index_changes -%}\n {%- set _index = _index_change.context -%}\n\n {%- if _index_change.action == \"drop\" -%}\n\n {{ postgres__get_drop_index_sql(relation, _index.name) }}\n\n {%- elif _index_change.action == \"create\" -%}\n\n {{ postgres__get_create_index_sql(relation, _index.as_node_config) }}\n\n {%- endif -%}\n\t{{ ';' if not loop.last else \"\" }}\n\n {%- endfor -%}\n\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_drop_index_sql", "macro.dbt_postgres.postgres__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_changes", "type": null, "description": ""}], "created_at": 1784225035.219774, "supported_languages": null}, "macro.dbt_postgres.postgres__get_materialized_view_configuration_changes": {"name": "postgres__get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__get_materialized_view_configuration_changes", "macro_sql": "{% macro postgres__get_materialized_view_configuration_changes(existing_relation, new_config) %}\n {% set _existing_materialized_view = postgres__describe_materialized_view(existing_relation) %}\n {% set _configuration_changes = existing_relation.get_materialized_view_config_change_collection(_existing_materialized_view, new_config.model) %}\n {% do return(_configuration_changes) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__describe_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "new_config", "type": null, "description": ""}], "created_at": 1784225035.219894, "supported_languages": null}, "macro.dbt_postgres.postgres__get_create_materialized_view_as_sql": {"name": "postgres__get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt_postgres.postgres__get_create_materialized_view_as_sql", "macro_sql": "{% macro postgres__get_create_materialized_view_as_sql(relation, sql) %}\n create materialized view if not exists {{ relation }} as {{ sql }};\n\n {% for _index_dict in config.get('indexes', []) -%}\n {{- get_create_index_sql(relation, _index_dict) -}}{{ ';' if not loop.last else \"\" }}\n {%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.220066, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_table": {"name": "postgres__drop_table", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_table", "macro_sql": "{% macro postgres__drop_table(relation) -%}\n drop table if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.220125, "supported_languages": null}, "macro.dbt_postgres.postgres__get_replace_table_sql": {"name": "postgres__get_replace_table_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt_postgres.postgres__get_replace_table_sql", "macro_sql": "{% macro postgres__get_replace_table_sql(relation, sql) -%}\n\n {%- set sql_header = config.get('sql_header', none) -%}\n {{ sql_header if sql_header is not none }}\n\n create or replace table {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {{ get_table_columns_and_constraints() }}\n {%- set sql = get_select_subquery(sql) %}\n {% endif %}\n as (\n {{ sql }}\n );\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.220371, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_table_sql": {"name": "postgres__get_rename_table_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_table_sql", "macro_sql": "{% macro postgres__get_rename_table_sql(relation, new_name) %}\n alter table {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.220448, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_view": {"name": "postgres__drop_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_view", "macro_sql": "{% macro postgres__drop_view(relation) -%}\n drop view if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2205088, "supported_languages": null}, "macro.dbt_postgres.postgres__get_replace_view_sql": {"name": "postgres__get_replace_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt_postgres.postgres__get_replace_view_sql", "macro_sql": "{% macro postgres__get_replace_view_sql(relation, sql) -%}\n\n {%- set sql_header = config.get('sql_header', none) -%}\n {{ sql_header if sql_header is not none }}\n\n create or replace view {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {%- endif %}\n as (\n {{ sql }}\n );\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.220763, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_view_sql": {"name": "postgres__get_rename_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_view_sql", "macro_sql": "{% macro postgres__get_rename_view_sql(relation, new_name) %}\n alter view {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.220841, "supported_languages": null}, "macro.dbt_postgres.postgres__dateadd": {"name": "postgres__dateadd", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt_postgres.postgres__dateadd", "macro_sql": "{% macro postgres__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {{ from_date_or_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "interval", "type": null, "description": ""}, {"name": "from_date_or_timestamp", "type": null, "description": ""}], "created_at": 1784225035.220931, "supported_languages": null}, "macro.dbt_postgres.postgres__listagg": {"name": "postgres__listagg", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt_postgres.postgres__listagg", "macro_sql": "{% macro postgres__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n (array_agg(\n {{ measure }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n ))[1:{{ limit_num }}],\n {{ delimiter_text }}\n )\n {%- else %}\n string_agg(\n {{ measure }},\n {{ delimiter_text }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n )\n {%- endif %}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "measure", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "order_by_clause", "type": null, "description": ""}, {"name": "limit_num", "type": null, "description": ""}], "created_at": 1784225035.2211368, "supported_languages": null}, "macro.dbt_postgres.postgres__datediff": {"name": "postgres__datediff", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt_postgres.postgres__datediff", "macro_sql": "{% macro postgres__datediff(first_date, second_date, datepart) -%}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "first_date", "type": null, "description": ""}, {"name": "second_date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.222014, "supported_languages": null}, "macro.dbt_postgres.postgres__equals": {"name": "postgres__equals", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/equals.sql", "original_file_path": "macros/utils/equals.sql", "unique_id": "macro.dbt_postgres.postgres__equals", "macro_sql": "{% macro postgres__equals(expr1, expr2) -%}\n{%- if adapter.behavior.enable_truthy_nulls_equals_macro.no_warn %}\n ({{ expr1 }} IS NOT DISTINCT FROM {{ expr2 }})\n{%- else -%}\n ({{ expr1 }} = {{ expr2 }})\n{%- endif %}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expr1", "type": null, "description": ""}, {"name": "expr2", "type": null, "description": ""}], "created_at": 1784225035.2221708, "supported_languages": null}, "macro.dbt_postgres.postgres__any_value": {"name": "postgres__any_value", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt_postgres.postgres__any_value", "macro_sql": "{% macro postgres__any_value(expression) -%}\n\n min({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.2222452, "supported_languages": null}, "macro.dbt_postgres.postgres__last_day": {"name": "postgres__last_day", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt_postgres.postgres__last_day", "macro_sql": "{% macro postgres__last_day(date, datepart) -%}\n\n {%- if datepart == 'quarter' -%}\n -- postgres dateadd does not support quarter interval.\n cast(\n {{dbt.dateadd('day', '-1',\n dbt.dateadd('month', '3', dbt.date_trunc(datepart, date))\n )}}\n as date)\n {%- else -%}\n {{dbt.default_last_day(date, datepart)}}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.date_trunc", "macro.dbt.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.2224572, "supported_languages": null}, "macro.dbt_postgres.postgres__split_part": {"name": "postgres__split_part", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt_postgres.postgres__split_part", "macro_sql": "{% macro postgres__split_part(string_text, delimiter_text, part_number) %}\n\n {% if part_number >= 0 %}\n {{ dbt.default__split_part(string_text, delimiter_text, part_number) }}\n {% else %}\n {{ dbt._split_part_negative(string_text, delimiter_text, part_number) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__split_part", "macro.dbt._split_part_negative"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "part_number", "type": null, "description": ""}], "created_at": 1784225035.222636, "supported_languages": null}, "macro.dbt.run_hooks": {"name": "run_hooks", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.run_hooks", "macro_sql": "{% macro run_hooks(hooks, inside_transaction=True) %}\n {% for hook in hooks | selectattr('transaction', 'equalto', inside_transaction) %}\n {% if not inside_transaction and loop.first %}\n {% call statement(auto_begin=inside_transaction) %}\n commit;\n {% endcall %}\n {% endif %}\n {% set rendered = render(hook.get('sql')) | trim %}\n {% if (rendered | length) > 0 %}\n {% call statement(auto_begin=inside_transaction) %}\n {{ rendered }}\n {% endcall %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "hooks", "type": null, "description": ""}, {"name": "inside_transaction", "type": null, "description": ""}], "created_at": 1784225035.222998, "supported_languages": null}, "macro.dbt.make_hook_config": {"name": "make_hook_config", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.make_hook_config", "macro_sql": "{% macro make_hook_config(sql, inside_transaction) %}\n {{ tojson({\"sql\": sql, \"transaction\": inside_transaction}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}, {"name": "inside_transaction", "type": null, "description": ""}], "created_at": 1784225035.2230809, "supported_languages": null}, "macro.dbt.before_begin": {"name": "before_begin", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.before_begin", "macro_sql": "{% macro before_begin(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.22314, "supported_languages": null}, "macro.dbt.in_transaction": {"name": "in_transaction", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.in_transaction", "macro_sql": "{% macro in_transaction(sql) %}\n {{ make_hook_config(sql, inside_transaction=True) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2231948, "supported_languages": null}, "macro.dbt.after_commit": {"name": "after_commit", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.after_commit", "macro_sql": "{% macro after_commit(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.223249, "supported_languages": null}, "macro.dbt.set_sql_header": {"name": "set_sql_header", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.set_sql_header", "macro_sql": "{% macro set_sql_header(config) -%}\n {{ config.set('sql_header', caller()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "config", "type": null, "description": ""}], "created_at": 1784225035.223378, "supported_languages": null}, "macro.dbt.should_full_refresh": {"name": "should_full_refresh", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_full_refresh", "macro_sql": "{% macro should_full_refresh() %}\n {% set config_full_refresh = config.get('full_refresh') %}\n {% if config_full_refresh is none %}\n {% set config_full_refresh = flags.FULL_REFRESH %}\n {% endif %}\n {% do return(config_full_refresh) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.223497, "supported_languages": null}, "macro.dbt.should_store_failures": {"name": "should_store_failures", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_store_failures", "macro_sql": "{% macro should_store_failures() %}\n {% set config_store_failures = config.get('store_failures') %}\n {% if config_store_failures is none %}\n {% set config_store_failures = flags.STORE_FAILURES %}\n {% endif %}\n {% do return(config_store_failures) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.223615, "supported_languages": null}, "macro.dbt.snapshot_merge_sql": {"name": "snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.snapshot_merge_sql", "macro_sql": "{% macro snapshot_merge_sql(target, source, insert_cols) -%}\n {{ adapter.dispatch('snapshot_merge_sql', 'dbt')(target, source, insert_cols) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "insert_cols", "type": null, "description": ""}], "created_at": 1784225035.223797, "supported_languages": null}, "macro.dbt.default__snapshot_merge_sql": {"name": "default__snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.default__snapshot_merge_sql", "macro_sql": "{% macro default__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n {%- set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() -%}\n\n merge into {{ target.render() }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on DBT_INTERNAL_SOURCE.{{ columns.dbt_scd_id }} = DBT_INTERNAL_DEST.{{ columns.dbt_scd_id }}\n\n when matched\n {% if config.get(\"dbt_valid_to_current\") %}\n\t{% set source_unique_key = (\"DBT_INTERNAL_DEST.\" ~ columns.dbt_valid_to) | trim %}\n\t{% set target_unique_key = config.get('dbt_valid_to_current') | trim %}\n\tand ({{ equals(source_unique_key, target_unique_key) }} or {{ source_unique_key }} is null)\n\n {% else %}\n and DBT_INTERNAL_DEST.{{ columns.dbt_valid_to }} is null\n {% endif %}\n and DBT_INTERNAL_SOURCE.dbt_change_type in ('update', 'delete')\n then update\n set {{ columns.dbt_valid_to }} = DBT_INTERNAL_SOURCE.{{ columns.dbt_valid_to }}\n\n when not matched\n and DBT_INTERNAL_SOURCE.dbt_change_type = 'insert'\n then insert ({{ insert_cols_csv }})\n values ({{ insert_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "insert_cols", "type": null, "description": ""}], "created_at": 1784225035.224118, "supported_languages": null}, "macro.dbt.strategy_dispatch": {"name": "strategy_dispatch", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.strategy_dispatch", "macro_sql": "{% macro strategy_dispatch(name) -%}\n{% set original_name = name %}\n {% if '.' in name %}\n {% set package_name, name = name.split(\".\", 1) %}\n {% else %}\n {% set package_name = none %}\n {% endif %}\n\n {% if package_name is none %}\n {% set package_context = context %}\n {% elif package_name in context %}\n {% set package_context = context[package_name] %}\n {% else %}\n {% set error_msg %}\n Could not find package '{{package_name}}', called with '{{original_name}}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n\n {%- set search_name = 'snapshot_' ~ name ~ '_strategy' -%}\n\n {% if search_name not in package_context %}\n {% set error_msg %}\n The specified strategy macro '{{name}}' was not found in package '{{ package_name }}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n {{ return(package_context[search_name]) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "name", "type": null, "description": ""}], "created_at": 1784225035.225087, "supported_languages": null}, "macro.dbt.snapshot_hash_arguments": {"name": "snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_hash_arguments", "macro_sql": "{% macro snapshot_hash_arguments(args) -%}\n {{ adapter.dispatch('snapshot_hash_arguments', 'dbt')(args) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "args", "type": null, "description": ""}], "created_at": 1784225035.225164, "supported_languages": null}, "macro.dbt.default__snapshot_hash_arguments": {"name": "default__snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_hash_arguments", "macro_sql": "{% macro default__snapshot_hash_arguments(args) -%}\n md5({%- for arg in args -%}\n coalesce(cast({{ arg }} as varchar ), '')\n {% if not loop.last %} || '|' || {% endif %}\n {%- endfor -%})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "args", "type": null, "description": ""}], "created_at": 1784225035.225264, "supported_languages": null}, "macro.dbt.snapshot_timestamp_strategy": {"name": "snapshot_timestamp_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_timestamp_strategy", "macro_sql": "{% macro snapshot_timestamp_strategy(node, snapshotted_rel, current_rel, model_config, target_exists) %}\n {# The model_config parameter is no longer used, but is passed in anyway for compatibility. #}\n {% set primary_key = config.get('unique_key') %}\n {% set updated_at = config.get('updated_at') %}\n {% set hard_deletes = adapter.get_hard_deletes_behavior(config) %}\n {% set invalidate_hard_deletes = hard_deletes == 'invalidate' %}\n {% set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() %}\n\n {#/*\n The snapshot relation might not have an {{ updated_at }} value if the\n snapshot strategy is changed from `check` to `timestamp`. We\n should use a dbt-created column for the comparison in the snapshot\n table instead of assuming that the user-supplied {{ updated_at }}\n will be present in the historical data.\n\n See https://github.com/dbt-labs/dbt-core/issues/2350\n */ #}\n {% set row_changed_expr -%}\n ({{ snapshotted_rel }}.{{ columns.dbt_valid_from }} < {{ current_rel }}.{{ updated_at }})\n {%- endset %}\n\n {% set scd_args = api.Relation.scd_args(primary_key, updated_at) %}\n {% set scd_id_expr = snapshot_hash_arguments(scd_args) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes,\n \"hard_deletes\": hard_deletes\n }) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "node", "type": null, "description": ""}, {"name": "snapshotted_rel", "type": null, "description": ""}, {"name": "current_rel", "type": null, "description": ""}, {"name": "model_config", "type": null, "description": ""}, {"name": "target_exists", "type": null, "description": ""}], "created_at": 1784225035.225667, "supported_languages": null}, "macro.dbt.snapshot_string_as_time": {"name": "snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_string_as_time", "macro_sql": "{% macro snapshot_string_as_time(timestamp) -%}\n {{ adapter.dispatch('snapshot_string_as_time', 'dbt')(timestamp) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_string_as_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "timestamp", "type": null, "description": ""}], "created_at": 1784225035.225736, "supported_languages": null}, "macro.dbt.default__snapshot_string_as_time": {"name": "default__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_string_as_time", "macro_sql": "{% macro default__snapshot_string_as_time(timestamp) %}\n {% do exceptions.raise_not_implemented(\n 'snapshot_string_as_time macro not implemented for adapter '+adapter.type()\n ) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "timestamp", "type": null, "description": ""}], "created_at": 1784225035.225808, "supported_languages": null}, "macro.dbt.snapshot_check_all_get_existing_columns": {"name": "snapshot_check_all_get_existing_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_all_get_existing_columns", "macro_sql": "{% macro snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) -%}\n {%- if not target_exists -%}\n {#-- no table yet -> return whatever the query does --#}\n {{ return((false, query_columns)) }}\n {%- endif -%}\n\n {#-- handle any schema changes --#}\n {%- set target_relation = adapter.get_relation(database=node.database, schema=node.schema, identifier=node.alias) -%}\n\n {% if check_cols_config == 'all' %}\n {%- set query_columns = get_columns_in_query(node['compiled_code']) -%}\n\n {% elif check_cols_config is iterable and (check_cols_config | length) > 0 %}\n {#-- query for proper casing/quoting, to support comparison below --#}\n {%- set select_check_cols_from_target -%}\n {#-- N.B. The whitespace below is necessary to avoid edge case issue with comments --#}\n {#-- See: https://github.com/dbt-labs/dbt-core/issues/6781 --#}\n select {{ check_cols_config | join(', ') }} from (\n {{ node['compiled_code'] }}\n ) subq\n {%- endset -%}\n {% set query_columns = get_columns_in_query(select_check_cols_from_target) %}\n\n {% else %}\n {% do exceptions.raise_compiler_error(\"Invalid value for 'check_cols': \" ~ check_cols_config) %}\n {% endif %}\n\n {%- set existing_cols = adapter.get_columns_in_relation(target_relation) | map(attribute = 'name') | list -%}\n {%- set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}\n {%- set ns.column_added = false -%}\n\n {%- set intersection = [] -%}\n {%- for col in query_columns -%}\n {%- if col in existing_cols -%}\n {%- do intersection.append(adapter.quote(col)) -%}\n {%- else -%}\n {% set ns.column_added = true %}\n {%- endif -%}\n {%- endfor -%}\n {{ return((ns.column_added, intersection)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "node", "type": null, "description": ""}, {"name": "target_exists", "type": null, "description": ""}, {"name": "check_cols_config", "type": null, "description": ""}], "created_at": 1784225035.226366, "supported_languages": null}, "macro.dbt.snapshot_check_strategy": {"name": "snapshot_check_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_strategy", "macro_sql": "{% macro snapshot_check_strategy(node, snapshotted_rel, current_rel, model_config, target_exists) %}\n {# The model_config parameter is no longer used, but is passed in anyway for compatibility. #}\n {% set check_cols_config = config.get('check_cols') %}\n {% set primary_key = config.get('unique_key') %}\n {% set hard_deletes = adapter.get_hard_deletes_behavior(config) %}\n {% set invalidate_hard_deletes = hard_deletes == 'invalidate' %}\n {% set updated_at = config.get('updated_at') or snapshot_get_time() %}\n\n {% set column_added = false %}\n\n {% set column_added, check_cols = snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) %}\n\n {%- set row_changed_expr -%}\n (\n {%- if column_added -%}\n {{ get_true_sql() }}\n {%- else -%}\n {%- for col in check_cols -%}\n {{ snapshotted_rel }}.{{ col }} != {{ current_rel }}.{{ col }}\n or\n (\n (({{ snapshotted_rel }}.{{ col }} is null) and not ({{ current_rel }}.{{ col }} is null))\n or\n ((not {{ snapshotted_rel }}.{{ col }} is null) and ({{ current_rel }}.{{ col }} is null))\n )\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n {%- endif -%}\n )\n {%- endset %}\n\n {% set scd_args = api.Relation.scd_args(primary_key, updated_at) %}\n {% set scd_id_expr = snapshot_hash_arguments(scd_args) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes,\n \"hard_deletes\": hard_deletes\n }) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.snapshot_get_time", "macro.dbt.snapshot_check_all_get_existing_columns", "macro.dbt.get_true_sql", "macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "node", "type": null, "description": ""}, {"name": "snapshotted_rel", "type": null, "description": ""}, {"name": "current_rel", "type": null, "description": ""}, {"name": "model_config", "type": null, "description": ""}, {"name": "target_exists", "type": null, "description": ""}], "created_at": 1784225035.226913, "supported_languages": null}, "macro.dbt.create_columns": {"name": "create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.create_columns", "macro_sql": "{% macro create_columns(relation, columns) %}\n {{ adapter.dispatch('create_columns', 'dbt')(relation, columns) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.22782, "supported_languages": null}, "macro.dbt.default__create_columns": {"name": "default__create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__create_columns", "macro_sql": "{% macro default__create_columns(relation, columns) %}\n {% for column in columns %}\n {% call statement() %}\n alter table {{ relation.render() }} add column {{ adapter.quote(column.name) }} {{ column.expanded_data_type }};\n {% endcall %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.227948, "supported_languages": null}, "macro.dbt.post_snapshot": {"name": "post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.post_snapshot", "macro_sql": "{% macro post_snapshot(staging_relation) %}\n {{ adapter.dispatch('post_snapshot', 'dbt')(staging_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "staging_relation", "type": null, "description": ""}], "created_at": 1784225035.2280169, "supported_languages": null}, "macro.dbt.default__post_snapshot": {"name": "default__post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__post_snapshot", "macro_sql": "{% macro default__post_snapshot(staging_relation) %}\n {# no-op #}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "staging_relation", "type": null, "description": ""}], "created_at": 1784225035.228054, "supported_languages": null}, "macro.dbt.get_true_sql": {"name": "get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_true_sql", "macro_sql": "{% macro get_true_sql() %}\n {{ adapter.dispatch('get_true_sql', 'dbt')() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_true_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.228112, "supported_languages": null}, "macro.dbt.default__get_true_sql": {"name": "default__get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__get_true_sql", "macro_sql": "{% macro default__get_true_sql() %}\n {{ return('TRUE') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.228158, "supported_languages": null}, "macro.dbt.snapshot_staging_table": {"name": "snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.snapshot_staging_table", "macro_sql": "{% macro snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {{ adapter.dispatch('snapshot_staging_table', 'dbt')(strategy, source_sql, target_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_staging_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "source_sql", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.228236, "supported_languages": null}, "macro.dbt.get_snapshot_table_column_names": {"name": "get_snapshot_table_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_snapshot_table_column_names", "macro_sql": "{% macro get_snapshot_table_column_names() %}\n {{ return({'dbt_valid_to': 'dbt_valid_to', 'dbt_valid_from': 'dbt_valid_from', 'dbt_scd_id': 'dbt_scd_id', 'dbt_updated_at': 'dbt_updated_at', 'dbt_is_deleted': 'dbt_is_deleted'}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.228341, "supported_languages": null}, "macro.dbt.default__snapshot_staging_table": {"name": "default__snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__snapshot_staging_table", "macro_sql": "{% macro default__snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {% set columns = config.get('snapshot_table_column_names') or get_snapshot_table_column_names() %}\n {% if strategy.hard_deletes == 'new_record' %}\n {% set new_scd_id = snapshot_hash_arguments([columns.dbt_scd_id, snapshot_get_time()]) %}\n {% endif %}\n with snapshot_query as (\n\n {{ source_sql }}\n\n ),\n\n snapshotted_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }}\n from {{ target_relation }}\n where\n {% if config.get('dbt_valid_to_current') %}\n\t\t{% set source_unique_key = columns.dbt_valid_to | trim %}\n\t\t{% set target_unique_key = config.get('dbt_valid_to_current') | trim %}\n\n\t\t{# The exact equals semantics between NULL values depends on the current behavior flag set. Also, update records if the source field is null #}\n ( {{ equals(source_unique_key, target_unique_key) }} or {{ source_unique_key }} is null )\n {% else %}\n {{ columns.dbt_valid_to }} is null\n {% endif %}\n\n ),\n\n insertions_source_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ get_dbt_valid_to_current(strategy, columns) }},\n {{ strategy.scd_id }} as {{ columns.dbt_scd_id }}\n\n from snapshot_query\n ),\n\n updates_source_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_to }}\n\n from snapshot_query\n ),\n\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n\n deletes_source_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }}\n from snapshot_query\n ),\n {% endif %}\n\n insertions as (\n\n select\n 'insert' as dbt_change_type,\n source_data.*\n {%- if strategy.hard_deletes == 'new_record' -%}\n ,'False' as {{ columns.dbt_is_deleted }}\n {%- endif %}\n\n from insertions_source_data as source_data\n left outer join snapshotted_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"snapshotted_data\") }}\n or ({{ unique_key_is_not_null(strategy.unique_key, \"snapshotted_data\") }} and (\n {{ strategy.row_changed }} {%- if strategy.hard_deletes == 'new_record' -%} or snapshotted_data.{{ columns.dbt_is_deleted }} = 'True' {% endif %}\n )\n\n )\n\n ),\n\n updates as (\n\n select\n 'update' as dbt_change_type,\n source_data.*,\n snapshotted_data.{{ columns.dbt_scd_id }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , snapshotted_data.{{ columns.dbt_is_deleted }}\n {%- endif %}\n\n from updates_source_data as source_data\n join snapshotted_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where (\n {{ strategy.row_changed }} {%- if strategy.hard_deletes == 'new_record' -%} or snapshotted_data.{{ columns.dbt_is_deleted }} = 'True' {% endif %}\n )\n )\n\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n ,\n deletes as (\n\n select\n 'delete' as dbt_change_type,\n source_data.*,\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_from }},\n {{ snapshot_get_time() }} as {{ columns.dbt_updated_at }},\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_to }},\n snapshotted_data.{{ columns.dbt_scd_id }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , snapshotted_data.{{ columns.dbt_is_deleted }}\n {%- endif %}\n from snapshotted_data\n left join deletes_source_data as source_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"source_data\") }}\n\n {%- if strategy.hard_deletes == 'new_record' %}\n and not (\n --avoid updating the record's valid_to if the latest entry is marked as deleted\n snapshotted_data.{{ columns.dbt_is_deleted }} = 'True'\n and\n {% if config.get('dbt_valid_to_current') -%}\n snapshotted_data.{{ columns.dbt_valid_to }} = {{ config.get('dbt_valid_to_current') }}\n {%- else -%}\n snapshotted_data.{{ columns.dbt_valid_to }} is null\n {%- endif %}\n )\n {%- endif %}\n )\n {%- endif %}\n\n {%- if strategy.hard_deletes == 'new_record' %}\n {% set snapshotted_cols = get_list_of_column_names(get_columns_in_relation(target_relation)) %}\n {% set source_col_names = get_columns_in_query(source_sql) %}\n ,\n deletion_records as (\n\n select\n 'insert' as dbt_change_type,\n {%- for col_name in source_col_names -%}\n {%- if col_name in snapshotted_cols -%}\n snapshotted_data.{{ adapter.quote(col_name) }},\n {%- else -%}\n source_data.{{ adapter.quote(col_name) }},\n {%- endif -%}\n {% endfor -%}\n {%- if strategy.unique_key | is_list -%}\n {%- for key in strategy.unique_key -%}\n snapshotted_data.{{ key }} as dbt_unique_key_{{ loop.index }},\n {% endfor -%}\n {%- else -%}\n snapshotted_data.dbt_unique_key as dbt_unique_key,\n {% endif -%}\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_from }},\n {{ snapshot_get_time() }} as {{ columns.dbt_updated_at }},\n snapshotted_data.{{ columns.dbt_valid_to }} as {{ columns.dbt_valid_to }},\n {{ new_scd_id }} as {{ columns.dbt_scd_id }},\n 'True' as {{ columns.dbt_is_deleted }}\n from snapshotted_data\n left join deletes_source_data as source_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"source_data\") }}\n and not (\n --avoid inserting a new record if the latest one is marked as deleted\n snapshotted_data.{{ columns.dbt_is_deleted }} = 'True'\n and\n {% if config.get('dbt_valid_to_current') -%}\n snapshotted_data.{{ columns.dbt_valid_to }} = {{ config.get('dbt_valid_to_current') }}\n {%- else -%}\n snapshotted_data.{{ columns.dbt_valid_to }} is null\n {%- endif %}\n )\n\n )\n {%- endif %}\n\n select * from insertions\n union all\n select * from updates\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n union all\n select * from deletes\n {%- endif %}\n {%- if strategy.hard_deletes == 'new_record' %}\n union all\n select * from deletion_records\n {%- endif %}\n\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.snapshot_hash_arguments", "macro.dbt.snapshot_get_time", "macro.dbt.unique_key_fields", "macro.dbt.equals", "macro.dbt.get_dbt_valid_to_current", "macro.dbt.unique_key_join_on", "macro.dbt.unique_key_is_null", "macro.dbt.unique_key_is_not_null", "macro.dbt.get_list_of_column_names", "macro.dbt.get_columns_in_relation", "macro.dbt.get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "source_sql", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.2300842, "supported_languages": null}, "macro.dbt.build_snapshot_table": {"name": "build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_table", "macro_sql": "{% macro build_snapshot_table(strategy, sql) -%}\n {{ adapter.dispatch('build_snapshot_table', 'dbt')(strategy, sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__build_snapshot_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.230189, "supported_languages": null}, "macro.dbt.default__build_snapshot_table": {"name": "default__build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__build_snapshot_table", "macro_sql": "{% macro default__build_snapshot_table(strategy, sql) %}\n {% set columns = config.get('snapshot_table_column_names') or get_snapshot_table_column_names() %}\n\n select *,\n {{ strategy.scd_id }} as {{ columns.dbt_scd_id }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ get_dbt_valid_to_current(strategy, columns) }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , 'False' as {{ columns.dbt_is_deleted }}\n {% endif -%}\n from (\n {{ sql }}\n ) sbq\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.get_dbt_valid_to_current"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.230402, "supported_languages": null}, "macro.dbt.build_snapshot_staging_table": {"name": "build_snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_staging_table", "macro_sql": "{% macro build_snapshot_staging_table(strategy, sql, target_relation) %}\n {% set temp_relation = make_temp_relation(target_relation) %}\n\n {% set select = snapshot_staging_table(strategy, sql, target_relation) %}\n\n {% call statement('build_snapshot_staging_relation') %}\n {{ create_table_as(True, temp_relation, select) }}\n {% endcall %}\n\n {% do return(temp_relation) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_temp_relation", "macro.dbt.snapshot_staging_table", "macro.dbt.statement", "macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.230578, "supported_languages": null}, "macro.dbt.get_updated_at_column_data_type": {"name": "get_updated_at_column_data_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_updated_at_column_data_type", "macro_sql": "{% macro get_updated_at_column_data_type(snapshot_sql) %}\n {% set snapshot_sql_column_schema = get_column_schema_from_query(snapshot_sql) %}\n {% set dbt_updated_at_data_type = null %}\n {% set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}\n {% set ns.dbt_updated_at_data_type = null -%}\n {% for column in snapshot_sql_column_schema %}\n {% if ((column.column == 'dbt_updated_at') or (column.column == 'DBT_UPDATED_AT')) %}\n {% set ns.dbt_updated_at_data_type = column.dtype %}\n {% endif %}\n {% endfor %}\n {{ return(ns.dbt_updated_at_data_type or none) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_column_schema_from_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "snapshot_sql", "type": null, "description": ""}], "created_at": 1784225035.23084, "supported_languages": null}, "macro.dbt.check_time_data_types": {"name": "check_time_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.check_time_data_types", "macro_sql": "{% macro check_time_data_types(sql) %}\n {% set dbt_updated_at_data_type = get_updated_at_column_data_type(sql) %}\n {% set snapshot_get_time_data_type = get_snapshot_get_time_data_type() %}\n {% if snapshot_get_time_data_type is not none and dbt_updated_at_data_type is not none and snapshot_get_time_data_type != dbt_updated_at_data_type %}\n {% if exceptions.warn_snapshot_timestamp_data_types %}\n {{ exceptions.warn_snapshot_timestamp_data_types(snapshot_get_time_data_type, dbt_updated_at_data_type) }}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_updated_at_column_data_type", "macro.dbt.get_snapshot_get_time_data_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2310138, "supported_languages": null}, "macro.dbt.get_dbt_valid_to_current": {"name": "get_dbt_valid_to_current", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_dbt_valid_to_current", "macro_sql": "{% macro get_dbt_valid_to_current(strategy, columns) %}\n {% set dbt_valid_to_current = config.get('dbt_valid_to_current') or \"null\" %}\n coalesce(nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}), {{dbt_valid_to_current}})\n as {{ columns.dbt_valid_to }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.2311318, "supported_languages": null}, "macro.dbt.unique_key_fields": {"name": "unique_key_fields", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_fields", "macro_sql": "{% macro unique_key_fields(unique_key) %}\n {% if unique_key | is_list %}\n {% for key in unique_key %}\n {{ key }} as dbt_unique_key_{{ loop.index }}\n {%- if not loop.last %} , {%- endif %}\n {% endfor %}\n {% else %}\n {{ unique_key }} as dbt_unique_key\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "unique_key", "type": null, "description": ""}], "created_at": 1784225035.231342, "supported_languages": null}, "macro.dbt.unique_key_join_on": {"name": "unique_key_join_on", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_join_on", "macro_sql": "{% macro unique_key_join_on(unique_key, identifier, from_identifier) %}\n {% if unique_key | is_list %}\n {% for key in unique_key %}\n\t {% set source_unique_key = (identifier ~ \".dbt_unique_key_\" ~ loop.index) | trim %}\n\t {% set target_unique_key = (from_identifier ~ \".dbt_unique_key_\" ~ loop.index) | trim %}\n\t {{ equals(source_unique_key, target_unique_key) }}\n {%- if not loop.last %} and {%- endif %}\n {% endfor %}\n {% else %}\n {{ identifier }}.dbt_unique_key = {{ from_identifier }}.dbt_unique_key\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "unique_key", "type": null, "description": ""}, {"name": "identifier", "type": null, "description": ""}, {"name": "from_identifier", "type": null, "description": ""}], "created_at": 1784225035.2316, "supported_languages": null}, "macro.dbt.unique_key_is_null": {"name": "unique_key_is_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_is_null", "macro_sql": "{% macro unique_key_is_null(unique_key, identifier) %}\n {% if unique_key | is_list %}\n {{ identifier }}.dbt_unique_key_1 is null\n {% else %}\n {{ identifier }}.dbt_unique_key is null\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "unique_key", "type": null, "description": ""}, {"name": "identifier", "type": null, "description": ""}], "created_at": 1784225035.231696, "supported_languages": null}, "macro.dbt.unique_key_is_not_null": {"name": "unique_key_is_not_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_is_not_null", "macro_sql": "{% macro unique_key_is_not_null(unique_key, identifier) %}\n {% if unique_key | is_list %}\n {{ identifier }}.dbt_unique_key_1 is not null\n {% else %}\n {{ identifier }}.dbt_unique_key is not null\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "unique_key", "type": null, "description": ""}, {"name": "identifier", "type": null, "description": ""}], "created_at": 1784225035.231779, "supported_languages": null}, "macro.dbt.materialization_snapshot_default": {"name": "materialization_snapshot_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot.sql", "original_file_path": "macros/materializations/snapshots/snapshot.sql", "unique_id": "macro.dbt.materialization_snapshot_default", "macro_sql": "{% materialization snapshot, default %}\n\n {%- set target_table = model.get('alias', model.get('name')) -%}\n\n {%- set strategy_name = config.get('strategy') -%}\n {%- set unique_key = config.get('unique_key') %}\n -- grab current tables grants config for comparision later on\n {%- set grant_config = config.get('grants') -%}\n\n {% set target_relation_exists, target_relation = get_or_create_relation(\n database=model.database,\n schema=model.schema,\n identifier=target_table,\n type='table') -%}\n\n {%- if not target_relation.is_table -%}\n {% do exceptions.relation_wrong_type(target_relation, 'table') %}\n {%- endif -%}\n\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set strategy_macro = strategy_dispatch(strategy_name) %}\n {# The model['config'] parameter below is no longer used, but passing anyway for compatibility #}\n {# It was a dictionary of config, instead of the config object from the context #}\n {% set strategy = strategy_macro(model, \"snapshotted_data\", \"source_data\", model['config'], target_relation_exists) %}\n\n {% if not target_relation_exists %}\n\n {% set build_sql = build_snapshot_table(strategy, model['compiled_code']) %}\n {% set build_or_select_sql = build_sql %}\n {% set final_sql = create_table_as(False, target_relation, build_sql) %}\n\n {% else %}\n\n {% set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() %}\n\n {{ adapter.assert_valid_snapshot_target_given_strategy(target_relation, columns, strategy) }}\n\n {% set build_or_select_sql = snapshot_staging_table(strategy, sql, target_relation) %}\n {% set staging_table = build_snapshot_staging_table(strategy, sql, target_relation) %}\n\n -- this may no-op if the database does not require column expansion\n {% do adapter.expand_target_column_types(from_relation=staging_table,\n to_relation=target_relation) %}\n\n {% set remove_columns = ['dbt_change_type', 'DBT_CHANGE_TYPE', 'dbt_unique_key', 'DBT_UNIQUE_KEY'] %}\n {% if unique_key | is_list %}\n {% for key in strategy.unique_key %}\n {{ remove_columns.append('dbt_unique_key_' + loop.index|string) }}\n {{ remove_columns.append('DBT_UNIQUE_KEY_' + loop.index|string) }}\n {% endfor %}\n {% endif %}\n\n {% set missing_columns = adapter.get_missing_columns(staging_table, target_relation)\n | rejectattr('name', 'in', remove_columns)\n | list %}\n\n {% do create_columns(target_relation, missing_columns) %}\n\n {% set source_columns = adapter.get_columns_in_relation(staging_table)\n | rejectattr('name', 'in', remove_columns)\n | list %}\n\n {% set quoted_source_columns = [] %}\n {% for column in source_columns %}\n {% do quoted_source_columns.append(adapter.quote(column.name)) %}\n {% endfor %}\n\n {% set final_sql = snapshot_merge_sql(\n target = target_relation,\n source = staging_table,\n insert_cols = quoted_source_columns\n )\n %}\n\n {% endif %}\n\n\n {{ check_time_data_types(build_or_select_sql) }}\n\n {% call statement('main') %}\n {{ final_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(target_relation_exists, full_refresh_mode=False) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if not target_relation_exists %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {% if staging_table is defined %}\n {% do post_snapshot(staging_table) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.get_or_create_relation", "macro.dbt.run_hooks", "macro.dbt.strategy_dispatch", "macro.dbt.build_snapshot_table", "macro.dbt.create_table_as", "macro.dbt.get_snapshot_table_column_names", "macro.dbt.snapshot_staging_table", "macro.dbt.build_snapshot_staging_table", "macro.dbt.create_columns", "macro.dbt.snapshot_merge_sql", "macro.dbt.check_time_data_types", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs", "macro.dbt.create_indexes", "macro.dbt.post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.233463, "supported_languages": ["sql"]}, "macro.dbt.materialization_test_default": {"name": "materialization_test_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/test.sql", "original_file_path": "macros/materializations/tests/test.sql", "unique_id": "macro.dbt.materialization_test_default", "macro_sql": "{%- materialization test, default -%}\n\n {% set relations = [] %}\n {% set limit = config.get('limit') %}\n {% set sql_header = config.get('sql_header') if flags.REQUIRE_SQL_HEADER_IN_TEST_CONFIGS else none %}\n\n {% set sql_with_limit %}\n {{ get_limit_subquery_sql(sql, limit) }}\n {% endset %}\n\n {% if should_store_failures() %}\n\n {% set identifier = model['alias'] %}\n {% set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% set store_failures_as = config.get('store_failures_as') %}\n -- if `--store-failures` is invoked via command line and `store_failures_as` is not set,\n -- config.get('store_failures_as', 'table') returns None, not 'table'\n {% if store_failures_as == none %}{% set store_failures_as = 'table' %}{% endif %}\n {% if store_failures_as not in ['table', 'view'] %}\n {{ exceptions.raise_compiler_error(\n \"'\" ~ store_failures_as ~ \"' is not a valid value for `store_failures_as`. \"\n \"Accepted values are: ['ephemeral', 'table', 'view']\"\n ) }}\n {% endif %}\n\n {% set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database, type=store_failures_as) -%} %}\n\n {% if old_relation %}\n {% do adapter.drop_relation(old_relation) %}\n {% endif %}\n\n {% call statement(auto_begin=True) %}\n {% if sql_header %}{{ sql_header }}{% endif %}\n {{ get_create_sql(target_relation, sql_with_limit) }}\n {% endcall %}\n\n {% do relations.append(target_relation) %}\n\n {# Since the test failures have already been saved to the database, reuse that result rather than querying again #}\n {% set main_sql %}\n select *\n from {{ target_relation }}\n {% endset %}\n\n {{ adapter.commit() }}\n\n {% else %}\n\n {% set main_sql = sql_with_limit %}\n\n {% endif %}\n\n {% set fail_calc = config.get('fail_calc') %}\n {% set warn_if = config.get('warn_if') %}\n {% set error_if = config.get('error_if') %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {% if sql_header %}{{ sql_header }}{% endif %}\n {# The limit has already been included above, and we do not want to duplicate it again. We also want to be safe for macro overrides treating `limit` as a required parameter. #}\n {{ get_test_sql(main_sql, fail_calc, warn_if, error_if, limit=none)}}\n\n {%- endcall %}\n\n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.get_limit_subquery_sql", "macro.dbt.should_store_failures", "macro.dbt.statement", "macro.dbt.get_create_sql", "macro.dbt.get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.2344708, "supported_languages": ["sql"]}, "macro.dbt.get_test_sql": {"name": "get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.get_test_sql", "macro_sql": "{% macro get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n {{ adapter.dispatch('get_test_sql', 'dbt')(main_sql, fail_calc, warn_if, error_if, limit) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "main_sql", "type": null, "description": ""}, {"name": "fail_calc", "type": null, "description": ""}, {"name": "warn_if", "type": null, "description": ""}, {"name": "error_if", "type": null, "description": ""}, {"name": "limit", "type": null, "description": ""}], "created_at": 1784225035.234706, "supported_languages": null}, "macro.dbt.default__get_test_sql": {"name": "default__get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.default__get_test_sql", "macro_sql": "{% macro default__get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n select\n {{ fail_calc }} as failures,\n {{ fail_calc }} {{ warn_if }} as should_warn,\n {{ fail_calc }} {{ error_if }} as should_error\n from (\n {{ main_sql }}\n {{ \"limit \" ~ limit if limit != none }}\n ) dbt_internal_test\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "main_sql", "type": null, "description": ""}, {"name": "fail_calc", "type": null, "description": ""}, {"name": "warn_if", "type": null, "description": ""}, {"name": "error_if", "type": null, "description": ""}, {"name": "limit", "type": null, "description": ""}], "created_at": 1784225035.234825, "supported_languages": null}, "macro.dbt.get_unit_test_sql": {"name": "get_unit_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.get_unit_test_sql", "macro_sql": "{% macro get_unit_test_sql(main_sql, expected_fixture_sql, expected_column_names) -%}\n {{ adapter.dispatch('get_unit_test_sql', 'dbt')(main_sql, expected_fixture_sql, expected_column_names) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_unit_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "main_sql", "type": null, "description": ""}, {"name": "expected_fixture_sql", "type": null, "description": ""}, {"name": "expected_column_names", "type": null, "description": ""}], "created_at": 1784225035.234905, "supported_languages": null}, "macro.dbt.default__get_unit_test_sql": {"name": "default__get_unit_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.default__get_unit_test_sql", "macro_sql": "{% macro default__get_unit_test_sql(main_sql, expected_fixture_sql, expected_column_names) -%}\n-- Build actual result given inputs\nwith dbt_internal_unit_test_actual as (\n select\n {% for expected_column_name in expected_column_names %}{{expected_column_name}}{% if not loop.last -%},{% endif %}{%- endfor -%}, {{ dbt.string_literal(\"actual\") }} as {{ adapter.quote(\"actual_or_expected\") }}\n from (\n {{ main_sql }}\n ) _dbt_internal_unit_test_actual\n),\n-- Build expected result\ndbt_internal_unit_test_expected as (\n select\n {% for expected_column_name in expected_column_names %}{{expected_column_name}}{% if not loop.last -%}, {% endif %}{%- endfor -%}, {{ dbt.string_literal(\"expected\") }} as {{ adapter.quote(\"actual_or_expected\") }}\n from (\n {{ expected_fixture_sql }}\n ) _dbt_internal_unit_test_expected\n)\n-- Union actual and expected results\nselect * from dbt_internal_unit_test_actual\nunion all\nselect * from dbt_internal_unit_test_expected\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "main_sql", "type": null, "description": ""}, {"name": "expected_fixture_sql", "type": null, "description": ""}, {"name": "expected_column_names", "type": null, "description": ""}], "created_at": 1784225035.235138, "supported_languages": null}, "macro.dbt.get_where_subquery": {"name": "get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.get_where_subquery", "macro_sql": "{% macro get_where_subquery(relation) -%}\n {% do return(adapter.dispatch('get_where_subquery', 'dbt')(relation)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_where_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.235272, "supported_languages": null}, "macro.dbt.default__get_where_subquery": {"name": "default__get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.default__get_where_subquery", "macro_sql": "{% macro default__get_where_subquery(relation) -%}\n {% set where = config.get('where', '') %}\n {% if where %}\n {%- set filtered -%}\n (select * from {{ relation }} where {{ where }}) dbt_subquery\n {%- endset -%}\n {% do return(filtered) %}\n {%- else -%}\n {% do return(relation) %}\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2354162, "supported_languages": null}, "macro.dbt.materialization_unit_default": {"name": "materialization_unit_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/unit.sql", "original_file_path": "macros/materializations/tests/unit.sql", "unique_id": "macro.dbt.materialization_unit_default", "macro_sql": "{%- materialization unit, default -%}\n\n {% set relations = [] %}\n {% set sql_header = config.get('sql_header') if flags.REQUIRE_SQL_HEADER_IN_TEST_CONFIGS else none %}\n\n {% set expected_rows = config.get('expected_rows') %}\n {% set expected_sql = config.get('expected_sql') %}\n {% set tested_expected_column_names = expected_rows[0].keys() if (expected_rows | length ) > 0 else get_columns_in_query(sql) %}\n\n {%- set target_relation = this.incorporate(type='table') -%}\n {%- set temp_relation = make_temp_relation(target_relation)-%}\n {% do run_query(get_create_table_as_sql(True, temp_relation, get_empty_subquery_sql(sql))) %}\n {%- set columns_in_relation = adapter.get_columns_in_relation(temp_relation) -%}\n {%- set column_name_to_data_types = {} -%}\n {%- set column_name_to_quoted = {} -%}\n {%- for column in columns_in_relation -%}\n {%- do column_name_to_data_types.update({column.name|lower: column.data_type}) -%}\n {%- do column_name_to_quoted.update({column.name|lower: column.quoted}) -%}\n {%- endfor -%}\n\n {%- set expected_column_names_quoted = [] -%}\n {%- for column_name in tested_expected_column_names -%}\n {%- do expected_column_names_quoted.append(column_name_to_quoted[column_name|lower]) -%}\n {%- endfor -%}\n\n {% if not expected_sql %}\n {% set expected_sql = get_expected_sql(expected_rows, column_name_to_data_types, column_name_to_quoted) %}\n {% endif %}\n {% set unit_test_sql = get_unit_test_sql(sql, expected_sql, expected_column_names_quoted) %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {% if sql_header %}{{ sql_header }}{% endif %}\n {{ unit_test_sql }}\n\n {%- endcall %}\n\n {% do adapter.drop_relation(temp_relation) %}\n\n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.get_columns_in_query", "macro.dbt.make_temp_relation", "macro.dbt.run_query", "macro.dbt.get_create_table_as_sql", "macro.dbt.get_empty_subquery_sql", "macro.dbt.get_expected_sql", "macro.dbt.get_unit_test_sql", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.236189, "supported_languages": ["sql"]}, "macro.dbt.materialization_materialized_view_default": {"name": "materialization_materialized_view_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialization_materialized_view_default", "macro_sql": "{% materialization materialized_view, default %}\n {% set existing_relation = load_cached_relation(this) %}\n {% set target_relation = this.incorporate(type=this.MaterializedView) %}\n {% set intermediate_relation = make_intermediate_relation(target_relation) %}\n {% set backup_relation_type = target_relation.MaterializedView if existing_relation is none else existing_relation.type %}\n {% set backup_relation = make_backup_relation(target_relation, backup_relation_type) %}\n\n {{ materialized_view_setup(backup_relation, intermediate_relation, pre_hooks) }}\n\n {% set build_sql = materialized_view_get_build_sql(existing_relation, target_relation, backup_relation, intermediate_relation) %}\n\n {% if build_sql == '' %}\n {{ materialized_view_execute_no_op(target_relation) }}\n {% else %}\n {{ materialized_view_execute_build_sql(build_sql, existing_relation, target_relation, post_hooks) }}\n {% endif %}\n\n {{ materialized_view_teardown(backup_relation, intermediate_relation, post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.materialized_view_setup", "macro.dbt.materialized_view_get_build_sql", "macro.dbt.materialized_view_execute_no_op", "macro.dbt.materialized_view_execute_build_sql", "macro.dbt.materialized_view_teardown"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.23681, "supported_languages": ["sql"]}, "macro.dbt.materialized_view_setup": {"name": "materialized_view_setup", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_setup", "macro_sql": "{% macro materialized_view_setup(backup_relation, intermediate_relation, pre_hooks) %}\n\n -- backup_relation and intermediate_relation should not already exist in the database\n -- it's possible these exist because of a previous run that exited unexpectedly\n {% set preexisting_backup_relation = load_cached_relation(backup_relation) %}\n {% set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) %}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}, {"name": "pre_hooks", "type": null, "description": ""}], "created_at": 1784225035.2369611, "supported_languages": null}, "macro.dbt.materialized_view_teardown": {"name": "materialized_view_teardown", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_teardown", "macro_sql": "{% macro materialized_view_teardown(backup_relation, intermediate_relation, post_hooks) %}\n\n -- drop the temp relations if they exist to leave the database clean for the next run\n {{ drop_relation_if_exists(backup_relation) }}\n {{ drop_relation_if_exists(intermediate_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}, {"name": "post_hooks", "type": null, "description": ""}], "created_at": 1784225035.237083, "supported_languages": null}, "macro.dbt.materialized_view_get_build_sql": {"name": "materialized_view_get_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_get_build_sql", "macro_sql": "{% macro materialized_view_get_build_sql(existing_relation, target_relation, backup_relation, intermediate_relation) %}\n\n {% set full_refresh_mode = should_full_refresh() %}\n\n -- determine the scenario we're in: create, full_refresh, alter, refresh data\n {% if existing_relation is none %}\n {% set build_sql = get_create_materialized_view_as_sql(target_relation, sql) %}\n {% elif full_refresh_mode or not existing_relation.is_materialized_view %}\n {% set build_sql = get_replace_sql(existing_relation, target_relation, sql) %}\n {% else %}\n\n -- get config options\n {% set on_configuration_change = config.get('on_configuration_change') %}\n {% set configuration_changes = get_materialized_view_configuration_changes(existing_relation, config) %}\n\n {% if configuration_changes is none %}\n {% set build_sql = refresh_materialized_view(target_relation) %}\n\n {% elif on_configuration_change == 'apply' %}\n {% set build_sql = get_alter_materialized_view_as_sql(target_relation, configuration_changes, sql, existing_relation, backup_relation, intermediate_relation) %}\n {% elif on_configuration_change == 'continue' %}\n {% set build_sql = '' %}\n {{ exceptions.warn(\"Configuration changes were identified and `on_configuration_change` was set to `continue` for `\" ~ target_relation.render() ~ \"`\") }}\n {% elif on_configuration_change == 'fail' %}\n {{ exceptions.raise_fail_fast_error(\"Configuration changes were identified and `on_configuration_change` was set to `fail` for `\" ~ target_relation.render() ~ \"`\") }}\n\n {% else %}\n -- this only happens if the user provides a value other than `apply`, 'skip', 'fail'\n {{ exceptions.raise_compiler_error(\"Unexpected configuration scenario\") }}\n\n {% endif %}\n\n {% endif %}\n\n {% do return(build_sql) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh", "macro.dbt.get_create_materialized_view_as_sql", "macro.dbt.get_replace_sql", "macro.dbt.get_materialized_view_configuration_changes", "macro.dbt.refresh_materialized_view", "macro.dbt.get_alter_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}], "created_at": 1784225035.237568, "supported_languages": null}, "macro.dbt.materialized_view_execute_no_op": {"name": "materialized_view_execute_no_op", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_execute_no_op", "macro_sql": "{% macro materialized_view_execute_no_op(target_relation) %}\n {% do store_raw_result(\n name=\"main\",\n message=\"skip \" ~ target_relation,\n code=\"skip\",\n rows_affected=\"-1\"\n ) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.237663, "supported_languages": null}, "macro.dbt.materialized_view_execute_build_sql": {"name": "materialized_view_execute_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_execute_build_sql", "macro_sql": "{% macro materialized_view_execute_build_sql(build_sql, existing_relation, target_relation, post_hooks) %}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set grant_config = config.get('grants') %}\n\n {% call statement(name=\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "build_sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "post_hooks", "type": null, "description": ""}], "created_at": 1784225035.237908, "supported_languages": null}, "macro.dbt.materialization_view_default": {"name": "materialization_view_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view.sql", "original_file_path": "macros/materializations/models/view.sql", "unique_id": "macro.dbt.materialization_view_default", "macro_sql": "{%- materialization view, default -%}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='view') -%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n This relation (probably) doesn't exist yet. If it does exist, it's a leftover from\n a previous run, and we're going to try to drop it immediately. At the end of this\n materialization, we're going to rename the \"existing_relation\" to this identifier,\n and then we're going to drop it. In order to make sure we run the correct one of:\n - drop view ...\n - drop table ...\n\n We need to set the type of this relation to be the type of the existing_relation, if it exists,\n or else \"view\" as a sane default if it does not. Note that if the existing_relation does not\n exist, then there is nothing to move out of the way and subsequentally drop. In that case,\n this relation will be effectively unused.\n */\n {%- set backup_relation_type = 'view' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n -- move the existing view out of the way\n {% if existing_relation is not none %}\n /* Do the equivalent of rename_if_exists. 'existing_relation' could have been dropped\n since the variable was first set. */\n {% set existing_relation = load_cached_relation(existing_relation) %}\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n {% endif %}\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.run_hooks", "macro.dbt.drop_relation_if_exists", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.238715, "supported_languages": ["sql"]}, "macro.dbt.materialization_table_default": {"name": "materialization_table_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table.sql", "original_file_path": "macros/materializations/models/table.sql", "unique_id": "macro.dbt.materialization_table_default", "macro_sql": "{% materialization table, default %}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') %}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n See ../view/view.sql for more information about this relation.\n */\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_table_as_sql(False, intermediate_relation, sql) }}\n {%- endcall %}\n\n {% do create_indexes(intermediate_relation) %}\n\n -- cleanup\n {% if existing_relation is not none %}\n /* Do the equivalent of rename_if_exists. 'existing_relation' could have been dropped\n since the variable was first set. */\n {% set existing_relation = load_cached_relation(existing_relation) %}\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n {% endif %}\n\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n -- finally, drop the existing/backup relation after the commit\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.get_create_table_as_sql", "macro.dbt.create_indexes", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.2395608, "supported_languages": ["sql"]}, "macro.dbt.get_quoted_csv": {"name": "get_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_quoted_csv", "macro_sql": "{% macro get_quoted_csv(column_names) %}\n\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote(col)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "column_names", "type": null, "description": ""}], "created_at": 1784225035.239943, "supported_languages": null}, "macro.dbt.diff_columns": {"name": "diff_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_columns", "macro_sql": "{% macro diff_columns(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% set source_names = source_columns | map(attribute = 'column') | list %}\n {% set target_names = target_columns | map(attribute = 'column') | list %}\n\n {# --check whether the name attribute exists in the target - this does not perform a data type check #}\n {% for sc in source_columns %}\n {% if sc.name not in target_names %}\n {{ result.append(sc) }}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_columns", "type": null, "description": ""}, {"name": "target_columns", "type": null, "description": ""}], "created_at": 1784225035.240166, "supported_languages": null}, "macro.dbt.diff_column_data_types": {"name": "diff_column_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_column_data_types", "macro_sql": "{% macro diff_column_data_types(source_columns, target_columns) %}\n {{ return(adapter.dispatch('diff_column_data_types', 'dbt')(source_columns, target_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__diff_column_data_types"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_columns", "type": null, "description": ""}, {"name": "target_columns", "type": null, "description": ""}], "created_at": 1784225035.240252, "supported_languages": null}, "macro.dbt.default__diff_column_data_types": {"name": "default__diff_column_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.default__diff_column_data_types", "macro_sql": "{% macro default__diff_column_data_types(source_columns, target_columns) %}\n {% set result = [] %}\n {% for sc in source_columns %}\n {% set tc = target_columns | selectattr(\"name\", \"equalto\", sc.name) | list | first %}\n {% if tc %}\n {% if sc.expanded_data_type != tc.expanded_data_type and not sc.can_expand_to(other_column=tc) %}\n {{ result.append( { 'column_name': tc.name, 'new_type': sc.expanded_data_type } ) }}\n {% endif %}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_columns", "type": null, "description": ""}, {"name": "target_columns", "type": null, "description": ""}], "created_at": 1784225035.240507, "supported_languages": null}, "macro.dbt.get_merge_update_columns": {"name": "get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_merge_update_columns", "macro_sql": "{% macro get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {{ return(adapter.dispatch('get_merge_update_columns', 'dbt')(merge_update_columns, merge_exclude_columns, dest_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_update_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "merge_update_columns", "type": null, "description": ""}, {"name": "merge_exclude_columns", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}], "created_at": 1784225035.2406049, "supported_languages": null}, "macro.dbt.default__get_merge_update_columns": {"name": "default__get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.default__get_merge_update_columns", "macro_sql": "{% macro default__get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {%- set default_cols = dest_columns | map(attribute=\"quoted\") | list -%}\n\n {%- if merge_update_columns and merge_exclude_columns -%}\n {{ exceptions.raise_compiler_error(\n 'Model cannot specify merge_update_columns and merge_exclude_columns. Please update model to use only one config'\n )}}\n {%- elif merge_update_columns -%}\n {%- set update_columns = merge_update_columns -%}\n {%- elif merge_exclude_columns -%}\n {%- set update_columns = [] -%}\n {%- for column in dest_columns -%}\n {% if column.column | lower not in merge_exclude_columns | map(\"lower\") | list %}\n {%- do update_columns.append(column.quoted) -%}\n {% endif %}\n {%- endfor -%}\n {%- else -%}\n {%- set update_columns = default_cols -%}\n {%- endif -%}\n\n {{ return(update_columns) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "merge_update_columns", "type": null, "description": ""}, {"name": "merge_exclude_columns", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}], "created_at": 1784225035.240895, "supported_languages": null}, "macro.dbt.get_merge_sql": {"name": "get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_merge_sql", "macro_sql": "{% macro get_merge_sql(target, source, unique_key, dest_columns, incremental_predicates=none) -%}\n -- back compat for old kwarg name\n {% set incremental_predicates = kwargs.get('predicates', incremental_predicates) %}\n {{ adapter.dispatch('get_merge_sql', 'dbt')(target, source, unique_key, dest_columns, incremental_predicates) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "unique_key", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "incremental_predicates", "type": null, "description": ""}], "created_at": 1784225035.241386, "supported_languages": null}, "macro.dbt.get_merge_unique_key_match": {"name": "get_merge_unique_key_match", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_merge_unique_key_match", "macro_sql": "{% macro get_merge_unique_key_match(source_unique_key, target_unique_key) %}\n {{ return(adapter.dispatch('get_merge_unique_key_match', 'dbt')(source_unique_key, target_unique_key)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_unique_key_match"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_unique_key", "type": null, "description": ""}, {"name": "target_unique_key", "type": null, "description": ""}], "created_at": 1784225035.241468, "supported_languages": null}, "macro.dbt.default__get_merge_unique_key_match": {"name": "default__get_merge_unique_key_match", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_merge_unique_key_match", "macro_sql": "{% macro default__get_merge_unique_key_match(source_unique_key, target_unique_key) -%}\n {{ return(equals(source_unique_key, target_unique_key) | trim) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_unique_key", "type": null, "description": ""}, {"name": "target_unique_key", "type": null, "description": ""}], "created_at": 1784225035.241533, "supported_languages": null}, "macro.dbt.default__get_merge_sql": {"name": "default__get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_merge_sql", "macro_sql": "{% macro default__get_merge_sql(target, source, unique_key, dest_columns, incremental_predicates=none) -%}\n {%- set predicates = [] if incremental_predicates is none else [] + incremental_predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set merge_update_columns = config.get('merge_update_columns') -%}\n {%- set merge_exclude_columns = config.get('merge_exclude_columns') -%}\n {%- set update_columns = get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {% if unique_key %}\n {% if unique_key is sequence and unique_key is not mapping and unique_key is not string %}\n {% for key in unique_key %}\n {% set this_key_match %}\n DBT_INTERNAL_SOURCE.{{ key }} = DBT_INTERNAL_DEST.{{ key }}\n {% endset %}\n {% do predicates.append(this_key_match) %}\n {% endfor %}\n {% else %}\n {% set source_unique_key = (\"DBT_INTERNAL_SOURCE.\" ~ unique_key) | trim %}\n {% set target_unique_key = (\"DBT_INTERNAL_DEST.\" ~ unique_key) | trim %}\n {% set unique_key_match = get_merge_unique_key_match(source_unique_key, target_unique_key) %}\n {% do predicates.append(unique_key_match) %}\n {% endif %}\n {% else %}\n {% do predicates.append('FALSE') %}\n {% endif %}\n\n {{ sql_header if sql_header is not none }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on {{\"(\" ~ predicates | join(\") and (\") ~ \")\"}}\n\n {% if unique_key %}\n when matched then update set\n {% for column_name in update_columns -%}\n {{ column_name }} = DBT_INTERNAL_SOURCE.{{ column_name }}\n {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n {% endif %}\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv", "macro.dbt.get_merge_update_columns", "macro.dbt.get_merge_unique_key_match"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "unique_key", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "incremental_predicates", "type": null, "description": ""}], "created_at": 1784225035.242184, "supported_languages": null}, "macro.dbt.get_delete_insert_merge_sql": {"name": "get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_delete_insert_merge_sql", "macro_sql": "{% macro get_delete_insert_merge_sql(target, source, unique_key, dest_columns, incremental_predicates) -%}\n {{ adapter.dispatch('get_delete_insert_merge_sql', 'dbt')(target, source, unique_key, dest_columns, incremental_predicates) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "unique_key", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "incremental_predicates", "type": null, "description": ""}], "created_at": 1784225035.2422888, "supported_languages": null}, "macro.dbt.default__get_delete_insert_merge_sql": {"name": "default__get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_delete_insert_merge_sql", "macro_sql": "{% macro default__get_delete_insert_merge_sql(target, source, unique_key, dest_columns, incremental_predicates) -%}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n {% if unique_key %}\n {% if unique_key is string %}\n {% set unique_key = [unique_key] %}\n {% endif %}\n\n {%- set unique_key_str = unique_key|join(', ') -%}\n\n delete from {{ target }} as DBT_INTERNAL_DEST\n where ({{ unique_key_str }}) in (\n select distinct {{ unique_key_str }}\n from {{ source }} as DBT_INTERNAL_SOURCE\n )\n {%- if incremental_predicates %}\n {% for predicate in incremental_predicates %}\n and {{ predicate }}\n {% endfor %}\n {%- endif -%};\n\n {% endif %}\n\n insert into {{ target }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ source }}\n )\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "unique_key", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "incremental_predicates", "type": null, "description": ""}], "created_at": 1784225035.242562, "supported_languages": null}, "macro.dbt.get_insert_overwrite_merge_sql": {"name": "get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_insert_overwrite_merge_sql", "macro_sql": "{% macro get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header=false) -%}\n {{ adapter.dispatch('get_insert_overwrite_merge_sql', 'dbt')(target, source, dest_columns, predicates, include_sql_header) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "predicates", "type": null, "description": ""}, {"name": "include_sql_header", "type": null, "description": ""}], "created_at": 1784225035.242666, "supported_languages": null}, "macro.dbt.default__get_insert_overwrite_merge_sql": {"name": "default__get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_insert_overwrite_merge_sql", "macro_sql": "{% macro default__get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header) -%}\n {#-- The only time include_sql_header is True: --#}\n {#-- BigQuery + insert_overwrite strategy + \"static\" partitions config --#}\n {#-- We should consider including the sql header at the materialization level instead --#}\n\n {%- set predicates = [] if predicates is none else [] + predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none and include_sql_header }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on FALSE\n\n when not matched by source\n {% if predicates %} and {{ predicates | join(' and ') }} {% endif %}\n then delete\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "predicates", "type": null, "description": ""}, {"name": "include_sql_header", "type": null, "description": ""}], "created_at": 1784225035.242919, "supported_languages": null}, "macro.dbt.is_incremental": {"name": "is_incremental", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/is_incremental.sql", "original_file_path": "macros/materializations/models/incremental/is_incremental.sql", "unique_id": "macro.dbt.is_incremental", "macro_sql": "{% macro is_incremental() %}\n {#-- do not run introspective queries in parsing #}\n {% if not execute %}\n {{ return(False) }}\n {% else %}\n {% set relation = adapter.get_relation(this.database, this.schema, this.table) %}\n {{ return(relation is not none\n and relation.type == 'table'\n and model.config.materialized == 'incremental'\n and not should_full_refresh()) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2431629, "supported_languages": null}, "macro.dbt.get_incremental_append_sql": {"name": "get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_append_sql", "macro_sql": "{% macro get_incremental_append_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_append_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.2434292, "supported_languages": null}, "macro.dbt.default__get_incremental_append_sql": {"name": "default__get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_append_sql", "macro_sql": "{% macro default__get_incremental_append_sql(arg_dict) %}\n\n {% do return(get_insert_into_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_insert_into_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.24352, "supported_languages": null}, "macro.dbt.get_incremental_delete_insert_sql": {"name": "get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_delete_insert_sql", "macro_sql": "{% macro get_incremental_delete_insert_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_delete_insert_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_delete_insert_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.2435899, "supported_languages": null}, "macro.dbt.default__get_incremental_delete_insert_sql": {"name": "default__get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_delete_insert_sql", "macro_sql": "{% macro default__get_incremental_delete_insert_sql(arg_dict) %}\n\n {% do return(get_delete_insert_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.243697, "supported_languages": null}, "macro.dbt.get_incremental_merge_sql": {"name": "get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_merge_sql", "macro_sql": "{% macro get_incremental_merge_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.243812, "supported_languages": null}, "macro.dbt.default__get_incremental_merge_sql": {"name": "default__get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_merge_sql", "macro_sql": "{% macro default__get_incremental_merge_sql(arg_dict) %}\n\n {% do return(get_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.243924, "supported_languages": null}, "macro.dbt.get_incremental_insert_overwrite_sql": {"name": "get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_insert_overwrite_sql", "macro_sql": "{% macro get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_insert_overwrite_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_insert_overwrite_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.243996, "supported_languages": null}, "macro.dbt.default__get_incremental_insert_overwrite_sql": {"name": "default__get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_insert_overwrite_sql", "macro_sql": "{% macro default__get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {% do return(get_insert_overwrite_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.244092, "supported_languages": null}, "macro.dbt.get_incremental_default_sql": {"name": "get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_default_sql", "macro_sql": "{% macro get_incremental_default_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_default_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_incremental_default_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.244164, "supported_languages": null}, "macro.dbt.default__get_incremental_default_sql": {"name": "default__get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_default_sql", "macro_sql": "{% macro default__get_incremental_default_sql(arg_dict) %}\n\n {% do return(get_incremental_append_sql(arg_dict)) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.244222, "supported_languages": null}, "macro.dbt.get_incremental_microbatch_sql": {"name": "get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_microbatch_sql", "macro_sql": "{% macro get_incremental_microbatch_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_microbatch_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_incremental_microbatch_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.244291, "supported_languages": null}, "macro.dbt.default__get_incremental_microbatch_sql": {"name": "default__get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_microbatch_sql", "macro_sql": "{% macro default__get_incremental_microbatch_sql(arg_dict) %}\n\n {{ exceptions.raise_not_implemented('microbatch materialization strategy not implemented for adapter ' + adapter.type()) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.2443562, "supported_languages": null}, "macro.dbt.get_insert_into_sql": {"name": "get_insert_into_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_insert_into_sql", "macro_sql": "{% macro get_insert_into_sql(target_relation, temp_relation, dest_columns) %}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n insert into {{ target_relation }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ temp_relation }}\n )\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}, {"name": "temp_relation", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}], "created_at": 1784225035.244462, "supported_languages": null}, "macro.dbt.materialization_incremental_default": {"name": "materialization_incremental_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/incremental.sql", "original_file_path": "macros/materializations/models/incremental/incremental.sql", "unique_id": "macro.dbt.materialization_incremental_default", "macro_sql": "{% materialization incremental, default -%}\n\n -- relations\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') -%}\n {%- set temp_relation = make_temp_relation(target_relation)-%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation)-%}\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n\n -- configs\n {%- set unique_key = config.get('unique_key') -%}\n {%- set full_refresh_mode = (should_full_refresh() or existing_relation.is_view) -%}\n {%- set on_schema_change = incremental_validate_on_schema_change(config.get('on_schema_change'), default='ignore') -%}\n\n -- the temp_ and backup_ relations should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation. This has to happen before\n -- BEGIN, in a separate transaction\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation)-%}\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set to_drop = [] %}\n\n {% set incremental_strategy = config.get('incremental_strategy') or 'default' %}\n {% set strategy_sql_macro_func = adapter.get_incremental_strategy_macro(context, incremental_strategy) %}\n\n {% if existing_relation is none %}\n {% set build_sql = get_create_table_as_sql(False, target_relation, sql) %}\n {% set relation_for_indexes = target_relation %}\n {% elif full_refresh_mode %}\n {% set build_sql = get_create_table_as_sql(False, intermediate_relation, sql) %}\n {% set relation_for_indexes = intermediate_relation %}\n {% set need_swap = true %}\n {% else %}\n {% do run_query(get_create_table_as_sql(True, temp_relation, sql)) %}\n {% set relation_for_indexes = temp_relation %}\n {% set contract_config = config.get('contract') %}\n {% if not contract_config or not contract_config.enforced %}\n {% do adapter.expand_target_column_types(\n from_relation=temp_relation,\n to_relation=target_relation) %}\n {% endif %}\n {#-- Process schema changes. Returns dict of changes if successful. Use source columns for upserting/merging --#}\n {% set dest_columns = process_schema_changes(on_schema_change, temp_relation, existing_relation) %}\n {% if not dest_columns %}\n {% set dest_columns = adapter.get_columns_in_relation(existing_relation) %}\n {% endif %}\n\n {#-- Get the incremental_strategy, the macro to use for the strategy, and build the sql --#}\n {% set incremental_predicates = config.get('predicates', none) or config.get('incremental_predicates', none) %}\n {% set strategy_arg_dict = ({'target_relation': target_relation, 'temp_relation': temp_relation, 'unique_key': unique_key, 'dest_columns': dest_columns, 'incremental_predicates': incremental_predicates }) %}\n {% set build_sql = strategy_sql_macro_func(strategy_arg_dict) %}\n\n {% endif %}\n\n {% call statement(\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% if existing_relation is none or existing_relation.is_view or should_full_refresh() %}\n {% do create_indexes(relation_for_indexes) %}\n {% endif %}\n\n {% if need_swap %}\n {% do adapter.rename_relation(target_relation, backup_relation) %}\n {% do adapter.rename_relation(intermediate_relation, target_relation) %}\n {% do to_drop.append(backup_relation) %}\n {% endif %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {% do adapter.commit() %}\n\n {% for rel in to_drop %}\n {% do adapter.drop_relation(rel) %}\n {% endfor %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_temp_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.should_full_refresh", "macro.dbt.incremental_validate_on_schema_change", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.get_create_table_as_sql", "macro.dbt.run_query", "macro.dbt.process_schema_changes", "macro.dbt.statement", "macro.dbt.create_indexes", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.246111, "supported_languages": ["sql"]}, "macro.dbt.incremental_validate_on_schema_change": {"name": "incremental_validate_on_schema_change", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.incremental_validate_on_schema_change", "macro_sql": "{% macro incremental_validate_on_schema_change(on_schema_change, default='ignore') %}\n\n {% if on_schema_change not in ['sync_all_columns', 'append_new_columns', 'fail', 'ignore'] %}\n\n {% set log_message = 'Invalid value for on_schema_change (%s) specified. Setting default value of %s.' % (on_schema_change, default) %}\n {% do log(log_message) %}\n\n {{ return(default) }}\n\n {% else %}\n\n {{ return(on_schema_change) }}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "on_schema_change", "type": null, "description": ""}, {"name": "default", "type": null, "description": ""}], "created_at": 1784225035.246672, "supported_languages": null}, "macro.dbt.check_for_schema_changes": {"name": "check_for_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.check_for_schema_changes", "macro_sql": "{% macro check_for_schema_changes(source_relation, target_relation) %}\n {{ return(adapter.dispatch('check_for_schema_changes', 'dbt')(source_relation, target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__check_for_schema_changes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.246758, "supported_languages": null}, "macro.dbt.default__check_for_schema_changes": {"name": "default__check_for_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.default__check_for_schema_changes", "macro_sql": "{% macro default__check_for_schema_changes(source_relation, target_relation) %}\n\n {% set schema_changed = False %}\n\n {%- set source_columns = adapter.get_columns_in_relation(source_relation) -%}\n {%- set target_columns = adapter.get_columns_in_relation(target_relation) -%}\n {%- set source_not_in_target = diff_columns(source_columns, target_columns) -%}\n {%- set target_not_in_source = diff_columns(target_columns, source_columns) -%}\n\n {% set new_target_types = diff_column_data_types(source_columns, target_columns) %}\n\n {% if source_not_in_target != [] %}\n {% set schema_changed = True %}\n {% elif target_not_in_source != [] or new_target_types != [] %}\n {% set schema_changed = True %}\n {% elif new_target_types != [] %}\n {% set schema_changed = True %}\n {% endif %}\n\n {% set changes_dict = {\n 'schema_changed': schema_changed,\n 'source_not_in_target': source_not_in_target,\n 'target_not_in_source': target_not_in_source,\n 'source_columns': source_columns,\n 'target_columns': target_columns,\n 'new_target_types': new_target_types\n } %}\n\n {% set msg %}\n In {{ target_relation }}:\n Schema changed: {{ schema_changed }}\n Source columns not in target: {{ source_not_in_target }}\n Target columns not in source: {{ target_not_in_source }}\n New column types: {{ new_target_types }}\n {% endset %}\n\n {% do log(msg) %}\n\n {{ return(changes_dict) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.diff_columns", "macro.dbt.diff_column_data_types"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.247231, "supported_languages": null}, "macro.dbt.sync_column_schemas": {"name": "sync_column_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.sync_column_schemas", "macro_sql": "{% macro sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n {{ return(adapter.dispatch('sync_column_schemas', 'dbt')(on_schema_change, target_relation, schema_changes_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__sync_column_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "on_schema_change", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "schema_changes_dict", "type": null, "description": ""}], "created_at": 1784225035.247332, "supported_languages": null}, "macro.dbt.default__sync_column_schemas": {"name": "default__sync_column_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.default__sync_column_schemas", "macro_sql": "{% macro default__sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {%- set add_to_target_arr = schema_changes_dict['source_not_in_target'] -%}\n {%- set remove_from_target_arr = schema_changes_dict['target_not_in_source'] -%}\n {%- set new_target_types = schema_changes_dict['new_target_types'] -%}\n\n {%- if on_schema_change == 'append_new_columns'-%}\n {%- if add_to_target_arr | length > 0 -%}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, none) -%}\n {%- endif -%}\n\n {% elif on_schema_change == 'sync_all_columns' %}\n\n {% if add_to_target_arr | length > 0 or remove_from_target_arr | length > 0 %}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, remove_from_target_arr) -%}\n {% endif %}\n\n {% if new_target_types != [] %}\n {% for ntt in new_target_types %}\n {% set column_name = ntt['column_name'] %}\n {% set new_type = ntt['new_type'] %}\n {% do alter_column_type(target_relation, column_name, new_type) %}\n {% endfor %}\n {% endif %}\n\n {% endif %}\n\n {% set schema_change_message %}\n In {{ target_relation }}:\n Schema change approach: {{ on_schema_change }}\n Columns added: {{ add_to_target_arr }}\n Columns removed: {{ remove_from_target_arr }}\n Data types changed: {{ new_target_types }}\n {% endset %}\n\n {% do log(schema_change_message) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.alter_relation_add_remove_columns", "macro.dbt.alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "on_schema_change", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "schema_changes_dict", "type": null, "description": ""}], "created_at": 1784225035.2477949, "supported_languages": null}, "macro.dbt.process_schema_changes": {"name": "process_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.process_schema_changes", "macro_sql": "{% macro process_schema_changes(on_schema_change, source_relation, target_relation) %}\n {{ return(adapter.dispatch('process_schema_changes', 'dbt')(on_schema_change, source_relation, target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__process_schema_changes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "on_schema_change", "type": null, "description": ""}, {"name": "source_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.247891, "supported_languages": null}, "macro.dbt.default__process_schema_changes": {"name": "default__process_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.default__process_schema_changes", "macro_sql": "{% macro default__process_schema_changes(on_schema_change, source_relation, target_relation) %}\n\n {% if on_schema_change == 'ignore' %}\n\n {{ return({}) }}\n\n {% else %}\n\n {% set schema_changes_dict = check_for_schema_changes(source_relation, target_relation) %}\n\n {% if schema_changes_dict['schema_changed'] %}\n\n {% if on_schema_change == 'fail' %}\n\n {% set fail_msg %}\n The source and target schemas on this incremental model are out of sync!\n They can be reconciled in several ways:\n - set the `on_schema_change` config to either append_new_columns or sync_all_columns, depending on your situation.\n - Re-run the incremental model with `full_refresh: True` to update the target schema.\n - update the schema manually and re-run the process.\n\n Additional troubleshooting context:\n Source columns not in target: {{ schema_changes_dict['source_not_in_target'] }}\n Target columns not in source: {{ schema_changes_dict['target_not_in_source'] }}\n New column types: {{ schema_changes_dict['new_target_types'] }}\n {% endset %}\n\n {% do exceptions.raise_compiler_error(fail_msg) %}\n\n {# -- unless we ignore, run the sync operation per the config #}\n {% else %}\n\n {% do sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {% endif %}\n\n {% endif %}\n\n {{ return(schema_changes_dict['source_columns']) }}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.check_for_schema_changes", "macro.dbt.sync_column_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "on_schema_change", "type": null, "description": ""}, {"name": "source_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.2482262, "supported_languages": null}, "macro.dbt.can_clone_table": {"name": "can_clone_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/can_clone_table.sql", "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", "unique_id": "macro.dbt.can_clone_table", "macro_sql": "{% macro can_clone_table() %}\n {{ return(adapter.dispatch('can_clone_table', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__can_clone_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2483351, "supported_languages": null}, "macro.dbt.default__can_clone_table": {"name": "default__can_clone_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/can_clone_table.sql", "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", "unique_id": "macro.dbt.default__can_clone_table", "macro_sql": "{% macro default__can_clone_table() %}\n {{ return(False) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.248387, "supported_languages": null}, "macro.dbt.create_or_replace_clone": {"name": "create_or_replace_clone", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/create_or_replace_clone.sql", "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", "unique_id": "macro.dbt.create_or_replace_clone", "macro_sql": "{% macro create_or_replace_clone(this_relation, defer_relation) %}\n {{ return(adapter.dispatch('create_or_replace_clone', 'dbt')(this_relation, defer_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_or_replace_clone"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "this_relation", "type": null, "description": ""}, {"name": "defer_relation", "type": null, "description": ""}], "created_at": 1784225035.248508, "supported_languages": null}, "macro.dbt.default__create_or_replace_clone": {"name": "default__create_or_replace_clone", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/create_or_replace_clone.sql", "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", "unique_id": "macro.dbt.default__create_or_replace_clone", "macro_sql": "{% macro default__create_or_replace_clone(this_relation, defer_relation) %}\n create or replace table {{ this_relation.render() }} clone {{ defer_relation.render() }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "this_relation", "type": null, "description": ""}, {"name": "defer_relation", "type": null, "description": ""}], "created_at": 1784225035.2485812, "supported_languages": null}, "macro.dbt.materialization_clone_default": {"name": "materialization_clone_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/clone.sql", "original_file_path": "macros/materializations/models/clone/clone.sql", "unique_id": "macro.dbt.materialization_clone_default", "macro_sql": "{%- materialization clone, default -%}\n\n {%- set relations = {'relations': []} -%}\n\n {%- if not defer_relation -%}\n -- nothing to do\n {{ log(\"No relation found in state manifest for \" ~ model.unique_id, info=True) }}\n {{ return(relations) }}\n {%- endif -%}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n\n {%- if existing_relation and not flags.FULL_REFRESH -%}\n -- noop!\n {{ log(\"Relation \" ~ existing_relation ~ \" already exists\", info=True) }}\n {{ return(relations) }}\n {%- endif -%}\n\n {%- set other_existing_relation = load_cached_relation(defer_relation) -%}\n\n -- If this is a database that can do zero-copy cloning of tables, and the other relation is a table, then this will be a table\n -- Otherwise, this will be a view\n\n {% set can_clone_table = can_clone_table() %}\n {%- set grant_config = config.get('grants') -%}\n\n {%- if other_existing_relation and other_existing_relation.type == 'table' and can_clone_table -%}\n\n {%- set target_relation = this.incorporate(type='table') -%}\n {% if existing_relation is not none and not existing_relation.is_table %}\n {{ log(\"Dropping relation \" ~ existing_relation.render() ~ \" because it is of type \" ~ existing_relation.type) }}\n {{ drop_relation_if_exists(existing_relation) }}\n {% endif %}\n\n -- as a general rule, data platforms that can clone tables can also do atomic 'create or replace'\n {% if target_relation.database == defer_relation.database and\n target_relation.schema == defer_relation.schema and\n target_relation.identifier == defer_relation.identifier %}\n {{ log(\"Target relation and defer relation are the same, skipping clone for relation: \" ~ target_relation.render()) }}\n {% else %}\n {% call statement('main') %}\n {{ create_or_replace_clone(target_relation, defer_relation) }}\n {% endcall %}\n {% endif %}\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n {% do persist_docs(target_relation, model) %}\n\n {{ return({'relations': [target_relation]}) }}\n\n {%- else -%}\n\n {%- set target_relation = this.incorporate(type='view') -%}\n\n -- reuse the view materialization\n -- TODO: support actual dispatch for materialization macros\n -- Tracking ticket: https://github.com/dbt-labs/dbt-core/issues/7799\n {% set search_name = \"materialization_view_\" ~ adapter.type() %}\n {% if not search_name in context %}\n {% set search_name = \"materialization_view_default\" %}\n {% endif %}\n {% set materialization_macro = context[search_name] %}\n {% set relations = materialization_macro() %}\n {{ return(relations) }}\n\n {%- endif -%}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.can_clone_table", "macro.dbt.drop_relation_if_exists", "macro.dbt.statement", "macro.dbt.create_or_replace_clone", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.2496881, "supported_languages": ["sql"]}, "macro.dbt.materialization_seed_default": {"name": "materialization_seed_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/seed.sql", "original_file_path": "macros/materializations/seeds/seed.sql", "unique_id": "macro.dbt.materialization_seed_default", "macro_sql": "{% materialization seed, default %}\n\n {%- set identifier = model['alias'] -%}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n\n {%- set exists_as_table = (old_relation is not none and old_relation.is_table) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set grant_config = config.get('grants') -%}\n {%- set agate_table = load_agate_table() -%}\n -- grab current tables grants config for comparison later on\n\n {%- do store_result('agate_table', response='OK', agate_table=agate_table) -%}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% set create_table_sql = \"\" %}\n {% if exists_as_view %}\n {{ exceptions.raise_compiler_error(\"Cannot seed to '{}', it is a view\".format(old_relation.render())) }}\n {% elif exists_as_table %}\n {% set create_table_sql = reset_csv_table(model, full_refresh_mode, old_relation, agate_table) %}\n {% else %}\n {% set create_table_sql = create_csv_table(model, agate_table) %}\n {% endif %}\n\n {% set code = 'CREATE' if full_refresh_mode else 'INSERT' %}\n {% set rows_affected = (agate_table.rows | length) %}\n {% set sql = \"\" %}\n {% if rows_affected > 0 %}\n {% set sql = load_csv_rows(model, agate_table) %}\n {% endif %}\n\n {% call noop_statement('main', code ~ ' ' ~ rows_affected, code, rows_affected) %}\n {{ get_csv_sql(create_table_sql, sql) }};\n {% endcall %}\n\n {% set target_relation = this.incorporate(type='table') %}\n\n {% set should_revoke = should_revoke(old_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if full_refresh_mode or not exists_as_table %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh", "macro.dbt.run_hooks", "macro.dbt.reset_csv_table", "macro.dbt.create_csv_table", "macro.dbt.load_csv_rows", "macro.dbt.noop_statement", "macro.dbt.get_csv_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs", "macro.dbt.create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.250761, "supported_languages": ["sql"]}, "macro.dbt.create_csv_table": {"name": "create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.create_csv_table", "macro_sql": "{% macro create_csv_table(model, agate_table) -%}\n {{ adapter.dispatch('create_csv_table', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.251154, "supported_languages": null}, "macro.dbt.default__create_csv_table": {"name": "default__create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__create_csv_table", "macro_sql": "{% macro default__create_csv_table(model, agate_table) %}\n {%- set column_override = model['config'].get('column_types', {}) -%}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n\n {% set sql %}\n create table {{ this.render() }} (\n {%- for col_name in agate_table.column_names -%}\n {%- set inferred_type = adapter.convert_type(agate_table, loop.index0) -%}\n {%- set type = column_override.get(col_name, inferred_type) -%}\n {%- set column_name = (col_name | string) -%}\n {{ adapter.quote_seed_column(column_name, quote_seed_column) }} {{ type }} {%- if not loop.last -%}, {%- endif -%}\n {%- endfor -%}\n )\n {% endset %}\n\n {% call statement('_') -%}\n {{ sql }}\n {%- endcall %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.251488, "supported_languages": null}, "macro.dbt.reset_csv_table": {"name": "reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.reset_csv_table", "macro_sql": "{% macro reset_csv_table(model, full_refresh, old_relation, agate_table) -%}\n {{ adapter.dispatch('reset_csv_table', 'dbt')(model, full_refresh, old_relation, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__reset_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "full_refresh", "type": null, "description": ""}, {"name": "old_relation", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.2515788, "supported_languages": null}, "macro.dbt.default__reset_csv_table": {"name": "default__reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__reset_csv_table", "macro_sql": "{% macro default__reset_csv_table(model, full_refresh, old_relation, agate_table) %}\n {% set sql = \"\" %}\n {% if full_refresh %}\n {{ adapter.drop_relation(old_relation) }}\n {% set sql = create_csv_table(model, agate_table) %}\n {% else %}\n {{ adapter.truncate_relation(old_relation) }}\n {% set sql = \"truncate table \" ~ old_relation.render() %}\n {% endif %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "full_refresh", "type": null, "description": ""}, {"name": "old_relation", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.2517602, "supported_languages": null}, "macro.dbt.get_csv_sql": {"name": "get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_csv_sql", "macro_sql": "{% macro get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ adapter.dispatch('get_csv_sql', 'dbt')(create_or_truncate_sql, insert_sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_csv_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "create_or_truncate_sql", "type": null, "description": ""}, {"name": "insert_sql", "type": null, "description": ""}], "created_at": 1784225035.2518358, "supported_languages": null}, "macro.dbt.default__get_csv_sql": {"name": "default__get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_csv_sql", "macro_sql": "{% macro default__get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ create_or_truncate_sql }};\n -- dbt seed --\n {{ insert_sql }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "create_or_truncate_sql", "type": null, "description": ""}, {"name": "insert_sql", "type": null, "description": ""}], "created_at": 1784225035.25189, "supported_languages": null}, "macro.dbt.get_binding_char": {"name": "get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_binding_char", "macro_sql": "{% macro get_binding_char() -%}\n {{ adapter.dispatch('get_binding_char', 'dbt')() }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2519438, "supported_languages": null}, "macro.dbt.default__get_binding_char": {"name": "default__get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_binding_char", "macro_sql": "{% macro default__get_binding_char() %}\n {{ return('%s') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.252042, "supported_languages": null}, "macro.dbt.get_batch_size": {"name": "get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_batch_size", "macro_sql": "{% macro get_batch_size() -%}\n {{ return(adapter.dispatch('get_batch_size', 'dbt')()) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_batch_size"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2521029, "supported_languages": null}, "macro.dbt.default__get_batch_size": {"name": "default__get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_batch_size", "macro_sql": "{% macro default__get_batch_size() %}\n {{ return(10000) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.252149, "supported_languages": null}, "macro.dbt.get_seed_column_quoted_csv": {"name": "get_seed_column_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_seed_column_quoted_csv", "macro_sql": "{% macro get_seed_column_quoted_csv(model, column_names) %}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote_seed_column(col, quote_seed_column)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "column_names", "type": null, "description": ""}], "created_at": 1784225035.252327, "supported_languages": null}, "macro.dbt.load_csv_rows": {"name": "load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.load_csv_rows", "macro_sql": "{% macro load_csv_rows(model, agate_table) -%}\n {{ adapter.dispatch('load_csv_rows', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__load_csv_rows"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.2524009, "supported_languages": null}, "macro.dbt.default__load_csv_rows": {"name": "default__load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__load_csv_rows", "macro_sql": "{% macro default__load_csv_rows(model, agate_table) %}\n\n {% set batch_size = get_batch_size() %}\n\n {% set cols_sql = get_seed_column_quoted_csv(model, agate_table.column_names) %}\n {% set bindings = [] %}\n\n {% set statements = [] %}\n\n {% for chunk in agate_table.rows | batch(batch_size) %}\n {% set bindings = [] %}\n\n {% for row in chunk %}\n {% do bindings.extend(row) %}\n {% endfor %}\n\n {% set sql %}\n insert into {{ this.render() }} ({{ cols_sql }}) values\n {% for row in chunk -%}\n ({%- for column in agate_table.column_names -%}\n {{ get_binding_char() }}\n {%- if not loop.last%},{%- endif %}\n {%- endfor -%})\n {%- if not loop.last%},{%- endif %}\n {%- endfor %}\n {% endset %}\n\n {% do adapter.add_query(sql, bindings=bindings, abridge_sql_log=True) %}\n\n {% if loop.index0 == 0 %}\n {% do statements.append(sql) %}\n {% endif %}\n {% endfor %}\n\n {# Return SQL so we can render it out into the compiled files #}\n {{ return(statements[0]) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_batch_size", "macro.dbt.get_seed_column_quoted_csv", "macro.dbt.get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.2528582, "supported_languages": null}, "macro.dbt.scalar_function_sql": {"name": "scalar_function_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.scalar_function_sql", "macro_sql": "{% macro scalar_function_sql(target_relation) %}\n {{ return(adapter.dispatch('scalar_function_sql', 'dbt')(target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__scalar_function_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.253196, "supported_languages": null}, "macro.dbt.default__scalar_function_sql": {"name": "default__scalar_function_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__scalar_function_sql", "macro_sql": "{% macro default__scalar_function_sql(target_relation) %}\n {{ scalar_function_create_replace_signature_sql(target_relation) }}\n {{ scalar_function_body_sql() }};\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.scalar_function_create_replace_signature_sql", "macro.dbt.scalar_function_body_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.253268, "supported_languages": null}, "macro.dbt.scalar_function_create_replace_signature_sql": {"name": "scalar_function_create_replace_signature_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.scalar_function_create_replace_signature_sql", "macro_sql": "{% macro scalar_function_create_replace_signature_sql(target_relation) %}\n {{ return(adapter.dispatch('scalar_function_create_replace_signature_sql', 'dbt')(target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__scalar_function_create_replace_signature_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.253338, "supported_languages": null}, "macro.dbt.default__scalar_function_create_replace_signature_sql": {"name": "default__scalar_function_create_replace_signature_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__scalar_function_create_replace_signature_sql", "macro_sql": "{% macro default__scalar_function_create_replace_signature_sql(target_relation) %}\n CREATE OR REPLACE FUNCTION {{ target_relation.render() }} ({{ formatted_scalar_function_args_sql()}})\n RETURNS {{ model.returns.data_type }}\n {{ scalar_function_volatility_sql() }}\n AS\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.formatted_scalar_function_args_sql", "macro.dbt.scalar_function_volatility_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.253428, "supported_languages": null}, "macro.dbt.formatted_scalar_function_args_sql": {"name": "formatted_scalar_function_args_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.formatted_scalar_function_args_sql", "macro_sql": "{% macro formatted_scalar_function_args_sql() %}\n {{ return(adapter.dispatch('formatted_scalar_function_args_sql', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__formatted_scalar_function_args_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2534971, "supported_languages": null}, "macro.dbt.formatted_scalar_function_args_javascript": {"name": "formatted_scalar_function_args_javascript", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.formatted_scalar_function_args_javascript", "macro_sql": "{% macro formatted_scalar_function_args_javascript() %}\n {{ return(adapter.dispatch('formatted_scalar_function_args_javascript', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__formatted_scalar_function_args_javascript"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2535748, "supported_languages": null}, "macro.dbt.default__formatted_scalar_function_args_sql": {"name": "default__formatted_scalar_function_args_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__formatted_scalar_function_args_sql", "macro_sql": "{% macro default__formatted_scalar_function_args_sql() %}\n {% set args = [] %}\n {% for arg in model.arguments -%}\n {%- do args.append(arg.name ~ ' ' ~ arg.data_type) -%}\n {%- endfor %}\n {{ args | join(', ') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.253711, "supported_languages": null}, "macro.dbt.default__formatted_scalar_function_args_javascript": {"name": "default__formatted_scalar_function_args_javascript", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__formatted_scalar_function_args_javascript", "macro_sql": "{% macro default__formatted_scalar_function_args_javascript() %}\n {% set msg = \"formatted_scalar_function_args_javascript not implemented for adapter \" ~ adapter.type() %}\n {% do exceptions.raise_compiler_error(msg) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.253796, "supported_languages": null}, "macro.dbt.scalar_function_body_sql": {"name": "scalar_function_body_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.scalar_function_body_sql", "macro_sql": "{% macro scalar_function_body_sql() %}\n {{ return(adapter.dispatch('scalar_function_body_sql', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__scalar_function_body_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.253859, "supported_languages": null}, "macro.dbt.default__scalar_function_body_sql": {"name": "default__scalar_function_body_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__scalar_function_body_sql", "macro_sql": "{% macro default__scalar_function_body_sql() %}\n $$\n {{ model.compiled_code }}\n $$ LANGUAGE SQL\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2539022, "supported_languages": null}, "macro.dbt.scalar_function_volatility_sql": {"name": "scalar_function_volatility_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.scalar_function_volatility_sql", "macro_sql": "{% macro scalar_function_volatility_sql() %}\n {{ return(adapter.dispatch('scalar_function_volatility_sql', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__scalar_function_volatility_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.253964, "supported_languages": null}, "macro.dbt.scalar_function_volatility_javascript": {"name": "scalar_function_volatility_javascript", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.scalar_function_volatility_javascript", "macro_sql": "{% macro scalar_function_volatility_javascript() %}\n {{ return(adapter.dispatch('scalar_function_volatility_javascript', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__scalar_function_volatility_javascript"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.254025, "supported_languages": null}, "macro.dbt.default__scalar_function_volatility_javascript": {"name": "default__scalar_function_volatility_javascript", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__scalar_function_volatility_javascript", "macro_sql": "{% macro default__scalar_function_volatility_javascript() %}\n {% set volatility = model.config.get('volatility') %}\n {% if volatility != none %}\n {% set msg = \"Volatility is not supported by \" ~ adapter.type() ~ \" in javascript UDF and will be ignored\" %}\n {% do exceptions.warn(msg) %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.254156, "supported_languages": null}, "macro.dbt.default__scalar_function_volatility_sql": {"name": "default__scalar_function_volatility_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__scalar_function_volatility_sql", "macro_sql": "{% macro default__scalar_function_volatility_sql() %}\n {% set volatility = model.config.get('volatility') %}\n {% if volatility == 'deterministic' %}\n IMMUTABLE\n {% elif volatility == 'stable' %}\n STABLE\n {% elif volatility == 'non-deterministic' %}\n VOLATILE\n {% elif volatility != none %}\n {# This shouldn't happen unless a new volatility is invented #}\n {% do unsupported_volatility_warning(volatility) %}\n {% endif %}\n {# If no volatility is set, don't add anything and let the data warehouse default it #}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.unsupported_volatility_warning"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.254315, "supported_languages": null}, "macro.dbt.unsupported_volatility_warning": {"name": "unsupported_volatility_warning", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.unsupported_volatility_warning", "macro_sql": "{% macro unsupported_volatility_warning(volatility) %}\n {{ return(adapter.dispatch('unsupported_volatility_warning', 'dbt')(volatility)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__unsupported_volatility_warning"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "volatility", "type": null, "description": ""}], "created_at": 1784225035.2543879, "supported_languages": null}, "macro.dbt.default__unsupported_volatility_warning": {"name": "default__unsupported_volatility_warning", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__unsupported_volatility_warning", "macro_sql": "{% macro default__unsupported_volatility_warning(volatility) %}\n {% set msg = \"Found `\" ~ volatility ~ \"` volatility specified on function `\" ~ model.name ~ \"`. This volatility is not supported by \" ~ adapter.type() ~ \", and will be ignored\" %}\n {% do exceptions.warn(msg) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "volatility", "type": null, "description": ""}], "created_at": 1784225035.2544901, "supported_languages": null}, "macro.dbt.function_execute_build_sql": {"name": "function_execute_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/helpers.sql", "original_file_path": "macros/materializations/functions/helpers.sql", "unique_id": "macro.dbt.function_execute_build_sql", "macro_sql": "{% macro function_execute_build_sql(build_sql, existing_relation, target_relation) %}\n {{ return(adapter.dispatch('function_execute_build_sql', 'dbt')(build_sql, existing_relation, target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__function_execute_build_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "build_sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.2546391, "supported_languages": null}, "macro.dbt.default__function_execute_build_sql": {"name": "default__function_execute_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/helpers.sql", "original_file_path": "macros/materializations/functions/helpers.sql", "unique_id": "macro.dbt.default__function_execute_build_sql", "macro_sql": "{% macro default__function_execute_build_sql(build_sql, existing_relation, target_relation) %}\n\n {% set grant_config = config.get('grants') %}\n\n {% call statement(name=\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ adapter.commit() }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "build_sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.254876, "supported_languages": null}, "macro.dbt.get_aggregate_function_create_replace_signature": {"name": "get_aggregate_function_create_replace_signature", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.get_aggregate_function_create_replace_signature", "macro_sql": "{% macro get_aggregate_function_create_replace_signature(target_relation) %}\n {{ return(adapter.dispatch('get_aggregate_function_create_replace_signature', 'dbt')(target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_aggregate_function_create_replace_signature"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.255144, "supported_languages": null}, "macro.dbt.default__get_aggregate_function_create_replace_signature": {"name": "default__get_aggregate_function_create_replace_signature", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.default__get_aggregate_function_create_replace_signature", "macro_sql": "{% macro default__get_aggregate_function_create_replace_signature(target_relation) %}\n CREATE OR REPLACE AGGREGATE FUNCTION {{ target_relation.render() }} ({{ get_formatted_aggregate_function_args()}})\n RETURNS {{ model.returns.data_type }}\n {{ get_function_language_specifier() }}\n {{ get_aggregate_function_volatility_specifier() }}\n {% if model.get('language') == 'python' %}\n {{ get_function_python_options() }}\n {% endif %}\n AS\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_formatted_aggregate_function_args", "macro.dbt.get_function_language_specifier", "macro.dbt.get_aggregate_function_volatility_specifier", "macro.dbt.get_function_python_options"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.255285, "supported_languages": null}, "macro.dbt.get_formatted_aggregate_function_args": {"name": "get_formatted_aggregate_function_args", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.get_formatted_aggregate_function_args", "macro_sql": "{% macro get_formatted_aggregate_function_args() %}\n {{ return(adapter.dispatch('get_formatted_aggregate_function_args', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_formatted_aggregate_function_args"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2553542, "supported_languages": null}, "macro.dbt.default__get_formatted_aggregate_function_args": {"name": "default__get_formatted_aggregate_function_args", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.default__get_formatted_aggregate_function_args", "macro_sql": "{% macro default__get_formatted_aggregate_function_args() %}\n {# conveniently we can reuse the sql scalar function args #}\n {{ formatted_scalar_function_args_sql() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.formatted_scalar_function_args_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2554, "supported_languages": null}, "macro.dbt.get_function_language_specifier": {"name": "get_function_language_specifier", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.get_function_language_specifier", "macro_sql": "{% macro get_function_language_specifier() %}\n {{ return(adapter.dispatch('get_function_language_specifier', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_function_language_specifier"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.255462, "supported_languages": null}, "macro.dbt.default__get_function_language_specifier": {"name": "default__get_function_language_specifier", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.default__get_function_language_specifier", "macro_sql": "{% macro default__get_function_language_specifier() %}\n {% set language = model.get('language') %}\n {% if language == 'sql' %}\n {# generally you dont need to specify the language for sql functions #}\n {% elif language == 'python' %}\n LANGUAGE PYTHON\n {% elif language == 'javascript' %}\n LANGUAGE js\n {% else %}\n {{ 'LANGUAGE ' ~ language.upper() }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.255601, "supported_languages": null}, "macro.dbt.get_aggregate_function_volatility_specifier": {"name": "get_aggregate_function_volatility_specifier", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.get_aggregate_function_volatility_specifier", "macro_sql": "{% macro get_aggregate_function_volatility_specifier() %}\n {{ return(adapter.dispatch('get_aggregate_function_volatility_specifier', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_aggregate_function_volatility_specifier"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.255667, "supported_languages": null}, "macro.dbt.default__get_aggregate_function_volatility_specifier": {"name": "default__get_aggregate_function_volatility_specifier", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.default__get_aggregate_function_volatility_specifier", "macro_sql": "{% macro default__get_aggregate_function_volatility_specifier() %}\n {{ scalar_function_volatility_sql() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.scalar_function_volatility_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2557068, "supported_languages": null}, "macro.dbt.get_function_python_options": {"name": "get_function_python_options", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.get_function_python_options", "macro_sql": "{% macro get_function_python_options() %}\n {{ return(adapter.dispatch('get_function_python_options', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_function_python_options"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.255768, "supported_languages": null}, "macro.dbt.default__get_function_python_options": {"name": "default__get_function_python_options", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.default__get_function_python_options", "macro_sql": "{% macro default__get_function_python_options() %}\n RUNTIME_VERSION = '{{ model.config.get('runtime_version') }}'\n HANDLER = '{{ model.config.get('entry_point') }}'\n {% set packages = model.config.get('packages', []) %}\n {% if packages %}\n PACKAGES = ('{{ packages | join(\"','\") }}')\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.255906, "supported_languages": null}, "macro.dbt.materialization_function_default": {"name": "materialization_function_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/function.sql", "original_file_path": "macros/materializations/functions/function.sql", "unique_id": "macro.dbt.materialization_function_default", "macro_sql": "{% materialization function, default, supported_languages=['sql', 'python', 'javascript'] %}\n {% set existing_relation = load_cached_relation(this) %}\n {% set target_relation = this.incorporate(type=this.Function) %}\n\n {{ run_hooks(pre_hooks) }}\n\n {% set function_config = this.get_function_config(model) %}\n {% set macro_name = this.get_function_macro_name(function_config) %}\n\n {# Doing this aliasing of adapter.dispatch is a hacky way to disable the static analysis of actually calling adapter.dispatch #}\n {# This is necessary because the static analysis breaks being able to dynamically pass a macro_name #}\n {% set _dispatch = adapter.dispatch %}\n\n {% set build_sql = _dispatch(macro_name, 'dbt')(target_relation) %}\n {{ function_execute_build_sql(build_sql, existing_relation, target_relation) }}\n {{ run_hooks(post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.run_hooks", "macro.dbt.function_execute_build_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.256268, "supported_languages": ["sql", "python", "javascript"]}, "macro.dbt.generate_alias_name": {"name": "generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.generate_alias_name", "macro_sql": "{% macro generate_alias_name(custom_alias_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_alias_name', 'dbt')(custom_alias_name, node)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_alias_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_alias_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.256427, "supported_languages": null}, "macro.dbt.default__generate_alias_name": {"name": "default__generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.default__generate_alias_name", "macro_sql": "{% macro default__generate_alias_name(custom_alias_name=none, node=none) -%}\n\n {%- if custom_alias_name -%}\n\n {{ custom_alias_name | trim }}\n\n {%- elif node.version -%}\n\n {{ return(node.name ~ \"_v\" ~ (node.version | replace(\".\", \"_\"))) }}\n\n {%- else -%}\n\n {{ node.name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_alias_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.256581, "supported_languages": null}, "macro.dbt.generate_latest_version_pointer_alias": {"name": "generate_latest_version_pointer_alias", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_latest_version_pointer_alias.sql", "original_file_path": "macros/get_custom_name/get_latest_version_pointer_alias.sql", "unique_id": "macro.dbt.generate_latest_version_pointer_alias", "macro_sql": "{% macro generate_latest_version_pointer_alias(custom_alias_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_latest_version_pointer_alias', 'dbt')(custom_alias_name, node)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_latest_version_pointer_alias"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_alias_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.2567308, "supported_languages": null}, "macro.dbt.default__generate_latest_version_pointer_alias": {"name": "default__generate_latest_version_pointer_alias", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_latest_version_pointer_alias.sql", "original_file_path": "macros/get_custom_name/get_latest_version_pointer_alias.sql", "unique_id": "macro.dbt.default__generate_latest_version_pointer_alias", "macro_sql": "{% macro default__generate_latest_version_pointer_alias(custom_alias_name=none, node=none) -%}\n {%- if custom_alias_name -%}\n {{ custom_alias_name | trim }}\n {%- else -%}\n {{ node.name }}\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_alias_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.2568169, "supported_languages": null}, "macro.dbt.generate_schema_name": {"name": "generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name", "macro_sql": "{% macro generate_schema_name(custom_schema_name=none, node=none) -%}\n {{ return(adapter.dispatch('generate_schema_name', 'dbt')(custom_schema_name, node)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_schema_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.2569962, "supported_languages": null}, "macro.dbt.default__generate_schema_name": {"name": "default__generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.default__generate_schema_name", "macro_sql": "{% macro default__generate_schema_name(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if custom_schema_name is none -%}\n\n {{ default_schema }}\n\n {%- else -%}\n\n {{ default_schema }}_{{ custom_schema_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_schema_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.257099, "supported_languages": null}, "macro.dbt.generate_schema_name_for_env": {"name": "generate_schema_name_for_env", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name_for_env", "macro_sql": "{% macro generate_schema_name_for_env(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if target.name == 'prod' and custom_schema_name is not none -%}\n\n {{ custom_schema_name | trim }}\n\n {%- else -%}\n\n {{ default_schema }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_schema_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.257215, "supported_languages": null}, "macro.dbt.generate_database_name": {"name": "generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.generate_database_name", "macro_sql": "{% macro generate_database_name(custom_database_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_database_name', 'dbt')(custom_database_name, node)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_database_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_database_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.2573838, "supported_languages": null}, "macro.dbt.default__generate_database_name": {"name": "default__generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.default__generate_database_name", "macro_sql": "{% macro default__generate_database_name(custom_database_name=none, node=none) -%}\n {%- set default_database = target.database -%}\n {%- if node is not none and node|attr('database') -%}\n {%- set catalog_relation = adapter.build_catalog_relation(node) -%}\n {%- if catalog_relation and catalog_relation|attr('catalog_database') -%}\n {{ return(catalog_relation.catalog_database) }}\n {%- endif -%}\n {%- endif -%}\n {%- if custom_database_name is none -%}\n\n {{ default_database }}\n\n {%- else -%}\n\n {{ custom_database_name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_database_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.257584, "supported_languages": null}, "macro.dbt.get_drop_sql": {"name": "get_drop_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.get_drop_sql", "macro_sql": "{%- macro get_drop_sql(relation) -%}\n {{- log('Applying DROP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_drop_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.257782, "supported_languages": null}, "macro.dbt.default__get_drop_sql": {"name": "default__get_drop_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.default__get_drop_sql", "macro_sql": "{%- macro default__get_drop_sql(relation) -%}\n\n {%- if relation.is_view -%}\n {{ drop_view(relation) }}\n\n {%- elif relation.is_table -%}\n {{ drop_table(relation) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ drop_materialized_view(relation) }}\n\n {%- else -%}\n drop {{ relation.type }} if exists {{ relation.render() }} cascade\n\n {%- endif -%}\n\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.drop_view", "macro.dbt.drop_table", "macro.dbt.drop_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.257984, "supported_languages": null}, "macro.dbt.drop_relation": {"name": "drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.drop_relation", "macro_sql": "{% macro drop_relation(relation) -%}\n {{ return(adapter.dispatch('drop_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__drop_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.258065, "supported_languages": null}, "macro.dbt.default__drop_relation": {"name": "default__drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.default__drop_relation", "macro_sql": "{% macro default__drop_relation(relation) -%}\n {% call statement('drop_relation', auto_begin=False) -%}\n {{ get_drop_sql(relation) }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.258147, "supported_languages": null}, "macro.dbt.drop_relation_if_exists": {"name": "drop_relation_if_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.drop_relation_if_exists", "macro_sql": "{% macro drop_relation_if_exists(relation) %}\n {% if relation is not none %}\n {{ adapter.drop_relation(relation) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.258226, "supported_languages": null}, "macro.dbt.get_replace_sql": {"name": "get_replace_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/replace.sql", "original_file_path": "macros/relations/replace.sql", "unique_id": "macro.dbt.get_replace_sql", "macro_sql": "{% macro get_replace_sql(existing_relation, target_relation, sql) %}\n {{- log('Applying REPLACE to: ' ~ existing_relation) -}}\n {{- adapter.dispatch('get_replace_sql', 'dbt')(existing_relation, target_relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.258467, "supported_languages": null}, "macro.dbt.default__get_replace_sql": {"name": "default__get_replace_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/replace.sql", "original_file_path": "macros/relations/replace.sql", "unique_id": "macro.dbt.default__get_replace_sql", "macro_sql": "{% macro default__get_replace_sql(existing_relation, target_relation, sql) %}\n\n {# /* use a create or replace statement if possible */ #}\n\n {% set is_replaceable = existing_relation.type == target_relation.type and existing_relation.can_be_replaced %}\n\n {% if is_replaceable and existing_relation.is_view %}\n {{ get_replace_view_sql(target_relation, sql) }}\n\n {% elif is_replaceable and existing_relation.is_table %}\n {{ get_replace_table_sql(target_relation, sql) }}\n\n {% elif is_replaceable and existing_relation.is_materialized_view %}\n {{ get_replace_materialized_view_sql(target_relation, sql) }}\n\n {# /* a create or replace statement is not possible, so try to stage and/or backup to be safe */ #}\n\n {# /* create target_relation as an intermediate relation, then swap it out with the existing one using a backup */ #}\n {%- elif target_relation.can_be_renamed and existing_relation.can_be_renamed -%}\n {{ get_create_intermediate_sql(target_relation, sql) }};\n {{ get_create_backup_sql(existing_relation) }};\n {{ get_rename_intermediate_sql(target_relation) }};\n {{ get_drop_backup_sql(existing_relation) }}\n\n {# /* create target_relation as an intermediate relation, then swap it out with the existing one without using a backup */ #}\n {%- elif target_relation.can_be_renamed -%}\n {{ get_create_intermediate_sql(target_relation, sql) }};\n {{ get_drop_sql(existing_relation) }};\n {{ get_rename_intermediate_sql(target_relation) }}\n\n {# /* create target_relation in place by first backing up the existing relation */ #}\n {%- elif existing_relation.can_be_renamed -%}\n {{ get_create_backup_sql(existing_relation) }};\n {{ get_create_sql(target_relation, sql) }};\n {{ get_drop_backup_sql(existing_relation) }}\n\n {# /* no renaming is allowed, so just drop and create */ #}\n {%- else -%}\n {{ get_drop_sql(existing_relation) }};\n {{ get_create_sql(target_relation, sql) }}\n\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_replace_view_sql", "macro.dbt.get_replace_table_sql", "macro.dbt.get_replace_materialized_view_sql", "macro.dbt.get_create_intermediate_sql", "macro.dbt.get_create_backup_sql", "macro.dbt.get_rename_intermediate_sql", "macro.dbt.get_drop_backup_sql", "macro.dbt.get_drop_sql", "macro.dbt.get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.258959, "supported_languages": null}, "macro.dbt.get_create_intermediate_sql": {"name": "get_create_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_intermediate.sql", "original_file_path": "macros/relations/create_intermediate.sql", "unique_id": "macro.dbt.get_create_intermediate_sql", "macro_sql": "{%- macro get_create_intermediate_sql(relation, sql) -%}\n {{- log('Applying CREATE INTERMEDIATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_intermediate_sql', 'dbt')(relation, sql) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_create_intermediate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.259108, "supported_languages": null}, "macro.dbt.default__get_create_intermediate_sql": {"name": "default__get_create_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_intermediate.sql", "original_file_path": "macros/relations/create_intermediate.sql", "unique_id": "macro.dbt.default__get_create_intermediate_sql", "macro_sql": "{%- macro default__get_create_intermediate_sql(relation, sql) -%}\n\n -- get the standard intermediate name\n {% set intermediate_relation = make_intermediate_relation(relation) %}\n\n -- drop any pre-existing intermediate\n {{ get_drop_sql(intermediate_relation) }};\n\n {{ get_create_sql(intermediate_relation, sql) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_intermediate_relation", "macro.dbt.get_drop_sql", "macro.dbt.get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2592041, "supported_languages": null}, "macro.dbt.drop_schema_named": {"name": "drop_schema_named", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/schema.sql", "original_file_path": "macros/relations/schema.sql", "unique_id": "macro.dbt.drop_schema_named", "macro_sql": "{% macro drop_schema_named(schema_name) %}\n {{ return(adapter.dispatch('drop_schema_named', 'dbt') (schema_name)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__drop_schema_named"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_name", "type": null, "description": ""}], "created_at": 1784225035.2593122, "supported_languages": null}, "macro.dbt.default__drop_schema_named": {"name": "default__drop_schema_named", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/schema.sql", "original_file_path": "macros/relations/schema.sql", "unique_id": "macro.dbt.default__drop_schema_named", "macro_sql": "{% macro default__drop_schema_named(schema_name) %}\n {% set schema_relation = api.Relation.create(schema=schema_name) %}\n {{ adapter.drop_schema(schema_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_name", "type": null, "description": ""}], "created_at": 1784225035.259392, "supported_languages": null}, "macro.dbt.get_drop_backup_sql": {"name": "get_drop_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop_backup.sql", "original_file_path": "macros/relations/drop_backup.sql", "unique_id": "macro.dbt.get_drop_backup_sql", "macro_sql": "{%- macro get_drop_backup_sql(relation) -%}\n {{- log('Applying DROP BACKUP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_drop_backup_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_drop_backup_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.259509, "supported_languages": null}, "macro.dbt.default__get_drop_backup_sql": {"name": "default__get_drop_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop_backup.sql", "original_file_path": "macros/relations/drop_backup.sql", "unique_id": "macro.dbt.default__get_drop_backup_sql", "macro_sql": "{%- macro default__get_drop_backup_sql(relation) -%}\n\n -- get the standard backup name\n {% set backup_relation = make_backup_relation(relation, relation.type) %}\n\n {{ get_drop_sql(backup_relation) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_backup_relation", "macro.dbt.get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.259636, "supported_languages": null}, "macro.dbt.get_rename_sql": {"name": "get_rename_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.get_rename_sql", "macro_sql": "{%- macro get_rename_sql(relation, new_name) -%}\n {{- log('Applying RENAME to: ' ~ relation) -}}\n {{- adapter.dispatch('get_rename_sql', 'dbt')(relation, new_name) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.259831, "supported_languages": null}, "macro.dbt.default__get_rename_sql": {"name": "default__get_rename_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.default__get_rename_sql", "macro_sql": "{%- macro default__get_rename_sql(relation, new_name) -%}\n\n {%- if relation.is_view -%}\n {{ get_rename_view_sql(relation, new_name) }}\n\n {%- elif relation.is_table -%}\n {{ get_rename_table_sql(relation, new_name) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ get_rename_materialized_view_sql(relation, new_name) }}\n\n {%- else -%}\n {{- exceptions.raise_compiler_error(\"`get_rename_sql` has not been implemented for: \" ~ relation.type ) -}}\n\n {%- endif -%}\n\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.get_rename_view_sql", "macro.dbt.get_rename_table_sql", "macro.dbt.get_rename_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.259997, "supported_languages": null}, "macro.dbt.rename_relation": {"name": "rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.rename_relation", "macro_sql": "{% macro rename_relation(from_relation, to_relation) -%}\n {{ return(adapter.dispatch('rename_relation', 'dbt')(from_relation, to_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__rename_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "from_relation", "type": null, "description": ""}, {"name": "to_relation", "type": null, "description": ""}], "created_at": 1784225035.2600782, "supported_languages": null}, "macro.dbt.default__rename_relation": {"name": "default__rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.default__rename_relation", "macro_sql": "{% macro default__rename_relation(from_relation, to_relation) -%}\n {% set target_name = adapter.quote_as_configured(to_relation.identifier, 'identifier') %}\n {% call statement('rename_relation') -%}\n alter table {{ from_relation.render() }} rename to {{ target_name }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "from_relation", "type": null, "description": ""}, {"name": "to_relation", "type": null, "description": ""}], "created_at": 1784225035.260192, "supported_languages": null}, "macro.dbt.get_create_backup_sql": {"name": "get_create_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_backup.sql", "original_file_path": "macros/relations/create_backup.sql", "unique_id": "macro.dbt.get_create_backup_sql", "macro_sql": "{%- macro get_create_backup_sql(relation) -%}\n {{- log('Applying CREATE BACKUP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_backup_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_create_backup_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.260319, "supported_languages": null}, "macro.dbt.default__get_create_backup_sql": {"name": "default__get_create_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_backup.sql", "original_file_path": "macros/relations/create_backup.sql", "unique_id": "macro.dbt.default__get_create_backup_sql", "macro_sql": "{%- macro default__get_create_backup_sql(relation) -%}\n\n -- get the standard backup name\n {% set backup_relation = make_backup_relation(relation, relation.type) %}\n\n -- drop any pre-existing backup\n {{ get_drop_sql(backup_relation) }};\n\n {{ get_rename_sql(relation, backup_relation.identifier) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_backup_relation", "macro.dbt.get_drop_sql", "macro.dbt.get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.260422, "supported_languages": null}, "macro.dbt.get_create_sql": {"name": "get_create_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create.sql", "original_file_path": "macros/relations/create.sql", "unique_id": "macro.dbt.get_create_sql", "macro_sql": "{%- macro get_create_sql(relation, sql) -%}\n {{- log('Applying CREATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_sql', 'dbt')(relation, sql) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2605708, "supported_languages": null}, "macro.dbt.default__get_create_sql": {"name": "default__get_create_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create.sql", "original_file_path": "macros/relations/create.sql", "unique_id": "macro.dbt.default__get_create_sql", "macro_sql": "{%- macro default__get_create_sql(relation, sql) -%}\n\n {%- if relation.is_view -%}\n {{ get_create_view_as_sql(relation, sql) }}\n\n {%- elif relation.is_table -%}\n {{ get_create_table_as_sql(False, relation, sql) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ get_create_materialized_view_as_sql(relation, sql) }}\n\n {%- else -%}\n {{- exceptions.raise_compiler_error(\"`get_create_sql` has not been implemented for: \" ~ relation.type ) -}}\n\n {%- endif -%}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.get_create_view_as_sql", "macro.dbt.get_create_table_as_sql", "macro.dbt.get_create_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.260739, "supported_languages": null}, "macro.dbt.get_rename_intermediate_sql": {"name": "get_rename_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename_intermediate.sql", "original_file_path": "macros/relations/rename_intermediate.sql", "unique_id": "macro.dbt.get_rename_intermediate_sql", "macro_sql": "{%- macro get_rename_intermediate_sql(relation) -%}\n {{- log('Applying RENAME INTERMEDIATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_rename_intermediate_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_rename_intermediate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2608619, "supported_languages": null}, "macro.dbt.default__get_rename_intermediate_sql": {"name": "default__get_rename_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename_intermediate.sql", "original_file_path": "macros/relations/rename_intermediate.sql", "unique_id": "macro.dbt.default__get_rename_intermediate_sql", "macro_sql": "{%- macro default__get_rename_intermediate_sql(relation) -%}\n\n -- get the standard intermediate name\n {% set intermediate_relation = make_intermediate_relation(relation) %}\n\n {{ get_rename_sql(intermediate_relation, relation.identifier) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_intermediate_relation", "macro.dbt.get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.260944, "supported_languages": null}, "macro.dbt.drop_materialized_view": {"name": "drop_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt.drop_materialized_view", "macro_sql": "{% macro drop_materialized_view(relation) -%}\n {{- adapter.dispatch('drop_materialized_view', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.261044, "supported_languages": null}, "macro.dbt.default__drop_materialized_view": {"name": "default__drop_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt.default__drop_materialized_view", "macro_sql": "{% macro default__drop_materialized_view(relation) -%}\n drop materialized view if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.261256, "supported_languages": null}, "macro.dbt.get_replace_materialized_view_sql": {"name": "get_replace_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/replace.sql", "original_file_path": "macros/relations/materialized_view/replace.sql", "unique_id": "macro.dbt.get_replace_materialized_view_sql", "macro_sql": "{% macro get_replace_materialized_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_materialized_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.261365, "supported_languages": null}, "macro.dbt.default__get_replace_materialized_view_sql": {"name": "default__get_replace_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/replace.sql", "original_file_path": "macros/relations/materialized_view/replace.sql", "unique_id": "macro.dbt.default__get_replace_materialized_view_sql", "macro_sql": "{% macro default__get_replace_materialized_view_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_materialized_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.261426, "supported_languages": null}, "macro.dbt.refresh_materialized_view": {"name": "refresh_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt.refresh_materialized_view", "macro_sql": "{% macro refresh_materialized_view(relation) %}\n {{- log('Applying REFRESH to: ' ~ relation) -}}\n {{- adapter.dispatch('refresh_materialized_view', 'dbt')(relation) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__refresh_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.261554, "supported_languages": null}, "macro.dbt.default__refresh_materialized_view": {"name": "default__refresh_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt.default__refresh_materialized_view", "macro_sql": "{% macro default__refresh_materialized_view(relation) %}\n {{ exceptions.raise_compiler_error(\"`refresh_materialized_view` has not been implemented for this adapter.\") }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.261606, "supported_languages": null}, "macro.dbt.get_rename_materialized_view_sql": {"name": "get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt.get_rename_materialized_view_sql", "macro_sql": "{% macro get_rename_materialized_view_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_materialized_view_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.261732, "supported_languages": null}, "macro.dbt.default__get_rename_materialized_view_sql": {"name": "default__get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt.default__get_rename_materialized_view_sql", "macro_sql": "{% macro default__get_rename_materialized_view_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_materialized_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.2617931, "supported_languages": null}, "macro.dbt.get_alter_materialized_view_as_sql": {"name": "get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.get_alter_materialized_view_as_sql", "macro_sql": "{% macro get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n {{- log('Applying ALTER to: ' ~ relation) -}}\n {{- adapter.dispatch('get_alter_materialized_view_as_sql', 'dbt')(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n ) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "configuration_changes", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}], "created_at": 1784225035.2620091, "supported_languages": null}, "macro.dbt.default__get_alter_materialized_view_as_sql": {"name": "default__get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.default__get_alter_materialized_view_as_sql", "macro_sql": "{% macro default__get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n {{ exceptions.raise_compiler_error(\"Materialized views have not been implemented for this adapter.\") }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "configuration_changes", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}], "created_at": 1784225035.262083, "supported_languages": null}, "macro.dbt.get_materialized_view_configuration_changes": {"name": "get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.get_materialized_view_configuration_changes", "macro_sql": "{% macro get_materialized_view_configuration_changes(existing_relation, new_config) %}\n /* {#\n It's recommended that configuration changes be formatted as follows:\n {\"\": [{\"action\": \"\", \"context\": ...}]}\n\n For example:\n {\n \"indexes\": [\n {\"action\": \"drop\", \"context\": \"index_abc\"},\n {\"action\": \"create\", \"context\": {\"columns\": [\"column_1\", \"column_2\"], \"type\": \"hash\", \"unique\": True}},\n ],\n }\n\n Either way, `get_materialized_view_configuration_changes` needs to align with `get_alter_materialized_view_as_sql`.\n #} */\n {{- log('Determining configuration changes on: ' ~ existing_relation) -}}\n {%- do return(adapter.dispatch('get_materialized_view_configuration_changes', 'dbt')(existing_relation, new_config)) -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_materialized_view_configuration_changes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "new_config", "type": null, "description": ""}], "created_at": 1784225035.262196, "supported_languages": null}, "macro.dbt.default__get_materialized_view_configuration_changes": {"name": "default__get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.default__get_materialized_view_configuration_changes", "macro_sql": "{% macro default__get_materialized_view_configuration_changes(existing_relation, new_config) %}\n {{ exceptions.raise_compiler_error(\"Materialized views have not been implemented for this adapter.\") }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "new_config", "type": null, "description": ""}], "created_at": 1784225035.262254, "supported_languages": null}, "macro.dbt.get_create_materialized_view_as_sql": {"name": "get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt.get_create_materialized_view_as_sql", "macro_sql": "{% macro get_create_materialized_view_as_sql(relation, sql) -%}\n {{- adapter.dispatch('get_create_materialized_view_as_sql', 'dbt')(relation, sql) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_create_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.262363, "supported_languages": null}, "macro.dbt.default__get_create_materialized_view_as_sql": {"name": "default__get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt.default__get_create_materialized_view_as_sql", "macro_sql": "{% macro default__get_create_materialized_view_as_sql(relation, sql) -%}\n {{ exceptions.raise_compiler_error(\n \"`get_create_materialized_view_as_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.26242, "supported_languages": null}, "macro.dbt.get_table_columns_and_constraints": {"name": "get_table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.get_table_columns_and_constraints", "macro_sql": "{%- macro get_table_columns_and_constraints() -%}\n {{ adapter.dispatch('get_table_columns_and_constraints', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_table_columns_and_constraints"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.26273, "supported_languages": null}, "macro.dbt.default__get_table_columns_and_constraints": {"name": "default__get_table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__get_table_columns_and_constraints", "macro_sql": "{% macro default__get_table_columns_and_constraints() -%}\n {{ return(table_columns_and_constraints()) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.table_columns_and_constraints"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.262778, "supported_languages": null}, "macro.dbt.table_columns_and_constraints": {"name": "table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.table_columns_and_constraints", "macro_sql": "{% macro table_columns_and_constraints() %}\n {# loop through user_provided_columns to create DDL with data types and constraints #}\n {%- set raw_column_constraints = adapter.render_raw_columns_constraints(raw_columns=model['columns']) -%}\n {%- set raw_model_constraints = adapter.render_raw_model_constraints(raw_constraints=model['constraints']) -%}\n (\n {% for c in raw_column_constraints -%}\n {{ c }}{{ \",\" if not loop.last or raw_model_constraints }}\n {% endfor %}\n {% for c in raw_model_constraints -%}\n {{ c }}{{ \",\" if not loop.last }}\n {% endfor -%}\n )\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.26298, "supported_languages": null}, "macro.dbt.get_assert_columns_equivalent": {"name": "get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.get_assert_columns_equivalent", "macro_sql": "\n\n{%- macro get_assert_columns_equivalent(sql) -%}\n {{ adapter.dispatch('get_assert_columns_equivalent', 'dbt')(sql) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2630458, "supported_languages": null}, "macro.dbt.default__get_assert_columns_equivalent": {"name": "default__get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__get_assert_columns_equivalent", "macro_sql": "{% macro default__get_assert_columns_equivalent(sql) -%}\n {{ return(assert_columns_equivalent(sql)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.263098, "supported_languages": null}, "macro.dbt.assert_columns_equivalent": {"name": "assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.assert_columns_equivalent", "macro_sql": "{% macro assert_columns_equivalent(sql) %}\n\n {#-- First ensure the user has defined 'columns' in yaml specification --#}\n {%- set user_defined_columns = model['columns'] -%}\n {%- if not user_defined_columns -%}\n {{ exceptions.raise_contract_error([], []) }}\n {%- endif -%}\n\n {#-- Obtain the column schema provided by sql file. #}\n {%- set sql_file_provided_columns = get_column_schema_from_query(sql, config.get('sql_header', none)) -%}\n {#--Obtain the column schema provided by the schema file by generating an 'empty schema' query from the model's columns. #}\n {%- set schema_file_provided_columns = get_column_schema_from_query(get_empty_schema_sql(user_defined_columns)) -%}\n\n {#-- create dictionaries with name and formatted data type and strings for exception #}\n {%- set sql_columns = format_columns(sql_file_provided_columns) -%}\n {%- set yaml_columns = format_columns(schema_file_provided_columns) -%}\n\n {%- if sql_columns|length != yaml_columns|length -%}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n\n {%- for sql_col in sql_columns -%}\n {%- set yaml_col = [] -%}\n {%- for this_col in yaml_columns -%}\n {%- if this_col['name'] == sql_col['name'] -%}\n {%- do yaml_col.append(this_col) -%}\n {%- break -%}\n {%- endif -%}\n {%- endfor -%}\n {%- if not yaml_col -%}\n {#-- Column with name not found in yaml #}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n {%- if sql_col['formatted'] != yaml_col[0]['formatted'] -%}\n {#-- Column data types don't match #}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n {%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_column_schema_from_query", "macro.dbt.get_empty_schema_sql", "macro.dbt.format_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.263626, "supported_languages": null}, "macro.dbt.format_columns": {"name": "format_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.format_columns", "macro_sql": "{% macro format_columns(columns) %}\n {% set formatted_columns = [] %}\n {% for column in columns %}\n {%- set formatted_column = adapter.dispatch('format_column', 'dbt')(column) -%}\n {%- do formatted_columns.append(formatted_column) -%}\n {% endfor %}\n {{ return(formatted_columns) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__format_column"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.263776, "supported_languages": null}, "macro.dbt.default__format_column": {"name": "default__format_column", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__format_column", "macro_sql": "{% macro default__format_column(column) -%}\n {% set data_type = column.dtype %}\n {% set formatted = column.column.lower() ~ \" \" ~ data_type %}\n {{ return({'name': column.name, 'data_type': data_type, 'formatted': formatted}) }}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "column", "type": null, "description": ""}], "created_at": 1784225035.2639081, "supported_languages": null}, "macro.dbt.drop_table": {"name": "drop_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt.drop_table", "macro_sql": "{% macro drop_table(relation) -%}\n {{- adapter.dispatch('drop_table', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.264013, "supported_languages": null}, "macro.dbt.default__drop_table": {"name": "default__drop_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt.default__drop_table", "macro_sql": "{% macro default__drop_table(relation) -%}\n drop table if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.264063, "supported_languages": null}, "macro.dbt.get_replace_table_sql": {"name": "get_replace_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt.get_replace_table_sql", "macro_sql": "{% macro get_replace_table_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_table_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_replace_table_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.26417, "supported_languages": null}, "macro.dbt.default__get_replace_table_sql": {"name": "default__get_replace_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt.default__get_replace_table_sql", "macro_sql": "{% macro default__get_replace_table_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_table_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.264226, "supported_languages": null}, "macro.dbt.get_rename_table_sql": {"name": "get_rename_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt.get_rename_table_sql", "macro_sql": "{% macro get_rename_table_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_table_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_table_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.264332, "supported_languages": null}, "macro.dbt.default__get_rename_table_sql": {"name": "default__get_rename_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt.default__get_rename_table_sql", "macro_sql": "{% macro default__get_rename_table_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_table_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.264388, "supported_languages": null}, "macro.dbt.get_create_table_as_sql": {"name": "get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.get_create_table_as_sql", "macro_sql": "{% macro get_create_table_as_sql(temporary, relation, sql) -%}\n {{ adapter.dispatch('get_create_table_as_sql', 'dbt')(temporary, relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_create_table_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "temporary", "type": null, "description": ""}, {"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2646348, "supported_languages": null}, "macro.dbt.default__get_create_table_as_sql": {"name": "default__get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_create_table_as_sql", "macro_sql": "{% macro default__get_create_table_as_sql(temporary, relation, sql) -%}\n {{ return(create_table_as(temporary, relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "temporary", "type": null, "description": ""}, {"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.264703, "supported_languages": null}, "macro.dbt.create_table_as": {"name": "create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.create_table_as", "macro_sql": "{% macro create_table_as(temporary, relation, compiled_code, language='sql') -%}\n {# backward compatibility for create_table_as that does not support language #}\n {% if language == \"sql\" %}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, compiled_code)}}\n {% else %}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, compiled_code, language) }}\n {% endif %}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "temporary", "type": null, "description": ""}, {"name": "relation", "type": null, "description": ""}, {"name": "compiled_code", "type": null, "description": ""}, {"name": "language", "type": null, "description": ""}], "created_at": 1784225035.264863, "supported_languages": null}, "macro.dbt.default__create_table_as": {"name": "default__create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__create_table_as", "macro_sql": "{% macro default__create_table_as(temporary, relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary: -%}temporary{%- endif %} table\n {{ relation.include(database=(not temporary), schema=(not temporary)) }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced and (not temporary) %}\n {{ get_assert_columns_equivalent(sql) }}\n {{ get_table_columns_and_constraints() }}\n {%- set sql = get_select_subquery(sql) %}\n {% endif %}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "temporary", "type": null, "description": ""}, {"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.265124, "supported_languages": null}, "macro.dbt.default__get_column_names": {"name": "default__get_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_column_names", "macro_sql": "{% macro default__get_column_names() %}\n {#- loop through user_provided_columns to get column names -#}\n {%- set user_provided_columns = model['columns'] -%}\n {%- for i in user_provided_columns %}\n {%- set col = user_provided_columns[i] -%}\n {%- set col_name = adapter.quote(col['name']) if col.get('quote') else col['name'] -%}\n {{ col_name }}{{ \", \" if not loop.last }}\n {%- endfor -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.265305, "supported_languages": null}, "macro.dbt.get_select_subquery": {"name": "get_select_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.get_select_subquery", "macro_sql": "{% macro get_select_subquery(sql) %}\n {{ return(adapter.dispatch('get_select_subquery', 'dbt')(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.265376, "supported_languages": null}, "macro.dbt.default__get_select_subquery": {"name": "default__get_select_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_select_subquery", "macro_sql": "{% macro default__get_select_subquery(sql) %}\n select {{ adapter.dispatch('get_column_names', 'dbt')() }}\n from (\n {{ sql }}\n ) as model_subq\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_column_names"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.265443, "supported_languages": null}, "macro.dbt.drop_view": {"name": "drop_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt.drop_view", "macro_sql": "{% macro drop_view(relation) -%}\n {{- adapter.dispatch('drop_view', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.265549, "supported_languages": null}, "macro.dbt.default__drop_view": {"name": "default__drop_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt.default__drop_view", "macro_sql": "{% macro default__drop_view(relation) -%}\n drop view if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.265598, "supported_languages": null}, "macro.dbt.get_replace_view_sql": {"name": "get_replace_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.get_replace_view_sql", "macro_sql": "{% macro get_replace_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_replace_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2658062, "supported_languages": null}, "macro.dbt.default__get_replace_view_sql": {"name": "default__get_replace_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.default__get_replace_view_sql", "macro_sql": "{% macro default__get_replace_view_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.265864, "supported_languages": null}, "macro.dbt.create_or_replace_view": {"name": "create_or_replace_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.create_or_replace_view", "macro_sql": "{% macro create_or_replace_view() %}\n {%- set identifier = model['alias'] -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database,\n type='view') -%}\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks) }}\n\n -- If there's a table with the same name and we weren't told to full refresh,\n -- that's an error. If we were told to full refresh, drop it. This behavior differs\n -- for Snowflake and BigQuery, so multiple dispatch is used.\n {%- if old_relation is not none and old_relation.is_table -%}\n {{ handle_existing_table(should_full_refresh(), old_relation) }}\n {%- endif -%}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(target_relation, sql) }}\n {%- endcall %}\n\n {% set should_revoke = should_revoke(exists_as_view, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {{ run_hooks(post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.handle_existing_table", "macro.dbt.should_full_refresh", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2663622, "supported_languages": null}, "macro.dbt.handle_existing_table": {"name": "handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.handle_existing_table", "macro_sql": "{% macro handle_existing_table(full_refresh, old_relation) %}\n {{ adapter.dispatch('handle_existing_table', 'dbt')(full_refresh, old_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__handle_existing_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "full_refresh", "type": null, "description": ""}, {"name": "old_relation", "type": null, "description": ""}], "created_at": 1784225035.266449, "supported_languages": null}, "macro.dbt.default__handle_existing_table": {"name": "default__handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.default__handle_existing_table", "macro_sql": "{% macro default__handle_existing_table(full_refresh, old_relation) %}\n {{ log(\"Dropping relation \" ~ old_relation.render() ~ \" because it is of type \" ~ old_relation.type) }}\n {{ adapter.drop_relation(old_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "full_refresh", "type": null, "description": ""}, {"name": "old_relation", "type": null, "description": ""}], "created_at": 1784225035.2665448, "supported_languages": null}, "macro.dbt.get_rename_view_sql": {"name": "get_rename_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt.get_rename_view_sql", "macro_sql": "{% macro get_rename_view_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_view_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.266664, "supported_languages": null}, "macro.dbt.default__get_rename_view_sql": {"name": "default__get_rename_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt.default__get_rename_view_sql", "macro_sql": "{% macro default__get_rename_view_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.266725, "supported_languages": null}, "macro.dbt.get_create_view_as_sql": {"name": "get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.get_create_view_as_sql", "macro_sql": "{% macro get_create_view_as_sql(relation, sql) -%}\n {{ adapter.dispatch('get_create_view_as_sql', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_create_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2668831, "supported_languages": null}, "macro.dbt.default__get_create_view_as_sql": {"name": "default__get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.default__get_create_view_as_sql", "macro_sql": "{% macro default__get_create_view_as_sql(relation, sql) -%}\n {{ return(create_view_as(relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.266947, "supported_languages": null}, "macro.dbt.create_view_as": {"name": "create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.create_view_as", "macro_sql": "{% macro create_view_as(relation, sql) -%}\n {{ adapter.dispatch('create_view_as', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.267017, "supported_languages": null}, "macro.dbt.default__create_view_as": {"name": "default__create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.default__create_view_as", "macro_sql": "{% macro default__create_view_as(relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n create view {{ relation.render() }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {%- endif %}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.267191, "supported_languages": null}, "macro.dbt.default__test_relationships": {"name": "default__test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/relationships.sql", "original_file_path": "macros/generic_test_sql/relationships.sql", "unique_id": "macro.dbt.default__test_relationships", "macro_sql": "{% macro default__test_relationships(model, column_name, to, field) %}\n\nwith child as (\n select {{ column_name }} as from_field\n from {{ model }}\n where {{ column_name }} is not null\n),\n\nparent as (\n select {{ field }} as to_field\n from {{ to }}\n)\n\nselect\n from_field\n\nfrom child\nleft join parent\n on child.from_field = parent.to_field\n\nwhere parent.to_field is null\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}, {"name": "to", "type": null, "description": ""}, {"name": "field", "type": null, "description": ""}], "created_at": 1784225035.267328, "supported_languages": null}, "macro.dbt.default__test_not_null": {"name": "default__test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/not_null.sql", "original_file_path": "macros/generic_test_sql/not_null.sql", "unique_id": "macro.dbt.default__test_not_null", "macro_sql": "{% macro default__test_not_null(model, column_name) %}\n\n{% set column_list = '*' if should_store_failures() else column_name %}\n\nselect {{ column_list }}\nfrom {{ model }}\nwhere {{ column_name }} is null\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_store_failures"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}], "created_at": 1784225035.267445, "supported_languages": null}, "macro.dbt.default__test_unique": {"name": "default__test_unique", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/unique.sql", "original_file_path": "macros/generic_test_sql/unique.sql", "unique_id": "macro.dbt.default__test_unique", "macro_sql": "{% macro default__test_unique(model, column_name) %}\n\nselect\n {{ column_name }} as unique_field,\n count(*) as n_records\n\nfrom {{ model }}\nwhere {{ column_name }} is not null\ngroup by {{ column_name }}\nhaving count(*) > 1\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}], "created_at": 1784225035.26754, "supported_languages": null}, "macro.dbt.default__test_accepted_values": {"name": "default__test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/accepted_values.sql", "original_file_path": "macros/generic_test_sql/accepted_values.sql", "unique_id": "macro.dbt.default__test_accepted_values", "macro_sql": "{% macro default__test_accepted_values(model, column_name, values, quote=True) %}\n\nwith all_values as (\n\n select\n {{ column_name }} as value_field,\n count(*) as n_records\n\n from {{ model }}\n group by {{ column_name }}\n\n)\n\nselect *\nfrom all_values\nwhere value_field not in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n)\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}, {"name": "values", "type": null, "description": ""}, {"name": "quote", "type": null, "description": ""}], "created_at": 1784225035.2677429, "supported_languages": null}, "macro.dbt.statement": {"name": "statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.statement", "macro_sql": "\n{%- macro statement(name=None, fetch_result=False, auto_begin=True, language='sql') -%}\n {%- if execute: -%}\n {%- set compiled_code = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime {} for node \"{}\"'.format(language, model['unique_id'])) }}\n {{ write(compiled_code) }}\n {%- endif -%}\n {%- if language == 'sql'-%}\n {%- set res, table = adapter.execute(compiled_code, auto_begin=auto_begin, fetch=fetch_result) -%}\n {%- elif language == 'python' -%}\n {%- set res = submit_python_job(model, compiled_code) -%}\n {#-- TODO: What should table be for python models? --#}\n {%- set table = None -%}\n {%- else -%}\n {% do exceptions.raise_compiler_error(\"statement macro didn't get supported language\") %}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_result(name, response=res, agate_table=table) }}\n {%- endif -%}\n\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "name", "type": null, "description": ""}, {"name": "fetch_result", "type": null, "description": ""}, {"name": "auto_begin", "type": null, "description": ""}, {"name": "language", "type": null, "description": ""}], "created_at": 1784225035.268249, "supported_languages": null}, "macro.dbt.noop_statement": {"name": "noop_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.noop_statement", "macro_sql": "{% macro noop_statement(name=None, message=None, code=None, rows_affected=None, res=None) -%}\n {%- set sql = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime SQL for node \"{}\"'.format(model['unique_id'])) }}\n {{ write(sql) }}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_raw_result(name, message=message, code=code, rows_affected=rows_affected, agate_table=res) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "name", "type": null, "description": ""}, {"name": "message", "type": null, "description": ""}, {"name": "code", "type": null, "description": ""}, {"name": "rows_affected", "type": null, "description": ""}, {"name": "res", "type": null, "description": ""}], "created_at": 1784225035.268476, "supported_languages": null}, "macro.dbt.run_query": {"name": "run_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.run_query", "macro_sql": "{% macro run_query(sql) %}\n {% call statement(\"run_query_statement\", fetch_result=true, auto_begin=false) %}\n {{ sql }}\n {% endcall %}\n\n {% do return(load_result(\"run_query_statement\").table) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2685912, "supported_languages": null}, "macro.dbt.convert_datetime": {"name": "convert_datetime", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.convert_datetime", "macro_sql": "{% macro convert_datetime(date_str, date_fmt) %}\n\n {% set error_msg -%}\n The provided partition date '{{ date_str }}' does not match the expected format '{{ date_fmt }}'\n {%- endset %}\n\n {% set res = try_or_compiler_error(error_msg, modules.datetime.datetime.strptime, date_str.strip(), date_fmt) %}\n {{ return(res) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "date_str", "type": null, "description": ""}, {"name": "date_fmt", "type": null, "description": ""}], "created_at": 1784225035.268883, "supported_languages": null}, "macro.dbt.dates_in_range": {"name": "dates_in_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.dates_in_range", "macro_sql": "{% macro dates_in_range(start_date_str, end_date_str=none, in_fmt=\"%Y%m%d\", out_fmt=\"%Y%m%d\") %}\n {% set end_date_str = start_date_str if end_date_str is none else end_date_str %}\n\n {% set start_date = convert_datetime(start_date_str, in_fmt) %}\n {% set end_date = convert_datetime(end_date_str, in_fmt) %}\n\n {% set day_count = (end_date - start_date).days %}\n {% if day_count < 0 %}\n {% set msg -%}\n Partition start date is after the end date ({{ start_date }}, {{ end_date }})\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg, model) }}\n {% endif %}\n\n {% set date_list = [] %}\n {% for i in range(0, day_count + 1) %}\n {% set the_date = (modules.datetime.timedelta(days=i) + start_date) %}\n {% if not out_fmt %}\n {% set _ = date_list.append(the_date) %}\n {% else %}\n {% set _ = date_list.append(the_date.strftime(out_fmt)) %}\n {% endif %}\n {% endfor %}\n\n {{ return(date_list) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.convert_datetime"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "start_date_str", "type": null, "description": ""}, {"name": "end_date_str", "type": null, "description": ""}, {"name": "in_fmt", "type": null, "description": ""}, {"name": "out_fmt", "type": null, "description": ""}], "created_at": 1784225035.2693288, "supported_languages": null}, "macro.dbt.partition_range": {"name": "partition_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.partition_range", "macro_sql": "{% macro partition_range(raw_partition_date, date_fmt='%Y%m%d') %}\n {% set partition_range = (raw_partition_date | string).split(\",\") %}\n\n {% if (partition_range | length) == 1 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = none %}\n {% elif (partition_range | length) == 2 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = partition_range[1] %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"Invalid partition time. Expected format: {Start Date}[,{End Date}]. Got: \" ~ raw_partition_date) }}\n {% endif %}\n\n {{ return(dates_in_range(start_date, end_date, in_fmt=date_fmt)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dates_in_range"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "raw_partition_date", "type": null, "description": ""}, {"name": "date_fmt", "type": null, "description": ""}], "created_at": 1784225035.269717, "supported_languages": null}, "macro.dbt.py_current_timestring": {"name": "py_current_timestring", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.py_current_timestring", "macro_sql": "{% macro py_current_timestring() %}\n {% set dt = modules.datetime.datetime.now() %}\n {% do return(dt.strftime(\"%Y%m%d%H%M%S%f\")) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.269832, "supported_languages": null}, "macro.dbt.except": {"name": "except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.except", "macro_sql": "{% macro except() %}\n {{ return(adapter.dispatch('except', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.269933, "supported_languages": null}, "macro.dbt.default__except": {"name": "default__except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.default__except", "macro_sql": "{% macro default__except() %}\n\n except\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2699661, "supported_languages": null}, "macro.dbt.get_intervals_between": {"name": "get_intervals_between", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.get_intervals_between", "macro_sql": "{% macro get_intervals_between(start_date, end_date, datepart) -%}\n {{ return(adapter.dispatch('get_intervals_between', 'dbt')(start_date, end_date, datepart)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_intervals_between"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "start_date", "type": null, "description": ""}, {"name": "end_date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.2701728, "supported_languages": null}, "macro.dbt.default__get_intervals_between": {"name": "default__get_intervals_between", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.default__get_intervals_between", "macro_sql": "{% macro default__get_intervals_between(start_date, end_date, datepart) -%}\n {%- call statement('get_intervals_between', fetch_result=True) %}\n\n select {{ dbt.datediff(start_date, end_date, datepart) }}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_intervals_between') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values[0]) }}\n {%- else -%}\n {{ return(1) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "start_date", "type": null, "description": ""}, {"name": "end_date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.270414, "supported_languages": null}, "macro.dbt.date_spine": {"name": "date_spine", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.date_spine", "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt')(datepart, start_date, end_date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "start_date", "type": null, "description": ""}, {"name": "end_date", "type": null, "description": ""}], "created_at": 1784225035.270505, "supported_languages": null}, "macro.dbt.default__date_spine": {"name": "default__date_spine", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.default__date_spine", "macro_sql": "{% macro default__date_spine(datepart, start_date, end_date) %}\n\n\n {# call as follows:\n\n date_spine(\n \"day\",\n \"to_date('01/01/2016', 'mm/dd/yyyy')\",\n \"dbt.dateadd(week, 1, current_date)\"\n ) #}\n\n\n with rawdata as (\n\n {{dbt.generate_series(\n dbt.get_intervals_between(start_date, end_date, datepart)\n )}}\n\n ),\n\n all_periods as (\n\n select (\n {{\n dbt.dateadd(\n datepart,\n \"row_number() over (order by 1) - 1\",\n start_date\n )\n }}\n ) as date_{{datepart}}\n from rawdata\n\n ),\n\n filtered as (\n\n select *\n from all_periods\n where date_{{datepart}} <= {{ end_date }}\n\n )\n\n select * from filtered\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.generate_series", "macro.dbt.get_intervals_between", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "start_date", "type": null, "description": ""}, {"name": "end_date", "type": null, "description": ""}], "created_at": 1784225035.2706492, "supported_languages": null}, "macro.dbt.date": {"name": "date", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date.sql", "original_file_path": "macros/utils/date.sql", "unique_id": "macro.dbt.date", "macro_sql": "{% macro date(year, month, day) %}\n {{ return(adapter.dispatch('date', 'dbt') (year, month, day)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "year", "type": null, "description": ""}, {"name": "month", "type": null, "description": ""}, {"name": "day", "type": null, "description": ""}], "created_at": 1784225035.2707798, "supported_languages": null}, "macro.dbt.default__date": {"name": "default__date", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date.sql", "original_file_path": "macros/utils/date.sql", "unique_id": "macro.dbt.default__date", "macro_sql": "{% macro default__date(year, month, day) -%}\n {%- set dt = modules.datetime.date(year, month, day) -%}\n {%- set iso_8601_formatted_date = dt.strftime('%Y-%m-%d') -%}\n to_date('{{ iso_8601_formatted_date }}', 'YYYY-MM-DD')\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "year", "type": null, "description": ""}, {"name": "month", "type": null, "description": ""}, {"name": "day", "type": null, "description": ""}], "created_at": 1784225035.2708921, "supported_languages": null}, "macro.dbt.replace": {"name": "replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.replace", "macro_sql": "{% macro replace(field, old_chars, new_chars) -%}\n {{ return(adapter.dispatch('replace', 'dbt') (field, old_chars, new_chars)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__replace"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "old_chars", "type": null, "description": ""}, {"name": "new_chars", "type": null, "description": ""}], "created_at": 1784225035.271019, "supported_languages": null}, "macro.dbt.default__replace": {"name": "default__replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.default__replace", "macro_sql": "{% macro default__replace(field, old_chars, new_chars) %}\n\n replace(\n {{ field }},\n {{ old_chars }},\n {{ new_chars }}\n )\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "old_chars", "type": null, "description": ""}, {"name": "new_chars", "type": null, "description": ""}], "created_at": 1784225035.2710881, "supported_languages": null}, "macro.dbt.concat": {"name": "concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.concat", "macro_sql": "{% macro concat(fields) -%}\n {{ return(adapter.dispatch('concat', 'dbt')(fields)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "fields", "type": null, "description": ""}], "created_at": 1784225035.271189, "supported_languages": null}, "macro.dbt.default__concat": {"name": "default__concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.default__concat", "macro_sql": "{% macro default__concat(fields) -%}\n {{ fields|join(' || ') }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "fields", "type": null, "description": ""}], "created_at": 1784225035.27124, "supported_languages": null}, "macro.dbt.get_powers_of_two": {"name": "get_powers_of_two", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.get_powers_of_two", "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "upper_bound", "type": null, "description": ""}], "created_at": 1784225035.2714188, "supported_languages": null}, "macro.dbt.default__get_powers_of_two": {"name": "default__get_powers_of_two", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.default__get_powers_of_two", "macro_sql": "{% macro default__get_powers_of_two(upper_bound) %}\n\n {% if upper_bound <= 0 %}\n {{ exceptions.raise_compiler_error(\"upper bound must be positive\") }}\n {% endif %}\n\n {% for _ in range(1, 100) %}\n {% if upper_bound <= 2 ** loop.index %}{{ return(loop.index) }}{% endif %}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "upper_bound", "type": null, "description": ""}], "created_at": 1784225035.271582, "supported_languages": null}, "macro.dbt.generate_series": {"name": "generate_series", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.generate_series", "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_series"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "upper_bound", "type": null, "description": ""}], "created_at": 1784225035.2716532, "supported_languages": null}, "macro.dbt.default__generate_series": {"name": "default__generate_series", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.default__generate_series", "macro_sql": "{% macro default__generate_series(upper_bound) %}\n\n {% set n = dbt.get_powers_of_two(upper_bound) %}\n\n with p as (\n select 0 as generated_number union all select 1\n ), unioned as (\n\n select\n\n {% for i in range(n) %}\n p{{i}}.generated_number * power(2, {{i}})\n {% if not loop.last %} + {% endif %}\n {% endfor %}\n + 1\n as generated_number\n\n from\n\n {% for i in range(n) %}\n p as p{{i}}\n {% if not loop.last %} cross join {% endif %}\n {% endfor %}\n\n )\n\n select *\n from unioned\n where generated_number <= {{upper_bound}}\n order by generated_number\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "upper_bound", "type": null, "description": ""}], "created_at": 1784225035.271859, "supported_languages": null}, "macro.dbt.length": {"name": "length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.length", "macro_sql": "{% macro length(expression) -%}\n {{ return(adapter.dispatch('length', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__length"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.2719731, "supported_languages": null}, "macro.dbt.default__length": {"name": "default__length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.default__length", "macro_sql": "{% macro default__length(expression) %}\n\n length(\n {{ expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.2720158, "supported_languages": null}, "macro.dbt.dateadd": {"name": "dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.dateadd", "macro_sql": "{% macro dateadd(datepart, interval, from_date_or_timestamp) %}\n {{ return(adapter.dispatch('dateadd', 'dbt')(datepart, interval, from_date_or_timestamp)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "interval", "type": null, "description": ""}, {"name": "from_date_or_timestamp", "type": null, "description": ""}], "created_at": 1784225035.27214, "supported_languages": null}, "macro.dbt.default__dateadd": {"name": "default__dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.default__dateadd", "macro_sql": "{% macro default__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_date_or_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "interval", "type": null, "description": ""}, {"name": "from_date_or_timestamp", "type": null, "description": ""}], "created_at": 1784225035.272204, "supported_languages": null}, "macro.dbt.intersect": {"name": "intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.intersect", "macro_sql": "{% macro intersect() %}\n {{ return(adapter.dispatch('intersect', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__intersect"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.272293, "supported_languages": null}, "macro.dbt.default__intersect": {"name": "default__intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.default__intersect", "macro_sql": "{% macro default__intersect() %}\n\n intersect\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.272367, "supported_languages": null}, "macro.dbt.escape_single_quotes": {"name": "escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.escape_single_quotes", "macro_sql": "{% macro escape_single_quotes(expression) %}\n {{ return(adapter.dispatch('escape_single_quotes', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__escape_single_quotes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.272479, "supported_languages": null}, "macro.dbt.default__escape_single_quotes": {"name": "default__escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.default__escape_single_quotes", "macro_sql": "{% macro default__escape_single_quotes(expression) -%}\n{{ expression | replace(\"'\",\"''\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.272537, "supported_languages": null}, "macro.dbt.right": {"name": "right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.right", "macro_sql": "{% macro right(string_text, length_expression) -%}\n {{ return(adapter.dispatch('right', 'dbt') (string_text, length_expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__right"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "length_expression", "type": null, "description": ""}], "created_at": 1784225035.272651, "supported_languages": null}, "macro.dbt.default__right": {"name": "default__right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.default__right", "macro_sql": "{% macro default__right(string_text, length_expression) %}\n\n right(\n {{ string_text }},\n {{ length_expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "length_expression", "type": null, "description": ""}], "created_at": 1784225035.272707, "supported_languages": null}, "macro.dbt.listagg": {"name": "listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.listagg", "macro_sql": "{% macro listagg(measure, delimiter_text=\"','\", order_by_clause=none, limit_num=none) -%}\n {{ return(adapter.dispatch('listagg', 'dbt') (measure, delimiter_text, order_by_clause, limit_num)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__listagg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "measure", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "order_by_clause", "type": null, "description": ""}, {"name": "limit_num", "type": null, "description": ""}], "created_at": 1784225035.272888, "supported_languages": null}, "macro.dbt.default__listagg": {"name": "default__listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.default__listagg", "macro_sql": "{% macro default__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n array_slice(\n array_agg(\n {{ measure }}\n ){% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n ,0\n ,{{ limit_num }}\n ),\n {{ delimiter_text }}\n )\n {%- else %}\n listagg(\n {{ measure }},\n {{ delimiter_text }}\n )\n {% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n {%- endif %}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "measure", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "order_by_clause", "type": null, "description": ""}, {"name": "limit_num", "type": null, "description": ""}], "created_at": 1784225035.273042, "supported_languages": null}, "macro.dbt.datediff": {"name": "datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.datediff", "macro_sql": "{% macro datediff(first_date, second_date, datepart) %}\n {{ return(adapter.dispatch('datediff', 'dbt')(first_date, second_date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "first_date", "type": null, "description": ""}, {"name": "second_date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.2731678, "supported_languages": null}, "macro.dbt.default__datediff": {"name": "default__datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.default__datediff", "macro_sql": "{% macro default__datediff(first_date, second_date, datepart) -%}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "first_date", "type": null, "description": ""}, {"name": "second_date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.273233, "supported_languages": null}, "macro.dbt.safe_cast": {"name": "safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.safe_cast", "macro_sql": "{% macro safe_cast(field, type) %}\n {{ return(adapter.dispatch('safe_cast', 'dbt') (field, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.2733471, "supported_languages": null}, "macro.dbt.default__safe_cast": {"name": "default__safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.default__safe_cast", "macro_sql": "{% macro default__safe_cast(field, type) %}\n {# most databases don't support this function yet\n so we just need to use cast #}\n cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.273403, "supported_languages": null}, "macro.dbt.equals": {"name": "equals", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/equals.sql", "original_file_path": "macros/utils/equals.sql", "unique_id": "macro.dbt.equals", "macro_sql": "{% macro equals(expr1, expr2) %}\n {{ return(adapter.dispatch('equals', 'dbt') (expr1, expr2)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expr1", "type": null, "description": ""}, {"name": "expr2", "type": null, "description": ""}], "created_at": 1784225035.273529, "supported_languages": null}, "macro.dbt.default__equals": {"name": "default__equals", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/equals.sql", "original_file_path": "macros/utils/equals.sql", "unique_id": "macro.dbt.default__equals", "macro_sql": "{% macro default__equals(expr1, expr2) -%}\n{%- if adapter.behavior.enable_truthy_nulls_equals_macro.no_warn %}\n case when (({{ expr1 }} = {{ expr2 }}) or ({{ expr1 }} is null and {{ expr2 }} is null))\n then 0\n else 1\n end = 0\n{%- else -%}\n ({{ expr1 }} = {{ expr2 }})\n{%- endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expr1", "type": null, "description": ""}, {"name": "expr2", "type": null, "description": ""}], "created_at": 1784225035.273648, "supported_languages": null}, "macro.dbt.hash": {"name": "hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.hash", "macro_sql": "{% macro hash(field) -%}\n {{ return(adapter.dispatch('hash', 'dbt') (field)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__hash"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}], "created_at": 1784225035.273751, "supported_languages": null}, "macro.dbt.default__hash": {"name": "default__hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.default__hash", "macro_sql": "{% macro default__hash(field) -%}\n md5(cast({{ field }} as {{ api.Column.translate_type('string') }}))\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}], "created_at": 1784225035.273814, "supported_languages": null}, "macro.dbt.cast_bool_to_text": {"name": "cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.cast_bool_to_text", "macro_sql": "{% macro cast_bool_to_text(field) %}\n {{ adapter.dispatch('cast_bool_to_text', 'dbt') (field) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}], "created_at": 1784225035.273911, "supported_languages": null}, "macro.dbt.default__cast_bool_to_text": {"name": "default__cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.default__cast_bool_to_text", "macro_sql": "{% macro default__cast_bool_to_text(field) %}\n cast({{ field }} as {{ api.Column.translate_type('string') }})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}], "created_at": 1784225035.273973, "supported_languages": null}, "macro.dbt.cast": {"name": "cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast.sql", "original_file_path": "macros/utils/cast.sql", "unique_id": "macro.dbt.cast", "macro_sql": "{% macro cast(field, type) %}\n {{ return(adapter.dispatch('cast', 'dbt') (field, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.274086, "supported_languages": null}, "macro.dbt.default__cast": {"name": "default__cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast.sql", "original_file_path": "macros/utils/cast.sql", "unique_id": "macro.dbt.default__cast", "macro_sql": "{% macro default__cast(field, type) %}\n cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.2741382, "supported_languages": null}, "macro.dbt.any_value": {"name": "any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.any_value", "macro_sql": "{% macro any_value(expression) -%}\n {{ return(adapter.dispatch('any_value', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__any_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.274237, "supported_languages": null}, "macro.dbt.default__any_value": {"name": "default__any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.default__any_value", "macro_sql": "{% macro default__any_value(expression) -%}\n\n any_value({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.274292, "supported_languages": null}, "macro.dbt.position": {"name": "position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.position", "macro_sql": "{% macro position(substring_text, string_text) -%}\n {{ return(adapter.dispatch('position', 'dbt') (substring_text, string_text)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__position"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "substring_text", "type": null, "description": ""}, {"name": "string_text", "type": null, "description": ""}], "created_at": 1784225035.274412, "supported_languages": null}, "macro.dbt.default__position": {"name": "default__position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.default__position", "macro_sql": "{% macro default__position(substring_text, string_text) %}\n\n position(\n {{ substring_text }} in {{ string_text }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "substring_text", "type": null, "description": ""}, {"name": "string_text", "type": null, "description": ""}], "created_at": 1784225035.274518, "supported_languages": null}, "macro.dbt.string_literal": {"name": "string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.string_literal", "macro_sql": "{%- macro string_literal(value) -%}\n {{ return(adapter.dispatch('string_literal', 'dbt') (value)) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "value", "type": null, "description": ""}], "created_at": 1784225035.274627, "supported_languages": null}, "macro.dbt.default__string_literal": {"name": "default__string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.default__string_literal", "macro_sql": "{% macro default__string_literal(value) -%}\n '{{ value }}'\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "value", "type": null, "description": ""}], "created_at": 1784225035.274672, "supported_languages": null}, "macro.dbt.type_string": {"name": "type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_string", "macro_sql": "\n\n{%- macro type_string() -%}\n {{ return(adapter.dispatch('type_string', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.274988, "supported_languages": null}, "macro.dbt.default__type_string": {"name": "default__type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_string", "macro_sql": "{% macro default__type_string() %}\n {{ return(api.Column.translate_type(\"string\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275048, "supported_languages": null}, "macro.dbt.type_timestamp": {"name": "type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_timestamp", "macro_sql": "\n\n{%- macro type_timestamp() -%}\n {{ return(adapter.dispatch('type_timestamp', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275115, "supported_languages": null}, "macro.dbt.default__type_timestamp": {"name": "default__type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_timestamp", "macro_sql": "{% macro default__type_timestamp() %}\n {{ return(api.Column.translate_type(\"timestamp\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275172, "supported_languages": null}, "macro.dbt.type_float": {"name": "type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_float", "macro_sql": "\n\n{%- macro type_float() -%}\n {{ return(adapter.dispatch('type_float', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_float"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275233, "supported_languages": null}, "macro.dbt.default__type_float": {"name": "default__type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_float", "macro_sql": "{% macro default__type_float() %}\n {{ return(api.Column.translate_type(\"float\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275297, "supported_languages": null}, "macro.dbt.type_numeric": {"name": "type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_numeric", "macro_sql": "\n\n{%- macro type_numeric() -%}\n {{ return(adapter.dispatch('type_numeric', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275368, "supported_languages": null}, "macro.dbt.default__type_numeric": {"name": "default__type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_numeric", "macro_sql": "{% macro default__type_numeric() %}\n {{ return(api.Column.numeric_type(\"numeric\", 28, 6)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275438, "supported_languages": null}, "macro.dbt.type_bigint": {"name": "type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_bigint", "macro_sql": "\n\n{%- macro type_bigint() -%}\n {{ return(adapter.dispatch('type_bigint', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_bigint"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275499, "supported_languages": null}, "macro.dbt.default__type_bigint": {"name": "default__type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_bigint", "macro_sql": "{% macro default__type_bigint() %}\n {{ return(api.Column.translate_type(\"bigint\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275559, "supported_languages": null}, "macro.dbt.type_int": {"name": "type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_int", "macro_sql": "\n\n{%- macro type_int() -%}\n {{ return(adapter.dispatch('type_int', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275618, "supported_languages": null}, "macro.dbt.default__type_int": {"name": "default__type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_int", "macro_sql": "{%- macro default__type_int() -%}\n {{ return(api.Column.translate_type(\"integer\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2756748, "supported_languages": null}, "macro.dbt.type_boolean": {"name": "type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_boolean", "macro_sql": "\n\n{%- macro type_boolean() -%}\n {{ return(adapter.dispatch('type_boolean', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_boolean"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275737, "supported_languages": null}, "macro.dbt.default__type_boolean": {"name": "default__type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_boolean", "macro_sql": "{%- macro default__type_boolean() -%}\n {{ return(api.Column.translate_type(\"boolean\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275792, "supported_languages": null}, "macro.dbt.array_concat": {"name": "array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.array_concat", "macro_sql": "{% macro array_concat(array_1, array_2) -%}\n {{ return(adapter.dispatch('array_concat', 'dbt')(array_1, array_2)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "array_1", "type": null, "description": ""}, {"name": "array_2", "type": null, "description": ""}], "created_at": 1784225035.275908, "supported_languages": null}, "macro.dbt.default__array_concat": {"name": "default__array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.default__array_concat", "macro_sql": "{% macro default__array_concat(array_1, array_2) -%}\n array_cat({{ array_1 }}, {{ array_2 }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "array_1", "type": null, "description": ""}, {"name": "array_2", "type": null, "description": ""}], "created_at": 1784225035.275962, "supported_languages": null}, "macro.dbt.bool_or": {"name": "bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.bool_or", "macro_sql": "{% macro bool_or(expression) -%}\n {{ return(adapter.dispatch('bool_or', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__bool_or"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.2760599, "supported_languages": null}, "macro.dbt.default__bool_or": {"name": "default__bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.default__bool_or", "macro_sql": "{% macro default__bool_or(expression) -%}\n\n bool_or({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.276101, "supported_languages": null}, "macro.dbt.last_day": {"name": "last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.last_day", "macro_sql": "{% macro last_day(date, datepart) %}\n {{ return(adapter.dispatch('last_day', 'dbt') (date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.276224, "supported_languages": null}, "macro.dbt.default_last_day": {"name": "default_last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default_last_day", "macro_sql": "\n\n{%- macro default_last_day(date, datepart) -%}\n cast(\n {{dbt.dateadd('day', '-1',\n dbt.dateadd(datepart, '1', dbt.date_trunc(datepart, date))\n )}}\n as date)\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.276372, "supported_languages": null}, "macro.dbt.default__last_day": {"name": "default__last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default__last_day", "macro_sql": "{% macro default__last_day(date, datepart) -%}\n {{dbt.default_last_day(date, datepart)}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.276434, "supported_languages": null}, "macro.dbt.split_part": {"name": "split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.split_part", "macro_sql": "{% macro split_part(string_text, delimiter_text, part_number) %}\n {{ return(adapter.dispatch('split_part', 'dbt') (string_text, delimiter_text, part_number)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__split_part"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "part_number", "type": null, "description": ""}], "created_at": 1784225035.276583, "supported_languages": null}, "macro.dbt.default__split_part": {"name": "default__split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.default__split_part", "macro_sql": "{% macro default__split_part(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n {{ part_number }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "part_number", "type": null, "description": ""}], "created_at": 1784225035.276649, "supported_languages": null}, "macro.dbt._split_part_negative": {"name": "_split_part_negative", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt._split_part_negative", "macro_sql": "{% macro _split_part_negative(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n length({{ string_text }})\n - length(\n replace({{ string_text }}, {{ delimiter_text }}, '')\n ) + 2 + {{ part_number }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "part_number", "type": null, "description": ""}], "created_at": 1784225035.276733, "supported_languages": null}, "macro.dbt.date_trunc": {"name": "date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.date_trunc", "macro_sql": "{% macro date_trunc(datepart, date) -%}\n {{ return(adapter.dispatch('date_trunc', 'dbt') (datepart, date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "date", "type": null, "description": ""}], "created_at": 1784225035.276843, "supported_languages": null}, "macro.dbt.default__date_trunc": {"name": "default__date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.default__date_trunc", "macro_sql": "{% macro default__date_trunc(datepart, date) -%}\n date_trunc('{{datepart}}', {{date}})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "date", "type": null, "description": ""}], "created_at": 1784225035.276897, "supported_languages": null}, "macro.dbt.array_construct": {"name": "array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.array_construct", "macro_sql": "{% macro array_construct(inputs=[], data_type=api.Column.translate_type('integer')) -%}\n {{ return(adapter.dispatch('array_construct', 'dbt')(inputs, data_type)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_construct"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "inputs", "type": null, "description": ""}, {"name": "data_type", "type": null, "description": ""}], "created_at": 1784225035.277044, "supported_languages": null}, "macro.dbt.default__array_construct": {"name": "default__array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.default__array_construct", "macro_sql": "{% macro default__array_construct(inputs, data_type) -%}\n {% if inputs|length > 0 %}\n array[ {{ inputs|join(' , ') }} ]\n {% else %}\n array[]::{{data_type}}[]\n {% endif %}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "inputs", "type": null, "description": ""}, {"name": "data_type", "type": null, "description": ""}], "created_at": 1784225035.27715, "supported_languages": null}, "macro.dbt.array_append": {"name": "array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.array_append", "macro_sql": "{% macro array_append(array, new_element) -%}\n {{ return(adapter.dispatch('array_append', 'dbt')(array, new_element)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_append"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "array", "type": null, "description": ""}, {"name": "new_element", "type": null, "description": ""}], "created_at": 1784225035.277266, "supported_languages": null}, "macro.dbt.default__array_append": {"name": "default__array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.default__array_append", "macro_sql": "{% macro default__array_append(array, new_element) -%}\n array_append({{ array }}, {{ new_element }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "array", "type": null, "description": ""}, {"name": "new_element", "type": null, "description": ""}], "created_at": 1784225035.277319, "supported_languages": null}, "macro.dbt.create_schema": {"name": "create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.create_schema", "macro_sql": "{% macro create_schema(relation) -%}\n {{ adapter.dispatch('create_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2774458, "supported_languages": null}, "macro.dbt.default__create_schema": {"name": "default__create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__create_schema", "macro_sql": "{% macro default__create_schema(relation) -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier() }}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.277517, "supported_languages": null}, "macro.dbt.drop_schema": {"name": "drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.drop_schema", "macro_sql": "{% macro drop_schema(relation) -%}\n {{ adapter.dispatch('drop_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.277577, "supported_languages": null}, "macro.dbt.default__drop_schema": {"name": "default__drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__drop_schema", "macro_sql": "{% macro default__drop_schema(relation) -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier() }} cascade\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.277645, "supported_languages": null}, "macro.dbt.current_timestamp": {"name": "current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp", "macro_sql": "{%- macro current_timestamp() -%}\n {{ adapter.dispatch('current_timestamp', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.277834, "supported_languages": null}, "macro.dbt.default__current_timestamp": {"name": "default__current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp", "macro_sql": "{% macro default__current_timestamp() -%}\n {{ exceptions.raise_not_implemented(\n 'current_timestamp macro not implemented for adapter ' + adapter.type()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.277892, "supported_languages": null}, "macro.dbt.snapshot_get_time": {"name": "snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.snapshot_get_time", "macro_sql": "\n\n{%- macro snapshot_get_time() -%}\n {{ adapter.dispatch('snapshot_get_time', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.277945, "supported_languages": null}, "macro.dbt.default__snapshot_get_time": {"name": "default__snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__snapshot_get_time", "macro_sql": "{% macro default__snapshot_get_time() %}\n {{ current_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.277985, "supported_languages": null}, "macro.dbt.get_snapshot_get_time_data_type": {"name": "get_snapshot_get_time_data_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.get_snapshot_get_time_data_type", "macro_sql": "{% macro get_snapshot_get_time_data_type() %}\n {% set snapshot_time = adapter.dispatch('snapshot_get_time', 'dbt')() %}\n {% set time_data_type_sql = 'select ' ~ snapshot_time ~ ' as dbt_snapshot_time' %}\n {% set snapshot_time_column_schema = get_column_schema_from_query(time_data_type_sql) %}\n {% set time_data_type = snapshot_time_column_schema[0].dtype %}\n {{ return(time_data_type or none) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.snapshot_get_time", "macro.dbt_postgres.postgres__snapshot_get_time", "macro.dbt.get_column_schema_from_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2781398, "supported_languages": null}, "macro.dbt.current_timestamp_backcompat": {"name": "current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_backcompat", "macro_sql": "{% macro current_timestamp_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2782028, "supported_languages": null}, "macro.dbt.default__current_timestamp_backcompat": {"name": "default__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_backcompat", "macro_sql": "{% macro default__current_timestamp_backcompat() %}\n current_timestamp::timestamp\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2782369, "supported_languages": null}, "macro.dbt.current_timestamp_in_utc_backcompat": {"name": "current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_in_utc_backcompat", "macro_sql": "{% macro current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_in_utc_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.278307, "supported_languages": null}, "macro.dbt.default__current_timestamp_in_utc_backcompat": {"name": "default__current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_in_utc_backcompat", "macro_sql": "{% macro default__current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp_backcompat", "macro.dbt_postgres.postgres__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.278421, "supported_languages": null}, "macro.dbt.get_create_index_sql": {"name": "get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_create_index_sql", "macro_sql": "{% macro get_create_index_sql(relation, index_dict) -%}\n {{ return(adapter.dispatch('get_create_index_sql', 'dbt')(relation, index_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_dict", "type": null, "description": ""}], "created_at": 1784225035.27862, "supported_languages": null}, "macro.dbt.default__get_create_index_sql": {"name": "default__get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_create_index_sql", "macro_sql": "{% macro default__get_create_index_sql(relation, index_dict) -%}\n {% do return(None) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_dict", "type": null, "description": ""}], "created_at": 1784225035.2786748, "supported_languages": null}, "macro.dbt.create_indexes": {"name": "create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.create_indexes", "macro_sql": "{% macro create_indexes(relation) -%}\n {{ adapter.dispatch('create_indexes', 'dbt')(relation) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.278738, "supported_languages": null}, "macro.dbt.default__create_indexes": {"name": "default__create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__create_indexes", "macro_sql": "{% macro default__create_indexes(relation) -%}\n {%- set _indexes = config.get('indexes', default=[]) -%}\n\n {% for _index_dict in _indexes %}\n {% set create_index_sql = get_create_index_sql(relation, _index_dict) %}\n {% if create_index_sql %}\n {% do run_query(create_index_sql) %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_create_index_sql", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2788858, "supported_languages": null}, "macro.dbt.get_drop_index_sql": {"name": "get_drop_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_drop_index_sql", "macro_sql": "{% macro get_drop_index_sql(relation, index_name) -%}\n {{ adapter.dispatch('get_drop_index_sql', 'dbt')(relation, index_name) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_drop_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_name", "type": null, "description": ""}], "created_at": 1784225035.278961, "supported_languages": null}, "macro.dbt.default__get_drop_index_sql": {"name": "default__get_drop_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_drop_index_sql", "macro_sql": "{% macro default__get_drop_index_sql(relation, index_name) -%}\n {{ exceptions.raise_compiler_error(\"`get_drop_index_sql has not been implemented for this adapter.\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_name", "type": null, "description": ""}], "created_at": 1784225035.279016, "supported_languages": null}, "macro.dbt.get_show_indexes_sql": {"name": "get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_show_indexes_sql", "macro_sql": "{% macro get_show_indexes_sql(relation) -%}\n {{ adapter.dispatch('get_show_indexes_sql', 'dbt')(relation) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_show_indexes_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.279076, "supported_languages": null}, "macro.dbt.default__get_show_indexes_sql": {"name": "default__get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_show_indexes_sql", "macro_sql": "{% macro default__get_show_indexes_sql(relation) -%}\n {{ exceptions.raise_compiler_error(\"`get_show_indexes_sql has not been implemented for this adapter.\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2791219, "supported_languages": null}, "macro.dbt.make_intermediate_relation": {"name": "make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_intermediate_relation", "macro_sql": "{% macro make_intermediate_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_intermediate_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_intermediate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.279399, "supported_languages": null}, "macro.dbt.default__make_intermediate_relation": {"name": "default__make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_intermediate_relation", "macro_sql": "{% macro default__make_intermediate_relation(base_relation, suffix) %}\n {{ return(default__make_temp_relation(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.2794619, "supported_languages": null}, "macro.dbt.make_temp_relation": {"name": "make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_temp_relation", "macro_sql": "{% macro make_temp_relation(base_relation, suffix='__dbt_tmp') %}\n {#-- This ensures microbatch batches get unique temp relations to avoid clobbering --#}\n {% if suffix == '__dbt_tmp' and model.batch %}\n {% set suffix = suffix ~ '_' ~ model.batch.id %}\n {% endif %}\n\n {{ return(adapter.dispatch('make_temp_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.279677, "supported_languages": null}, "macro.dbt.default__make_temp_relation": {"name": "default__make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_temp_relation", "macro_sql": "{% macro default__make_temp_relation(base_relation, suffix) %}\n {%- set temp_identifier = base_relation.identifier ~ suffix -%}\n {%- set temp_relation = base_relation.incorporate(\n path={\"identifier\": temp_identifier}) -%}\n\n {{ return(temp_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.279831, "supported_languages": null}, "macro.dbt.make_backup_relation": {"name": "make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_backup_relation", "macro_sql": "{% macro make_backup_relation(base_relation, backup_relation_type, suffix='__dbt_backup') %}\n {{ return(adapter.dispatch('make_backup_relation', 'dbt')(base_relation, backup_relation_type, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_backup_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "backup_relation_type", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.2799392, "supported_languages": null}, "macro.dbt.default__make_backup_relation": {"name": "default__make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_backup_relation", "macro_sql": "{% macro default__make_backup_relation(base_relation, backup_relation_type, suffix) %}\n {%- set backup_identifier = base_relation.identifier ~ suffix -%}\n {%- set backup_relation = base_relation.incorporate(\n path={\"identifier\": backup_identifier},\n type=backup_relation_type\n ) -%}\n {{ return(backup_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "backup_relation_type", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.280067, "supported_languages": null}, "macro.dbt.truncate_relation": {"name": "truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.truncate_relation", "macro_sql": "{% macro truncate_relation(relation) -%}\n {{ return(adapter.dispatch('truncate_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__truncate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.280139, "supported_languages": null}, "macro.dbt.default__truncate_relation": {"name": "default__truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__truncate_relation", "macro_sql": "{% macro default__truncate_relation(relation) -%}\n {% call statement('truncate_relation') -%}\n truncate table {{ relation.render() }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.28021, "supported_languages": null}, "macro.dbt.get_or_create_relation": {"name": "get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.get_or_create_relation", "macro_sql": "{% macro get_or_create_relation(database, schema, identifier, type) -%}\n {{ return(adapter.dispatch('get_or_create_relation', 'dbt')(database, schema, identifier, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_or_create_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}, {"name": "schema", "type": null, "description": ""}, {"name": "identifier", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.2803042, "supported_languages": null}, "macro.dbt.default__get_or_create_relation": {"name": "default__get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__get_or_create_relation", "macro_sql": "{% macro default__get_or_create_relation(database, schema, identifier, type) %}\n {%- set target_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% if target_relation %}\n {% do return([true, target_relation]) %}\n {% endif %}\n\n {%- set new_relation = api.Relation.create(\n database=database,\n schema=schema,\n identifier=identifier,\n type=type\n ) -%}\n {% do return([false, new_relation]) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}, {"name": "schema", "type": null, "description": ""}, {"name": "identifier", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.280512, "supported_languages": null}, "macro.dbt.load_cached_relation": {"name": "load_cached_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_cached_relation", "macro_sql": "{% macro load_cached_relation(relation) %}\n {% do return(adapter.get_relation(\n database=relation.database,\n schema=relation.schema,\n identifier=relation.identifier\n )) -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2806022, "supported_languages": null}, "macro.dbt.load_relation": {"name": "load_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_relation", "macro_sql": "{% macro load_relation(relation) %}\n {{ return(load_cached_relation(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.280659, "supported_languages": null}, "macro.dbt.is_core_v2": {"name": "is_core_v2", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/runtime.sql", "original_file_path": "macros/adapters/runtime.sql", "unique_id": "macro.dbt.is_core_v2", "macro_sql": "{% macro is_core_v2() -%}\n {%- set major_version = (dbt_version.split('.') | first) | int -%}\n {{ return(major_version == 2) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.280787, "supported_languages": null}, "macro.dbt.collect_freshness": {"name": "collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness', 'dbt')(source, loaded_at_field, filter))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source", "type": null, "description": ""}, {"name": "loaded_at_field", "type": null, "description": ""}, {"name": "filter", "type": null, "description": ""}], "created_at": 1784225035.2810292, "supported_languages": null}, "macro.dbt.default__collect_freshness": {"name": "default__collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n select\n max({{ loaded_at_field }}) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endcall %}\n {{ return(load_result('collect_freshness')) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source", "type": null, "description": ""}, {"name": "loaded_at_field", "type": null, "description": ""}, {"name": "filter", "type": null, "description": ""}], "created_at": 1784225035.281193, "supported_languages": null}, "macro.dbt.collect_freshness_custom_sql": {"name": "collect_freshness_custom_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.collect_freshness_custom_sql", "macro_sql": "{% macro collect_freshness_custom_sql(source, loaded_at_query) %}\n {{ return(adapter.dispatch('collect_freshness_custom_sql', 'dbt')(source, loaded_at_query))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__collect_freshness_custom_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source", "type": null, "description": ""}, {"name": "loaded_at_query", "type": null, "description": ""}], "created_at": 1784225035.281279, "supported_languages": null}, "macro.dbt.default__collect_freshness_custom_sql": {"name": "default__collect_freshness_custom_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.default__collect_freshness_custom_sql", "macro_sql": "{% macro default__collect_freshness_custom_sql(source, loaded_at_query) %}\n {% call statement('collect_freshness_custom_sql', fetch_result=True, auto_begin=False) -%}\n with source_query as (\n {{ loaded_at_query }}\n )\n select\n (select * from source_query) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n {% endcall %}\n {{ return(load_result('collect_freshness_custom_sql')) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source", "type": null, "description": ""}, {"name": "loaded_at_query", "type": null, "description": ""}], "created_at": 1784225035.2814121, "supported_languages": null}, "macro.dbt.validate_sql": {"name": "validate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/validate_sql.sql", "original_file_path": "macros/adapters/validate_sql.sql", "unique_id": "macro.dbt.validate_sql", "macro_sql": "{% macro validate_sql(sql) -%}\n {{ return(adapter.dispatch('validate_sql', 'dbt')(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__validate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2815292, "supported_languages": null}, "macro.dbt.default__validate_sql": {"name": "default__validate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/validate_sql.sql", "original_file_path": "macros/adapters/validate_sql.sql", "unique_id": "macro.dbt.default__validate_sql", "macro_sql": "{% macro default__validate_sql(sql) -%}\n {% call statement('validate_sql') -%}\n explain {{ sql }}\n {% endcall %}\n {{ return(load_result('validate_sql')) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.281624, "supported_languages": null}, "macro.dbt.copy_grants": {"name": "copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.copy_grants", "macro_sql": "{% macro copy_grants() %}\n {{ return(adapter.dispatch('copy_grants', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2820969, "supported_languages": null}, "macro.dbt.default__copy_grants": {"name": "default__copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__copy_grants", "macro_sql": "{% macro default__copy_grants() %}\n {{ return(True) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.282142, "supported_languages": null}, "macro.dbt.support_multiple_grantees_per_dcl_statement": {"name": "support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.support_multiple_grantees_per_dcl_statement", "macro_sql": "{% macro support_multiple_grantees_per_dcl_statement() %}\n {{ return(adapter.dispatch('support_multiple_grantees_per_dcl_statement', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2822049, "supported_languages": null}, "macro.dbt.default__support_multiple_grantees_per_dcl_statement": {"name": "default__support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__support_multiple_grantees_per_dcl_statement", "macro_sql": "\n\n{%- macro default__support_multiple_grantees_per_dcl_statement() -%}\n {{ return(True) }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.282249, "supported_languages": null}, "macro.dbt.should_revoke": {"name": "should_revoke", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.should_revoke", "macro_sql": "{% macro should_revoke(existing_relation, full_refresh_mode=True) %}\n\n {% if not existing_relation %}\n {#-- The table doesn't already exist, so no grants to copy over --#}\n {{ return(False) }}\n {% elif full_refresh_mode %}\n {#-- The object is being REPLACED -- whether grants are copied over depends on the value of user config --#}\n {{ return(copy_grants()) }}\n {% else %}\n {#-- The table is being merged/upserted/inserted -- grants will be carried over --#}\n {{ return(True) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "full_refresh_mode", "type": null, "description": ""}], "created_at": 1784225035.282384, "supported_languages": null}, "macro.dbt.get_show_grant_sql": {"name": "get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_show_grant_sql", "macro_sql": "{% macro get_show_grant_sql(relation) %}\n {{ return(adapter.dispatch(\"get_show_grant_sql\", \"dbt\")(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_show_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.282457, "supported_languages": null}, "macro.dbt.default__get_show_grant_sql": {"name": "default__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_show_grant_sql", "macro_sql": "{% macro default__get_show_grant_sql(relation) %}\n show grants on {{ relation.render() }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.282503, "supported_languages": null}, "macro.dbt.get_grant_sql": {"name": "get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_grant_sql", "macro_sql": "{% macro get_grant_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_grant_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "privilege", "type": null, "description": ""}, {"name": "grantees", "type": null, "description": ""}], "created_at": 1784225035.2825952, "supported_languages": null}, "macro.dbt.default__get_grant_sql": {"name": "default__get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_grant_sql", "macro_sql": "\n\n{%- macro default__get_grant_sql(relation, privilege, grantees) -%}\n grant {{ privilege }} on {{ relation.render() }} to {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "privilege", "type": null, "description": ""}, {"name": "grantees", "type": null, "description": ""}], "created_at": 1784225035.282686, "supported_languages": null}, "macro.dbt.get_revoke_sql": {"name": "get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_revoke_sql", "macro_sql": "{% macro get_revoke_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_revoke_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_revoke_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "privilege", "type": null, "description": ""}, {"name": "grantees", "type": null, "description": ""}], "created_at": 1784225035.282781, "supported_languages": null}, "macro.dbt.default__get_revoke_sql": {"name": "default__get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_revoke_sql", "macro_sql": "\n\n{%- macro default__get_revoke_sql(relation, privilege, grantees) -%}\n {%- set quoted_grantees = [] -%}\n {%- for grantee in grantees -%}\n {%- do quoted_grantees.append(adapter.quote(grantee)) -%}\n {%- endfor -%}\n revoke {{ privilege }} on {{ relation.render() }} from {{ quoted_grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "privilege", "type": null, "description": ""}, {"name": "grantees", "type": null, "description": ""}], "created_at": 1784225035.282943, "supported_languages": null}, "macro.dbt.get_dcl_statement_list": {"name": "get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_dcl_statement_list", "macro_sql": "{% macro get_dcl_statement_list(relation, grant_config, get_dcl_macro) %}\n {{ return(adapter.dispatch('get_dcl_statement_list', 'dbt')(relation, grant_config, get_dcl_macro)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_dcl_statement_list"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "grant_config", "type": null, "description": ""}, {"name": "get_dcl_macro", "type": null, "description": ""}], "created_at": 1784225035.283037, "supported_languages": null}, "macro.dbt.default__get_dcl_statement_list": {"name": "default__get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_dcl_statement_list", "macro_sql": "\n\n{%- macro default__get_dcl_statement_list(relation, grant_config, get_dcl_macro) -%}\n {#\n -- Unpack grant_config into specific privileges and the set of users who need them granted/revoked.\n -- Depending on whether this database supports multiple grantees per statement, pass in the list of\n -- all grantees per privilege, or (if not) template one statement per privilege-grantee pair.\n -- `get_dcl_macro` will be either `get_grant_sql` or `get_revoke_sql`\n #}\n {%- set dcl_statements = [] -%}\n {%- for privilege, grantees in grant_config.items() %}\n {%- if support_multiple_grantees_per_dcl_statement() and grantees -%}\n {%- set dcl = get_dcl_macro(relation, privilege, grantees) -%}\n {%- do dcl_statements.append(dcl) -%}\n {%- else -%}\n {%- for grantee in grantees -%}\n {% set dcl = get_dcl_macro(relation, privilege, [grantee]) %}\n {%- do dcl_statements.append(dcl) -%}\n {% endfor -%}\n {%- endif -%}\n {%- endfor -%}\n {{ return(dcl_statements) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "grant_config", "type": null, "description": ""}, {"name": "get_dcl_macro", "type": null, "description": ""}], "created_at": 1784225035.2833128, "supported_languages": null}, "macro.dbt.call_dcl_statements": {"name": "call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.call_dcl_statements", "macro_sql": "{% macro call_dcl_statements(dcl_statement_list) %}\n {{ return(adapter.dispatch(\"call_dcl_statements\", \"dbt\")(dcl_statement_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "dcl_statement_list", "type": null, "description": ""}], "created_at": 1784225035.2833889, "supported_languages": null}, "macro.dbt.default__call_dcl_statements": {"name": "default__call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__call_dcl_statements", "macro_sql": "{% macro default__call_dcl_statements(dcl_statement_list) %}\n {#\n -- By default, supply all grant + revoke statements in a single semicolon-separated block,\n -- so that they're all processed together.\n\n -- Some databases do not support this. Those adapters will need to override this macro\n -- to run each statement individually.\n #}\n {% call statement('grants') %}\n {% for dcl_statement in dcl_statement_list %}\n {{ dcl_statement }};\n {% endfor %}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "dcl_statement_list", "type": null, "description": ""}], "created_at": 1784225035.28349, "supported_languages": null}, "macro.dbt.apply_grants": {"name": "apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.apply_grants", "macro_sql": "{% macro apply_grants(relation, grant_config, should_revoke) %}\n {{ return(adapter.dispatch(\"apply_grants\", \"dbt\")(relation, grant_config, should_revoke)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "grant_config", "type": null, "description": ""}, {"name": "should_revoke", "type": null, "description": ""}], "created_at": 1784225035.2836301, "supported_languages": null}, "macro.dbt.default__apply_grants": {"name": "default__apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__apply_grants", "macro_sql": "{% macro default__apply_grants(relation, grant_config, should_revoke=True) %}\n {#-- If grant_config is {} or None, this is a no-op --#}\n {% if grant_config %}\n {% if should_revoke %}\n {#-- We think previous grants may have carried over --#}\n {#-- Show current grants and calculate diffs --#}\n {% set current_grants_table = run_query(get_show_grant_sql(relation)) %}\n {% set current_grants_dict = adapter.standardize_grants_dict(current_grants_table) %}\n {% set needs_granting = diff_of_two_dicts(grant_config, current_grants_dict) %}\n {% set needs_revoking = diff_of_two_dicts(current_grants_dict, grant_config) %}\n {% if not (needs_granting or needs_revoking) %}\n {{ log('On ' ~ relation.render() ~': All grants are in place, no revocation or granting needed.')}}\n {% endif %}\n {% else %}\n {#-- We don't think there's any chance of previous grants having carried over. --#}\n {#-- Jump straight to granting what the user has configured. --#}\n {% set needs_revoking = {} %}\n {% set needs_granting = grant_config %}\n {% endif %}\n {% if needs_granting or needs_revoking %}\n {% set revoke_statement_list = get_dcl_statement_list(relation, needs_revoking, get_revoke_sql) %}\n {% set grant_statement_list = get_dcl_statement_list(relation, needs_granting, get_grant_sql) %}\n {% set dcl_statement_list = revoke_statement_list + grant_statement_list %}\n {% if dcl_statement_list %}\n {{ call_dcl_statements(dcl_statement_list) }}\n {% endif %}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.get_show_grant_sql", "macro.dbt.get_dcl_statement_list", "macro.dbt.call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "grant_config", "type": null, "description": ""}, {"name": "should_revoke", "type": null, "description": ""}], "created_at": 1784225035.284075, "supported_languages": null}, "macro.dbt.get_show_sql": {"name": "get_show_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.get_show_sql", "macro_sql": "{% macro get_show_sql(compiled_code, sql_header, limit) -%}\n {%- if sql_header is not none -%}\n {{ sql_header }}\n {%- endif %}\n {{ get_limit_subquery_sql(compiled_code, limit) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_limit_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "compiled_code", "type": null, "description": ""}, {"name": "sql_header", "type": null, "description": ""}, {"name": "limit", "type": null, "description": ""}], "created_at": 1784225035.284245, "supported_languages": null}, "macro.dbt.get_limit_subquery_sql": {"name": "get_limit_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.get_limit_subquery_sql", "macro_sql": "\n{%- macro get_limit_subquery_sql(sql, limit) -%}\n {{ adapter.dispatch('get_limit_sql', 'dbt')(sql, limit) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_limit_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}, {"name": "limit", "type": null, "description": ""}], "created_at": 1784225035.284317, "supported_languages": null}, "macro.dbt.default__get_limit_sql": {"name": "default__get_limit_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.default__get_limit_sql", "macro_sql": "{% macro default__get_limit_sql(sql, limit) %}\n {{ sql }}\n {% if limit is not none %}\n limit {{ limit }}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}, {"name": "limit", "type": null, "description": ""}], "created_at": 1784225035.2843919, "supported_languages": null}, "macro.dbt.alter_column_comment": {"name": "alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_column_comment", "macro_sql": "{% macro alter_column_comment(relation, column_dict) -%}\n {{ return(adapter.dispatch('alter_column_comment', 'dbt')(relation, column_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_dict", "type": null, "description": ""}], "created_at": 1784225035.284659, "supported_languages": null}, "macro.dbt.default__alter_column_comment": {"name": "default__alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_column_comment", "macro_sql": "{% macro default__alter_column_comment(relation, column_dict) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_column_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_dict", "type": null, "description": ""}], "created_at": 1784225035.284723, "supported_languages": null}, "macro.dbt.alter_relation_comment": {"name": "alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_relation_comment", "macro_sql": "{% macro alter_relation_comment(relation, relation_comment) -%}\n {{ return(adapter.dispatch('alter_relation_comment', 'dbt')(relation, relation_comment)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_relation_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "relation_comment", "type": null, "description": ""}], "created_at": 1784225035.2848, "supported_languages": null}, "macro.dbt.default__alter_relation_comment": {"name": "default__alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_relation_comment", "macro_sql": "{% macro default__alter_relation_comment(relation, relation_comment) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_relation_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "relation_comment", "type": null, "description": ""}], "created_at": 1784225035.284864, "supported_languages": null}, "macro.dbt.persist_docs": {"name": "persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.persist_docs", "macro_sql": "{% macro persist_docs(relation, model, for_relation=true, for_columns=true) -%}\n {{ return(adapter.dispatch('persist_docs', 'dbt')(relation, model, for_relation, for_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "model", "type": null, "description": ""}, {"name": "for_relation", "type": null, "description": ""}, {"name": "for_columns", "type": null, "description": ""}], "created_at": 1784225035.284965, "supported_languages": null}, "macro.dbt.validate_doc_columns": {"name": "validate_doc_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.validate_doc_columns", "macro_sql": "{% macro validate_doc_columns(relation, column_dict, existing_column_names) %}\n {% set existing_lower = existing_column_names | map(\"lower\") | list %}\n {% set missing = [] %}\n {% set filtered = {} %}\n {% for col_name in column_dict %}\n {% set is_quoted = column_dict[col_name]['quote'] %}\n {% if is_quoted %}\n {% set present = col_name in existing_column_names %}\n {% else %}\n {% set present = col_name | lower in existing_lower %}\n {% endif %}\n {% if present %}\n {% do filtered.update({col_name: column_dict[col_name]}) %}\n {% else %}\n {% do missing.append(col_name) %}\n {% endif %}\n {% endfor %}\n {% if missing | length > 0 %}\n {{ exceptions.warn(\"In relation \" ~ relation.render() ~ \": The following columns are specified in the schema but are not present in the database: \" ~ missing | join(\", \")) }}\n {% endif %}\n {{ return(filtered) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_dict", "type": null, "description": ""}, {"name": "existing_column_names", "type": null, "description": ""}], "created_at": 1784225035.285355, "supported_languages": null}, "macro.dbt.default__persist_docs": {"name": "default__persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__persist_docs", "macro_sql": "{% macro default__persist_docs(relation, model, for_relation, for_columns) -%}\n {% if for_relation and config.persist_relation_docs() and model.description %}\n {% do run_query(alter_relation_comment(relation, model.description)) %}\n {% endif %}\n\n {% if for_columns and config.persist_column_docs() and model.columns %}\n {% set existing_columns = adapter.get_columns_in_relation(relation) | map(attribute=\"name\") | list %}\n {% set filtered_columns = validate_doc_columns(relation, model.columns, existing_columns) %}\n {% set alter_comment_sql = alter_column_comment(relation, filtered_columns) %}\n {% if alter_comment_sql and alter_comment_sql | trim | length > 0 %}\n {% do run_query(alter_comment_sql) %}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.alter_relation_comment", "macro.dbt.validate_doc_columns", "macro.dbt.alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "model", "type": null, "description": ""}, {"name": "for_relation", "type": null, "description": ""}, {"name": "for_columns", "type": null, "description": ""}], "created_at": 1784225035.2856882, "supported_languages": null}, "macro.dbt.get_catalog_relations": {"name": "get_catalog_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog_relations", "macro_sql": "{% macro get_catalog_relations(information_schema, relations) -%}\n {{ return(adapter.dispatch('get_catalog_relations', 'dbt')(information_schema, relations)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "relations", "type": null, "description": ""}], "created_at": 1784225035.286056, "supported_languages": null}, "macro.dbt.default__get_catalog_relations": {"name": "default__get_catalog_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog_relations", "macro_sql": "{% macro default__get_catalog_relations(information_schema, relations) -%}\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog_relations not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "relations", "type": null, "description": ""}], "created_at": 1784225035.286159, "supported_languages": null}, "macro.dbt.get_catalog": {"name": "get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog", "macro_sql": "{% macro get_catalog(information_schema, schemas) -%}\n {{ return(adapter.dispatch('get_catalog', 'dbt')(information_schema, schemas)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schemas", "type": null, "description": ""}], "created_at": 1784225035.2862358, "supported_languages": null}, "macro.dbt.default__get_catalog": {"name": "default__get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog", "macro_sql": "{% macro default__get_catalog(information_schema, schemas) -%}\n\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schemas", "type": null, "description": ""}], "created_at": 1784225035.2863371, "supported_languages": null}, "macro.dbt.information_schema_name": {"name": "information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.information_schema_name", "macro_sql": "{% macro information_schema_name(database) %}\n {{ return(adapter.dispatch('information_schema_name', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__information_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.2864058, "supported_languages": null}, "macro.dbt.default__information_schema_name": {"name": "default__information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__information_schema_name", "macro_sql": "{% macro default__information_schema_name(database) -%}\n {%- if database -%}\n {{ database }}.INFORMATION_SCHEMA\n {%- else -%}\n INFORMATION_SCHEMA\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.28647, "supported_languages": null}, "macro.dbt.list_schemas": {"name": "list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_schemas", "macro_sql": "{% macro list_schemas(database) -%}\n {{ return(adapter.dispatch('list_schemas', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.286538, "supported_languages": null}, "macro.dbt.default__list_schemas": {"name": "default__list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_schemas", "macro_sql": "{% macro default__list_schemas(database) -%}\n {% set sql %}\n select distinct schema_name\n from {{ information_schema_name(database) }}.SCHEMATA\n where catalog_name ilike '{{ database }}'\n {% endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.information_schema_name", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.286628, "supported_languages": null}, "macro.dbt.check_schema_exists": {"name": "check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.check_schema_exists", "macro_sql": "{% macro check_schema_exists(information_schema, schema) -%}\n {{ return(adapter.dispatch('check_schema_exists', 'dbt')(information_schema, schema)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__check_schema_exists"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schema", "type": null, "description": ""}], "created_at": 1784225035.286707, "supported_languages": null}, "macro.dbt.default__check_schema_exists": {"name": "default__check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__check_schema_exists", "macro_sql": "{% macro default__check_schema_exists(information_schema, schema) -%}\n {% set sql -%}\n select count(*)\n from {{ information_schema.replace(information_schema_view='SCHEMATA') }}\n where catalog_name='{{ information_schema.database }}'\n and schema_name='{{ schema }}'\n {%- endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.replace", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schema", "type": null, "description": ""}], "created_at": 1784225035.28688, "supported_languages": null}, "macro.dbt.list_relations_without_caching": {"name": "list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_relations_without_caching", "macro_sql": "{% macro list_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_relations_without_caching"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_relation", "type": null, "description": ""}], "created_at": 1784225035.286956, "supported_languages": null}, "macro.dbt.default__list_relations_without_caching": {"name": "default__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_relations_without_caching", "macro_sql": "{% macro default__list_relations_without_caching(schema_relation) %}\n {{ exceptions.raise_not_implemented(\n 'list_relations_without_caching macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_relation", "type": null, "description": ""}], "created_at": 1784225035.287022, "supported_languages": null}, "macro.dbt.list_function_relations_without_caching": {"name": "list_function_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_function_relations_without_caching", "macro_sql": "{% macro list_function_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_function_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__list_function_relations_without_caching"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_relation", "type": null, "description": ""}], "created_at": 1784225035.2870898, "supported_languages": null}, "macro.dbt.default__list_function_relations_without_caching": {"name": "default__list_function_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_function_relations_without_caching", "macro_sql": "{% macro default__list_function_relations_without_caching(schema_relation) %}\n {{ exceptions.raise_not_implemented(\n 'list_function_relations_without_caching macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_relation", "type": null, "description": ""}], "created_at": 1784225035.287151, "supported_languages": null}, "macro.dbt.get_catalog_for_single_relation": {"name": "get_catalog_for_single_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog_for_single_relation", "macro_sql": "{% macro get_catalog_for_single_relation(relation) %}\n {{ return(adapter.dispatch('get_catalog_for_single_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_catalog_for_single_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.287221, "supported_languages": null}, "macro.dbt.default__get_catalog_for_single_relation": {"name": "default__get_catalog_for_single_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog_for_single_relation", "macro_sql": "{% macro default__get_catalog_for_single_relation(relation) %}\n {{ exceptions.raise_not_implemented(\n 'get_catalog_for_single_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2872808, "supported_languages": null}, "macro.dbt.get_relations": {"name": "get_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_relations", "macro_sql": "{% macro get_relations() %}\n {{ return(adapter.dispatch('get_relations', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.287342, "supported_languages": null}, "macro.dbt.default__get_relations": {"name": "default__get_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_relations", "macro_sql": "{% macro default__get_relations() %}\n {{ exceptions.raise_not_implemented(\n 'get_relations macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2873979, "supported_languages": null}, "macro.dbt.get_relation_last_modified": {"name": "get_relation_last_modified", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_relation_last_modified", "macro_sql": "{% macro get_relation_last_modified(information_schema, relations) %}\n {{ return(adapter.dispatch('get_relation_last_modified', 'dbt')(information_schema, relations)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_relation_last_modified"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "relations", "type": null, "description": ""}], "created_at": 1784225035.287474, "supported_languages": null}, "macro.dbt.default__get_relation_last_modified": {"name": "default__get_relation_last_modified", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_relation_last_modified", "macro_sql": "{% macro default__get_relation_last_modified(information_schema, relations) %}\n {{ exceptions.raise_not_implemented(\n 'get_relation_last_modified macro not implemented for adapter ' + adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "relations", "type": null, "description": ""}], "created_at": 1784225035.287539, "supported_languages": null}, "macro.dbt.get_columns_in_relation": {"name": "get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_relation", "macro_sql": "{% macro get_columns_in_relation(relation) -%}\n {{ return(adapter.dispatch('get_columns_in_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2880151, "supported_languages": null}, "macro.dbt.default__get_columns_in_relation": {"name": "default__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_relation", "macro_sql": "{% macro default__get_columns_in_relation(relation) -%}\n {{ exceptions.raise_not_implemented(\n 'get_columns_in_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.288077, "supported_languages": null}, "macro.dbt.sql_convert_columns_in_relation": {"name": "sql_convert_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.sql_convert_columns_in_relation", "macro_sql": "{% macro sql_convert_columns_in_relation(table) -%}\n {% set columns = [] %}\n {% for row in table %}\n {% do columns.append(api.Column(*row)) %}\n {% endfor %}\n {{ return(columns) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "table", "type": null, "description": ""}], "created_at": 1784225035.288196, "supported_languages": null}, "macro.dbt.get_list_of_column_names": {"name": "get_list_of_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_list_of_column_names", "macro_sql": "\n\n{%- macro get_list_of_column_names(columns) -%}\n {% set col_names = [] %}\n {% for col in columns %}\n {% do col_names.append(col.name) %}\n {% endfor %}\n {{ return(col_names) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.2883031, "supported_languages": null}, "macro.dbt.get_empty_subquery_sql": {"name": "get_empty_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_empty_subquery_sql", "macro_sql": "{% macro get_empty_subquery_sql(select_sql, select_sql_header=none) -%}\n {{ return(adapter.dispatch('get_empty_subquery_sql', 'dbt')(select_sql, select_sql_header)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "select_sql", "type": null, "description": ""}, {"name": "select_sql_header", "type": null, "description": ""}], "created_at": 1784225035.288387, "supported_languages": null}, "macro.dbt.default__get_empty_subquery_sql": {"name": "default__get_empty_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_empty_subquery_sql", "macro_sql": "{% macro default__get_empty_subquery_sql(select_sql, select_sql_header=none) %}\n {%- if select_sql_header is not none -%}\n {{ select_sql_header }}\n {%- endif -%}\n select * from (\n {{ select_sql }}\n ) as __dbt_sbq\n where false\n limit 0\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "select_sql", "type": null, "description": ""}, {"name": "select_sql_header", "type": null, "description": ""}], "created_at": 1784225035.288468, "supported_languages": null}, "macro.dbt.get_empty_schema_sql": {"name": "get_empty_schema_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_empty_schema_sql", "macro_sql": "{% macro get_empty_schema_sql(columns) -%}\n {{ return(adapter.dispatch('get_empty_schema_sql', 'dbt')(columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_empty_schema_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.2885382, "supported_languages": null}, "macro.dbt.default__get_empty_schema_sql": {"name": "default__get_empty_schema_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_empty_schema_sql", "macro_sql": "{% macro default__get_empty_schema_sql(columns) %}\n {%- set col_err = [] -%}\n {%- set col_naked_numeric = [] -%}\n select\n {% for i in columns %}\n {%- set col = columns[i] -%}\n {%- if col['data_type'] is not defined -%}\n {%- do col_err.append(col['name']) -%}\n {#-- If this column's type is just 'numeric' then it is missing precision/scale, raise a warning --#}\n {%- elif col['data_type'].strip().lower() in ('numeric', 'decimal', 'number') -%}\n {%- do col_naked_numeric.append(col['name']) -%}\n {%- endif -%}\n {% set col_name = adapter.quote(col['name']) if col.get('quote') else col['name'] %}\n {{ cast('null', col['data_type']) }} as {{ col_name }}{{ \", \" if not loop.last }}\n {%- endfor -%}\n {%- if (col_err | length) > 0 -%}\n {{ exceptions.column_type_missing(column_names=col_err) }}\n {%- elif (col_naked_numeric | length) > 0 -%}\n {{ exceptions.warn(\"Detected columns with numeric type and unspecified precision/scale, this can lead to unintended rounding: \" ~ col_naked_numeric ~ \"`\") }}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.2889779, "supported_languages": null}, "macro.dbt.get_column_schema_from_query": {"name": "get_column_schema_from_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_column_schema_from_query", "macro_sql": "{% macro get_column_schema_from_query(select_sql, select_sql_header=none) -%}\n {% set columns = [] %}\n {# -- Using an 'empty subquery' here to get the same schema as the given select_sql statement, without necessitating a data scan.#}\n {% set sql = get_empty_subquery_sql(select_sql, select_sql_header) %}\n {% set column_schema = adapter.get_column_schema_from_query(sql) %}\n {{ return(column_schema) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "select_sql", "type": null, "description": ""}, {"name": "select_sql_header", "type": null, "description": ""}], "created_at": 1784225035.2891579, "supported_languages": null}, "macro.dbt.get_columns_in_query": {"name": "get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_query", "macro_sql": "{% macro get_columns_in_query(select_sql) -%}\n {{ return(adapter.dispatch('get_columns_in_query', 'dbt')(select_sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "select_sql", "type": null, "description": ""}], "created_at": 1784225035.2892318, "supported_languages": null}, "macro.dbt.default__get_columns_in_query": {"name": "default__get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_query", "macro_sql": "{% macro default__get_columns_in_query(select_sql) %}\n {% call statement('get_columns_in_query', fetch_result=True, auto_begin=False) -%}\n {{ get_empty_subquery_sql(select_sql) }}\n {% endcall %}\n {{ return(load_result('get_columns_in_query').table.columns | map(attribute='name') | list) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "select_sql", "type": null, "description": ""}], "created_at": 1784225035.289361, "supported_languages": null}, "macro.dbt.alter_column_type": {"name": "alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_column_type", "macro_sql": "{% macro alter_column_type(relation, column_name, new_column_type) -%}\n {{ return(adapter.dispatch('alter_column_type', 'dbt')(relation, column_name, new_column_type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}, {"name": "new_column_type", "type": null, "description": ""}], "created_at": 1784225035.289449, "supported_languages": null}, "macro.dbt.default__alter_column_type": {"name": "default__alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_column_type", "macro_sql": "{% macro default__alter_column_type(relation, column_name, new_column_type) -%}\n {#\n 1. Create a new column (w/ temp name and correct type)\n 2. Copy data over to it\n 3. Drop the existing column (cascade!)\n 4. Rename the new column to existing column\n #}\n {%- set tmp_column = column_name + \"__dbt_alter\" -%}\n\n {% call statement('alter_column_type') %}\n alter table {{ relation.render() }} add column {{ adapter.quote(tmp_column) }} {{ new_column_type }};\n update {{ relation.render() }} set {{ adapter.quote(tmp_column) }} = {{ adapter.quote(column_name) }};\n alter table {{ relation.render() }} drop column {{ adapter.quote(column_name) }} cascade;\n alter table {{ relation.render() }} rename column {{ adapter.quote(tmp_column) }} to {{ adapter.quote(column_name) }}\n {% endcall %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}, {"name": "new_column_type", "type": null, "description": ""}], "created_at": 1784225035.289737, "supported_languages": null}, "macro.dbt.alter_relation_add_remove_columns": {"name": "alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_relation_add_remove_columns", "macro_sql": "{% macro alter_relation_add_remove_columns(relation, add_columns = none, remove_columns = none) -%}\n {{ return(adapter.dispatch('alter_relation_add_remove_columns', 'dbt')(relation, add_columns, remove_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_relation_add_remove_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "add_columns", "type": null, "description": ""}, {"name": "remove_columns", "type": null, "description": ""}], "created_at": 1784225035.2898428, "supported_languages": null}, "macro.dbt.default__alter_relation_add_remove_columns": {"name": "default__alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_relation_add_remove_columns", "macro_sql": "{% macro default__alter_relation_add_remove_columns(relation, add_columns, remove_columns) %}\n\n {% if add_columns is none %}\n {% set add_columns = [] %}\n {% endif %}\n {% if remove_columns is none %}\n {% set remove_columns = [] %}\n {% endif %}\n\n {% set sql -%}\n\n alter {{ relation.type }} {{ relation.render() }}\n\n {% for column in add_columns %}\n add column {{ column.quoted }} {{ column.expanded_data_type }}{{ ',' if not loop.last }}\n {% endfor %}{{ ',' if add_columns and remove_columns }}\n\n {% for column in remove_columns %}\n drop column {{ column.quoted }}{{ ',' if not loop.last }}\n {% endfor %}\n\n {%- endset -%}\n\n {% do run_query(sql) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "add_columns", "type": null, "description": ""}, {"name": "remove_columns", "type": null, "description": ""}], "created_at": 1784225035.2901492, "supported_languages": null}, "macro.dbt.get_fixture_sql": {"name": "get_fixture_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.get_fixture_sql", "macro_sql": "{% macro get_fixture_sql(rows, column_name_to_data_types) %}\n-- Fixture for {{ model.name }}\n{% set default_row = {} %}\n\n{%- if not column_name_to_data_types -%}\n{#-- Use defer_relation IFF it is available in the manifest and 'this' is missing from the database --#}\n{%- set this_or_defer_relation = defer_relation if (defer_relation and not load_relation(this)) else this -%}\n{%- set columns_in_relation = adapter.get_columns_in_relation(this_or_defer_relation) -%}\n\n{%- set column_name_to_data_types = {} -%}\n{%- set column_name_to_quoted = {} -%}\n{%- for column in columns_in_relation -%}\n\n{#-- This needs to be a case-insensitive comparison --#}\n{%- do column_name_to_data_types.update({column.name|lower: column.data_type}) -%}\n{%- do column_name_to_quoted.update({column.name|lower: column.quoted}) -%}\n{%- endfor -%}\n{%- endif -%}\n\n{%- if not column_name_to_data_types -%}\n {{ exceptions.raise_compiler_error(\"Not able to get columns for unit test '\" ~ model.name ~ \"' from relation \" ~ this ~ \" because the relation doesn't exist\") }}\n{%- endif -%}\n\n{%- for column_name, column_type in column_name_to_data_types.items() -%}\n {%- do default_row.update({column_name: (safe_cast(\"null\", column_type) | trim )}) -%}\n{%- endfor -%}\n\n{{ validate_fixture_rows(rows, row_number) }}\n\n{%- for row in rows -%}\n{%- set formatted_row = format_row(row, column_name_to_data_types) -%}\n{%- set default_row_copy = default_row.copy() -%}\n{%- do default_row_copy.update(formatted_row) -%}\nselect\n{%- for column_name, column_value in default_row_copy.items() %} {{ column_value }} as {{ column_name_to_quoted[column_name] }}{% if not loop.last -%}, {%- endif %}\n{%- endfor %}\n{%- if not loop.last %}\nunion all\n{% endif %}\n{%- endfor -%}\n\n{%- if (rows | length) == 0 -%}\n select\n {%- for column_name, column_value in default_row.items() %} {{ column_value }} as {{ column_name_to_quoted[column_name] }}{% if not loop.last -%},{%- endif %}\n {%- endfor %}\n limit 0\n{%- endif -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_relation", "macro.dbt.safe_cast", "macro.dbt.validate_fixture_rows", "macro.dbt.format_row"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "rows", "type": null, "description": ""}, {"name": "column_name_to_data_types", "type": null, "description": ""}], "created_at": 1784225035.2912042, "supported_languages": null}, "macro.dbt.get_expected_sql": {"name": "get_expected_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.get_expected_sql", "macro_sql": "{% macro get_expected_sql(rows, column_name_to_data_types, column_name_to_quoted) %}\n\n{%- if (rows | length) == 0 -%}\n select * from dbt_internal_unit_test_actual\n limit 0\n{%- else -%}\n{%- for row in rows -%}\n{%- set formatted_row = format_row(row, column_name_to_data_types) -%}\nselect\n{%- for column_name, column_value in formatted_row.items() %} {{ column_value }} as {{ column_name_to_quoted[column_name] }}{% if not loop.last -%}, {%- endif %}\n{%- endfor %}\n{%- if not loop.last %}\nunion all\n{% endif %}\n{%- endfor -%}\n{%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.format_row"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "rows", "type": null, "description": ""}, {"name": "column_name_to_data_types", "type": null, "description": ""}, {"name": "column_name_to_quoted", "type": null, "description": ""}], "created_at": 1784225035.291439, "supported_languages": null}, "macro.dbt.format_row": {"name": "format_row", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.format_row", "macro_sql": "\n\n{%- macro format_row(row, column_name_to_data_types) -%}\n {#-- generate case-insensitive formatted row --#}\n {% set formatted_row = {} %}\n {%- for column_name, column_value in row.items() -%}\n {% set column_name = column_name|lower %}\n\n {%- if column_name not in column_name_to_data_types %}\n {#-- if user-provided row contains column name that relation does not contain, raise an error --#}\n {% set fixture_name = \"expected output\" if model.resource_type == 'unit_test' else (\"'\" ~ model.name ~ \"'\") %}\n {{ exceptions.raise_compiler_error(\n \"Invalid column name: '\" ~ column_name ~ \"' in unit test fixture for \" ~ fixture_name ~ \".\"\n \"\\nAccepted columns for \" ~ fixture_name ~ \" are: \" ~ (column_name_to_data_types.keys()|list)\n ) }}\n {%- endif -%}\n\n {%- set column_type = column_name_to_data_types[column_name] %}\n\n {#-- For string fixture values, strip varchar length to prevent silent truncation (GH-11974) --#}\n {%- if column_value is string and 'varying' in column_type -%}\n {%- set column_type = column_type.split('(')[0] -%}\n {%- endif -%}\n\n {#-- sanitize column_value: wrap yaml strings in quotes, apply cast --#}\n {%- set column_value_clean = column_value -%}\n {%- if column_value is string -%}\n {%- set column_value_clean = dbt.string_literal(dbt.escape_single_quotes(column_value)) -%}\n {%- elif column_value is none -%}\n {%- set column_value_clean = 'null' -%}\n {%- endif -%}\n\n {%- set row_update = {column_name: safe_cast(column_value_clean, column_type) } -%}\n {%- do formatted_row.update(row_update) -%}\n {%- endfor -%}\n {{ return(formatted_row) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.string_literal", "macro.dbt.escape_single_quotes", "macro.dbt.safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "row", "type": null, "description": ""}, {"name": "column_name_to_data_types", "type": null, "description": ""}], "created_at": 1784225035.2919302, "supported_languages": null}, "macro.dbt.validate_fixture_rows": {"name": "validate_fixture_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.validate_fixture_rows", "macro_sql": "{%- macro validate_fixture_rows(rows, row_number) -%}\n {{ return(adapter.dispatch('validate_fixture_rows', 'dbt')(rows, row_number)) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__validate_fixture_rows"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "rows", "type": null, "description": ""}, {"name": "row_number", "type": null, "description": ""}], "created_at": 1784225035.292015, "supported_languages": null}, "macro.dbt.default__validate_fixture_rows": {"name": "default__validate_fixture_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.default__validate_fixture_rows", "macro_sql": "{%- macro default__validate_fixture_rows(rows, row_number) -%}\n {# This is an abstract method for adapter overrides as needed #}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "rows", "type": null, "description": ""}, {"name": "row_number", "type": null, "description": ""}], "created_at": 1784225035.292057, "supported_languages": null}, "macro.dbt.resolve_model_name": {"name": "resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.resolve_model_name", "macro_sql": "{% macro resolve_model_name(input_model_name) %}\n {{ return(adapter.dispatch('resolve_model_name', 'dbt')(input_model_name)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "input_model_name", "type": null, "description": ""}], "created_at": 1784225035.292395, "supported_languages": null}, "macro.dbt.default__resolve_model_name": {"name": "default__resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.default__resolve_model_name", "macro_sql": "\n\n{%- macro default__resolve_model_name(input_model_name) -%}\n {{ input_model_name | string | replace('\"', '\\\"') }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "input_model_name", "type": null, "description": ""}], "created_at": 1784225035.292458, "supported_languages": null}, "macro.dbt.build_ref_function": {"name": "build_ref_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_ref_function", "macro_sql": "{% macro build_ref_function(model) %}\n\n {%- set ref_dict = {} -%}\n {%- for _ref in model.refs -%}\n {% set _ref_args = [_ref.get('package'), _ref['name']] if _ref.get('package') else [_ref['name'],] %}\n {%- set resolved = ref(*_ref_args, v=_ref.get('version')) -%}\n\n {#\n We want to get the string of the returned relation by calling .render() in order to skip sample/empty\n mode rendering logic. However, people override the default ref macro, and often return a string instead\n of a relation (like the ref macro does by default). Thus, to make sure we dont blow things up, we have\n to ensure the resolved relation has a .render() method.\n #}\n {%- if resolved.render is defined and resolved.render is callable -%}\n {%- set resolved = resolved.render() -%}\n {%- endif -%}\n\n {%- if _ref.get('version') -%}\n {% do _ref_args.extend([\"v\" ~ _ref['version']]) %}\n {%- endif -%}\n {%- do ref_dict.update({_ref_args | join('.'): resolve_model_name(resolved)}) -%}\n {%- endfor -%}\n\ndef ref(*args, **kwargs):\n refs = {{ ref_dict | tojson }}\n key = '.'.join(args)\n version = kwargs.get(\"v\") or kwargs.get(\"version\")\n if version:\n key += f\".v{version}\"\n dbt_load_df_function = kwargs.get(\"dbt_load_df_function\")\n return dbt_load_df_function(refs[key])\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}], "created_at": 1784225035.2928388, "supported_languages": null}, "macro.dbt.build_source_function": {"name": "build_source_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_source_function", "macro_sql": "{% macro build_source_function(model) %}\n\n {%- set source_dict = {} -%}\n {%- for _source in model.sources -%}\n {%- set resolved = source(*_source) -%}\n {%- do source_dict.update({_source | join('.'): resolve_model_name(resolved)}) -%}\n {%- endfor -%}\n\ndef source(*args, dbt_load_df_function):\n sources = {{ source_dict | tojson }}\n key = '.'.join(args)\n return dbt_load_df_function(sources[key])\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}], "created_at": 1784225035.2929978, "supported_languages": null}, "macro.dbt.build_config_dict": {"name": "build_config_dict", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_config_dict", "macro_sql": "{% macro build_config_dict(model) %}\n {%- set config_dict = {} -%}\n {% set config_dbt_used = zip(model.config.config_keys_used, model.config.config_keys_defaults) | list %}\n {%- for key, default in config_dbt_used -%}\n {# weird type testing with enum, would be much easier to write this logic in Python! #}\n {%- if key == \"language\" -%}\n {%- set value = \"python\" -%}\n {%- endif -%}\n {%- set value = model.config.get(key, default) -%}\n {%- do config_dict.update({key: value}) -%}\n {%- endfor -%}\n {# Handle dbt.config.meta_get() calls - use separate dict to avoid overwriting native configs #}\n {%- set meta_dict = {} -%}\n {%- if model.config.meta_keys_used -%}\n {% set meta_dbt_used = zip(model.config.meta_keys_used, model.config.meta_keys_defaults) | list %}\n {%- for key, default in meta_dbt_used -%}\n {%- if model.config.meta and key in model.config.meta -%}\n {%- set value = model.config.meta[key] -%}\n {%- else -%}\n {%- set value = default -%}\n {%- endif -%}\n {%- do meta_dict.update({key: value}) -%}\n {%- endfor -%}\n {%- endif -%}\nconfig_dict = {{ config_dict }}\nmeta_dict = {{ meta_dict }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}], "created_at": 1784225035.293438, "supported_languages": null}, "macro.dbt.py_script_postfix": {"name": "py_script_postfix", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_postfix", "macro_sql": "{% macro py_script_postfix(model) %}\n# This part is user provided model code\n# you will need to copy the next section to run the code\n# COMMAND ----------\n# this part is dbt logic for get ref work, do not modify\n\n{{ build_ref_function(model ) }}\n{{ build_source_function(model ) }}\n{{ build_config_dict(model) }}\n\nclass config:\n def __init__(self, *args, **kwargs):\n pass\n\n @staticmethod\n def get(key, default=None):\n return config_dict.get(key, default)\n\n @staticmethod\n def meta_get(key, default=None):\n return meta_dict.get(key, default)\n\nclass this:\n \"\"\"dbt.this() or dbt.this.identifier\"\"\"\n database = \"{{ this.database }}\"\n schema = \"{{ this.schema }}\"\n identifier = \"{{ this.identifier }}\"\n {% set this_relation_name = resolve_model_name(this) %}\n def __repr__(self):\n return '{{ this_relation_name }}'\n\n\nclass dbtObj:\n def __init__(self, load_df_function) -> None:\n self.source = lambda *args: source(*args, dbt_load_df_function=load_df_function)\n self.ref = lambda *args, **kwargs: ref(*args, **kwargs, dbt_load_df_function=load_df_function)\n self.config = config\n self.this = this()\n self.is_incremental = {{ is_incremental() }}\n\n# COMMAND ----------\n{{py_script_comment()}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.build_ref_function", "macro.dbt.build_source_function", "macro.dbt.build_config_dict", "macro.dbt.resolve_model_name", "macro.dbt.is_incremental", "macro.dbt.py_script_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}], "created_at": 1784225035.293633, "supported_languages": null}, "macro.dbt.py_script_comment": {"name": "py_script_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_comment", "macro_sql": "{%macro py_script_comment()%}\n{%endmacro%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2936661, "supported_languages": null}, "macro.dbt.test_unique": {"name": "test_unique", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_unique", "macro_sql": "{% test unique(model, column_name) %}\n {% set macro = adapter.dispatch('test_unique', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_unique"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2938628, "supported_languages": null}, "macro.dbt.test_not_null": {"name": "test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_not_null", "macro_sql": "{% test not_null(model, column_name) %}\n {% set macro = adapter.dispatch('test_not_null', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.293963, "supported_languages": null}, "macro.dbt.test_accepted_values": {"name": "test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_accepted_values", "macro_sql": "{% test accepted_values(model, column_name, values, quote=True) %}\n {% set macro = adapter.dispatch('test_accepted_values', 'dbt') %}\n {{ macro(model, column_name, values, quote) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.29408, "supported_languages": null}, "macro.dbt.test_relationships": {"name": "test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_relationships", "macro_sql": "{% test relationships(model, column_name, to, field) %}\n {% set macro = adapter.dispatch('test_relationships', 'dbt') %}\n {{ macro(model, column_name, to, field) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_relationships"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2943518, "supported_languages": null}}, "docs": {"doc.dbt.__overview__": {"name": "__overview__", "resource_type": "doc", "package_name": "dbt", "path": "overview.md", "original_file_path": "docs/overview.md", "unique_id": "doc.dbt.__overview__", "block_contents": "### Welcome!\n\nWelcome to the auto-generated documentation for your dbt project!\n\n### Navigation\n\nYou can use the `Project` and `Database` navigation tabs on the left side of the window to explore the models\nin your project.\n\n#### Project Tab\nThe `Project` tab mirrors the directory structure of your dbt project. In this tab, you can see all of the\nmodels defined in your dbt project, as well as models imported from dbt packages.\n\n#### Database Tab\nThe `Database` tab also exposes your models, but in a format that looks more like a database explorer. This view\nshows relations (tables and views) grouped into database schemas. Note that ephemeral models are _not_ shown\nin this interface, as they do not exist in the database.\n\n### Graph Exploration\nYou can click the blue icon on the bottom-right corner of the page to view the lineage graph of your models.\n\nOn model pages, you'll see the immediate parents and children of the model you're exploring. By clicking the `Expand`\nbutton at the top-right of this lineage pane, you'll be able to see all of the models that are used to build,\nor are built from, the model you're exploring.\n\nOnce expanded, you'll be able to use the `--select` and `--exclude` model selection syntax to filter the\nmodels in the graph. For more information on model selection, check out the [dbt docs](https://docs.getdbt.com/docs/model-selection-syntax).\n\nNote that you can also right-click on models to interactively filter and explore the graph.\n\n---\n\n### More information\n\n- [What is dbt](https://docs.getdbt.com/docs/introduction)?\n- Read the [dbt viewpoint](https://docs.getdbt.com/docs/viewpoint)\n- [Installation](https://docs.getdbt.com/docs/installation)\n- Join the [dbt Community](https://www.getdbt.com/community/) for questions and discussion"}}, "exposures": {}, "metrics": {}, "groups": {}, "selectors": {}, "disabled": {}, "parent_map": {"seed.school_compare.la_code_names": [], "seed.school_compare.gias_code_names": [], "seed.school_compare.school_type_codes": [], "model.school_compare.stg_ees_ks4_national": ["source.school_compare.raw.ees_ks4_national"], "model.school_compare.dim_location": ["model.school_compare.stg_gias_establishments"], "model.school_compare.dim_school": ["model.school_compare.int_ofsted_latest", "model.school_compare.stg_gias_establishments"], "model.school_compare.stg_gias_establishments": ["source.school_compare.raw.gias_establishments"], "model.school_compare.fact_performance": ["model.school_compare.fact_ks2_performance", "model.school_compare.fact_ks4_performance"], "model.school_compare.fact_ks2_performance": ["model.school_compare.int_ks2_with_lineage"], "model.school_compare.int_ks2_with_lineage": ["model.school_compare.int_school_lineage", "model.school_compare.stg_ees_ks2", "model.school_compare.stg_legacy_ks2"], "model.school_compare.fact_ks4_national_averages": ["model.school_compare.stg_ees_ks4_national"], "model.school_compare.fact_ks4_performance": ["model.school_compare.int_ks4_with_lineage"], "model.school_compare.int_ks4_with_lineage": ["model.school_compare.int_school_lineage", "model.school_compare.stg_ees_ks4", "model.school_compare.stg_legacy_ks4"], "model.school_compare.map_school_lineage": ["model.school_compare.int_school_lineage"], "model.school_compare.int_school_lineage": ["model.school_compare.stg_gias_links"], "model.school_compare.stg_gias_links": ["source.school_compare.raw.gias_links"], "model.school_compare.fact_ofsted_inspection": ["model.school_compare.stg_ofsted_inspections"], "model.school_compare.int_ofsted_latest": ["model.school_compare.stg_ofsted_inspections"], "model.school_compare.stg_ofsted_inspections": ["source.school_compare.raw.ofsted_inspections"], "model.school_compare.stg_ees_ks2": ["source.school_compare.raw.ees_ks2_attainment", "source.school_compare.raw.ees_ks2_info"], "model.school_compare.stg_legacy_ks2": ["source.school_compare.raw.legacy_ks2"], "model.school_compare.stg_ees_ks4": ["source.school_compare.raw.ees_ks4_info", "source.school_compare.raw.ees_ks4_performance"], "model.school_compare.stg_legacy_ks4": ["source.school_compare.raw.legacy_ks4"], "model.school_compare.fact_census_benchmarks": ["model.school_compare.fact_pupil_characteristics"], "model.school_compare.fact_pupil_characteristics": ["model.school_compare.int_pupil_chars_merged"], "model.school_compare.int_pupil_chars_merged": ["model.school_compare.stg_ees_census"], "model.school_compare.stg_ees_census": ["source.school_compare.raw.ees_census"], "model.school_compare.fact_admissions": ["model.school_compare.stg_ees_admissions"], "model.school_compare.stg_ees_admissions": ["source.school_compare.raw.ees_admissions"], "model.school_compare.fact_ks2_national_averages": ["model.school_compare.stg_ees_ks2_national"], "model.school_compare.stg_ees_ks2_national": ["source.school_compare.raw.ees_ks2_national"], "model.school_compare.fact_finance": ["model.school_compare.stg_fbit_finance"], "model.school_compare.stg_fbit_finance": ["source.school_compare.raw.fbit_finance"], "model.school_compare.fact_deprivation": ["model.school_compare.stg_idaci"], "model.school_compare.stg_idaci": ["source.school_compare.raw.idaci"], "test.school_compare.assert_urns_in_uk_bounds": ["model.school_compare.dim_location"], "test.school_compare.assert_no_orphaned_facts": ["model.school_compare.dim_school", "model.school_compare.fact_ks2_performance"], "test.school_compare.assert_gias_code_names_match_seed": ["seed.school_compare.gias_code_names", "source.school_compare.raw.gias_establishments"], "test.school_compare.not_null_dim_location_urn.aefc04518b": ["model.school_compare.dim_location"], "test.school_compare.unique_dim_location_urn.7acc2482eb": ["model.school_compare.dim_location"], "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a": ["model.school_compare.dim_location", "model.school_compare.dim_school"], "test.school_compare.not_null_dim_location_postcode.1693ab4948": ["model.school_compare.dim_location"], "test.school_compare.not_null_dim_school_urn.06fbd2ff26": ["model.school_compare.dim_school"], "test.school_compare.unique_dim_school_urn.9851fcd288": ["model.school_compare.dim_school"], "test.school_compare.not_null_dim_school_school_name.2a2e381565": ["model.school_compare.dim_school"], "test.school_compare.not_null_dim_school_phase_code.3140ca1112": ["model.school_compare.dim_school"], "test.school_compare.not_null_dim_school_has_sixth_form.ea8e313799": ["model.school_compare.dim_school"], "test.school_compare.accepted_values_dim_school_has_sixth_form__True__False.41eaa1ffd6": ["model.school_compare.dim_school"], "test.school_compare.accepted_values_dim_school_status_code__1__3.b0a0bd9a3a": ["model.school_compare.dim_school"], "test.school_compare.accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57.66c218b8b6": ["model.school_compare.dim_school"], "test.school_compare.accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99.16074ac494": ["model.school_compare.dim_school"], "test.school_compare.accepted_values_dim_school_admissions_policy_code__0__2__4__9.cfb6e9f008": ["model.school_compare.dim_school"], "test.school_compare.not_null_fact_ks2_performance_urn.7b7546cb10": ["model.school_compare.fact_ks2_performance"], "test.school_compare.not_null_fact_ks2_performance_year.bf28467bae": ["model.school_compare.fact_ks2_performance"], "test.school_compare.unique_fact_ks2_performance_urn_year.240e6de465": ["model.school_compare.fact_ks2_performance"], "test.school_compare.not_null_fact_performance_urn.334fe56f01": ["model.school_compare.fact_performance"], "test.school_compare.not_null_fact_performance_year.eed5795761": ["model.school_compare.fact_performance"], "test.school_compare.unique_fact_performance_urn_year.f5c028dcb0": ["model.school_compare.fact_performance"], "test.school_compare.not_null_fact_ks4_performance_urn.dc24537cea": ["model.school_compare.fact_ks4_performance"], "test.school_compare.not_null_fact_ks4_performance_year.ca2d34b977": ["model.school_compare.fact_ks4_performance"], "test.school_compare.accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average.1f92b23f9b": ["model.school_compare.fact_ks4_performance"], "test.school_compare.unique_fact_ks4_performance_urn_year.eba97e8000": ["model.school_compare.fact_ks4_performance"], "test.school_compare.not_null_fact_ks4_national_averages_year.43387931fd": ["model.school_compare.fact_ks4_national_averages"], "test.school_compare.unique_fact_ks4_national_averages_year.9e4ab94935": ["model.school_compare.fact_ks4_national_averages"], "test.school_compare.not_null_map_school_lineage_urn.24da1a9909": ["model.school_compare.map_school_lineage"], "test.school_compare.not_null_fact_ofsted_inspection_urn.65304a896d": ["model.school_compare.fact_ofsted_inspection"], "test.school_compare.not_null_fact_ofsted_inspection_inspection_date.5aa4bf0513": ["model.school_compare.fact_ofsted_inspection"], "test.school_compare.not_null_fact_pupil_characteristics_urn.bdeebf869b": ["model.school_compare.fact_pupil_characteristics"], "test.school_compare.not_null_fact_pupil_characteristics_year.19bec90c81": ["model.school_compare.fact_pupil_characteristics"], "test.school_compare.not_null_fact_census_benchmarks_phase.c4c9ad96c1": ["model.school_compare.fact_census_benchmarks"], "test.school_compare.unique_fact_census_benchmarks_phase.c06d73d097": ["model.school_compare.fact_census_benchmarks"], "test.school_compare.not_null_fact_admissions_urn.fdf334f63c": ["model.school_compare.fact_admissions"], "test.school_compare.not_null_fact_admissions_year.11169d1a1f": ["model.school_compare.fact_admissions"], "test.school_compare.not_null_fact_ks2_national_averages_year.84b854a9ce": ["model.school_compare.fact_ks2_national_averages"], "test.school_compare.unique_fact_ks2_national_averages_year.99f3ae39bb": ["model.school_compare.fact_ks2_national_averages"], "test.school_compare.not_null_fact_finance_urn.162f08d129": ["model.school_compare.fact_finance"], "test.school_compare.not_null_fact_finance_year.d96868883e": ["model.school_compare.fact_finance"], "test.school_compare.not_null_fact_deprivation_urn.96d84c2c61": ["model.school_compare.fact_deprivation"], "test.school_compare.unique_fact_deprivation_urn.194d6d1f01": ["model.school_compare.fact_deprivation"], "test.school_compare.source_not_null_raw_gias_establishments__URN_.daa9473baf": ["source.school_compare.raw.gias_establishments"], "test.school_compare.source_unique_raw_gias_establishments__URN_.9f6d358797": ["source.school_compare.raw.gias_establishments"], "test.school_compare.source_not_null_raw_gias_links__URN_.588070236c": ["source.school_compare.raw.gias_links"], "source.school_compare.raw.gias_establishments": [], "source.school_compare.raw.gias_links": [], "source.school_compare.raw.ofsted_inspections": [], "source.school_compare.raw.ees_ks2_attainment": [], "source.school_compare.raw.ees_ks2_info": [], "source.school_compare.raw.legacy_ks2": [], "source.school_compare.raw.ees_ks4_performance": [], "source.school_compare.raw.ees_ks4_info": [], "source.school_compare.raw.legacy_ks4": [], "source.school_compare.raw.ees_census": [], "source.school_compare.raw.ees_admissions": [], "source.school_compare.raw.ees_ks2_national": [], "source.school_compare.raw.ees_ks4_national": [], "source.school_compare.raw.fbit_finance": [], "source.school_compare.raw.idaci": []}, "child_map": {"seed.school_compare.la_code_names": [], "seed.school_compare.gias_code_names": ["test.school_compare.assert_gias_code_names_match_seed"], "seed.school_compare.school_type_codes": [], "model.school_compare.stg_ees_ks4_national": ["model.school_compare.fact_ks4_national_averages"], "model.school_compare.dim_location": ["test.school_compare.assert_urns_in_uk_bounds", "test.school_compare.not_null_dim_location_postcode.1693ab4948", "test.school_compare.not_null_dim_location_urn.aefc04518b", "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a", "test.school_compare.unique_dim_location_urn.7acc2482eb"], "model.school_compare.dim_school": ["test.school_compare.accepted_values_dim_school_admissions_policy_code__0__2__4__9.cfb6e9f008", "test.school_compare.accepted_values_dim_school_has_sixth_form__True__False.41eaa1ffd6", "test.school_compare.accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99.16074ac494", "test.school_compare.accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57.66c218b8b6", "test.school_compare.accepted_values_dim_school_status_code__1__3.b0a0bd9a3a", "test.school_compare.assert_no_orphaned_facts", "test.school_compare.not_null_dim_school_has_sixth_form.ea8e313799", "test.school_compare.not_null_dim_school_phase_code.3140ca1112", "test.school_compare.not_null_dim_school_school_name.2a2e381565", "test.school_compare.not_null_dim_school_urn.06fbd2ff26", "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a", "test.school_compare.unique_dim_school_urn.9851fcd288"], "model.school_compare.stg_gias_establishments": ["model.school_compare.dim_location", "model.school_compare.dim_school"], "model.school_compare.fact_performance": ["test.school_compare.not_null_fact_performance_urn.334fe56f01", "test.school_compare.not_null_fact_performance_year.eed5795761", "test.school_compare.unique_fact_performance_urn_year.f5c028dcb0"], "model.school_compare.fact_ks2_performance": ["model.school_compare.fact_performance", "test.school_compare.assert_no_orphaned_facts", "test.school_compare.not_null_fact_ks2_performance_urn.7b7546cb10", "test.school_compare.not_null_fact_ks2_performance_year.bf28467bae", "test.school_compare.unique_fact_ks2_performance_urn_year.240e6de465"], "model.school_compare.int_ks2_with_lineage": ["model.school_compare.fact_ks2_performance"], "model.school_compare.fact_ks4_national_averages": ["test.school_compare.not_null_fact_ks4_national_averages_year.43387931fd", "test.school_compare.unique_fact_ks4_national_averages_year.9e4ab94935"], "model.school_compare.fact_ks4_performance": ["model.school_compare.fact_performance", "test.school_compare.accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average.1f92b23f9b", "test.school_compare.not_null_fact_ks4_performance_urn.dc24537cea", "test.school_compare.not_null_fact_ks4_performance_year.ca2d34b977", "test.school_compare.unique_fact_ks4_performance_urn_year.eba97e8000"], "model.school_compare.int_ks4_with_lineage": ["model.school_compare.fact_ks4_performance"], "model.school_compare.map_school_lineage": ["test.school_compare.not_null_map_school_lineage_urn.24da1a9909"], "model.school_compare.int_school_lineage": ["model.school_compare.int_ks2_with_lineage", "model.school_compare.int_ks4_with_lineage", "model.school_compare.map_school_lineage"], "model.school_compare.stg_gias_links": ["model.school_compare.int_school_lineage"], "model.school_compare.fact_ofsted_inspection": ["test.school_compare.not_null_fact_ofsted_inspection_inspection_date.5aa4bf0513", "test.school_compare.not_null_fact_ofsted_inspection_urn.65304a896d"], "model.school_compare.int_ofsted_latest": ["model.school_compare.dim_school"], "model.school_compare.stg_ofsted_inspections": ["model.school_compare.fact_ofsted_inspection", "model.school_compare.int_ofsted_latest"], "model.school_compare.stg_ees_ks2": ["model.school_compare.int_ks2_with_lineage"], "model.school_compare.stg_legacy_ks2": ["model.school_compare.int_ks2_with_lineage"], "model.school_compare.stg_ees_ks4": ["model.school_compare.int_ks4_with_lineage"], "model.school_compare.stg_legacy_ks4": ["model.school_compare.int_ks4_with_lineage"], "model.school_compare.fact_census_benchmarks": ["test.school_compare.not_null_fact_census_benchmarks_phase.c4c9ad96c1", "test.school_compare.unique_fact_census_benchmarks_phase.c06d73d097"], "model.school_compare.fact_pupil_characteristics": ["model.school_compare.fact_census_benchmarks", "test.school_compare.not_null_fact_pupil_characteristics_urn.bdeebf869b", "test.school_compare.not_null_fact_pupil_characteristics_year.19bec90c81"], "model.school_compare.int_pupil_chars_merged": ["model.school_compare.fact_pupil_characteristics"], "model.school_compare.stg_ees_census": ["model.school_compare.int_pupil_chars_merged"], "model.school_compare.fact_admissions": ["test.school_compare.not_null_fact_admissions_urn.fdf334f63c", "test.school_compare.not_null_fact_admissions_year.11169d1a1f"], "model.school_compare.stg_ees_admissions": ["model.school_compare.fact_admissions"], "model.school_compare.fact_ks2_national_averages": ["test.school_compare.not_null_fact_ks2_national_averages_year.84b854a9ce", "test.school_compare.unique_fact_ks2_national_averages_year.99f3ae39bb"], "model.school_compare.stg_ees_ks2_national": ["model.school_compare.fact_ks2_national_averages"], "model.school_compare.fact_finance": ["test.school_compare.not_null_fact_finance_urn.162f08d129", "test.school_compare.not_null_fact_finance_year.d96868883e"], "model.school_compare.stg_fbit_finance": ["model.school_compare.fact_finance"], "model.school_compare.fact_deprivation": ["test.school_compare.not_null_fact_deprivation_urn.96d84c2c61", "test.school_compare.unique_fact_deprivation_urn.194d6d1f01"], "model.school_compare.stg_idaci": ["model.school_compare.fact_deprivation"], "test.school_compare.assert_urns_in_uk_bounds": [], "test.school_compare.assert_no_orphaned_facts": [], "test.school_compare.assert_gias_code_names_match_seed": [], "test.school_compare.not_null_dim_location_urn.aefc04518b": [], "test.school_compare.unique_dim_location_urn.7acc2482eb": [], "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a": [], "test.school_compare.not_null_dim_location_postcode.1693ab4948": [], "test.school_compare.not_null_dim_school_urn.06fbd2ff26": [], "test.school_compare.unique_dim_school_urn.9851fcd288": [], "test.school_compare.not_null_dim_school_school_name.2a2e381565": [], "test.school_compare.not_null_dim_school_phase_code.3140ca1112": [], "test.school_compare.not_null_dim_school_has_sixth_form.ea8e313799": [], "test.school_compare.accepted_values_dim_school_has_sixth_form__True__False.41eaa1ffd6": [], "test.school_compare.accepted_values_dim_school_status_code__1__3.b0a0bd9a3a": [], "test.school_compare.accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57.66c218b8b6": [], "test.school_compare.accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99.16074ac494": [], "test.school_compare.accepted_values_dim_school_admissions_policy_code__0__2__4__9.cfb6e9f008": [], "test.school_compare.not_null_fact_ks2_performance_urn.7b7546cb10": [], "test.school_compare.not_null_fact_ks2_performance_year.bf28467bae": [], "test.school_compare.unique_fact_ks2_performance_urn_year.240e6de465": [], "test.school_compare.not_null_fact_performance_urn.334fe56f01": [], "test.school_compare.not_null_fact_performance_year.eed5795761": [], "test.school_compare.unique_fact_performance_urn_year.f5c028dcb0": [], "test.school_compare.not_null_fact_ks4_performance_urn.dc24537cea": [], "test.school_compare.not_null_fact_ks4_performance_year.ca2d34b977": [], "test.school_compare.accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average.1f92b23f9b": [], "test.school_compare.unique_fact_ks4_performance_urn_year.eba97e8000": [], "test.school_compare.not_null_fact_ks4_national_averages_year.43387931fd": [], "test.school_compare.unique_fact_ks4_national_averages_year.9e4ab94935": [], "test.school_compare.not_null_map_school_lineage_urn.24da1a9909": [], "test.school_compare.not_null_fact_ofsted_inspection_urn.65304a896d": [], "test.school_compare.not_null_fact_ofsted_inspection_inspection_date.5aa4bf0513": [], "test.school_compare.not_null_fact_pupil_characteristics_urn.bdeebf869b": [], "test.school_compare.not_null_fact_pupil_characteristics_year.19bec90c81": [], "test.school_compare.not_null_fact_census_benchmarks_phase.c4c9ad96c1": [], "test.school_compare.unique_fact_census_benchmarks_phase.c06d73d097": [], "test.school_compare.not_null_fact_admissions_urn.fdf334f63c": [], "test.school_compare.not_null_fact_admissions_year.11169d1a1f": [], "test.school_compare.not_null_fact_ks2_national_averages_year.84b854a9ce": [], "test.school_compare.unique_fact_ks2_national_averages_year.99f3ae39bb": [], "test.school_compare.not_null_fact_finance_urn.162f08d129": [], "test.school_compare.not_null_fact_finance_year.d96868883e": [], "test.school_compare.not_null_fact_deprivation_urn.96d84c2c61": [], "test.school_compare.unique_fact_deprivation_urn.194d6d1f01": [], "test.school_compare.source_not_null_raw_gias_establishments__URN_.daa9473baf": [], "test.school_compare.source_unique_raw_gias_establishments__URN_.9f6d358797": [], "test.school_compare.source_not_null_raw_gias_links__URN_.588070236c": [], "source.school_compare.raw.gias_establishments": ["model.school_compare.stg_gias_establishments", "test.school_compare.assert_gias_code_names_match_seed", "test.school_compare.source_not_null_raw_gias_establishments__URN_.daa9473baf", "test.school_compare.source_unique_raw_gias_establishments__URN_.9f6d358797"], "source.school_compare.raw.gias_links": ["model.school_compare.stg_gias_links", "test.school_compare.source_not_null_raw_gias_links__URN_.588070236c"], "source.school_compare.raw.ofsted_inspections": ["model.school_compare.stg_ofsted_inspections"], "source.school_compare.raw.ees_ks2_attainment": ["model.school_compare.stg_ees_ks2"], "source.school_compare.raw.ees_ks2_info": ["model.school_compare.stg_ees_ks2"], "source.school_compare.raw.legacy_ks2": ["model.school_compare.stg_legacy_ks2"], "source.school_compare.raw.ees_ks4_performance": ["model.school_compare.stg_ees_ks4"], "source.school_compare.raw.ees_ks4_info": ["model.school_compare.stg_ees_ks4"], "source.school_compare.raw.legacy_ks4": ["model.school_compare.stg_legacy_ks4"], "source.school_compare.raw.ees_census": ["model.school_compare.stg_ees_census"], "source.school_compare.raw.ees_admissions": ["model.school_compare.stg_ees_admissions"], "source.school_compare.raw.ees_ks2_national": ["model.school_compare.stg_ees_ks2_national"], "source.school_compare.raw.ees_ks4_national": ["model.school_compare.stg_ees_ks4_national"], "source.school_compare.raw.fbit_finance": ["model.school_compare.stg_fbit_finance"], "source.school_compare.raw.idaci": ["model.school_compare.stg_idaci"]}, "group_map": {}, "saved_queries": {}, "semantic_models": {}, "unit_tests": {}, "functions": {}} \ No newline at end of file diff --git a/pipeline/transform/target/osi_document.json b/pipeline/transform/target/osi_document.json new file mode 100644 index 0000000..e54060f --- /dev/null +++ b/pipeline/transform/target/osi_document.json @@ -0,0 +1 @@ +{"version": "0.1.1", "dialects": ["ANSI_SQL"], "semantic_model": [{"name": "semantic_model", "datasets": []}]} \ No newline at end of file diff --git a/pipeline/transform/target/partial_parse.msgpack b/pipeline/transform/target/partial_parse.msgpack new file mode 100644 index 0000000000000000000000000000000000000000..222bbcc7cb935f91b7f87b4a49037a53afb81176 GIT binary patch literal 769735 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

+0&BlJ=pm^x%!g2{hWB3-pAYtu!^a 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 Date: Thu, 16 Jul 2026 19:12:07 +0100 Subject: [PATCH 7/8] =?UTF-8?q?docs(spec):=20re-verify=20the=202021/22=20K?= =?UTF-8?q?S2=20gap=20=E2=80=94=20expert=20finding=20refuted,=20footnote?= =?UTF-8?q?=20copy=20stands?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The final review claimed DfE published school-level 2021/22 KS2 in Dec 2022. Re-verified: the GOV.UK announcement 'Primary school performance tables: 2022' is CANCELLED ('will not be published in key stage 2 performance tables in academic year 2021/22'), and the EES 2021/22 release carries the same statement. No code change. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB --- .../specs/2026-07-11-compare-screen-redesign-design.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/superpowers/specs/2026-07-11-compare-screen-redesign-design.md b/docs/superpowers/specs/2026-07-11-compare-screen-redesign-design.md index b5778e2..f3ef017 100644 --- a/docs/superpowers/specs/2026-07-11-compare-screen-redesign-design.md +++ b/docs/superpowers/specs/2026-07-11-compare-screen-redesign-design.md @@ -256,7 +256,12 @@ implementation, beyond what the mockups can show: DfE stated it would not publish KS2 2021/22 in performance tables (verified 2026-07-12 against EES, the CSP download service, and DfE release notes; see `# TASK 6 VERIFICATION` in - `pipeline/scripts/diagnose_compare_gaps.py`). The chart's England- + `pipeline/scripts/diagnose_compare_gaps.py`; re-verified 2026-07-16 + after an expert-review challenge — the GOV.UK statistics announcement + "Primary school performance tables: 2022" is marked CANCELLED with + "will not be published in key stage 2 performance tables in academic + year 2021/22", so the footnote's "DfE didn't publish" claim stands + and must not be softened to "not in our dataset"). The chart's England- only 2021/22 point with broken school lines is therefore the correct permanent rendering; copy should say "DfE didn't publish school-level figures for 2021/22", not "not in our dataset yet". From 852ed11e4deebba7447f91f6f6f186e4d2b6b622 Mon Sep 17 00:00:00 2001 From: Tudor Date: Thu, 16 Jul 2026 20:09:10 +0100 Subject: [PATCH 8/8] chore: untrack dbt build artifacts (target/, logs/, .user.yml) and gitignore them Swept in accidentally by a broad 'git add pipeline'. They embed local absolute paths and a personal usage-tracking UUID, and a stale committed manifest causes partial-parse/version-mismatch noise for others. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB --- .gitignore | 5 + pipeline/transform/.user.yml | 1 - pipeline/transform/logs/dbt.log | 294 ------------------ pipeline/transform/target/manifest.json | 1 - pipeline/transform/target/osi_document.json | 1 - .../transform/target/partial_parse.msgpack | Bin 769735 -> 0 bytes pipeline/transform/target/perf_info.json | 50 --- .../transform/target/semantic_manifest.json | 1 - 8 files changed, 5 insertions(+), 348 deletions(-) delete mode 100644 pipeline/transform/.user.yml delete mode 100644 pipeline/transform/logs/dbt.log delete mode 100644 pipeline/transform/target/manifest.json delete mode 100644 pipeline/transform/target/osi_document.json delete mode 100644 pipeline/transform/target/partial_parse.msgpack delete mode 100644 pipeline/transform/target/perf_info.json delete mode 100644 pipeline/transform/target/semantic_manifest.json diff --git a/.gitignore b/.gitignore index 81b56a7..19c8157 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ venv __pycache__/ + +# dbt local build artifacts (embed absolute paths + anonymous-usage UUID) +pipeline/transform/target/ +pipeline/transform/logs/ +pipeline/transform/.user.yml diff --git a/pipeline/transform/.user.yml b/pipeline/transform/.user.yml deleted file mode 100644 index 1f03a95..0000000 --- a/pipeline/transform/.user.yml +++ /dev/null @@ -1 +0,0 @@ -id: d8efb97e-d188-4585-899c-3ba2e484f763 diff --git a/pipeline/transform/logs/dbt.log b/pipeline/transform/logs/dbt.log deleted file mode 100644 index 867074b..0000000 --- a/pipeline/transform/logs/dbt.log +++ /dev/null @@ -1,294 +0,0 @@ -22:17:04.566580 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} - - -============================== 22:17:04.568149 | a6b8403f-0ead-494c-bc76-2492aa4c9187 ============================== -22:17:04.568149 [info ] [MainThread]: Running with dbt=1.11.12 -22:17:04.568347 [debug] [MainThread]: running dbt with arguments {'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'partial_parse': 'True', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'debug': 'False', 'log_format': 'default', 'profiles_dir': '.', 'version_check': 'True', 'write_json': 'True', 'warn_error': 'None', 'invocation_command': 'dbt parse --profiles-dir .', 'static_parser': 'True', 'no_print': 'None', 'use_colors': 'True', 'log_cache_events': 'False', 'indirect_selection': 'eager', 'fail_fast': 'False', 'quiet': 'False', 'send_anonymous_usage_stats': 'True', 'printer_width': '80', 'introspect': 'True', 'empty': 'None', 'target_path': 'None', 'use_experimental_parser': 'False', 'cache_selected_only': 'False'} -22:17:04.615542 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'context': []} -22:17:04.631989 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'context': []} -22:17:04.632286 [info ] [MainThread]: Registered adapter: postgres=1.10.2 -22:17:04.667716 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 -22:17:04.668031 [info ] [MainThread]: Unable to do partial parsing because saved manifest not found. Starting full parse. -22:17:04.668152 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'partial_parser', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'context': []} -22:17:05.079216 [warn ] [MainThread]: [WARNING][PropertyMovedToConfigDeprecation]: Deprecated functionality -Found `severity` as a top-level property of `data_tests.not_null.severity` in -file `models/marts/_marts_schema.yml`. The `severity` top-level property should -be moved into the `config` of `data_tests.not_null.severity`. -22:17:05.079456 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'property_': 'warn', 'context': []} -22:17:05.080394 [warn ] [MainThread]: [WARNING][MissingArgumentsPropertyInGenericTestDeprecation]: Deprecated -functionality -Found top-level arguments to test `accepted_values` defined on 'dim_school' in -package 'school_compare' (models/marts/_marts_schema.yml). Arguments to generic -tests should be nested under the `arguments` property. -22:17:05.080506 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'property_': 'warn', 'context': []} -22:17:05.142077 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': 'a6b8403f-0ead-494c-bc76-2492aa4c9187', 'context': []} -22:17:05.143319 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json -22:17:05.201433 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json -22:17:05.202316 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json -22:17:05.202527 [warn ] [MainThread]: [WARNING][DeprecationsSummary]: Deprecated functionality -Summary of encountered deprecations: -- PropertyMovedToConfigDeprecation: 4 occurrences -- MissingArgumentsPropertyInGenericTestDeprecation: 7 occurrences -To see all deprecation instances instead of just the first occurrence of each, -run command again with the `--show-all-deprecations` flag. You may also need to -run with `--no-partial-parse` as some deprecations are only encountered during -parsing. -22:17:05.202750 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.6586652, "process_in_blocks": "0", "process_kernel_time": 0.111809, "process_mem_max_rss": "135282688", "process_out_blocks": "0", "process_user_time": 0.996675} -22:17:05.202880 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 22:17:05.202853 after 0.66 seconds -22:17:05.202995 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} -22:17:05.203093 [debug] [MainThread]: Flushing usage events -22:17:05.735599 [debug] [MainThread]: An error was encountered while trying to flush usage events -08:22:12.701427 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} - - -============================== 08:22:12.703695 | 25902cd9-3a92-4695-a273-6c9f7b75e00c ============================== -08:22:12.703695 [info ] [MainThread]: Running with dbt=1.11.12 -08:22:12.703893 [debug] [MainThread]: running dbt with arguments {'invocation_command': 'dbt parse --profiles-dir .', 'version_check': 'True', 'cache_selected_only': 'False', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'printer_width': '80', 'fail_fast': 'False', 'use_colors': 'True', 'use_experimental_parser': 'False', 'partial_parse': 'True', 'introspect': 'True', 'indirect_selection': 'eager', 'quiet': 'False', 'log_format': 'default', 'write_json': 'True', 'no_print': 'None', 'log_cache_events': 'False', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'send_anonymous_usage_stats': 'True', 'debug': 'False', 'static_parser': 'True', 'empty': 'None', 'target_path': 'None', 'profiles_dir': '.', 'warn_error': 'None'} -08:22:12.771910 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '25902cd9-3a92-4695-a273-6c9f7b75e00c', 'context': []} -08:22:12.788094 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '25902cd9-3a92-4695-a273-6c9f7b75e00c', 'context': []} -08:22:12.788548 [info ] [MainThread]: Registered adapter: postgres=1.10.2 -08:22:12.827043 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 -08:22:12.890911 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 0 files added, 2 files changed. -08:22:12.891346 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/marts/_marts_schema.yml -08:22:12.891484 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/staging/stg_ees_ks4.sql -08:22:12.988494 [warn ] [MainThread]: [WARNING][MissingArgumentsPropertyInGenericTestDeprecation]: Deprecated -functionality -Found top-level arguments to test `accepted_values` defined on -'fact_ks4_performance' in package 'school_compare' -(models/marts/_marts_schema.yml). Arguments to generic tests should be nested -under the `arguments` property. -08:22:12.988725 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': '25902cd9-3a92-4695-a273-6c9f7b75e00c', 'property_': 'warn', 'context': []} -08:22:13.042439 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '25902cd9-3a92-4695-a273-6c9f7b75e00c', 'context': []} -08:22:13.043787 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json -08:22:13.078667 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json -08:22:13.080427 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json -08:22:13.080615 [warn ] [MainThread]: [WARNING][DeprecationsSummary]: Deprecated functionality -Summary of encountered deprecations: -- MissingArgumentsPropertyInGenericTestDeprecation: 1 occurrence -To see all deprecation instances instead of just the first occurrence of each, -run command again with the `--show-all-deprecations` flag. You may also need to -run with `--no-partial-parse` as some deprecations are only encountered during -parsing. -08:22:13.080836 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.40608904, "process_in_blocks": "0", "process_kernel_time": 0.134857, "process_mem_max_rss": "132857856", "process_out_blocks": "0", "process_user_time": 0.702112} -08:22:13.080968 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 08:22:13.080942 after 0.41 seconds -08:22:13.081074 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} -08:22:13.081172 [debug] [MainThread]: Flushing usage events -08:22:13.497827 [debug] [MainThread]: An error was encountered while trying to flush usage events -08:22:21.654274 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} - - -============================== 08:22:21.655842 | 88cd4db0-05ef-4377-87e9-c27e9801255b ============================== -08:22:21.655842 [info ] [MainThread]: Running with dbt=1.11.12 -08:22:21.656036 [debug] [MainThread]: running dbt with arguments {'no_print': 'None', 'introspect': 'True', 'debug': 'False', 'indirect_selection': 'eager', 'log_cache_events': 'False', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'fail_fast': 'False', 'send_anonymous_usage_stats': 'True', 'profiles_dir': '.', 'printer_width': '80', 'warn_error': 'None', 'partial_parse': 'True', 'static_parser': 'True', 'quiet': 'False', 'write_json': 'True', 'use_experimental_parser': 'False', 'version_check': 'True', 'empty': 'None', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'cache_selected_only': 'False', 'log_format': 'default', 'invocation_command': 'dbt parse --profiles-dir .', 'target_path': 'None', 'use_colors': 'True'} -08:22:21.706619 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '88cd4db0-05ef-4377-87e9-c27e9801255b', 'context': []} -08:22:21.724467 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '88cd4db0-05ef-4377-87e9-c27e9801255b', 'context': []} -08:22:21.724916 [info ] [MainThread]: Registered adapter: postgres=1.10.2 -08:22:21.761988 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 -08:22:21.811784 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 0 files added, 0 files changed. -08:22:21.811980 [debug] [MainThread]: Nothing changed, skipping partial parsing. -08:22:21.812068 [debug] [MainThread]: Partial parsing enabled, no changes found, skipping parsing -08:22:21.831419 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '88cd4db0-05ef-4377-87e9-c27e9801255b', 'context': []} -08:22:21.834895 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json -08:22:21.872310 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json -08:22:21.873270 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json -08:22:21.873537 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.24312946, "process_in_blocks": "0", "process_kernel_time": 0.106534, "process_mem_max_rss": "125960192", "process_out_blocks": "0", "process_user_time": 0.617116} -08:22:21.873695 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 08:22:21.873662 after 0.24 seconds -08:22:21.873825 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} -08:22:21.873930 [debug] [MainThread]: Flushing usage events -08:22:22.309014 [debug] [MainThread]: An error was encountered while trying to flush usage events -08:42:39.581769 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} - - -============================== 08:42:39.583995 | 14cee99c-c61b-4745-bfdf-db4edcb73881 ============================== -08:42:39.583995 [info ] [MainThread]: Running with dbt=1.11.12 -08:42:39.584207 [debug] [MainThread]: running dbt with arguments {'debug': 'False', 'empty': 'None', 'indirect_selection': 'eager', 'fail_fast': 'False', 'invocation_command': 'dbt parse --profiles-dir .', 'version_check': 'True', 'quiet': 'False', 'log_cache_events': 'False', 'write_json': 'True', 'log_format': 'default', 'target_path': 'None', 'static_parser': 'True', 'partial_parse': 'True', 'warn_error': 'None', 'printer_width': '80', 'use_experimental_parser': 'False', 'send_anonymous_usage_stats': 'True', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'cache_selected_only': 'False', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'use_colors': 'True', 'introspect': 'True', 'no_print': 'None', 'profiles_dir': '.'} -08:42:39.642292 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '14cee99c-c61b-4745-bfdf-db4edcb73881', 'context': []} -08:42:39.658889 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '14cee99c-c61b-4745-bfdf-db4edcb73881', 'context': []} -08:42:39.659445 [info ] [MainThread]: Registered adapter: postgres=1.10.2 -08:42:39.697585 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 -08:42:39.759748 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 0 files added, 2 files changed. -08:42:39.760099 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/staging/stg_legacy_ks2.sql -08:42:39.760226 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/intermediate/int_ks2_with_lineage.sql -08:42:39.845972 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '14cee99c-c61b-4745-bfdf-db4edcb73881', 'context': []} -08:42:39.847206 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json -08:42:39.903495 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json -08:42:39.905863 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json -08:42:39.906095 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.3489076, "process_in_blocks": "0", "process_kernel_time": 0.123806, "process_mem_max_rss": "129925120", "process_out_blocks": "0", "process_user_time": 0.678581} -08:42:39.906230 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 08:42:39.906202 after 0.35 seconds -08:42:39.906338 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} -08:42:39.906440 [debug] [MainThread]: Flushing usage events -08:42:40.369573 [debug] [MainThread]: An error was encountered while trying to flush usage events -15:46:41.844088 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} - - -============================== 15:46:41.848473 | 721329d8-fb54-4cf3-9b56-85d8b276dc71 ============================== -15:46:41.848473 [info ] [MainThread]: Running with dbt=1.11.12 -15:46:41.848910 [debug] [MainThread]: running dbt with arguments {'static_parser': 'True', 'indirect_selection': 'eager', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'target_path': 'None', 'log_format': 'default', 'warn_error': 'None', 'no_print': 'None', 'invocation_command': 'dbt parse --profiles-dir .', 'introspect': 'True', 'profiles_dir': '.', 'write_json': 'True', 'partial_parse': 'True', 'send_anonymous_usage_stats': 'True', 'printer_width': '80', 'empty': 'None', 'use_experimental_parser': 'False', 'log_cache_events': 'False', 'version_check': 'True', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'use_colors': 'True', 'debug': 'False', 'fail_fast': 'False', 'cache_selected_only': 'False', 'quiet': 'False'} -15:46:41.980957 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '721329d8-fb54-4cf3-9b56-85d8b276dc71', 'context': []} -15:46:42.016972 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '721329d8-fb54-4cf3-9b56-85d8b276dc71', 'context': []} -15:46:42.018032 [info ] [MainThread]: Registered adapter: postgres=1.10.2 -15:46:42.095204 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 -15:46:42.218385 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 0 files added, 1 files changed. -15:46:42.219081 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/marts/fact_performance.sql -15:46:42.526466 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '721329d8-fb54-4cf3-9b56-85d8b276dc71', 'context': []} -15:46:42.529480 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json -15:46:42.606448 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json -15:46:42.608498 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json -15:46:42.609039 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.81911224, "process_in_blocks": "0", "process_kernel_time": 0.299951, "process_mem_max_rss": "132186112", "process_out_blocks": "0", "process_user_time": 1.506381} -15:46:42.609313 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 15:46:42.609252 after 0.82 seconds -15:46:42.609523 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} -15:46:42.609727 [debug] [MainThread]: Flushing usage events -15:46:43.146552 [debug] [MainThread]: An error was encountered while trying to flush usage events -18:48:43.630692 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} - - -============================== 18:48:43.634897 | 6f3c22f1-ca3a-438c-b33b-0ec6cd226f50 ============================== -18:48:43.634897 [info ] [MainThread]: Running with dbt=1.11.12 -18:48:43.635313 [debug] [MainThread]: running dbt with arguments {'profiles_dir': '.', 'log_format': 'default', 'use_experimental_parser': 'False', 'fail_fast': 'False', 'quiet': 'False', 'use_colors': 'True', 'partial_parse': 'True', 'introspect': 'True', 'printer_width': '80', 'log_cache_events': 'False', 'warn_error': 'None', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'version_check': 'True', 'no_print': 'None', 'indirect_selection': 'eager', 'debug': 'False', 'send_anonymous_usage_stats': 'True', 'static_parser': 'True', 'cache_selected_only': 'False', 'write_json': 'True', 'invocation_command': 'dbt parse --profiles-dir .', 'target_path': 'None', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'empty': 'None'} -18:48:43.757089 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '6f3c22f1-ca3a-438c-b33b-0ec6cd226f50', 'context': []} -18:48:43.792618 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '6f3c22f1-ca3a-438c-b33b-0ec6cd226f50', 'context': []} -18:48:43.793544 [info ] [MainThread]: Registered adapter: postgres=1.10.2 -18:48:43.871751 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 -18:48:43.998163 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 0 files added, 0 files changed. -18:48:43.998480 [debug] [MainThread]: Nothing changed, skipping partial parsing. -18:48:43.998646 [debug] [MainThread]: Partial parsing enabled, no changes found, skipping parsing -18:48:44.038143 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '6f3c22f1-ca3a-438c-b33b-0ec6cd226f50', 'context': []} -18:48:44.040323 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json -18:48:44.117414 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json -18:48:44.120049 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json -18:48:44.120567 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.54391706, "process_in_blocks": "0", "process_kernel_time": 0.253091, "process_mem_max_rss": "125927424", "process_out_blocks": "0", "process_user_time": 1.258876} -18:48:44.120854 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 18:48:44.120790 after 0.54 seconds -18:48:44.121082 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} -18:48:44.121285 [debug] [MainThread]: Flushing usage events -18:48:44.644908 [debug] [MainThread]: An error was encountered while trying to flush usage events -13:02:43.139124 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} - - -============================== 13:02:43.144856 | efc5f728-37e4-4fa6-95c3-c1f95df270dc ============================== -13:02:43.144856 [info ] [MainThread]: Running with dbt=1.11.12 -13:02:43.145618 [debug] [MainThread]: running dbt with arguments {'profiles_dir': '.', 'invocation_command': 'dbt parse --profiles-dir .', 'version_check': 'True', 'no_print': 'None', 'cache_selected_only': 'False', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'send_anonymous_usage_stats': 'True', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'quiet': 'False', 'use_experimental_parser': 'False', 'indirect_selection': 'eager', 'warn_error': 'None', 'introspect': 'True', 'target_path': 'None', 'static_parser': 'True', 'printer_width': '80', 'use_colors': 'True', 'write_json': 'True', 'debug': 'False', 'empty': 'None', 'fail_fast': 'False', 'log_format': 'default', 'partial_parse': 'True', 'log_cache_events': 'False'} -13:02:43.349884 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': 'efc5f728-37e4-4fa6-95c3-c1f95df270dc', 'context': []} -13:02:43.403392 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': 'efc5f728-37e4-4fa6-95c3-c1f95df270dc', 'context': []} -13:02:43.406778 [info ] [MainThread]: Registered adapter: postgres=1.10.2 -13:02:43.519932 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 -13:02:43.686225 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 1 files added, 1 files changed. -13:02:43.687063 [debug] [MainThread]: Partial parsing: added file: school_compare://models/marts/fact_ks4_national_averages.sql -13:02:43.687687 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/marts/_marts_schema.yml -13:02:44.106801 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': 'efc5f728-37e4-4fa6-95c3-c1f95df270dc', 'context': []} -13:02:44.110827 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json -13:02:44.211152 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json -13:02:44.213866 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json -13:02:44.214469 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 1.1430293, "process_in_blocks": "0", "process_kernel_time": 0.439532, "process_mem_max_rss": "132464640", "process_out_blocks": "0", "process_user_time": 1.983706} -13:02:44.214778 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 13:02:44.214714 after 1.14 seconds -13:02:44.215029 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} -13:02:44.215286 [debug] [MainThread]: Flushing usage events -13:02:44.594244 [debug] [MainThread]: An error was encountered while trying to flush usage events -14:44:31.378170 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} - - -============================== 14:44:31.409964 | 944d7fc7-e4b3-4553-bb9c-7709a72e5adb ============================== -14:44:31.409964 [info ] [MainThread]: Running with dbt=1.11.12 -14:44:31.410683 [debug] [MainThread]: running dbt with arguments {'empty': 'None', 'no_print': 'None', 'warn_error': 'None', 'log_cache_events': 'False', 'use_colors': 'True', 'send_anonymous_usage_stats': 'True', 'target_path': 'None', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'version_check': 'True', 'profiles_dir': '.', 'log_format': 'default', 'cache_selected_only': 'False', 'introspect': 'True', 'use_experimental_parser': 'False', 'debug': 'False', 'printer_width': '80', 'static_parser': 'True', 'partial_parse': 'True', 'fail_fast': 'False', 'write_json': 'True', 'indirect_selection': 'eager', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'quiet': 'False', 'invocation_command': 'dbt parse --profiles-dir .'} -14:44:33.887704 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '944d7fc7-e4b3-4553-bb9c-7709a72e5adb', 'context': []} -14:44:33.937929 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '944d7fc7-e4b3-4553-bb9c-7709a72e5adb', 'context': []} -14:44:33.939906 [info ] [MainThread]: Registered adapter: postgres=1.10.2 -14:44:34.042035 [debug] [MainThread]: checksum: f368f5348cf42803b94ef7fb8257ecf3bf9a9a16dd9c8c51fe5172f2dbeb457f, vars: {}, profile: , target: , version: 1.11.12 -14:44:34.197977 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 1 files added, 4 files changed. -14:44:34.198649 [debug] [MainThread]: Partial parsing: added file: dbt://macros/adapters/runtime.sql -14:44:34.198997 [debug] [MainThread]: Partial parsing: updated file: dbt://macros/get_custom_name/get_custom_database.sql -14:44:34.199285 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/staging/stg_ofsted_inspections.sql -14:44:34.199603 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/marts/fact_ofsted_inspection.sql -14:44:34.199873 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/intermediate/int_ofsted_latest.sql -14:44:34.565891 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '944d7fc7-e4b3-4553-bb9c-7709a72e5adb', 'context': []} -14:44:34.570071 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json -14:44:34.729135 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json -14:44:34.732116 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json -14:44:34.732862 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 3.4214325, "process_in_blocks": "0", "process_kernel_time": 0.845861, "process_mem_max_rss": "154664960", "process_out_blocks": "0", "process_user_time": 3.50279} -14:44:34.733331 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 14:44:34.733239 after 3.42 seconds -14:44:34.733686 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} -14:44:34.733997 [debug] [MainThread]: Flushing usage events -14:44:35.152478 [debug] [MainThread]: An error was encountered while trying to flush usage events -19:03:53.808379 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} - - -============================== 19:03:53.821579 | 716689a2-6ae9-48c1-b309-3b58930321dc ============================== -19:03:53.821579 [info ] [MainThread]: Running with dbt=1.12.0 -19:03:53.821807 [debug] [MainThread]: running dbt with arguments {'target_path': 'None', 'invocation_command': 'dbt parse --profiles-dir .', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'hints_enabled': 'True', 'quiet': 'False', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'version_check': 'True', 'printer_width': '80', 'fail_fast': 'False', 'introspect': 'True', 'warn_error': 'None', 'cache_selected_only': 'False', 'indirect_selection': 'eager', 'maximum_seed_size_mib': '1', 'profiles_dir': '.', 'log_cache_events': 'False', 'write_json': 'True', 'no_print': 'None', 'use_colors': 'True', 'debug': 'False', 'static_parser': 'True', 'empty': 'None', 'send_anonymous_usage_stats': 'True', 'log_format': 'default', 'partial_parse': 'True', 'use_experimental_parser': 'False'} -19:03:55.079180 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'context': []} -19:03:55.098573 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'context': []} -19:03:55.099437 [info ] [MainThread]: Registered adapter: postgres=1.11.0 -19:03:55.140959 [debug] [MainThread]: checksum: 67b34be33115abb132a386d054767a080c4d76fc101bebe6b4f686156fa47e48, vars: {}, profile: school_compare, target: dev, version: 1.12.0 -19:03:55.184556 [info ] [MainThread]: Unable to do partial parsing because of a version mismatch -19:03:55.184766 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'partial_parser', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'context': []} -19:03:55.675944 [warn ] [MainThread]: [WARNING][PropertyMovedToConfigDeprecation]: Deprecated functionality -Found `severity` as a top-level property of `data_tests.not_null.severity` in -file `models/marts/_marts_schema.yml`. The `severity` top-level property should -be moved into the `config` of `data_tests.not_null.severity`. -19:03:55.676206 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'property_': 'warn', 'context': []} -19:03:55.677401 [warn ] [MainThread]: [WARNING][MissingArgumentsPropertyInGenericTestDeprecation]: Deprecated -functionality -Found top-level arguments to test `accepted_values` defined on 'dim_school' in -package 'school_compare' (models/marts/_marts_schema.yml). Arguments to generic -tests should be nested under the `arguments` property. -19:03:55.677534 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'property_': 'warn', 'context': []} -19:03:55.748942 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': '716689a2-6ae9-48c1-b309-3b58930321dc', 'context': []} -19:03:55.750611 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json -19:03:55.820228 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json -19:03:55.822037 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json -19:03:55.840087 [debug] [MainThread]: Wrote artifact OsiDocument to /Users/tudor/projects/school_compare/pipeline/transform/target/osi_document.json -19:03:55.840391 [warn ] [MainThread]: [WARNING][DeprecationsSummary]: Deprecated functionality -Summary of encountered deprecations: -- PropertyMovedToConfigDeprecation: 4 occurrences -- MissingArgumentsPropertyInGenericTestDeprecation: 7 occurrences -To see all deprecation instances instead of just the first occurrence of each, -run command again with the `--show-all-deprecations` flag. You may also need to -run with `--no-partial-parse` as some deprecations are only encountered during -parsing. -19:03:55.840646 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 2.064521, "process_in_blocks": "0", "process_kernel_time": 0.314306, "process_mem_max_rss": "181239808", "process_out_blocks": "0", "process_user_time": 1.929906} -19:03:55.840808 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 19:03:55.840776 after 2.06 seconds -19:03:55.840941 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} -19:03:55.841067 [debug] [MainThread]: Flushing usage events -19:03:56.468885 [debug] [MainThread]: An error was encountered while trying to flush usage events -19:07:36.556151 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'start', 'context': [, , ]} - - -============================== 19:07:36.558168 | eb0bb5d4-b111-46cf-9b81-5e2f74744337 ============================== -19:07:36.558168 [info ] [MainThread]: Running with dbt=1.12.0 -19:07:36.558368 [debug] [MainThread]: running dbt with arguments {'send_anonymous_usage_stats': 'True', 'version_check': 'True', 'profiles_dir': '.', 'use_experimental_parser': 'False', 'empty': 'None', 'fail_fast': 'False', 'target_path': 'None', 'log_format': 'default', 'log_path': '/Users/tudor/projects/school_compare/pipeline/transform/logs', 'printer_width': '80', 'maximum_seed_size_mib': '1', 'indirect_selection': 'eager', 'warn_error_options': 'WarnErrorOptionsV2(error=[], warn=[], silence=[])', 'invocation_command': 'dbt parse --profiles-dir .', 'no_print': 'None', 'log_cache_events': 'False', 'debug': 'False', 'cache_selected_only': 'False', 'static_parser': 'True', 'quiet': 'False', 'partial_parse': 'True', 'hints_enabled': 'True', 'introspect': 'True', 'warn_error': 'None', 'write_json': 'True', 'use_colors': 'True'} -19:07:36.618364 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'project_id', 'label': 'eb0bb5d4-b111-46cf-9b81-5e2f74744337', 'context': []} -19:07:36.636294 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'adapter_info', 'label': 'eb0bb5d4-b111-46cf-9b81-5e2f74744337', 'context': []} -19:07:36.636932 [info ] [MainThread]: Registered adapter: postgres=1.11.0 -19:07:36.677947 [debug] [MainThread]: checksum: 67b34be33115abb132a386d054767a080c4d76fc101bebe6b4f686156fa47e48, vars: {}, profile: school_compare, target: dev, version: 1.12.0 -19:07:36.747220 [debug] [MainThread]: Partial parsing enabled: 0 files deleted, 1 files added, 2 files changed. -19:07:36.747561 [debug] [MainThread]: Partial parsing: added file: school_compare://models/staging/stg_ees_ks4_national.sql -19:07:36.748386 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/staging/_stg_sources.yml -19:07:36.748507 [debug] [MainThread]: Partial parsing: updated file: school_compare://models/marts/fact_ks4_national_averages.sql -19:07:36.981758 [warn ] [MainThread]: [WARNING][MissingArgumentsPropertyInGenericTestDeprecation]: Deprecated -functionality -Found top-level arguments to test `relationships` defined on 'dim_location' in -package 'school_compare' (models/marts/_marts_schema.yml). Arguments to generic -tests should be nested under the `arguments` property. -19:07:36.982033 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': 'eb0bb5d4-b111-46cf-9b81-5e2f74744337', 'property_': 'warn', 'context': []} -19:07:36.989319 [warn ] [MainThread]: [WARNING][PropertyMovedToConfigDeprecation]: Deprecated functionality -Found `severity` as a top-level property of `data_tests.not_null.severity` in -file `models/marts/_marts_schema.yml`. The `severity` top-level property should -be moved into the `config` of `data_tests.not_null.severity`. -19:07:36.989498 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'deprecation', 'label': 'eb0bb5d4-b111-46cf-9b81-5e2f74744337', 'property_': 'warn', 'context': []} -19:07:37.071622 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'load_project', 'label': 'eb0bb5d4-b111-46cf-9b81-5e2f74744337', 'context': []} -19:07:37.072886 [info ] [MainThread]: Performance info: /Users/tudor/projects/school_compare/pipeline/transform/target/perf_info.json -19:07:37.113602 [debug] [MainThread]: Wrote artifact WritableManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/manifest.json -19:07:37.114788 [debug] [MainThread]: Wrote artifact SemanticManifest to /Users/tudor/projects/school_compare/pipeline/transform/target/semantic_manifest.json -19:07:37.123055 [debug] [MainThread]: Wrote artifact OsiDocument to /Users/tudor/projects/school_compare/pipeline/transform/target/osi_document.json -19:07:37.123294 [warn ] [MainThread]: [WARNING][DeprecationsSummary]: Deprecated functionality -Summary of encountered deprecations: -- MissingArgumentsPropertyInGenericTestDeprecation: 7 occurrences -- PropertyMovedToConfigDeprecation: 4 occurrences -To see all deprecation instances instead of just the first occurrence of each, -run command again with the `--show-all-deprecations` flag. You may also need to -run with `--no-partial-parse` as some deprecations are only encountered during -parsing. -19:07:37.123506 [debug] [MainThread]: Resource report: {"command_name": "parse", "command_success": true, "command_wall_clock_time": 0.59700793, "process_in_blocks": "0", "process_kernel_time": 0.129478, "process_mem_max_rss": "146587648", "process_out_blocks": "0", "process_user_time": 0.936024} -19:07:37.123650 [debug] [MainThread]: Command `python -m dbt.cli.main parse` succeeded at 19:07:37.123622 after 0.60 seconds -19:07:37.123768 [debug] [MainThread]: Sending event: {'category': 'dbt', 'action': 'invocation', 'label': 'end', 'context': [, , ]} -19:07:37.123876 [debug] [MainThread]: Flushing usage events -19:07:37.533590 [debug] [MainThread]: An error was encountered while trying to flush usage events diff --git a/pipeline/transform/target/manifest.json b/pipeline/transform/target/manifest.json deleted file mode 100644 index 1b76dca..0000000 --- a/pipeline/transform/target/manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v12.json", "dbt_version": "1.12.0", "generated_at": "2026-07-16T18:07:36.722776Z", "invocation_id": "eb0bb5d4-b111-46cf-9b81-5e2f74744337", "invocation_started_at": "2026-07-16T18:03:53.796839+00:00", "env": {}, "project_name": "school_compare", "project_id": "ad0b158e159ec53d890c04c6537e7574", "user_id": "d8efb97e-d188-4585-899c-3ba2e484f763", "send_anonymous_usage_stats": true, "adapter_type": "postgres", "quoting": {"database": true, "schema": true, "identifier": true, "column": null}, "run_started_at": "2026-07-16T18:03:53.796964+00:00"}, "nodes": {"seed.school_compare.la_code_names": {"database": "school_compare", "schema": "seeds", "name": "la_code_names", "resource_type": "seed", "package_name": "school_compare", "path": "la_code_names.csv", "original_file_path": "seeds/la_code_names.csv", "unique_id": "seed.school_compare.la_code_names", "fqn": ["school_compare", "la_code_names"], "alias": "la_code_names", "checksum": {"name": "sha256", "checksum": "a3924c9bda3cb6be5f85832b0744c21935a4e006bc9e2d71ca03b075157abe8e"}, "config": {"enabled": true, "alias": null, "schema": "seeds", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "seeds"}, "created_at": 1784225035.5701702, "relation_name": "\"school_compare\".\"seeds\".\"la_code_names\"", "raw_code": "", "doc_blocks": [], "root_path": "/Users/tudor/projects/school_compare/pipeline/transform", "depends_on": {"macros": []}}, "seed.school_compare.gias_code_names": {"database": "school_compare", "schema": "seeds", "name": "gias_code_names", "resource_type": "seed", "package_name": "school_compare", "path": "gias_code_names.csv", "original_file_path": "seeds/gias_code_names.csv", "unique_id": "seed.school_compare.gias_code_names", "fqn": ["school_compare", "gias_code_names"], "alias": "gias_code_names", "checksum": {"name": "sha256", "checksum": "be09e2443f1d0d9ed3d0f8637ae38183e63b9e40c208e8684993e17ac5f2903b"}, "config": {"enabled": true, "alias": null, "schema": "seeds", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "seeds"}, "created_at": 1784225035.5709639, "relation_name": "\"school_compare\".\"seeds\".\"gias_code_names\"", "raw_code": "", "doc_blocks": [], "root_path": "/Users/tudor/projects/school_compare/pipeline/transform", "depends_on": {"macros": []}}, "seed.school_compare.school_type_codes": {"database": "school_compare", "schema": "seeds", "name": "school_type_codes", "resource_type": "seed", "package_name": "school_compare", "path": "school_type_codes.csv", "original_file_path": "seeds/school_type_codes.csv", "unique_id": "seed.school_compare.school_type_codes", "fqn": ["school_compare", "school_type_codes"], "alias": "school_type_codes", "checksum": {"name": "sha256", "checksum": "6020353ed39356287495de70fd2b44bed411ef059b2e61b0136c0faf3c9769cf"}, "config": {"enabled": true, "alias": null, "schema": "seeds", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "seeds"}, "created_at": 1784225035.5715232, "relation_name": "\"school_compare\".\"seeds\".\"school_type_codes\"", "raw_code": "", "doc_blocks": [], "root_path": "/Users/tudor/projects/school_compare/pipeline/transform", "depends_on": {"macros": []}}, "model.school_compare.stg_ees_ks4_national": {"database": "school_compare", "schema": "staging", "name": "stg_ees_ks4_national", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_ks4_national.sql", "original_file_path": "models/staging/stg_ees_ks4_national.sql", "unique_id": "model.school_compare.stg_ees_ks4_national", "fqn": ["school_compare", "staging", "stg_ees_ks4_national"], "alias": "stg_ees_ks4_national", "checksum": {"name": "sha256", "checksum": "cdc96082b585ef4940e4d3950a129f9c2a3fec9b10a2261be885f9e59a4c6be8"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.821694, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_ks4_national\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: official DfE KS4 national headline averages \u2014 one row per\n-- academic year (England, all state-funded, all pupils). Source: EES data\n-- catalogue \"National characteristics summary data\". Suppressed values\n-- ('z', 'x') are coerced to NULL by safe_numeric \u2014 Progress 8 is 'z' in\n-- years with no KS2 baseline (e.g. 2024/25): legitimately unpublished.\n\nselect\n cast(trim(time_period) as integer) as year,\n {{ safe_numeric('attainment_8_score') }} as attainment_8_score,\n {{ safe_numeric('progress_8_score') }} as progress_8_score,\n {{ safe_numeric('english_maths_standard_pass_pct') }} as english_maths_standard_pass_pct,\n {{ safe_numeric('english_maths_strong_pass_pct') }} as english_maths_strong_pass_pct,\n {{ safe_numeric('ebacc_entry_pct') }} as ebacc_entry_pct,\n {{ safe_numeric('ebacc_standard_pass_pct') }} as ebacc_standard_pass_pct,\n {{ safe_numeric('ebacc_strong_pass_pct') }} as ebacc_strong_pass_pct,\n {{ safe_numeric('ebacc_avg_score') }} as ebacc_avg_score\nfrom {{ source('raw', 'ees_ks4_national') }}\nwhere time_period ~ '^[0-9]+$'", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_ks4_national"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_ks4_national"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.dim_location": {"database": "school_compare", "schema": "marts", "name": "dim_location", "resource_type": "model", "package_name": "school_compare", "path": "marts/dim_location.sql", "original_file_path": "models/marts/dim_location.sql", "unique_id": "model.school_compare.dim_location", "fqn": ["school_compare", "marts", "dim_location"], "alias": "dim_location", "checksum": {"name": "sha256", "checksum": "d52fb2b99be90d6fa3c9e3e4f75b5f1bf872450a5e4460aea47d6e9dd6d1d210"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "School location dimension with PostGIS geometry", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "postcode": {"name": "postcode", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.955647, "relation_name": "\"school_compare\".\"marts\".\"dim_location\"", "raw_code": "-- Mart: School location dimension \u2014 one row per URN, PostGIS-enabled\n-- Geometry derived from GIAS easting/northing (British National Grid \u2192 WGS84).\n-- For schools missing easting/northing, the geocode script backfills via Postcodes.io.\n\nselect\n s.urn,\n s.address_line1,\n s.address_line2,\n s.town,\n s.county,\n s.postcode,\n s.local_authority_code,\n s.local_authority_name,\n s.parliamentary_constituency,\n s.urban_rural,\n s.easting,\n s.northing,\n case\n when s.easting is not null and s.northing is not null\n then ST_Transform(ST_SetSRID(ST_MakePoint(s.easting::double precision, s.northing::double precision), 27700), 4326)\n else null\n end as geom,\n case\n when s.easting is not null and s.northing is not null\n then ST_Y(ST_Transform(ST_SetSRID(ST_MakePoint(s.easting::double precision, s.northing::double precision), 27700), 4326))\n else null\n end as latitude,\n case\n when s.easting is not null and s.northing is not null\n then ST_X(ST_Transform(ST_SetSRID(ST_MakePoint(s.easting::double precision, s.northing::double precision), 27700), 4326))\n else null\n end as longitude\nfrom {{ ref('stg_gias_establishments') }} s\n-- Must match dim_school's status filter exactly (the API inner-joins the two).\nwhere s.status_code in (1, 3)", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_gias_establishments", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_gias_establishments"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn"], "time_spine": null}, "model.school_compare.dim_school": {"database": "school_compare", "schema": "marts", "name": "dim_school", "resource_type": "model", "package_name": "school_compare", "path": "marts/dim_school.sql", "original_file_path": "models/marts/dim_school.sql", "unique_id": "model.school_compare.dim_school", "fqn": ["school_compare", "marts", "dim_school"], "alias": "dim_school", "checksum": {"name": "sha256", "checksum": "116be1472b8a5ef306d333ad7aec953f47ae184f8ceb8af7bab9770133b7a913"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Canonical school dimension \u2014 one row per active URN", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "school_name": {"name": "school_name", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "phase_code": {"name": "phase_code", "description": "GIAS PhaseOfEducation code (2 = Primary, 4 = Secondary, 7 = All-through, etc. \u2014 see seeds/gias_code_names.csv). May be null for a small number of independent schools where GIAS publishes \"Not Applicable\", no statutory age range, and the school name gives no hint.\n", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "has_sixth_form": {"name": "has_sixth_form", "description": "Authoritative sixth-form flag from GIAS OfficialSixthForm. \"Has a sixth form\" => true; \"Does not have a sixth form\" and \"Not applicable\" => false; blank GIAS value falls back to statutory_high_age >= 18. Replaces the age_range-contains-\"18\" heuristic (spec 2026-07-07 \u00a73).\n", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "status_code": {"name": "status_code", "description": "GIAS EstablishmentStatus code (1 = Open, 3 = Open but proposed to close)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "school_type_code": {"name": "school_type_code", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "religious_character_code": {"name": "religious_character_code", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "admissions_policy_code": {"name": "admissions_policy_code", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.956583, "relation_name": "\"school_compare\".\"marts\".\"dim_school\"", "raw_code": "-- Mart: Canonical school dimension \u2014 one row per active URN\n\n-- int_ofsted_latest is only ref()'d inside a conditional block below (it may not\n-- exist before the Ofsted pipeline first runs), so declare the dependency\n-- explicitly for dbt's DAG.\n-- depends_on: {{ ref('int_ofsted_latest') }}\n\nwith schools as (\n select * from {{ ref('stg_gias_establishments') }}\n)\n\n{% set ofsted_relation = adapter.get_relation(\n database=target.database,\n schema='intermediate',\n identifier='int_ofsted_latest'\n) %}\n\nselect\n s.urn,\n s.local_authority_code * 1000 + s.establishment_number as laestab,\n s.school_name,\n -- Phase in GIAS code space (see seeds/gias_code_names.csv):\n -- 2 = Primary, 4 = Secondary, 7 = All-through, 0 = Not applicable.\n case\n -- 1. Trust GIAS phase when it's a real value (0 = the catch-all \"Not Applicable\")\n when s.phase_code is not null and s.phase_code != 0\n then s.phase_code\n -- 2. Infer from statutory age range (independent schools still publish these)\n when s.statutory_high_age is not null and s.statutory_high_age <= 11 then 2\n when s.statutory_low_age is not null and s.statutory_low_age >= 11 then 4\n when s.statutory_low_age is not null and s.statutory_high_age is not null\n and s.statutory_low_age < 11 and s.statutory_high_age > 11 then 7\n -- 3. Fallback: infer from school name (covers independents with missing ages)\n when s.school_name ilike '%primary%'\n or s.school_name ilike '%infant%'\n or s.school_name ilike '%junior%'\n or s.school_name ilike '%preparatory%'\n or s.school_name ilike '% prep school%'\n or s.school_name ilike '% prep %'\n then 2\n when s.school_name ilike '%secondary%'\n or s.school_name ilike '%high school%'\n or s.school_name ilike '%grammar%'\n or s.school_name ilike '%senior school%'\n or s.school_name ilike '%upper school%'\n then 4\n -- 4. Give up \u2014 null renders no phase pill\n else null\n end as phase_code,\n s.school_type_code,\n s.academy_trust_name,\n s.academy_trust_uid,\n s.religious_character_code,\n s.gender,\n s.statutory_low_age || '-' || s.statutory_high_age as age_range,\n -- GIAS OfficialSixthForm in code space: 1 = has, 2 = does not, 0 = N/A.\n -- Null (rare, new establishments) falls back to the statutory age range.\n case\n when s.official_sixth_form_code = 1 then true\n when s.official_sixth_form_code in (0, 2) then false\n else coalesce(s.statutory_high_age >= 18, false)\n end as has_sixth_form,\n s.capacity,\n s.total_pupils,\n concat_ws(' ', s.head_title, s.head_first_name, s.head_last_name) as headteacher_name,\n s.website,\n s.telephone,\n s.open_date,\n s.close_date,\n s.status_code,\n s.nursery_provision,\n s.admissions_policy_code,\n\n -- Latest Ofsted (populated after monthly Ofsted pipeline runs)\n {% if ofsted_relation is not none %}\n -- Prefer the graded overall effectiveness; fall back to the grade parsed\n -- from the latest ungraded (Section 8) outcome when no graded grade exists.\n coalesce(o.overall_effectiveness, o.ungraded_grade) as ofsted_grade,\n o.inspection_date as ofsted_date,\n o.framework as ofsted_framework\n {% else %}\n null::text as ofsted_grade,\n null::date as ofsted_date,\n null::text as ofsted_framework\n {% endif %}\n\nfrom schools s\n{% if ofsted_relation is not none %}\nleft join {{ ref('int_ofsted_latest') }} o on s.urn = o.urn\n{% endif %}\n-- 1 = Open; 3 = Open, but proposed to close (still operating; drops out when\n-- GIAS flips to Closed \u2014 marts fully rebuild each run).\nwhere s.status_code in (1, 3)", "doc_blocks": [], "language": "sql", "refs": [{"name": "int_ofsted_latest", "package": null, "version": null}, {"name": "stg_gias_establishments", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.int_ofsted_latest", "model.school_compare.stg_gias_establishments"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn"], "time_spine": null}, "model.school_compare.stg_gias_establishments": {"database": "school_compare", "schema": "staging", "name": "stg_gias_establishments", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_gias_establishments.sql", "original_file_path": "models/staging/stg_gias_establishments.sql", "unique_id": "model.school_compare.stg_gias_establishments", "fqn": ["school_compare", "staging", "stg_gias_establishments"], "alias": "stg_gias_establishments", "checksum": {"name": "sha256", "checksum": "f441ba1ec21d49447e34206e11189040431a3dd525e4a51bc40e8c7c2ba032b0"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.8353448, "relation_name": "\"school_compare\".\"staging\".\"stg_gias_establishments\"", "raw_code": "-- Staging model: GIAS establishments\n-- Light cleaning, type casting, column renaming from raw GIAS bulk CSV\n\nwith source as (\n select * from {{ source('raw', 'gias_establishments') }}\n),\n\nrenamed as (\n select\n cast(\"URN\" as integer) as urn,\n cast(nullif(\"LA (code)\", '') as integer) as local_authority_code,\n \"LA (name)\" as local_authority_name,\n cast(nullif(\"EstablishmentNumber\", '') as integer) as establishment_number,\n \"EstablishmentName\" as school_name,\n cast(nullif(trim(\"TypeOfEstablishment (code)\"), '') as integer) as school_type_code,\n cast(nullif(trim(\"PhaseOfEducation (code)\"), '') as integer) as phase_code,\n cast(nullif(trim(\"OfficialSixthForm (code)\"), '') as integer) as official_sixth_form_code,\n \"Gender (name)\" as gender,\n cast(nullif(trim(\"ReligiousCharacter (code)\"), '') as integer) as religious_character_code,\n cast(nullif(trim(\"AdmissionsPolicy (code)\"), '') as integer) as admissions_policy_code,\n \"SchoolCapacity\" as capacity,\n cast(nullif(\"NumberOfPupils\", '') as integer) as total_pupils,\n \"HeadTitle (name)\" as head_title,\n \"HeadFirstName\" as head_first_name,\n \"HeadLastName\" as head_last_name,\n \"TelephoneNum\" as telephone,\n \"SchoolWebsite\" as website,\n \"Street\" as address_line1,\n \"Locality\" as address_line2,\n \"Town\" as town,\n \"County (name)\" as county,\n \"Postcode\" as postcode,\n cast(nullif(trim(\"EstablishmentStatus (code)\"), '') as integer) as status_code,\n case when \"OpenDate\" = '' then null else to_date(\"OpenDate\", 'DD-MM-YYYY') end as open_date,\n case when \"CloseDate\" = '' then null else to_date(\"CloseDate\", 'DD-MM-YYYY') end as close_date,\n \"Trusts (name)\" as academy_trust_name,\n cast(nullif(\"Trusts (code)\", '') as integer) as academy_trust_uid,\n \"UrbanRural (name)\" as urban_rural,\n \"ParliamentaryConstituency (name)\" as parliamentary_constituency,\n \"NurseryProvision (name)\" as nursery_provision,\n cast(nullif(\"Easting\", '') as integer) as easting,\n cast(nullif(\"Northing\", '') as integer) as northing,\n cast(nullif(\"StatutoryLowAge\", '') as integer) as statutory_low_age,\n cast(nullif(\"StatutoryHighAge\", '') as integer) as statutory_high_age\n from source\n where \"URN\" is not null\n)\n\nselect * from renamed", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "gias_establishments"]], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["source.school_compare.raw.gias_establishments"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_performance": {"database": "school_compare", "schema": "marts", "name": "fact_performance", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_performance.sql", "original_file_path": "models/marts/fact_performance.sql", "unique_id": "model.school_compare.fact_performance", "fqn": ["school_compare", "marts", "fact_performance"], "alias": "fact_performance", "checksum": {"name": "sha256", "checksum": "ea8849a6596cdb40066194013400acd5b70cd71b49dd7de8052a67afbe012577"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Merged KS2 + KS4 performance \u2014 one row per URN per year via FULL OUTER JOIN. All-through schools have both KS2 and KS4 columns populated; pure primary schools have NULL KS4 columns; pure secondary schools have NULL KS2 columns.", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.957527, "relation_name": "\"school_compare\".\"marts\".\"fact_performance\"", "raw_code": "-- Mart: Merged KS2 + KS4 performance \u2014 one row per URN per year\n-- FULL OUTER JOIN so all-through schools have both KS2 and KS4 columns populated.\n-- Pure primary schools have NULL KS4 columns; pure secondary schools have NULL KS2 columns.\n\nwith ks2 as (\n select * from {{ ref('fact_ks2_performance') }}\n),\n\nks4 as (\n select * from {{ ref('fact_ks4_performance') }}\n)\n\nselect\n -- Join keys (coalesced so neither side is dropped)\n coalesce(ks2.urn, ks4.urn) as urn,\n coalesce(ks2.source_urn, ks4.source_urn) as source_urn,\n coalesce(ks2.year, ks4.year) as year,\n coalesce(ks2.total_pupils, ks4.total_pupils) as total_pupils,\n coalesce(ks2.eligible_pupils, ks4.eligible_pupils) as eligible_pupils,\n\n -- KS2 columns (NULL for pure secondary schools)\n ks2.rwm_expected_pct,\n ks2.rwm_high_pct,\n ks2.reading_expected_pct,\n ks2.reading_high_pct,\n ks2.reading_avg_score,\n ks2.reading_progress,\n ks2.reading_progress_lower_ci,\n ks2.reading_progress_upper_ci,\n ks2.writing_expected_pct,\n ks2.writing_high_pct,\n ks2.writing_progress,\n ks2.writing_progress_lower_ci,\n ks2.writing_progress_upper_ci,\n ks2.writing_working_towards_pct,\n ks2.maths_expected_pct,\n ks2.maths_high_pct,\n ks2.maths_avg_score,\n ks2.maths_progress,\n ks2.maths_progress_lower_ci,\n ks2.maths_progress_upper_ci,\n ks2.gps_expected_pct,\n ks2.gps_high_pct,\n ks2.gps_avg_score,\n ks2.science_expected_pct,\n ks2.reading_absence_pct,\n ks2.writing_absence_pct,\n ks2.maths_absence_pct,\n ks2.gps_absence_pct,\n ks2.science_absence_pct,\n ks2.rwm_expected_boys_pct,\n ks2.rwm_high_boys_pct,\n ks2.rwm_expected_girls_pct,\n ks2.rwm_high_girls_pct,\n ks2.rwm_expected_disadvantaged_pct,\n ks2.rwm_expected_non_disadvantaged_pct,\n ks2.disadvantaged_gap,\n ks2.disadvantaged_pct,\n ks2.eal_pct,\n ks2.stability_pct,\n\n -- KS4 columns (NULL for pure primary schools)\n ks4.attainment_8_score,\n ks4.progress_8_score,\n ks4.progress_8_lower_ci,\n ks4.progress_8_upper_ci,\n ks4.progress_8_english,\n ks4.progress_8_maths,\n ks4.progress_8_ebacc,\n ks4.progress_8_open,\n ks4.progress_8_banding,\n ks4.attainment_8_disadvantage_gap,\n ks4.progress_8_disadvantage_gap,\n ks4.english_maths_strong_pass_pct,\n ks4.english_maths_standard_pass_pct,\n ks4.ebacc_entry_pct,\n ks4.ebacc_strong_pass_pct,\n ks4.ebacc_standard_pass_pct,\n ks4.ebacc_avg_score,\n ks4.gcse_grade_91_pct,\n ks4.prior_attainment_avg,\n ks4.sen_pct,\n\n -- Shared SEN columns \u2014 KS2 preferred, fall back to KS4\n coalesce(ks2.sen_support_pct, ks4.sen_support_pct) as sen_support_pct,\n coalesce(ks2.sen_ehcp_pct, ks4.sen_ehcp_pct) as sen_ehcp_pct\n\nfrom ks2\nfull outer join ks4\n on ks2.urn = ks4.urn\n and ks2.year = ks4.year", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_performance", "package": null, "version": null}, {"name": "fact_ks4_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.fact_ks2_performance", "model.school_compare.fact_ks4_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn || '-' || year"], "time_spine": null}, "model.school_compare.fact_ks2_performance": {"database": "school_compare", "schema": "marts", "name": "fact_ks2_performance", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_ks2_performance.sql", "original_file_path": "models/marts/fact_ks2_performance.sql", "unique_id": "model.school_compare.fact_ks2_performance", "fqn": ["school_compare", "marts", "fact_ks2_performance"], "alias": "fact_ks2_performance", "checksum": {"name": "sha256", "checksum": "ee3f734e98d37c6b3459f08eb35e78e193c2c4995fb64a4bbe2d58a2382acf8c"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "KS2 attainment \u2014 one row per URN per year", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "reading_progress_lower_ci": {"name": "reading_progress_lower_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "reading_progress_upper_ci": {"name": "reading_progress_upper_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "writing_progress_lower_ci": {"name": "writing_progress_lower_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "writing_progress_upper_ci": {"name": "writing_progress_upper_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "writing_working_towards_pct": {"name": "writing_working_towards_pct", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "maths_progress_lower_ci": {"name": "maths_progress_lower_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "maths_progress_upper_ci": {"name": "maths_progress_upper_ci", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.957371, "relation_name": "\"school_compare\".\"marts\".\"fact_ks2_performance\"", "raw_code": "-- Mart: KS2 performance fact table \u2014 one row per URN per year\n-- Includes predecessor data via lineage resolution\n\nselect\n current_urn as urn,\n source_urn,\n year,\n total_pupils,\n eligible_pupils,\n\n -- Core attainment\n rwm_expected_pct,\n rwm_high_pct,\n reading_expected_pct,\n reading_high_pct,\n reading_avg_score,\n reading_progress,\n reading_progress_lower_ci,\n reading_progress_upper_ci,\n writing_expected_pct,\n writing_high_pct,\n writing_progress,\n writing_progress_lower_ci,\n writing_progress_upper_ci,\n writing_working_towards_pct,\n maths_expected_pct,\n maths_high_pct,\n maths_avg_score,\n maths_progress,\n maths_progress_lower_ci,\n maths_progress_upper_ci,\n gps_expected_pct,\n gps_high_pct,\n gps_avg_score,\n science_expected_pct,\n\n -- Absence\n reading_absence_pct,\n writing_absence_pct,\n maths_absence_pct,\n gps_absence_pct,\n science_absence_pct,\n\n -- Gender\n rwm_expected_boys_pct,\n rwm_high_boys_pct,\n rwm_expected_girls_pct,\n rwm_high_girls_pct,\n\n -- Disadvantaged\n rwm_expected_disadvantaged_pct,\n rwm_expected_non_disadvantaged_pct,\n disadvantaged_gap,\n\n -- Context\n disadvantaged_pct,\n eal_pct,\n sen_support_pct,\n sen_ehcp_pct,\n stability_pct\n\nfrom {{ ref('int_ks2_with_lineage') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "int_ks2_with_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.int_ks2_with_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn || '-' || year"], "time_spine": null}, "model.school_compare.int_ks2_with_lineage": {"database": "school_compare", "schema": "intermediate", "name": "int_ks2_with_lineage", "resource_type": "model", "package_name": "school_compare", "path": "intermediate/int_ks2_with_lineage.sql", "original_file_path": "models/intermediate/int_ks2_with_lineage.sql", "unique_id": "model.school_compare.int_ks2_with_lineage", "fqn": ["school_compare", "intermediate", "int_ks2_with_lineage"], "alias": "int_ks2_with_lineage", "checksum": {"name": "sha256", "checksum": "cf0cd2ad3e55172d40bcdc4c0b5b750bdf5d7c1618f472b359372e34c467a89b"}, "config": {"enabled": true, "alias": null, "schema": "intermediate", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "intermediate"}, "created_at": 1784225256.837429, "relation_name": "\"school_compare\".\"intermediate\".\"int_ks2_with_lineage\"", "raw_code": "-- Intermediate model: KS2 data chained across academy conversions\n-- Maps predecessor URN data to the current active URN\n-- Unions EES (2022+) and legacy (2015-2019) school-level data\n\nwith all_ks2 as (\n select * from {{ ref('stg_ees_ks2') }}\n union all\n select * from {{ ref('stg_legacy_ks2') }}\n),\n\ncurrent_ks2 as (\n select\n urn as current_urn,\n urn as source_urn,\n year, total_pupils, eligible_pupils,\n rwm_expected_pct, rwm_high_pct,\n reading_expected_pct, reading_high_pct, reading_avg_score, reading_progress,\n reading_progress_lower_ci, reading_progress_upper_ci,\n writing_expected_pct, writing_high_pct, writing_progress,\n writing_progress_lower_ci, writing_progress_upper_ci, writing_working_towards_pct,\n maths_expected_pct, maths_high_pct, maths_avg_score, maths_progress,\n maths_progress_lower_ci, maths_progress_upper_ci,\n gps_expected_pct, gps_high_pct, gps_avg_score, science_expected_pct,\n reading_absence_pct, writing_absence_pct, maths_absence_pct, gps_absence_pct, science_absence_pct,\n rwm_expected_boys_pct, rwm_high_boys_pct, rwm_expected_girls_pct, rwm_high_girls_pct,\n rwm_expected_disadvantaged_pct, rwm_expected_non_disadvantaged_pct, disadvantaged_gap,\n disadvantaged_pct, eal_pct, sen_support_pct, sen_ehcp_pct, stability_pct\n from all_ks2\n),\n\npredecessor_ks2 as (\n -- If multiple predecessors have data for the same year, keep the one with most pupils.\n select distinct on (lin.current_urn, ks2.year)\n lin.current_urn,\n ks2.urn as source_urn,\n ks2.year, ks2.total_pupils, ks2.eligible_pupils,\n ks2.rwm_expected_pct, ks2.rwm_high_pct,\n ks2.reading_expected_pct, ks2.reading_high_pct, ks2.reading_avg_score, ks2.reading_progress,\n ks2.reading_progress_lower_ci, ks2.reading_progress_upper_ci,\n ks2.writing_expected_pct, ks2.writing_high_pct, ks2.writing_progress,\n ks2.writing_progress_lower_ci, ks2.writing_progress_upper_ci, ks2.writing_working_towards_pct,\n ks2.maths_expected_pct, ks2.maths_high_pct, ks2.maths_avg_score, ks2.maths_progress,\n ks2.maths_progress_lower_ci, ks2.maths_progress_upper_ci,\n ks2.gps_expected_pct, ks2.gps_high_pct, ks2.gps_avg_score, ks2.science_expected_pct,\n ks2.reading_absence_pct, ks2.writing_absence_pct, ks2.maths_absence_pct, ks2.gps_absence_pct, ks2.science_absence_pct,\n ks2.rwm_expected_boys_pct, ks2.rwm_high_boys_pct, ks2.rwm_expected_girls_pct, ks2.rwm_high_girls_pct,\n ks2.rwm_expected_disadvantaged_pct, ks2.rwm_expected_non_disadvantaged_pct, ks2.disadvantaged_gap,\n ks2.disadvantaged_pct, ks2.eal_pct, ks2.sen_support_pct, ks2.sen_ehcp_pct, ks2.stability_pct\n from all_ks2 ks2\n inner join {{ ref('int_school_lineage') }} lin\n on ks2.urn = lin.predecessor_urn\n where not exists (\n select 1 from all_ks2 curr\n where curr.urn = lin.current_urn\n and curr.year = ks2.year\n )\n order by lin.current_urn, ks2.year, ks2.total_pupils desc nulls last\n),\n\ncombined as (\n select * from current_ks2\n union all\n select * from predecessor_ks2\n)\n\nselect * from combined", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_ks2", "package": null, "version": null}, {"name": "stg_legacy_ks2", "package": null, "version": null}, {"name": "int_school_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_ks2", "model.school_compare.stg_legacy_ks2", "model.school_compare.int_school_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_ks4_national_averages": {"database": "school_compare", "schema": "marts", "name": "fact_ks4_national_averages", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_ks4_national_averages.sql", "original_file_path": "models/marts/fact_ks4_national_averages.sql", "unique_id": "model.school_compare.fact_ks4_national_averages", "fqn": ["school_compare", "marts", "fact_ks4_national_averages"], "alias": "fact_ks4_national_averages", "checksum": {"name": "sha256", "checksum": "6652829c2e28bab0f05474060d1cbda23c1009418ccef3791f810553e2f99f98"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Computed national KS4 averages (means across state schools in our dataset \u2014 not official DfE figures) \u2014 one row per academic year", "columns": {"year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.9580421, "relation_name": "\"school_compare\".\"marts\".\"fact_ks4_national_averages\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Mart: OFFICIAL DfE KS4 national headline averages \u2014 one row per academic\n-- year (England, state-funded, all pupils), from the EES national dataset.\n-- Replaces the previous unweighted school-level means, which were 7\u201315\n-- points off every headline measure and produced an arithmetically\n-- impossible national Progress 8. gcse_grade_91_pct has no official\n-- national series and is NULL (schema kept for the API model).\n\nselect\n year,\n attainment_8_score,\n progress_8_score,\n english_maths_standard_pass_pct,\n english_maths_strong_pass_pct,\n ebacc_entry_pct,\n ebacc_standard_pass_pct,\n ebacc_strong_pass_pct,\n ebacc_avg_score,\n cast(null as double precision) as gcse_grade_91_pct\nfrom {{ ref('stg_ees_ks4_national') }}\norder by year", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_ks4_national", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_ks4_national"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["year"], "time_spine": null}, "model.school_compare.fact_ks4_performance": {"database": "school_compare", "schema": "marts", "name": "fact_ks4_performance", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_ks4_performance.sql", "original_file_path": "models/marts/fact_ks4_performance.sql", "unique_id": "model.school_compare.fact_ks4_performance", "fqn": ["school_compare", "marts", "fact_ks4_performance"], "alias": "fact_ks4_performance", "checksum": {"name": "sha256", "checksum": "3afb0dc042db222966de51680b08211c603d099f2db132137dda6abae9ac0b17"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "KS4 attainment \u2014 one row per URN per year", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "progress_8_banding": {"name": "progress_8_banding", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "attainment_8_disadvantage_gap": {"name": "attainment_8_disadvantage_gap", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "progress_8_disadvantage_gap": {"name": "progress_8_disadvantage_gap", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.95791, "relation_name": "\"school_compare\".\"marts\".\"fact_ks4_performance\"", "raw_code": "-- Mart: KS4 performance fact table \u2014 one row per URN per year\n-- Includes predecessor data via lineage resolution\n\nselect\n current_urn as urn,\n source_urn,\n year,\n total_pupils,\n eligible_pupils,\n prior_attainment_avg,\n\n -- Attainment 8\n attainment_8_score,\n\n -- Progress 8\n progress_8_score,\n progress_8_lower_ci,\n progress_8_upper_ci,\n progress_8_banding,\n attainment_8_disadvantage_gap,\n progress_8_disadvantage_gap,\n progress_8_english,\n progress_8_maths,\n progress_8_ebacc,\n progress_8_open,\n\n -- English & Maths\n english_maths_strong_pass_pct,\n english_maths_standard_pass_pct,\n\n -- EBacc\n ebacc_entry_pct,\n ebacc_strong_pass_pct,\n ebacc_standard_pass_pct,\n ebacc_avg_score,\n\n -- GCSE\n gcse_grade_91_pct,\n\n -- Context\n sen_pct,\n sen_ehcp_pct,\n sen_support_pct\n\nfrom {{ ref('int_ks4_with_lineage') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "int_ks4_with_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.int_ks4_with_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn || '-' || year"], "time_spine": null}, "model.school_compare.int_ks4_with_lineage": {"database": "school_compare", "schema": "intermediate", "name": "int_ks4_with_lineage", "resource_type": "model", "package_name": "school_compare", "path": "intermediate/int_ks4_with_lineage.sql", "original_file_path": "models/intermediate/int_ks4_with_lineage.sql", "unique_id": "model.school_compare.int_ks4_with_lineage", "fqn": ["school_compare", "intermediate", "int_ks4_with_lineage"], "alias": "int_ks4_with_lineage", "checksum": {"name": "sha256", "checksum": "0f1837fc648e40dea60bdf7a45d60824017665bbc189e497e20203d4739f5a53"}, "config": {"enabled": true, "alias": null, "schema": "intermediate", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "intermediate"}, "created_at": 1784225256.839802, "relation_name": "\"school_compare\".\"intermediate\".\"int_ks4_with_lineage\"", "raw_code": "-- Intermediate model: KS4 data chained across academy conversions\n-- Unions EES (2023/24 onwards) and legacy (2015/16\u20132018/19) school-level data\n\nwith all_ks4 as (\n select * from {{ ref('stg_ees_ks4') }}\n union all\n select * from {{ ref('stg_legacy_ks4') }}\n),\n\ncurrent_ks4 as (\n select\n urn as current_urn,\n urn as source_urn,\n year, total_pupils, eligible_pupils, prior_attainment_avg,\n attainment_8_score,\n progress_8_score, progress_8_lower_ci, progress_8_upper_ci,\n progress_8_english, progress_8_maths, progress_8_ebacc, progress_8_open,\n english_maths_strong_pass_pct, english_maths_standard_pass_pct,\n ebacc_entry_pct, ebacc_strong_pass_pct, ebacc_standard_pass_pct, ebacc_avg_score,\n gcse_grade_91_pct,\n sen_pct, sen_support_pct, sen_ehcp_pct,\n progress_8_banding, attainment_8_disadvantage_gap, progress_8_disadvantage_gap\n from all_ks4\n),\n\npredecessor_ks4 as (\n -- If multiple predecessors have data for the same year, keep the one with most pupils.\n select distinct on (lin.current_urn, ks4.year)\n lin.current_urn,\n ks4.urn as source_urn,\n ks4.year, ks4.total_pupils, ks4.eligible_pupils, ks4.prior_attainment_avg,\n ks4.attainment_8_score,\n ks4.progress_8_score, ks4.progress_8_lower_ci, ks4.progress_8_upper_ci,\n ks4.progress_8_english, ks4.progress_8_maths, ks4.progress_8_ebacc, ks4.progress_8_open,\n ks4.english_maths_strong_pass_pct, ks4.english_maths_standard_pass_pct,\n ks4.ebacc_entry_pct, ks4.ebacc_strong_pass_pct, ks4.ebacc_standard_pass_pct, ks4.ebacc_avg_score,\n ks4.gcse_grade_91_pct,\n ks4.sen_pct, ks4.sen_support_pct, ks4.sen_ehcp_pct,\n ks4.progress_8_banding, ks4.attainment_8_disadvantage_gap, ks4.progress_8_disadvantage_gap\n from all_ks4 ks4\n inner join {{ ref('int_school_lineage') }} lin\n on ks4.urn = lin.predecessor_urn\n where not exists (\n select 1 from all_ks4 curr\n where curr.urn = lin.current_urn\n and curr.year = ks4.year\n )\n order by lin.current_urn, ks4.year, ks4.total_pupils desc nulls last\n),\n\ncombined as (\n select * from current_ks4\n union all\n select * from predecessor_ks4\n)\n\nselect * from combined", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_ks4", "package": null, "version": null}, {"name": "stg_legacy_ks4", "package": null, "version": null}, {"name": "int_school_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_ks4", "model.school_compare.stg_legacy_ks4", "model.school_compare.int_school_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.map_school_lineage": {"database": "school_compare", "schema": "marts", "name": "map_school_lineage", "resource_type": "model", "package_name": "school_compare", "path": "marts/map_school_lineage.sql", "original_file_path": "models/marts/map_school_lineage.sql", "unique_id": "model.school_compare.map_school_lineage", "fqn": ["school_compare", "marts", "map_school_lineage"], "alias": "map_school_lineage", "checksum": {"name": "sha256", "checksum": "ccc46724286e6f850514c1c0bacb73adc7317c3b9e1e57ca9f8dd51a49b848c4"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Predecessor/successor lineage map", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.958216, "relation_name": "\"school_compare\".\"marts\".\"map_school_lineage\"", "raw_code": "-- Mart: School predecessor/successor lineage map\n\nselect\n current_urn as urn,\n predecessor_urn,\n link_type,\n link_date,\n depth\nfrom {{ ref('int_school_lineage') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "int_school_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.int_school_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.int_school_lineage": {"database": "school_compare", "schema": "intermediate", "name": "int_school_lineage", "resource_type": "model", "package_name": "school_compare", "path": "intermediate/int_school_lineage.sql", "original_file_path": "models/intermediate/int_school_lineage.sql", "unique_id": "model.school_compare.int_school_lineage", "fqn": ["school_compare", "intermediate", "int_school_lineage"], "alias": "int_school_lineage", "checksum": {"name": "sha256", "checksum": "6b5415d216e4fca7dc3802b07795eebf1d0f71cdb5afcb14da3f56661e59c073"}, "config": {"enabled": true, "alias": null, "schema": "intermediate", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "intermediate"}, "created_at": 1784225256.8411689, "relation_name": "\"school_compare\".\"intermediate\".\"int_school_lineage\"", "raw_code": "-- Intermediate model: Recursive predecessor mapping\n-- Resolves academy conversion chains so historical data can be attributed\n-- to the current (active) URN.\n\nwith recursive lineage as (\n -- Base: schools that are predecessors (linked via academy conversion, amalgamation, etc.)\n select\n urn,\n linked_urn as predecessor_urn,\n link_type,\n link_date,\n 1 as depth\n from {{ ref('stg_gias_links') }}\n where link_type in (\n 'Predecessor',\n 'Predecessor - Loss of academy converter',\n 'Predecessor - amalgamated',\n 'Predecessor - Fresh Start'\n )\n\n union all\n\n -- Recursive step: follow the chain\n select\n l.urn,\n links.linked_urn as predecessor_urn,\n links.link_type,\n links.link_date,\n l.depth + 1\n from lineage l\n inner join {{ ref('stg_gias_links') }} links\n on l.predecessor_urn = links.urn\n where links.link_type in (\n 'Predecessor',\n 'Predecessor - Loss of academy converter',\n 'Predecessor - amalgamated',\n 'Predecessor - Fresh Start'\n )\n and l.depth < 5 -- safety limit\n)\n\nselect\n urn as current_urn,\n predecessor_urn,\n link_type,\n link_date,\n depth\nfrom lineage", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_gias_links", "package": null, "version": null}, {"name": "stg_gias_links", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_gias_links"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_gias_links": {"database": "school_compare", "schema": "staging", "name": "stg_gias_links", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_gias_links.sql", "original_file_path": "models/staging/stg_gias_links.sql", "unique_id": "model.school_compare.stg_gias_links", "fqn": ["school_compare", "staging", "stg_gias_links"], "alias": "stg_gias_links", "checksum": {"name": "sha256", "checksum": "b63bd2f36eeb2be840a344365a68879242e5cb3310d7a74e7071fe7f6a9724fc"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.841929, "relation_name": "\"school_compare\".\"staging\".\"stg_gias_links\"", "raw_code": "-- Staging model: GIAS school links (predecessor/successor chains)\n\nwith source as (\n select * from {{ source('raw', 'gias_links') }}\n),\n\nrenamed as (\n select\n cast(\"URN\" as integer) as urn,\n cast(\"LinkURN\" as integer) as linked_urn,\n \"LinkType\" as link_type,\n case when \"LinkEstablishedDate\" = '' then null else to_date(\"LinkEstablishedDate\", 'DD-MM-YYYY') end as link_date\n from source\n where \"URN\" is not null\n and \"LinkURN\" is not null\n)\n\nselect * from renamed", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "gias_links"]], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["source.school_compare.raw.gias_links"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_ofsted_inspection": {"database": "school_compare", "schema": "marts", "name": "fact_ofsted_inspection", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_ofsted_inspection.sql", "original_file_path": "models/marts/fact_ofsted_inspection.sql", "unique_id": "model.school_compare.fact_ofsted_inspection", "fqn": ["school_compare", "marts", "fact_ofsted_inspection"], "alias": "fact_ofsted_inspection", "checksum": {"name": "sha256", "checksum": "0f84ccceb71e7c7d5514164e9c6f3bbabecbca72b3547acc555b47c4dc361096"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Full Ofsted inspection history", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "inspection_date": {"name": "inspection_date", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.95843, "relation_name": "\"school_compare\".\"marts\".\"fact_ofsted_inspection\"", "raw_code": "-- Mart: Full Ofsted inspection history \u2014 one row per inspection\n\nselect\n urn,\n inspection_date,\n inspection_type,\n framework,\n overall_effectiveness,\n quality_of_education,\n behaviour_attitudes,\n personal_development,\n leadership_management,\n early_years_provision,\n sixth_form_provision,\n ungraded_outcome,\n ungraded_grade,\n rc_safeguarding_met,\n rc_inclusion,\n rc_curriculum_teaching,\n rc_achievement,\n rc_attendance_behaviour,\n rc_personal_development,\n rc_leadership_governance,\n rc_early_years,\n rc_sixth_form,\n rc_inspection_date,\n report_url\nfrom {{ ref('stg_ofsted_inspections') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ofsted_inspections", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ofsted_inspections"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.int_ofsted_latest": {"database": "school_compare", "schema": "intermediate", "name": "int_ofsted_latest", "resource_type": "model", "package_name": "school_compare", "path": "intermediate/int_ofsted_latest.sql", "original_file_path": "models/intermediate/int_ofsted_latest.sql", "unique_id": "model.school_compare.int_ofsted_latest", "fqn": ["school_compare", "intermediate", "int_ofsted_latest"], "alias": "int_ofsted_latest", "checksum": {"name": "sha256", "checksum": "82a928978d87dcf8799894786716d1fca35b65e08aaea28573974a4423b06a07"}, "config": {"enabled": true, "alias": null, "schema": "intermediate", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "intermediate"}, "created_at": 1784225256.843183, "relation_name": "\"school_compare\".\"intermediate\".\"int_ofsted_latest\"", "raw_code": "-- Intermediate model: Latest Ofsted inspection per URN\n-- Picks the most recent inspection for each school\n\nwith ranked as (\n select\n *,\n row_number() over (\n partition by urn\n order by inspection_date desc\n ) as rn\n from {{ ref('stg_ofsted_inspections') }}\n)\n\nselect\n urn,\n inspection_date,\n inspection_type,\n framework,\n overall_effectiveness,\n quality_of_education,\n behaviour_attitudes,\n personal_development,\n leadership_management,\n early_years_provision,\n sixth_form_provision,\n ungraded_outcome,\n ungraded_grade,\n rc_safeguarding_met,\n rc_inclusion,\n rc_curriculum_teaching,\n rc_achievement,\n rc_attendance_behaviour,\n rc_personal_development,\n rc_leadership_governance,\n rc_early_years,\n rc_sixth_form,\n rc_inspection_date,\n report_url\nfrom ranked\nwhere rn = 1", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ofsted_inspections", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ofsted_inspections"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_ofsted_inspections": {"database": "school_compare", "schema": "staging", "name": "stg_ofsted_inspections", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ofsted_inspections.sql", "original_file_path": "models/staging/stg_ofsted_inspections.sql", "unique_id": "model.school_compare.stg_ofsted_inspections", "fqn": ["school_compare", "staging", "stg_ofsted_inspections"], "alias": "stg_ofsted_inspections", "checksum": {"name": "sha256", "checksum": "69c1b9d3d8ede6f5e5b042c5b3f0fcc3b970d0ad7d43c682a369850cdae8e046"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.8438132, "relation_name": "\"school_compare\".\"staging\".\"stg_ofsted_inspections\"", "raw_code": "-- Staging model: Ofsted inspection records\n-- Handles both OEIF (pre-Nov 2025) and Report Card (post-Nov 2025) frameworks\n\nwith source as (\n select * from {{ source('raw', 'ofsted_inspections') }}\n),\n\nrenamed as (\n select\n cast(urn as integer) as urn,\n -- Inspection event date: the graded inspection when present, otherwise the\n -- ungraded (Section 8) inspection so schools with only an ungraded\n -- inspection are still retained.\n coalesce(\n to_date(nullif(trim(inspection_date), 'NULL'), 'DD/MM/YYYY'),\n to_date(nullif(trim(ungraded_inspection_date), 'NULL'), 'DD/MM/YYYY')\n ) as inspection_date,\n inspection_type,\n event_type_grouping as framework,\n\n -- OEIF grades (1-4 scale)\n {{ safe_numeric('overall_effectiveness') }}::integer as overall_effectiveness,\n {{ safe_numeric('quality_of_education') }}::integer as quality_of_education,\n {{ safe_numeric('behaviour_and_attitudes') }}::integer as behaviour_attitudes,\n {{ safe_numeric('personal_development') }}::integer as personal_development,\n {{ safe_numeric('effectiveness_of_leadership_and_management') }}::integer as leadership_management,\n {{ safe_numeric('early_years_provision') }}::integer as early_years_provision,\n {{ safe_numeric('sixth_form_provision') }}::integer as sixth_form_provision,\n\n -- Ungraded (Section 8) inspection outcome \u2014 free text, plus a grade\n -- parsed from it (1/2/null) used as a last-resort fallback for schools\n -- with no graded overall effectiveness.\n nullif(trim(ungraded_outcome), 'NULL') as ungraded_outcome,\n {{ parse_ungraded_outcome('ungraded_outcome') }}::integer as ungraded_grade,\n\n -- Report Card fields (post-Nov 2025 framework), 5-point scale:\n -- 1 Exceptional \u00b7 2 Strong standard \u00b7 3 Expected standard\n -- \u00b7 4 Needs attention \u00b7 5 Urgent improvement\n case lower(trim(nullif(rc_safeguarding_met, 'NULL')))\n when 'met' then true\n when 'not met' then false\n end as rc_safeguarding_met,\n {{ parse_report_card_grade('rc_inclusion') }}::integer as rc_inclusion,\n {{ parse_report_card_grade('rc_curriculum_teaching') }}::integer as rc_curriculum_teaching,\n {{ parse_report_card_grade('rc_achievement') }}::integer as rc_achievement,\n {{ parse_report_card_grade('rc_attendance_behaviour') }}::integer as rc_attendance_behaviour,\n {{ parse_report_card_grade('rc_personal_development') }}::integer as rc_personal_development,\n {{ parse_report_card_grade('rc_leadership_governance') }}::integer as rc_leadership_governance,\n {{ parse_report_card_grade('rc_early_years') }}::integer as rc_early_years,\n {{ parse_report_card_grade('rc_sixth_form') }}::integer as rc_sixth_form,\n\n -- Start date of the latest FULL inspection (the report-card\n -- inspection in the renewed framework). Guarded in the final select:\n -- only kept when the row actually carries report-card grades, because\n -- in legacy-format files this column is the legacy inspection date.\n to_date(nullif(trim(rc_inspection_date), 'NULL'), 'DD/MM/YYYY') as rc_inspection_date_raw,\n\n nullif(trim(report_url), 'NULL') as report_url\n from source\n where urn is not null\n and (\n nullif(trim(inspection_date), 'NULL') is not null\n or nullif(trim(ungraded_inspection_date), 'NULL') is not null\n )\n)\n\nselect\n *,\n case\n when rc_safeguarding_met is not null\n or rc_inclusion is not null\n or rc_curriculum_teaching is not null\n or rc_achievement is not null\n or rc_attendance_behaviour is not null\n or rc_personal_development is not null\n or rc_leadership_governance is not null\n then rc_inspection_date_raw\n end as rc_inspection_date\nfrom renamed\nwhere inspection_date is not null", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ofsted_inspections"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric", "macro.school_compare.parse_ungraded_outcome", "macro.school_compare.parse_report_card_grade"], "nodes": ["source.school_compare.raw.ofsted_inspections"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_ees_ks2": {"database": "school_compare", "schema": "staging", "name": "stg_ees_ks2", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_ks2.sql", "original_file_path": "models/staging/stg_ees_ks2.sql", "unique_id": "model.school_compare.stg_ees_ks2", "fqn": ["school_compare", "staging", "stg_ees_ks2"], "alias": "stg_ees_ks2", "checksum": {"name": "sha256", "checksum": "b5d1cc5ac353d77b1e067f26efee3ac4ebdefe5ea0e6b405595ac3b054ed82a6"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.8471801, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_ks2\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: KS2 attainment + information\n-- Single-pass pivot: one GROUP BY scan of 1.2M rows handles all subjects\n-- and all breakdowns (All pupils, Boys, Girls, Disadvantaged, Not disadvantaged)\n-- instead of 5 separate CTE scans + 5 LEFT JOINs.\n-- EES uses 'z' (not applicable) and 'c' (confidential) as suppression codes \u2014\n-- safe_numeric handles both by treating any non-numeric string as NULL.\n\nwith attainment as (\n select * from {{ source('raw', 'ees_ks2_attainment') }}\n where school_urn ~ '^[0-9]+$'\n and time_period ~ '^[0-9]+$'\n),\n\npivoted as (\n select\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n\n -- Reading, Writing & Maths combined (All pupils / Total)\n max(case when subject = 'Reading, writing and maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as rwm_expected_pct,\n max(case when subject = 'Reading, writing and maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as rwm_high_pct,\n\n -- Reading (All pupils / Total)\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as reading_expected_pct,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as reading_high_pct,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('average_scaled_score') }} end) as reading_avg_score,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_score') }} end) as reading_progress,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_lower_conf_interval') }} end) as reading_progress_lower_ci,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_upper_conf_interval') }} end) as reading_progress_upper_ci,\n max(case when subject = 'Reading'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('absent_or_not_able_to_access_percent') }} end) as reading_absence_pct,\n\n -- Writing (All pupils / Total)\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as writing_expected_pct,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as writing_high_pct,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_score') }} end) as writing_progress,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_lower_conf_interval') }} end) as writing_progress_lower_ci,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_upper_conf_interval') }} end) as writing_progress_upper_ci,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('working_towards_expected_standard_pupil_percent') }} end) as writing_working_towards_pct,\n max(case when subject = 'Writing'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('absent_or_not_able_to_access_percent') }} end) as writing_absence_pct,\n\n -- Maths (All pupils / Total)\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as maths_expected_pct,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as maths_high_pct,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('average_scaled_score') }} end) as maths_avg_score,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_score') }} end) as maths_progress,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_lower_conf_interval') }} end) as maths_progress_lower_ci,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('progress_measure_upper_conf_interval') }} end) as maths_progress_upper_ci,\n max(case when subject = 'Maths'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('absent_or_not_able_to_access_percent') }} end) as maths_absence_pct,\n\n -- GPS (All pupils / Total)\n max(case when (subject ilike '%grammar%' or subject = 'GPS')\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as gps_expected_pct,\n max(case when (subject ilike '%grammar%' or subject = 'GPS')\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as gps_high_pct,\n max(case when (subject ilike '%grammar%' or subject = 'GPS')\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('average_scaled_score') }} end) as gps_avg_score,\n max(case when (subject ilike '%grammar%' or subject = 'GPS')\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('absent_or_not_able_to_access_percent') }} end) as gps_absence_pct,\n\n -- Science (All pupils / Total)\n max(case when subject = 'Science'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as science_expected_pct,\n max(case when subject = 'Science'\n and breakdown_topic = 'All pupils' and breakdown = 'Total'\n then {{ safe_numeric('absent_or_not_able_to_access_percent') }} end) as science_absence_pct,\n\n -- Gender breakdown for Reading, Writing & Maths\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Boys'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as rwm_expected_boys_pct,\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Boys'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as rwm_high_boys_pct,\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Girls'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as rwm_expected_girls_pct,\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Girls'\n then {{ safe_numeric('higher_standard_pupil_percent') }} end) as rwm_high_girls_pct,\n\n -- Disadvantaged breakdown for Reading, Writing & Maths\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Disadvantaged'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as rwm_expected_disadvantaged_pct,\n max(case when subject = 'Reading, writing and maths' and breakdown = 'Not disadvantaged'\n then {{ safe_numeric('expected_standard_pupil_percent') }} end) as rwm_expected_non_disadvantaged_pct\n\n from attainment\n group by school_urn, time_period\n),\n\ninfo as (\n select\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n {{ safe_numeric('totpups') }}::integer as total_pupils,\n {{ safe_numeric('telig') }}::integer as eligible_pupils,\n {{ safe_numeric('ptfsm6cla1a') }} as disadvantaged_pct,\n {{ safe_numeric('ptealgrp2') }} as eal_pct,\n {{ safe_numeric('psenelk') }} as sen_support_pct,\n {{ safe_numeric('psenele') }} as sen_ehcp_pct,\n {{ safe_numeric('ptmobn') }} as stability_pct\n from {{ source('raw', 'ees_ks2_info') }}\n where school_urn is not null\n)\n\nselect\n p.urn,\n p.year,\n i.total_pupils,\n i.eligible_pupils,\n\n p.rwm_expected_pct,\n p.rwm_high_pct,\n p.reading_expected_pct,\n p.reading_high_pct,\n p.reading_avg_score,\n p.reading_progress,\n p.reading_progress_lower_ci,\n p.reading_progress_upper_ci,\n p.writing_expected_pct,\n p.writing_high_pct,\n p.writing_progress,\n p.writing_progress_lower_ci,\n p.writing_progress_upper_ci,\n p.writing_working_towards_pct,\n p.maths_expected_pct,\n p.maths_high_pct,\n p.maths_avg_score,\n p.maths_progress,\n p.maths_progress_lower_ci,\n p.maths_progress_upper_ci,\n p.gps_expected_pct,\n p.gps_high_pct,\n p.gps_avg_score,\n p.science_expected_pct,\n\n p.reading_absence_pct,\n p.writing_absence_pct,\n p.maths_absence_pct,\n p.gps_absence_pct,\n p.science_absence_pct,\n\n p.rwm_expected_boys_pct,\n p.rwm_high_boys_pct,\n p.rwm_expected_girls_pct,\n p.rwm_high_girls_pct,\n\n p.rwm_expected_disadvantaged_pct,\n p.rwm_expected_non_disadvantaged_pct,\n p.rwm_expected_disadvantaged_pct - p.rwm_expected_non_disadvantaged_pct as disadvantaged_gap,\n\n i.disadvantaged_pct,\n i.eal_pct,\n i.sen_support_pct,\n i.sen_ehcp_pct,\n i.stability_pct\n\nfrom pivoted p\nleft join info i on p.urn = i.urn and p.year = i.year", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_ks2_attainment"], ["raw", "ees_ks2_info"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_ks2_attainment", "source.school_compare.raw.ees_ks2_info"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_legacy_ks2": {"database": "school_compare", "schema": "staging", "name": "stg_legacy_ks2", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_legacy_ks2.sql", "original_file_path": "models/staging/stg_legacy_ks2.sql", "unique_id": "model.school_compare.stg_legacy_ks2", "fqn": ["school_compare", "staging", "stg_legacy_ks2"], "alias": "stg_legacy_ks2", "checksum": {"name": "sha256", "checksum": "d57ce51603d2a1d2945690ba863dca576a96b07b24187f0d603eba40602a2f3a"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.851999, "relation_name": "\"school_compare\".\"staging\".\"stg_legacy_ks2\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: Legacy KS2 data from pre-COVID DfE performance tables\n-- The tap already maps old column names to match stg_ees_ks2 output;\n-- this model just applies safe_numeric casts.\n\nselect\n cast(trim(urn) as integer) as urn,\n cast(trim(year) as integer) as year,\n\n {{ safe_numeric('total_pupils') }}::integer as total_pupils,\n {{ safe_numeric('eligible_pupils') }}::integer as eligible_pupils,\n\n {{ safe_numeric('rwm_expected_pct') }} as rwm_expected_pct,\n {{ safe_numeric('rwm_high_pct') }} as rwm_high_pct,\n {{ safe_numeric('reading_expected_pct') }} as reading_expected_pct,\n {{ safe_numeric('reading_high_pct') }} as reading_high_pct,\n {{ safe_numeric('reading_avg_score') }} as reading_avg_score,\n {{ safe_numeric('reading_progress') }} as reading_progress,\n -- Progress CIs / working-towards: not published in the legacy CSVs.\n -- Typed placeholders keep positional alignment with stg_ees_ks2 in\n -- int_ks2_with_lineage's UNION ALL.\n null::numeric as reading_progress_lower_ci,\n null::numeric as reading_progress_upper_ci,\n {{ safe_numeric('writing_expected_pct') }} as writing_expected_pct,\n {{ safe_numeric('writing_high_pct') }} as writing_high_pct,\n {{ safe_numeric('writing_progress') }} as writing_progress,\n null::numeric as writing_progress_lower_ci,\n null::numeric as writing_progress_upper_ci,\n null::numeric as writing_working_towards_pct,\n {{ safe_numeric('maths_expected_pct') }} as maths_expected_pct,\n {{ safe_numeric('maths_high_pct') }} as maths_high_pct,\n {{ safe_numeric('maths_avg_score') }} as maths_avg_score,\n {{ safe_numeric('maths_progress') }} as maths_progress,\n null::numeric as maths_progress_lower_ci,\n null::numeric as maths_progress_upper_ci,\n {{ safe_numeric('gps_expected_pct') }} as gps_expected_pct,\n {{ safe_numeric('gps_high_pct') }} as gps_high_pct,\n {{ safe_numeric('gps_avg_score') }} as gps_avg_score,\n null::numeric as science_expected_pct,\n\n {{ safe_numeric('reading_absence_pct') }} as reading_absence_pct,\n null::numeric as writing_absence_pct,\n {{ safe_numeric('maths_absence_pct') }} as maths_absence_pct,\n {{ safe_numeric('gps_absence_pct') }} as gps_absence_pct,\n null::numeric as science_absence_pct,\n\n {{ safe_numeric('rwm_expected_boys_pct') }} as rwm_expected_boys_pct,\n {{ safe_numeric('rwm_high_boys_pct') }} as rwm_high_boys_pct,\n {{ safe_numeric('rwm_expected_girls_pct') }} as rwm_expected_girls_pct,\n {{ safe_numeric('rwm_high_girls_pct') }} as rwm_high_girls_pct,\n\n {{ safe_numeric('rwm_expected_disadvantaged_pct') }} as rwm_expected_disadvantaged_pct,\n {{ safe_numeric('rwm_expected_non_disadvantaged_pct') }} as rwm_expected_non_disadvantaged_pct,\n {{ safe_numeric('rwm_expected_disadvantaged_pct') }}\n - {{ safe_numeric('rwm_expected_non_disadvantaged_pct') }} as disadvantaged_gap,\n\n {{ safe_numeric('disadvantaged_pct') }} as disadvantaged_pct,\n {{ safe_numeric('eal_pct') }} as eal_pct,\n {{ safe_numeric('sen_support_pct') }} as sen_support_pct,\n {{ safe_numeric('sen_ehcp_pct') }} as sen_ehcp_pct,\n {{ safe_numeric('stability_pct') }} as stability_pct\n\nfrom {{ source('raw', 'legacy_ks2') }}\nwhere urn is not null\n and urn ~ '^[0-9]+$'", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "legacy_ks2"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.legacy_ks2"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_ees_ks4": {"database": "school_compare", "schema": "staging", "name": "stg_ees_ks4", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_ks4.sql", "original_file_path": "models/staging/stg_ees_ks4.sql", "unique_id": "model.school_compare.stg_ees_ks4", "fqn": ["school_compare", "staging", "stg_ees_ks4"], "alias": "stg_ees_ks4", "checksum": {"name": "sha256", "checksum": "3a3541de61b4d6e6b1bd82c325480e4474a143110f475b50bb3461cb60452091"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.855532, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_ks4\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: KS4 attainment data from EES\n-- KS4 performance data is long-format with breakdown dimensions (breakdown_topic,\n-- breakdown, sex). Unlike KS2 which has a subject dimension, KS4 metrics are\n-- already in separate columns \u2014 we just filter to the all-pupils total row.\n-- EES uses 'z' (not applicable) and 'c' (confidential) as suppression codes \u2014\n-- safe_numeric handles both by treating any non-numeric string as NULL.\n-- NOTE: older EES releases (pre-2023/24) use breakdown_topic = 'All pupils';\n-- the 2023/24 release switched to breakdown_topic = 'Total'. Both are included.\n\nwith performance as (\n select * from {{ source('raw', 'ees_ks4_performance') }}\n where school_urn ~ '^[0-9]+$'\n and time_period ~ '^[0-9]+$'\n),\n\n-- Filter to all-pupils totals (one row per school per year)\nall_pupils as (\n select\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n {{ safe_numeric('pupil_count') }}::integer as total_pupils,\n\n -- Attainment 8\n {{ safe_numeric('attainment8_average') }} as attainment_8_score,\n\n -- Progress 8\n {{ safe_numeric('progress8_average') }} as progress_8_score,\n {{ safe_numeric('progress8_lower_95_ci') }} as progress_8_lower_ci,\n {{ safe_numeric('progress8_upper_95_ci') }} as progress_8_upper_ci,\n {{ safe_numeric('progress8eng_average') }} as progress_8_english,\n {{ safe_numeric('progress8mat_average') }} as progress_8_maths,\n {{ safe_numeric('progress8ebacc_average') }} as progress_8_ebacc,\n {{ safe_numeric('progress8open_average') }} as progress_8_open,\n\n -- English & Maths pass rates\n {{ safe_numeric('engmath_95_percent') }} as english_maths_strong_pass_pct,\n {{ safe_numeric('engmath_94_percent') }} as english_maths_standard_pass_pct,\n\n -- EBacc\n {{ safe_numeric('ebacc_entering_percent') }} as ebacc_entry_pct,\n {{ safe_numeric('ebacc_95_percent') }} as ebacc_strong_pass_pct,\n {{ safe_numeric('ebacc_94_percent') }} as ebacc_standard_pass_pct,\n {{ safe_numeric('ebacc_aps_average') }} as ebacc_avg_score,\n\n -- GCSE grade 9-1\n {{ safe_numeric('gcse_91_percent') }} as gcse_grade_91_pct\n\n from performance\n where breakdown_topic in ('Total', 'All pupils')\n and breakdown = 'Total'\n and sex = 'Total'\n),\n\n-- KS4 info table for context/demographics\ninfo as (\n select\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n {{ safe_numeric('endks4_pupil_count') }}::integer as eligible_pupils,\n {{ safe_numeric('ks2_scaledscore_average') }} as prior_attainment_avg,\n {{ safe_numeric('sen_pupil_percent') }} as sen_pct,\n {{ safe_numeric('sen_with_ehcp_pupil_percent') }} as sen_ehcp_pct,\n {{ safe_numeric('sen_no_ehcp_pupil_percent') }} as sen_support_pct,\n -- EES suppression sentinels (z/c/x/q/u) and blanks must not reach the\n -- mart as banding labels\n case\n when lower(trim(progress8_banding)) in ('', 'z', 'c', 'x', 'q', 'u', 'null')\n then null\n else trim(progress8_banding)\n end as progress_8_banding,\n {{ safe_numeric('attainment8_diffn') }} as attainment_8_disadvantage_gap,\n {{ safe_numeric('progress8_diffn') }} as progress_8_disadvantage_gap\n from {{ source('raw', 'ees_ks4_info') }}\n where school_urn is not null\n)\n\nselect\n p.urn,\n p.year,\n p.total_pupils,\n i.eligible_pupils,\n i.prior_attainment_avg,\n\n -- Attainment 8\n p.attainment_8_score,\n\n -- Progress 8\n p.progress_8_score,\n p.progress_8_lower_ci,\n p.progress_8_upper_ci,\n p.progress_8_english,\n p.progress_8_maths,\n p.progress_8_ebacc,\n p.progress_8_open,\n\n -- English & Maths\n p.english_maths_strong_pass_pct,\n p.english_maths_standard_pass_pct,\n\n -- EBacc\n p.ebacc_entry_pct,\n p.ebacc_strong_pass_pct,\n p.ebacc_standard_pass_pct,\n p.ebacc_avg_score,\n\n -- GCSE\n p.gcse_grade_91_pct,\n\n -- Context\n i.sen_pct,\n i.sen_ehcp_pct,\n i.sen_support_pct,\n i.progress_8_banding,\n i.attainment_8_disadvantage_gap,\n i.progress_8_disadvantage_gap\n\nfrom all_pupils p\nleft join info i on p.urn = i.urn and p.year = i.year", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_ks4_performance"], ["raw", "ees_ks4_info"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_ks4_performance", "source.school_compare.raw.ees_ks4_info"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_legacy_ks4": {"database": "school_compare", "schema": "staging", "name": "stg_legacy_ks4", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_legacy_ks4.sql", "original_file_path": "models/staging/stg_legacy_ks4.sql", "unique_id": "model.school_compare.stg_legacy_ks4", "fqn": ["school_compare", "staging", "stg_legacy_ks4"], "alias": "stg_legacy_ks4", "checksum": {"name": "sha256", "checksum": "794d61332074548bb35a4f49835f8046fb1422695f926d166828f5e423e149db"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.858708, "relation_name": "\"school_compare\".\"staging\".\"stg_legacy_ks4\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: Legacy KS4 data from pre-EES DfE performance tables\n-- Covers 2015/16 \u2013 2018/19; EES provides 2023/24 onwards.\n-- The tap already maps old column names and strips % suffixes;\n-- this model just applies safe_numeric casts and adds NULL placeholders\n-- for columns not available in the legacy format.\n\nselect\n cast(trim(urn) as integer) as urn,\n cast(trim(year) as integer) as year,\n\n {{ safe_numeric('total_pupils') }}::integer as total_pupils,\n {{ safe_numeric('total_pupils') }}::integer as eligible_pupils,\n null::numeric as prior_attainment_avg,\n\n -- Attainment 8\n {{ safe_numeric('attainment_8_score') }} as attainment_8_score,\n\n -- Progress 8\n {{ safe_numeric('progress_8_score') }} as progress_8_score,\n {{ safe_numeric('progress_8_lower_ci') }} as progress_8_lower_ci,\n {{ safe_numeric('progress_8_upper_ci') }} as progress_8_upper_ci,\n {{ safe_numeric('progress_8_english') }} as progress_8_english,\n {{ safe_numeric('progress_8_maths') }} as progress_8_maths,\n {{ safe_numeric('progress_8_ebacc') }} as progress_8_ebacc,\n {{ safe_numeric('progress_8_open') }} as progress_8_open,\n\n -- English & Maths pass rates\n {{ safe_numeric('english_maths_strong_pass_pct') }} as english_maths_strong_pass_pct,\n {{ safe_numeric('english_maths_standard_pass_pct') }} as english_maths_standard_pass_pct,\n\n -- EBacc\n {{ safe_numeric('ebacc_entry_pct') }} as ebacc_entry_pct,\n {{ safe_numeric('ebacc_strong_pass_pct') }} as ebacc_strong_pass_pct,\n {{ safe_numeric('ebacc_standard_pass_pct') }} as ebacc_standard_pass_pct,\n null::numeric as ebacc_avg_score,\n\n -- GCSE grade 9-1 (not published in legacy format)\n null::numeric as gcse_grade_91_pct,\n\n -- SEN\n null::numeric as sen_pct,\n {{ safe_numeric('sen_ehcp_pct') }} as sen_ehcp_pct,\n {{ safe_numeric('sen_support_pct') }} as sen_support_pct,\n\n -- Progress 8 banding & disadvantage gaps (not published in legacy format)\n null::text as progress_8_banding,\n null::numeric as attainment_8_disadvantage_gap,\n null::numeric as progress_8_disadvantage_gap\n\nfrom {{ source('raw', 'legacy_ks4') }}\nwhere urn is not null\n and urn ~ '^[0-9]+$'", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "legacy_ks4"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.legacy_ks4"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_census_benchmarks": {"database": "school_compare", "schema": "marts", "name": "fact_census_benchmarks", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_census_benchmarks.sql", "original_file_path": "models/marts/fact_census_benchmarks.sql", "unique_id": "model.school_compare.fact_census_benchmarks", "fqn": ["school_compare", "marts", "fact_census_benchmarks"], "alias": "fact_census_benchmarks", "checksum": {"name": "sha256", "checksum": "a81b31b5e1a0834d9c62fe6213a42c01a5d9e5f299235bbc49a4a7b56e20fe19"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "State-school context benchmarks from the pupil census \u2014 one row per phase (primary/secondary), latest census year. fsm_pct/eal_pct are pupil-weighted means; consumers label them \"state-school average (computed from our dataset)\", never \"England average\".\n", "columns": {"phase": {"name": "phase", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.958771, "relation_name": "\"school_compare\".\"marts\".\"fact_census_benchmarks\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Mart: state-school context benchmarks from the pupil census \u2014 one row per\n-- phase, latest census year. Computed at import time (never per request).\n-- fsm_pct / eal_pct are pupil-weighted means, i.e. \"what % of pupils\", not\n-- \"the median school\" \u2014 this matches how DfE quotes national FSM/EAL rates.\n-- Consumers must label these \"state-school average (computed from our\n-- dataset)\" (spec \u00a78.6), never \"England average\".\n\nwith latest as (\n select max(year) as year from {{ ref('fact_pupil_characteristics') }}\n),\n\nclassified as (\n select\n case\n when p.phase_type_grouping ilike '%primary%' then 'primary'\n when p.phase_type_grouping ilike '%secondary%' then 'secondary'\n end as phase,\n p.total_pupils,\n p.fsm_pct,\n p.eal_pct,\n l.year\n from {{ ref('fact_pupil_characteristics') }} p\n join latest l on p.year = l.year\n where p.total_pupils is not null and p.total_pupils > 0\n)\n\nselect\n phase,\n max(year) as year,\n round((sum(fsm_pct * total_pupils) filter (where fsm_pct is not null)\n / nullif(sum(total_pupils) filter (where fsm_pct is not null), 0))::numeric, 1) as fsm_pct,\n round((sum(eal_pct * total_pupils) filter (where eal_pct is not null)\n / nullif(sum(total_pupils) filter (where eal_pct is not null), 0))::numeric, 1) as eal_pct,\n round(percentile_cont(0.5) within group (order by total_pupils))::integer as median_pupils\nfrom classified\nwhere phase is not null\ngroup by phase", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_pupil_characteristics", "package": null, "version": null}, {"name": "fact_pupil_characteristics", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.fact_pupil_characteristics"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["phase"], "time_spine": null}, "model.school_compare.fact_pupil_characteristics": {"database": "school_compare", "schema": "marts", "name": "fact_pupil_characteristics", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_pupil_characteristics.sql", "original_file_path": "models/marts/fact_pupil_characteristics.sql", "unique_id": "model.school_compare.fact_pupil_characteristics", "fqn": ["school_compare", "marts", "fact_pupil_characteristics"], "alias": "fact_pupil_characteristics", "checksum": {"name": "sha256", "checksum": "cffde5cbc7b2e42d0df227cd2f32410b87f817b738715017c1fc46b6a3f7122c"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Pupil demographics \u2014 one row per URN per year", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.9585762, "relation_name": "\"school_compare\".\"marts\".\"fact_pupil_characteristics\"", "raw_code": "-- Mart: Pupil characteristics \u2014 one row per URN per year\n\nselect\n urn,\n year,\n phase_type_grouping,\n total_pupils,\n female_pupils,\n male_pupils,\n full_time_pupils,\n part_time_pupils,\n total_boarders,\n fsm_eligible_n,\n fsm_pct,\n eal_pct,\n young_carer_pct,\n ethnicity_white_british_pct,\n ethnicity_white_other_pct,\n ethnicity_gypsy_roma_pct,\n ethnicity_mixed_wbc_pct,\n ethnicity_mixed_wba_pct,\n ethnicity_mixed_wa_pct,\n ethnicity_mixed_other_pct,\n ethnicity_asian_indian_pct,\n ethnicity_asian_pakistani_pct,\n ethnicity_asian_bangladeshi_pct,\n ethnicity_asian_other_pct,\n ethnicity_black_caribbean_pct,\n ethnicity_black_african_pct,\n ethnicity_black_other_pct,\n ethnicity_chinese_pct,\n ethnicity_other_pct,\n ethnicity_unclassified_pct\nfrom {{ ref('int_pupil_chars_merged') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "int_pupil_chars_merged", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.int_pupil_chars_merged"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.int_pupil_chars_merged": {"database": "school_compare", "schema": "intermediate", "name": "int_pupil_chars_merged", "resource_type": "model", "package_name": "school_compare", "path": "intermediate/int_pupil_chars_merged.sql", "original_file_path": "models/intermediate/int_pupil_chars_merged.sql", "unique_id": "model.school_compare.int_pupil_chars_merged", "fqn": ["school_compare", "intermediate", "int_pupil_chars_merged"], "alias": "int_pupil_chars_merged", "checksum": {"name": "sha256", "checksum": "e14f55eb1d34878f1b2ba334ab719ab6221efb62c147df1d7c0866ff28d9a10b"}, "config": {"enabled": true, "alias": null, "schema": "intermediate", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "intermediate"}, "created_at": 1784225256.862957, "relation_name": "\"school_compare\".\"intermediate\".\"int_pupil_chars_merged\"", "raw_code": "-- Intermediate model: Merged pupil characteristics from census data\n\nselect\n urn,\n year,\n phase_type_grouping,\n total_pupils,\n female_pupils,\n male_pupils,\n full_time_pupils,\n part_time_pupils,\n total_boarders,\n fsm_eligible_n,\n fsm_pct,\n eal_pct,\n young_carer_pct,\n ethnicity_white_british_pct,\n ethnicity_white_other_pct,\n ethnicity_gypsy_roma_pct,\n ethnicity_mixed_wbc_pct,\n ethnicity_mixed_wba_pct,\n ethnicity_mixed_wa_pct,\n ethnicity_mixed_other_pct,\n ethnicity_asian_indian_pct,\n ethnicity_asian_pakistani_pct,\n ethnicity_asian_bangladeshi_pct,\n ethnicity_asian_other_pct,\n ethnicity_black_caribbean_pct,\n ethnicity_black_african_pct,\n ethnicity_black_other_pct,\n ethnicity_chinese_pct,\n ethnicity_other_pct,\n ethnicity_unclassified_pct\nfrom {{ ref('stg_ees_census') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_census", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_census"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_ees_census": {"database": "school_compare", "schema": "staging", "name": "stg_ees_census", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_census.sql", "original_file_path": "models/staging/stg_ees_census.sql", "unique_id": "model.school_compare.stg_ees_census", "fqn": ["school_compare", "staging", "stg_ees_census"], "alias": "stg_ees_census", "checksum": {"name": "sha256", "checksum": "ff3c516a20ad25b525d4be015a9fcfe0a5329899c2ae7fc5aad4aa6b123fcb22"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.863596, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_census\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: School Pupils and Characteristics (census)\n-- One row per school per year. CSV has 269 columns; we extract the\n-- aggregate demographic summaries only (not per-age/year-group breakdowns).\n-- Column renames happen in the tap before Singer persists to raw.ees_census.\n\nwith source as (\n select * from {{ source('raw', 'ees_census') }}\n where school_urn ~ '^[0-9]+$'\n and time_period ~ '^[0-9]+$'\n)\n\nselect\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n school_name,\n phase_type_grouping,\n\n -- Pupil counts\n {{ safe_numeric('total_pupils') }}::integer as total_pupils,\n {{ safe_numeric('female_pupils') }}::integer as female_pupils,\n {{ safe_numeric('male_pupils') }}::integer as male_pupils,\n {{ safe_numeric('full_time_pupils') }}::integer as full_time_pupils,\n {{ safe_numeric('part_time_pupils') }}::integer as part_time_pupils,\n {{ safe_numeric('total_boarders') }}::integer as total_boarders,\n\n -- FSM\n {{ safe_numeric('fsm_eligible_n') }}::integer as fsm_eligible_n,\n {{ safe_numeric('fsm_pct') }} as fsm_pct,\n\n -- EAL & young carers\n {{ safe_numeric('eal_pct') }} as eal_pct,\n {{ safe_numeric('young_carer_pct') }} as young_carer_pct,\n\n -- Ethnicity\n {{ safe_numeric('ethnicity_white_british_pct') }} as ethnicity_white_british_pct,\n {{ safe_numeric('ethnicity_white_other_pct') }} as ethnicity_white_other_pct,\n {{ safe_numeric('ethnicity_gypsy_roma_pct') }} as ethnicity_gypsy_roma_pct,\n {{ safe_numeric('ethnicity_mixed_wbc_pct') }} as ethnicity_mixed_wbc_pct,\n {{ safe_numeric('ethnicity_mixed_wba_pct') }} as ethnicity_mixed_wba_pct,\n {{ safe_numeric('ethnicity_mixed_wa_pct') }} as ethnicity_mixed_wa_pct,\n {{ safe_numeric('ethnicity_mixed_other_pct') }} as ethnicity_mixed_other_pct,\n {{ safe_numeric('ethnicity_asian_indian_pct') }} as ethnicity_asian_indian_pct,\n {{ safe_numeric('ethnicity_asian_pakistani_pct') }} as ethnicity_asian_pakistani_pct,\n {{ safe_numeric('ethnicity_asian_bangladeshi_pct') }} as ethnicity_asian_bangladeshi_pct,\n {{ safe_numeric('ethnicity_asian_other_pct') }} as ethnicity_asian_other_pct,\n {{ safe_numeric('ethnicity_black_caribbean_pct') }} as ethnicity_black_caribbean_pct,\n {{ safe_numeric('ethnicity_black_african_pct') }} as ethnicity_black_african_pct,\n {{ safe_numeric('ethnicity_black_other_pct') }} as ethnicity_black_other_pct,\n {{ safe_numeric('ethnicity_chinese_pct') }} as ethnicity_chinese_pct,\n {{ safe_numeric('ethnicity_other_pct') }} as ethnicity_other_pct,\n {{ safe_numeric('ethnicity_unclassified_pct') }} as ethnicity_unclassified_pct\n\nfrom source", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_census"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_census"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_admissions": {"database": "school_compare", "schema": "marts", "name": "fact_admissions", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_admissions.sql", "original_file_path": "models/marts/fact_admissions.sql", "unique_id": "model.school_compare.fact_admissions", "fqn": ["school_compare", "marts", "fact_admissions"], "alias": "fact_admissions", "checksum": {"name": "sha256", "checksum": "b3c18e42c3c8961ca8856cf67f421a7794ac896c61dce1febe3cadade107e3c6"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "School admissions \u2014 one row per URN per year", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "second_preference_offers": {"name": "second_preference_offers", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "third_preference_offers": {"name": "third_preference_offers", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "cross_la_applications": {"name": "cross_la_applications", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "cross_la_offers": {"name": "cross_la_offers", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "total_offers": {"name": "total_offers", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.959255, "relation_name": "\"school_compare\".\"marts\".\"fact_admissions\"", "raw_code": "-- Mart: School admissions \u2014 one row per URN per year\n\nselect\n urn,\n year,\n school_phase,\n places_offered,\n total_offers,\n total_applications,\n first_preference_applications,\n first_preference_offers,\n second_preference_offers,\n third_preference_offers,\n cross_la_applications,\n cross_la_offers,\n first_preference_offer_pct,\n oversubscription_ratio,\n oversubscribed,\n admissions_policy\nfrom {{ ref('stg_ees_admissions') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_admissions", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_admissions"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_ees_admissions": {"database": "school_compare", "schema": "staging", "name": "stg_ees_admissions", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_admissions.sql", "original_file_path": "models/staging/stg_ees_admissions.sql", "unique_id": "model.school_compare.stg_ees_admissions", "fqn": ["school_compare", "staging", "stg_ees_admissions"], "alias": "stg_ees_admissions", "checksum": {"name": "sha256", "checksum": "b4e9317532796ab3413861305cf091cd216e1e4f07efec9d08c17f83cf23afbc"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.86735, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_admissions\"", "raw_code": "-- Staging model: Primary and secondary school admissions from EES\n-- Wide format, one row per school per year. No geographic_level column.\n-- Note: FSM_eligible_percent is stored with mixed case by target-postgres and\n-- must be double-quoted in SQL to avoid case-folding to fsm_eligible_percent.\n\nwith source as (\n select * from {{ source('raw', 'ees_admissions') }}\n -- Exclude rows where school_urn is null, empty, or non-numeric (e.g. \"n/a\" LA aggregates)\n where school_urn ~ '^[0-9]+$'\n and time_period ~ '^[0-9]+$'\n),\n\nrenamed as (\n select\n cast(trim(school_urn) as integer) as urn,\n cast(trim(time_period) as integer) as year,\n school_phase,\n entry_year,\n\n -- Places and offers\n -- places_offered: number of places the school actually offered in this\n -- year's admissions round. NOT the Published Admission Number (PAN),\n -- which is the school's published capacity \u2014 EES does not expose PAN\n -- at school level, so we use the count of offers as the best proxy.\n {{ safe_numeric('total_number_places_offered') }}::integer as places_offered,\n {{ safe_numeric('number_preferred_offers') }}::integer as total_offers,\n {{ safe_numeric('number_1st_preference_offers') }}::integer as first_preference_offers,\n {{ safe_numeric('number_2nd_preference_offers') }}::integer as second_preference_offers,\n {{ safe_numeric('number_3rd_preference_offers') }}::integer as third_preference_offers,\n\n -- Applications\n {{ safe_numeric('times_put_as_any_preferred_school') }}::integer as total_applications,\n {{ safe_numeric('times_put_as_1st_preference') }}::integer as first_preference_applications,\n\n -- Cross-borough demand: applications naming this school from families\n -- living in another local authority, and offers made to them.\n {{ safe_numeric('\"all_applications_from_another_LA\"') }}::integer as cross_la_applications,\n {{ safe_numeric('\"offers_to_applicants_from_another_LA\"') }}::integer as cross_la_offers,\n\n -- Proportions\n -- first_preference_offer_pct: of families who listed this school FIRST,\n -- the percentage that received an offer. 0\u2013100 scale.\n -- The raw EES column `proportion_1stprefs_v_totaloffers` stores a\n -- different, misleading figure (first-preference applications divided\n -- by total offers, i.e. an oversubscription ratio) \u2014 do not use it.\n case\n when {{ safe_numeric('times_put_as_1st_preference') }} > 0\n then 100.0\n * {{ safe_numeric('number_1st_preference_offers') }}\n / {{ safe_numeric('times_put_as_1st_preference') }}\n end as first_preference_offer_pct,\n\n -- Oversubscription ratio: 1st-preference applications per place offered.\n -- >1 means the school is oversubscribed on first preferences.\n case\n when {{ safe_numeric('total_number_places_offered') }} > 0\n then {{ safe_numeric('times_put_as_1st_preference') }}::numeric\n / {{ safe_numeric('total_number_places_offered') }}\n end as oversubscription_ratio,\n\n -- Derived: oversubscribed if 1st-preference applications > places offered\n -- Use already-cast columns to avoid repeating the regex expression\n (\n {{ safe_numeric('times_put_as_1st_preference') }}\n > {{ safe_numeric('total_number_places_offered') }}\n ) as oversubscribed,\n\n -- Context\n admissions_policy,\n {{ safe_numeric('\"FSM_eligible_percent\"') }} as fsm_eligible_pct\n\n from source\n)\n\nselect * from renamed", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_admissions"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_admissions"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_ks2_national_averages": {"database": "school_compare", "schema": "marts", "name": "fact_ks2_national_averages", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_ks2_national_averages.sql", "original_file_path": "models/marts/fact_ks2_national_averages.sql", "unique_id": "model.school_compare.fact_ks2_national_averages", "fqn": ["school_compare", "marts", "fact_ks2_national_averages"], "alias": "fact_ks2_national_averages", "checksum": {"name": "sha256", "checksum": "7e4a689b3ac405ed7311ad43cff791455f4b74e6e12dab8f75bb747e30070c20"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "Official DfE KS2 national headline averages \u2014 one row per academic year", "columns": {"year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.9593852, "relation_name": "\"school_compare\".\"marts\".\"fact_ks2_national_averages\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Mart: Official DfE KS2 national headline averages \u2014 one row per academic year.\n-- These are the published England-wide figures, not computed means from our school dataset.\n-- Used by the /api/national-averages endpoint to provide accurate per-year reference lines\n-- on the school history chart and for hero stat comparisons.\n\nselect\n year,\n rwm_expected_pct,\n rwm_high_pct,\n reading_expected_pct,\n reading_high_pct,\n reading_avg_score,\n writing_expected_pct,\n writing_gd_pct,\n maths_expected_pct,\n maths_high_pct,\n maths_avg_score,\n gps_expected_pct,\n gps_high_pct,\n gps_avg_score,\n science_expected_pct\nfrom {{ ref('stg_ees_ks2_national') }}\norder by year", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_ees_ks2_national", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_ees_ks2_national"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["year"], "time_spine": null}, "model.school_compare.stg_ees_ks2_national": {"database": "school_compare", "schema": "staging", "name": "stg_ees_ks2_national", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_ees_ks2_national.sql", "original_file_path": "models/staging/stg_ees_ks2_national.sql", "unique_id": "model.school_compare.stg_ees_ks2_national", "fqn": ["school_compare", "staging", "stg_ees_ks2_national"], "alias": "stg_ees_ks2_national", "checksum": {"name": "sha256", "checksum": "7306cd5981b55f5a6505f89122cee9a4ca4c1d384431536b5240edf5f8c8e898"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "table", "schema": "staging"}, "created_at": 1784225256.870332, "relation_name": "\"school_compare\".\"staging\".\"stg_ees_ks2_national\"", "raw_code": "{{ config(materialized='table') }}\n\n-- Staging model: DfE KS2 national headline averages\n-- Source: EES data catalogue CSV (one row per academic year, England national total)\n-- COVID years 2019/20 and 2020/21 are naturally absent \u2014 DfE did not publish figures\n-- because national assessments were cancelled. Those years produce no rows here.\n-- 'x' (not applicable) and suppressed values are coerced to NULL by safe_numeric.\n\nselect\n cast(trim(time_period) as integer) as year,\n\n {{ safe_numeric('rwm_expected_pct') }} as rwm_expected_pct,\n {{ safe_numeric('rwm_high_pct') }} as rwm_high_pct,\n\n {{ safe_numeric('reading_expected_pct') }} as reading_expected_pct,\n {{ safe_numeric('reading_high_pct') }} as reading_high_pct,\n {{ safe_numeric('reading_avg_score') }} as reading_avg_score,\n\n {{ safe_numeric('writing_expected_pct') }} as writing_expected_pct,\n {{ safe_numeric('writing_gd_pct') }} as writing_gd_pct,\n\n {{ safe_numeric('maths_expected_pct') }} as maths_expected_pct,\n {{ safe_numeric('maths_high_pct') }} as maths_high_pct,\n {{ safe_numeric('maths_avg_score') }} as maths_avg_score,\n\n {{ safe_numeric('gps_expected_pct') }} as gps_expected_pct,\n {{ safe_numeric('gps_high_pct') }} as gps_high_pct,\n {{ safe_numeric('gps_avg_score') }} as gps_avg_score,\n\n {{ safe_numeric('science_expected_pct') }} as science_expected_pct\n\nfrom {{ source('raw', 'ees_ks2_national') }}\nwhere time_period ~ '^[0-9]+$'\n -- 2015/16 was the first year of the current expected-standard tests, so it's\n -- the correct floor (not 2016/17 -- that excluded a real, comparable national\n -- row). GPS/science/scaled-score columns are already mapped correctly end to\n -- end (tap.py's _KS2_NATIONAL_COL_MAP + this model select them fine); the\n -- prod NULLs for those fields are stale raw.ees_ks2_national data from before\n -- the map covered them, not a mapping bug -- no map change accompanies this fix.\n and cast(trim(time_period) as integer) >= 201516", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "ees_ks2_national"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.school_compare.safe_numeric"], "nodes": ["source.school_compare.raw.ees_ks2_national"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_finance": {"database": "school_compare", "schema": "marts", "name": "fact_finance", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_finance.sql", "original_file_path": "models/marts/fact_finance.sql", "unique_id": "model.school_compare.fact_finance", "fqn": ["school_compare", "marts", "fact_finance"], "alias": "fact_finance", "checksum": {"name": "sha256", "checksum": "b9eb2ac96af2d48206fe73fbc8d956619c8505fea7e0f95c529484d45fe1e60a"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "School financial data \u2014 one row per URN per year", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}, "year": {"name": "year", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.95952, "relation_name": "\"school_compare\".\"marts\".\"fact_finance\"", "raw_code": "-- Mart: School financial data \u2014 one row per URN per year\n\nselect\n urn,\n year,\n per_pupil_spend,\n staff_cost_pct,\n teacher_cost_pct,\n support_staff_cost_pct,\n premises_cost_pct\nfrom {{ ref('stg_fbit_finance') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_fbit_finance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_fbit_finance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.stg_fbit_finance": {"database": "school_compare", "schema": "staging", "name": "stg_fbit_finance", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_fbit_finance.sql", "original_file_path": "models/staging/stg_fbit_finance.sql", "unique_id": "model.school_compare.stg_fbit_finance", "fqn": ["school_compare", "staging", "stg_fbit_finance"], "alias": "stg_fbit_finance", "checksum": {"name": "sha256", "checksum": "bc4c4b98c46a4a6122258cb6115f9418db5827b47cebc20a2c97641c6e90f1a2"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.8732932, "relation_name": "\"school_compare\".\"staging\".\"stg_fbit_finance\"", "raw_code": "-- Staging model: Financial benchmarking data from FBIT API\n\nwith source as (\n select * from {{ source('raw', 'fbit_finance') }}\n),\n\nrenamed as (\n select\n cast(urn as integer) as urn,\n cast(year as integer) as year,\n cast(per_pupil_spend as numeric) as per_pupil_spend,\n cast(staff_cost_pct as numeric) as staff_cost_pct,\n cast(teacher_cost_pct as numeric) as teacher_cost_pct,\n cast(support_staff_cost_pct as numeric) as support_staff_cost_pct,\n cast(premises_cost_pct as numeric) as premises_cost_pct\n from source\n where urn is not null\n)\n\nselect * from renamed", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "fbit_finance"]], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["source.school_compare.raw.fbit_finance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.school_compare.fact_deprivation": {"database": "school_compare", "schema": "marts", "name": "fact_deprivation", "resource_type": "model", "package_name": "school_compare", "path": "marts/fact_deprivation.sql", "original_file_path": "models/marts/fact_deprivation.sql", "unique_id": "model.school_compare.fact_deprivation", "fqn": ["school_compare", "marts", "fact_deprivation"], "alias": "fact_deprivation", "checksum": {"name": "sha256", "checksum": "270f49fcf16d710be2f05b9f5ce1e5c4826bdee0f5273104276fc65eec1f2d28"}, "config": {"enabled": true, "alias": null, "schema": "marts", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "IDACI deprivation index \u2014 one row per URN", "columns": {"urn": {"name": "urn", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "school_compare://models/marts/_marts_schema.yml", "build_path": null, "unrendered_config": {"materialized": "table", "schema": "marts"}, "created_at": 1784225256.959689, "relation_name": "\"school_compare\".\"marts\".\"fact_deprivation\"", "raw_code": "-- Mart: Deprivation index \u2014 one row per URN\n-- The IDACI tap already resolves postcode \u2192 LSOA \u2192 IoD2019 score per school.\n\nselect\n urn,\n lsoa_code,\n idaci_score,\n idaci_decile\nfrom {{ ref('stg_idaci') }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_idaci", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.stg_idaci"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["urn"], "time_spine": null}, "model.school_compare.stg_idaci": {"database": "school_compare", "schema": "staging", "name": "stg_idaci", "resource_type": "model", "package_name": "school_compare", "path": "staging/stg_idaci.sql", "original_file_path": "models/staging/stg_idaci.sql", "unique_id": "model.school_compare.stg_idaci", "fqn": ["school_compare", "staging", "stg_idaci"], "alias": "stg_idaci", "checksum": {"name": "sha256", "checksum": "840a949c12c1480f1cdd874c0af6fcd3d3cbb4cc6f74cee01202f6ffa9754b7c"}, "config": {"enabled": true, "alias": null, "schema": "staging", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null, "on_error": null, "latest_version_pointer": {"enabled": null, "alias": null}}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"materialized": "view", "schema": "staging"}, "created_at": 1784225256.8745248, "relation_name": "\"school_compare\".\"staging\".\"stg_idaci\"", "raw_code": "-- Staging model: Income Deprivation Affecting Children Index\n-- The IDACI tap resolves postcode \u2192 LSOA and joins to IoD2019 data,\n-- so each row already has a URN.\n\nwith source as (\n select * from {{ source('raw', 'idaci') }}\n),\n\nrenamed as (\n select\n cast(urn as integer) as urn,\n lsoa_code,\n cast(idaci_score as numeric) as idaci_score,\n cast(idaci_decile as integer) as idaci_decile\n from source\n where urn is not null\n)\n\nselect * from renamed", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "idaci"]], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["source.school_compare.raw.idaci"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "test.school_compare.assert_urns_in_uk_bounds": {"database": "school_compare", "schema": "dbt_test__audit", "name": "assert_urns_in_uk_bounds", "resource_type": "test", "package_name": "school_compare", "path": "assert_urns_in_uk_bounds.sql", "original_file_path": "tests/assert_urns_in_uk_bounds.sql", "unique_id": "test.school_compare.assert_urns_in_uk_bounds", "fqn": ["school_compare", "assert_urns_in_uk_bounds"], "alias": "assert_urns_in_uk_bounds", "checksum": {"name": "sha256", "checksum": "b5bcc4736f23422874d0ec9963b32da568245eb4978170dc680ceccfeb22a153"}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.9002, "relation_name": null, "raw_code": "-- Custom test: All geocoded schools should have coordinates within the UK\n\nselect\n urn,\n easting,\n northing\nfrom {{ ref('dim_location') }}\nwhere easting is not null\n and northing is not null\n and (\n easting < 0 or easting > 700000\n or northing < 0 or northing > 1300000\n )", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_location", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.dim_location"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}, "test.school_compare.assert_no_orphaned_facts": {"database": "school_compare", "schema": "dbt_test__audit", "name": "assert_no_orphaned_facts", "resource_type": "test", "package_name": "school_compare", "path": "assert_no_orphaned_facts.sql", "original_file_path": "tests/assert_no_orphaned_facts.sql", "unique_id": "test.school_compare.assert_no_orphaned_facts", "fqn": ["school_compare", "assert_no_orphaned_facts"], "alias": "assert_no_orphaned_facts", "checksum": {"name": "sha256", "checksum": "fd5287fef72054c2f8bf3ef2450eafe63da791a301642a6b3667d0b2853cc3ee"}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn"}, "created_at": 1784225256.902774, "relation_name": null, "raw_code": "-- Custom test: All fact table URNs should exist in dim_school\n\nselect f.urn\nfrom {{ ref('fact_ks2_performance') }} f\nleft join {{ ref('dim_school') }} d on f.urn = d.urn\nwhere d.urn is null\nlimit 10", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_performance", "package": null, "version": null}, {"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["model.school_compare.fact_ks2_performance", "model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}, "test.school_compare.assert_gias_code_names_match_seed": {"database": "school_compare", "schema": "dbt_test__audit", "name": "assert_gias_code_names_match_seed", "resource_type": "test", "package_name": "school_compare", "path": "assert_gias_code_names_match_seed.sql", "original_file_path": "tests/assert_gias_code_names_match_seed.sql", "unique_id": "test.school_compare.assert_gias_code_names_match_seed", "fqn": ["school_compare", "assert_gias_code_names_match_seed"], "alias": "assert_gias_code_names_match_seed", "checksum": {"name": "sha256", "checksum": "51084dfebf62e9f965242b1487dd043cf50a85c6305355c3403fcfb28e64967d"}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn"}, "created_at": 1784225256.90382, "relation_name": null, "raw_code": "-- Warn when the live GIAS CSV carries a (code, name) pair we don't have in\n-- the dictionary seed \u2014 i.e. DfE added or renamed a value. Fix by rerunning\n-- pipeline/scripts/generate_gias_codes.py and committing the regenerated\n-- dictionaries + seed together.\n{{ config(severity='warn') }}\n\nwith raw_pairs as (\n {% for field_key, code_col, name_col in [\n ('school_type', 'TypeOfEstablishment (code)', 'TypeOfEstablishment (name)'),\n ('establishment_status', 'EstablishmentStatus (code)', 'EstablishmentStatus (name)'),\n ('phase_of_education', 'PhaseOfEducation (code)', 'PhaseOfEducation (name)'),\n ('official_sixth_form', 'OfficialSixthForm (code)', 'OfficialSixthForm (name)'),\n ('religious_character', 'ReligiousCharacter (code)', 'ReligiousCharacter (name)'),\n ('admissions_policy', 'AdmissionsPolicy (code)', 'AdmissionsPolicy (name)')\n ] %}\n select distinct\n '{{ field_key }}' as field,\n cast(nullif(trim(\"{{ code_col }}\"), '') as integer) as code,\n nullif(trim(\"{{ name_col }}\"), '') as name\n from {{ source('raw', 'gias_establishments') }}\n where nullif(trim(\"{{ code_col }}\"), '') is not null\n and nullif(trim(\"{{ name_col }}\"), '') is not null\n {% if not loop.last %}union all{% endif %}\n {% endfor %}\n)\n\nselect r.*\nfrom raw_pairs r\nleft join {{ ref('gias_code_names') }} s\n on s.field = r.field\n and s.code = r.code\n and s.name = r.name\nwhere s.field is null", "doc_blocks": [], "language": "sql", "refs": [{"name": "gias_code_names", "package": null, "version": null}], "sources": [["raw", "gias_establishments"], ["raw", "gias_establishments"], ["raw", "gias_establishments"], ["raw", "gias_establishments"], ["raw", "gias_establishments"], ["raw", "gias_establishments"]], "metrics": [], "functions": [], "depends_on": {"macros": [], "nodes": ["source.school_compare.raw.gias_establishments", "seed.school_compare.gias_code_names"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}, "test.school_compare.not_null_dim_location_urn.aefc04518b": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_location_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_location_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_location_urn.aefc04518b", "fqn": ["school_compare", "marts", "not_null_dim_location_urn"], "alias": "not_null_dim_location_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.980829, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_location", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_location"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.dim_location", "attached_node": "model.school_compare.dim_location", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('dim_location')) }}"}, "namespace": null}}, "test.school_compare.unique_dim_location_urn.7acc2482eb": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_dim_location_urn", "resource_type": "test", "package_name": "school_compare", "path": "unique_dim_location_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_dim_location_urn.7acc2482eb", "fqn": ["school_compare", "marts", "unique_dim_location_urn"], "alias": "unique_dim_location_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.981445, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_location", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.dim_location"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.dim_location", "attached_node": "model.school_compare.dim_location", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('dim_location')) }}"}, "namespace": null}}, "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a": {"database": "school_compare", "schema": "dbt_test__audit", "name": "relationships_dim_location_urn__urn__ref_dim_school_", "resource_type": "test", "package_name": "school_compare", "path": "relationships_dim_location_urn__urn__ref_dim_school_.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a", "fqn": ["school_compare", "marts", "relationships_dim_location_urn__urn__ref_dim_school_"], "alias": "relationships_dim_location_urn__urn__ref_dim_school_", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.982482, "relation_name": null, "raw_code": "{{ test_relationships(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}, {"name": "dim_location", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_relationships", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school", "model.school_compare.dim_location"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.dim_location", "attached_node": "model.school_compare.dim_location", "test_metadata": {"name": "relationships", "kwargs": {"to": "ref('dim_school')", "field": "urn", "column_name": "urn", "model": "{{ get_where_subquery(ref('dim_location')) }}"}, "namespace": null}}, "test.school_compare.not_null_dim_location_postcode.1693ab4948": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_location_postcode", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_location_postcode.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_location_postcode.1693ab4948", "fqn": ["school_compare", "marts", "not_null_dim_location_postcode"], "alias": "not_null_dim_location_postcode", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.987798, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_location", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_location"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "postcode", "file_key_name": "models.dim_location", "attached_node": "model.school_compare.dim_location", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "postcode", "model": "{{ get_where_subquery(ref('dim_location')) }}"}, "namespace": null}}, "test.school_compare.not_null_dim_school_urn.06fbd2ff26": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_school_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_school_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_school_urn.06fbd2ff26", "fqn": ["school_compare", "marts", "not_null_dim_school_urn"], "alias": "not_null_dim_school_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.988222, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.unique_dim_school_urn.9851fcd288": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_dim_school_urn", "resource_type": "test", "package_name": "school_compare", "path": "unique_dim_school_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_dim_school_urn.9851fcd288", "fqn": ["school_compare", "marts", "unique_dim_school_urn"], "alias": "unique_dim_school_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.988626, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.not_null_dim_school_school_name.2a2e381565": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_school_school_name", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_school_school_name.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_school_school_name.2a2e381565", "fqn": ["school_compare", "marts", "not_null_dim_school_school_name"], "alias": "not_null_dim_school_school_name", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.9890718, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "school_name", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "school_name", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.not_null_dim_school_phase_code.3140ca1112": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_school_phase_code", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_school_phase_code.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_school_phase_code.3140ca1112", "fqn": ["school_compare", "marts", "not_null_dim_school_phase_code"], "alias": "not_null_dim_school_phase_code", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn"}, "created_at": 1784225256.989849, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\") }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "phase_code", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "phase_code", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.not_null_dim_school_has_sixth_form.ea8e313799": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_dim_school_has_sixth_form", "resource_type": "test", "package_name": "school_compare", "path": "not_null_dim_school_has_sixth_form.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_dim_school_has_sixth_form.ea8e313799", "fqn": ["school_compare", "marts", "not_null_dim_school_has_sixth_form"], "alias": "not_null_dim_school_has_sixth_form", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.990271, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "has_sixth_form", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "has_sixth_form", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_dim_school_has_sixth_form__True__False.41eaa1ffd6": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_dim_school_has_sixth_form__True__False", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_dim_school_has_sixth_form__True__False.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_dim_school_has_sixth_form__True__False.41eaa1ffd6", "fqn": ["school_compare", "marts", "accepted_values_dim_school_has_sixth_form__True__False"], "alias": "accepted_values_dim_school_has_sixth_form__True__False", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.9906812, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "has_sixth_form", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "accepted_values", "kwargs": {"values": [true, false], "column_name": "has_sixth_form", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_dim_school_status_code__1__3.b0a0bd9a3a": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_dim_school_status_code__1__3", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_dim_school_status_code__1__3.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_dim_school_status_code__1__3.b0a0bd9a3a", "fqn": ["school_compare", "marts", "accepted_values_dim_school_status_code__1__3"], "alias": "accepted_values_dim_school_status_code__1__3", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.992705, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "status_code", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "accepted_values", "kwargs": {"values": [1, 3], "column_name": "status_code", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57.66c218b8b6": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_dim_school_acfbcb3c3f27e749b793e06a71dcf52b.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57.66c218b8b6", "fqn": ["school_compare", "marts", "accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57"], "alias": "accepted_values_dim_school_acfbcb3c3f27e749b793e06a71dcf52b", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "accepted_values_dim_school_acfbcb3c3f27e749b793e06a71dcf52b", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn", "alias": "accepted_values_dim_school_acfbcb3c3f27e749b793e06a71dcf52b"}, "created_at": 1784225256.9936929, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\",alias=\"accepted_values_dim_school_acfbcb3c3f27e749b793e06a71dcf52b\") }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "school_type_code", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "accepted_values", "kwargs": {"values": [1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 14, 15, 18, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 49, 56, 57], "column_name": "school_type_code", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99.16074ac494": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_dim_school_1a238e6e3f01d47aeac019cd1c400d51.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99.16074ac494", "fqn": ["school_compare", "marts", "accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99"], "alias": "accepted_values_dim_school_1a238e6e3f01d47aeac019cd1c400d51", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "accepted_values_dim_school_1a238e6e3f01d47aeac019cd1c400d51", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn", "alias": "accepted_values_dim_school_1a238e6e3f01d47aeac019cd1c400d51"}, "created_at": 1784225256.9949062, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\",alias=\"accepted_values_dim_school_1a238e6e3f01d47aeac019cd1c400d51\") }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "religious_character_code", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "accepted_values", "kwargs": {"values": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 99], "column_name": "religious_character_code", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_dim_school_admissions_policy_code__0__2__4__9.cfb6e9f008": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_dim_school_admissions_policy_code__0__2__4__9", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_dim_school_admissions_policy_code__0__2__4__9.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_dim_school_admissions_policy_code__0__2__4__9.cfb6e9f008", "fqn": ["school_compare", "marts", "accepted_values_dim_school_admissions_policy_code__0__2__4__9"], "alias": "accepted_values_dim_school_admissions_policy_code__0__2__4__9", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn"}, "created_at": 1784225256.996076, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\") }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "dim_school", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.dim_school"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "admissions_policy_code", "file_key_name": "models.dim_school", "attached_node": "model.school_compare.dim_school", "test_metadata": {"name": "accepted_values", "kwargs": {"values": [0, 2, 4, 9], "column_name": "admissions_policy_code", "model": "{{ get_where_subquery(ref('dim_school')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks2_performance_urn.7b7546cb10": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks2_performance_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks2_performance_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks2_performance_urn.7b7546cb10", "fqn": ["school_compare", "marts", "not_null_fact_ks2_performance_urn"], "alias": "not_null_fact_ks2_performance_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.997118, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks2_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_ks2_performance", "attached_node": "model.school_compare.fact_ks2_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_ks2_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks2_performance_year.bf28467bae": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks2_performance_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks2_performance_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks2_performance_year.bf28467bae", "fqn": ["school_compare", "marts", "not_null_fact_ks2_performance_year"], "alias": "not_null_fact_ks2_performance_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.99752, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks2_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks2_performance", "attached_node": "model.school_compare.fact_ks2_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks2_performance')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_ks2_performance_urn_year.240e6de465": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_ks2_performance_urn_year", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_ks2_performance_urn_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_ks2_performance_urn_year.240e6de465", "fqn": ["school_compare", "marts", "unique_fact_ks2_performance_urn_year"], "alias": "unique_fact_ks2_performance_urn_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.9979892, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_ks2_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.fact_ks2_performance", "attached_node": "model.school_compare.fact_ks2_performance", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn || '-' || year", "model": "{{ get_where_subquery(ref('fact_ks2_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_performance_urn.334fe56f01": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_performance_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_performance_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_performance_urn.334fe56f01", "fqn": ["school_compare", "marts", "not_null_fact_performance_urn"], "alias": "not_null_fact_performance_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.998399, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_performance", "attached_node": "model.school_compare.fact_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_performance_year.eed5795761": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_performance_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_performance_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_performance_year.eed5795761", "fqn": ["school_compare", "marts", "not_null_fact_performance_year"], "alias": "not_null_fact_performance_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.998792, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_performance", "attached_node": "model.school_compare.fact_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_performance')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_performance_urn_year.f5c028dcb0": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_performance_urn_year", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_performance_urn_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_performance_urn_year.f5c028dcb0", "fqn": ["school_compare", "marts", "unique_fact_performance_urn_year"], "alias": "unique_fact_performance_urn_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.999189, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.fact_performance", "attached_node": "model.school_compare.fact_performance", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn || '-' || year", "model": "{{ get_where_subquery(ref('fact_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks4_performance_urn.dc24537cea": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks4_performance_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks4_performance_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks4_performance_urn.dc24537cea", "fqn": ["school_compare", "marts", "not_null_fact_ks4_performance_urn"], "alias": "not_null_fact_ks4_performance_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225256.999593, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks4_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_ks4_performance", "attached_node": "model.school_compare.fact_ks4_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_ks4_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks4_performance_year.ca2d34b977": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks4_performance_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks4_performance_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks4_performance_year.ca2d34b977", "fqn": ["school_compare", "marts", "not_null_fact_ks4_performance_year"], "alias": "not_null_fact_ks4_performance_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.000018, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks4_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks4_performance", "attached_node": "model.school_compare.fact_ks4_performance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks4_performance')) }}"}, "namespace": null}}, "test.school_compare.accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average.1f92b23f9b": {"database": "school_compare", "schema": "dbt_test__audit", "name": "accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average", "resource_type": "test", "package_name": "school_compare", "path": "accepted_values_fact_ks4_perfo_cae327e9ae1b05c2c878e063014181be.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average.1f92b23f9b", "fqn": ["school_compare", "marts", "accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average"], "alias": "accepted_values_fact_ks4_perfo_cae327e9ae1b05c2c878e063014181be", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "accepted_values_fact_ks4_perfo_cae327e9ae1b05c2c878e063014181be", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "warn", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": "progress_8_banding is not null", "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"severity": "warn", "where": "progress_8_banding is not null", "alias": "accepted_values_fact_ks4_perfo_cae327e9ae1b05c2c878e063014181be"}, "created_at": 1784225257.0005372, "relation_name": null, "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\",where=\"progress_8_banding is not null\",alias=\"accepted_values_fact_ks4_perfo_cae327e9ae1b05c2c878e063014181be\") }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_accepted_values", "macro.dbt.get_where_subquery"], "nodes": ["model.school_compare.fact_ks4_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "progress_8_banding", "file_key_name": "models.fact_ks4_performance", "attached_node": "model.school_compare.fact_ks4_performance", "test_metadata": {"name": "accepted_values", "kwargs": {"values": ["Well above average", "Above average", "Average", "Below average", "Well below average"], "column_name": "progress_8_banding", "model": "{{ get_where_subquery(ref('fact_ks4_performance')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_ks4_performance_urn_year.eba97e8000": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_ks4_performance_urn_year", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_ks4_performance_urn_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_ks4_performance_urn_year.eba97e8000", "fqn": ["school_compare", "marts", "unique_fact_ks4_performance_urn_year"], "alias": "unique_fact_ks4_performance_urn_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.002696, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_performance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_ks4_performance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.fact_ks4_performance", "attached_node": "model.school_compare.fact_ks4_performance", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn || '-' || year", "model": "{{ get_where_subquery(ref('fact_ks4_performance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks4_national_averages_year.43387931fd": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks4_national_averages_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks4_national_averages_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks4_national_averages_year.43387931fd", "fqn": ["school_compare", "marts", "not_null_fact_ks4_national_averages_year"], "alias": "not_null_fact_ks4_national_averages_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.003171, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_national_averages", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks4_national_averages"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks4_national_averages", "attached_node": "model.school_compare.fact_ks4_national_averages", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks4_national_averages')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_ks4_national_averages_year.9e4ab94935": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_ks4_national_averages_year", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_ks4_national_averages_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_ks4_national_averages_year.9e4ab94935", "fqn": ["school_compare", "marts", "unique_fact_ks4_national_averages_year"], "alias": "unique_fact_ks4_national_averages_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0036201, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks4_national_averages", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_ks4_national_averages"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks4_national_averages", "attached_node": "model.school_compare.fact_ks4_national_averages", "test_metadata": {"name": "unique", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks4_national_averages')) }}"}, "namespace": null}}, "test.school_compare.not_null_map_school_lineage_urn.24da1a9909": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_map_school_lineage_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_map_school_lineage_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_map_school_lineage_urn.24da1a9909", "fqn": ["school_compare", "marts", "not_null_map_school_lineage_urn"], "alias": "not_null_map_school_lineage_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0040388, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "map_school_lineage", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.map_school_lineage"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.map_school_lineage", "attached_node": "model.school_compare.map_school_lineage", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('map_school_lineage')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ofsted_inspection_urn.65304a896d": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ofsted_inspection_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ofsted_inspection_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ofsted_inspection_urn.65304a896d", "fqn": ["school_compare", "marts", "not_null_fact_ofsted_inspection_urn"], "alias": "not_null_fact_ofsted_inspection_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.00444, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ofsted_inspection", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ofsted_inspection"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_ofsted_inspection", "attached_node": "model.school_compare.fact_ofsted_inspection", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_ofsted_inspection')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ofsted_inspection_inspection_date.5aa4bf0513": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ofsted_inspection_inspection_date", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ofsted_inspection_inspection_date.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ofsted_inspection_inspection_date.5aa4bf0513", "fqn": ["school_compare", "marts", "not_null_fact_ofsted_inspection_inspection_date"], "alias": "not_null_fact_ofsted_inspection_inspection_date", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0048928, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ofsted_inspection", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ofsted_inspection"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "inspection_date", "file_key_name": "models.fact_ofsted_inspection", "attached_node": "model.school_compare.fact_ofsted_inspection", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "inspection_date", "model": "{{ get_where_subquery(ref('fact_ofsted_inspection')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_pupil_characteristics_urn.bdeebf869b": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_pupil_characteristics_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_pupil_characteristics_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_pupil_characteristics_urn.bdeebf869b", "fqn": ["school_compare", "marts", "not_null_fact_pupil_characteristics_urn"], "alias": "not_null_fact_pupil_characteristics_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0053, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_pupil_characteristics", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_pupil_characteristics"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_pupil_characteristics", "attached_node": "model.school_compare.fact_pupil_characteristics", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_pupil_characteristics')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_pupil_characteristics_year.19bec90c81": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_pupil_characteristics_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_pupil_characteristics_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_pupil_characteristics_year.19bec90c81", "fqn": ["school_compare", "marts", "not_null_fact_pupil_characteristics_year"], "alias": "not_null_fact_pupil_characteristics_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0057049, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_pupil_characteristics", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_pupil_characteristics"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_pupil_characteristics", "attached_node": "model.school_compare.fact_pupil_characteristics", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_pupil_characteristics')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_census_benchmarks_phase.c4c9ad96c1": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_census_benchmarks_phase", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_census_benchmarks_phase.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_census_benchmarks_phase.c4c9ad96c1", "fqn": ["school_compare", "marts", "not_null_fact_census_benchmarks_phase"], "alias": "not_null_fact_census_benchmarks_phase", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.006102, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_census_benchmarks", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_census_benchmarks"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "phase", "file_key_name": "models.fact_census_benchmarks", "attached_node": "model.school_compare.fact_census_benchmarks", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "phase", "model": "{{ get_where_subquery(ref('fact_census_benchmarks')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_census_benchmarks_phase.c06d73d097": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_census_benchmarks_phase", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_census_benchmarks_phase.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_census_benchmarks_phase.c06d73d097", "fqn": ["school_compare", "marts", "unique_fact_census_benchmarks_phase"], "alias": "unique_fact_census_benchmarks_phase", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.006498, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_census_benchmarks", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_census_benchmarks"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "phase", "file_key_name": "models.fact_census_benchmarks", "attached_node": "model.school_compare.fact_census_benchmarks", "test_metadata": {"name": "unique", "kwargs": {"column_name": "phase", "model": "{{ get_where_subquery(ref('fact_census_benchmarks')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_admissions_urn.fdf334f63c": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_admissions_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_admissions_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_admissions_urn.fdf334f63c", "fqn": ["school_compare", "marts", "not_null_fact_admissions_urn"], "alias": "not_null_fact_admissions_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0069299, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_admissions", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_admissions"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_admissions", "attached_node": "model.school_compare.fact_admissions", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_admissions')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_admissions_year.11169d1a1f": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_admissions_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_admissions_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_admissions_year.11169d1a1f", "fqn": ["school_compare", "marts", "not_null_fact_admissions_year"], "alias": "not_null_fact_admissions_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.007335, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_admissions", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_admissions"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_admissions", "attached_node": "model.school_compare.fact_admissions", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_admissions')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_ks2_national_averages_year.84b854a9ce": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_ks2_national_averages_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_ks2_national_averages_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_ks2_national_averages_year.84b854a9ce", "fqn": ["school_compare", "marts", "not_null_fact_ks2_national_averages_year"], "alias": "not_null_fact_ks2_national_averages_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.007735, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_national_averages", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_ks2_national_averages"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks2_national_averages", "attached_node": "model.school_compare.fact_ks2_national_averages", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks2_national_averages')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_ks2_national_averages_year.99f3ae39bb": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_ks2_national_averages_year", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_ks2_national_averages_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_ks2_national_averages_year.99f3ae39bb", "fqn": ["school_compare", "marts", "unique_fact_ks2_national_averages_year"], "alias": "unique_fact_ks2_national_averages_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.008128, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_ks2_national_averages", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_ks2_national_averages"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_ks2_national_averages", "attached_node": "model.school_compare.fact_ks2_national_averages", "test_metadata": {"name": "unique", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_ks2_national_averages')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_finance_urn.162f08d129": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_finance_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_finance_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_finance_urn.162f08d129", "fqn": ["school_compare", "marts", "not_null_fact_finance_urn"], "alias": "not_null_fact_finance_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.008537, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_finance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_finance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_finance", "attached_node": "model.school_compare.fact_finance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_finance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_finance_year.d96868883e": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_finance_year", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_finance_year.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_finance_year.d96868883e", "fqn": ["school_compare", "marts", "not_null_fact_finance_year"], "alias": "not_null_fact_finance_year", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.008935, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_finance", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_finance"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "year", "file_key_name": "models.fact_finance", "attached_node": "model.school_compare.fact_finance", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "year", "model": "{{ get_where_subquery(ref('fact_finance')) }}"}, "namespace": null}}, "test.school_compare.not_null_fact_deprivation_urn.96d84c2c61": {"database": "school_compare", "schema": "dbt_test__audit", "name": "not_null_fact_deprivation_urn", "resource_type": "test", "package_name": "school_compare", "path": "not_null_fact_deprivation_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.not_null_fact_deprivation_urn.96d84c2c61", "fqn": ["school_compare", "marts", "not_null_fact_deprivation_urn"], "alias": "not_null_fact_deprivation_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0093708, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_deprivation", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["model.school_compare.fact_deprivation"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_deprivation", "attached_node": "model.school_compare.fact_deprivation", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_deprivation')) }}"}, "namespace": null}}, "test.school_compare.unique_fact_deprivation_urn.194d6d1f01": {"database": "school_compare", "schema": "dbt_test__audit", "name": "unique_fact_deprivation_urn", "resource_type": "test", "package_name": "school_compare", "path": "unique_fact_deprivation_urn.sql", "original_file_path": "models/marts/_marts_schema.yml", "unique_id": "test.school_compare.unique_fact_deprivation_urn.194d6d1f01", "fqn": ["school_compare", "marts", "unique_fact_deprivation_urn"], "alias": "unique_fact_deprivation_urn", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.009774, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "fact_deprivation", "package": null, "version": null}], "sources": [], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["model.school_compare.fact_deprivation"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "urn", "file_key_name": "models.fact_deprivation", "attached_node": "model.school_compare.fact_deprivation", "test_metadata": {"name": "unique", "kwargs": {"column_name": "urn", "model": "{{ get_where_subquery(ref('fact_deprivation')) }}"}, "namespace": null}}, "test.school_compare.source_not_null_raw_gias_establishments__URN_.daa9473baf": {"database": "school_compare", "schema": "dbt_test__audit", "name": "source_not_null_raw_gias_establishments__URN_", "resource_type": "test", "package_name": "school_compare", "path": "source_not_null_raw_gias_establishments__URN_.sql", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "test.school_compare.source_not_null_raw_gias_establishments__URN_.daa9473baf", "fqn": ["school_compare", "staging", "source_not_null_raw_gias_establishments__URN_"], "alias": "source_not_null_raw_gias_establishments__URN_", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.036978, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "gias_establishments"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["source.school_compare.raw.gias_establishments"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "\"URN\"", "file_key_name": "sources.raw", "attached_node": null, "test_metadata": {"name": "not_null", "kwargs": {"column_name": "\"URN\"", "model": "{{ get_where_subquery(source('raw', 'gias_establishments')) }}"}, "namespace": null}}, "test.school_compare.source_unique_raw_gias_establishments__URN_.9f6d358797": {"database": "school_compare", "schema": "dbt_test__audit", "name": "source_unique_raw_gias_establishments__URN_", "resource_type": "test", "package_name": "school_compare", "path": "source_unique_raw_gias_establishments__URN_.sql", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "test.school_compare.source_unique_raw_gias_establishments__URN_.9f6d358797", "fqn": ["school_compare", "staging", "source_unique_raw_gias_establishments__URN_"], "alias": "source_unique_raw_gias_establishments__URN_", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0374432, "relation_name": null, "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "gias_establishments"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_unique"], "nodes": ["source.school_compare.raw.gias_establishments"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "\"URN\"", "file_key_name": "sources.raw", "attached_node": null, "test_metadata": {"name": "unique", "kwargs": {"column_name": "\"URN\"", "model": "{{ get_where_subquery(source('raw', 'gias_establishments')) }}"}, "namespace": null}}, "test.school_compare.source_not_null_raw_gias_links__URN_.588070236c": {"database": "school_compare", "schema": "dbt_test__audit", "name": "source_not_null_raw_gias_links__URN_", "resource_type": "test", "package_name": "school_compare", "path": "source_not_null_raw_gias_links__URN_.sql", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "test.school_compare.source_not_null_raw_gias_links__URN_.588070236c", "fqn": ["school_compare", "staging", "source_not_null_raw_gias_links__URN_"], "alias": "source_not_null_raw_gias_links__URN_", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "static_analysis": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "sql_header": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1784225257.0445042, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["raw", "gias_links"]], "metrics": [], "functions": [], "depends_on": {"macros": ["macro.dbt.test_not_null"], "nodes": ["source.school_compare.raw.gias_links"]}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "\"URN\"", "file_key_name": "sources.raw", "attached_node": null, "test_metadata": {"name": "not_null", "kwargs": {"column_name": "\"URN\"", "model": "{{ get_where_subquery(source('raw', 'gias_links')) }}"}, "namespace": null}}}, "sources": {"source.school_compare.raw.gias_establishments": {"database": "school_compare", "schema": "raw", "name": "gias_establishments", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.gias_establishments", "fqn": ["school_compare", "staging", "raw", "gias_establishments"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "gias_establishments", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "GIAS bulk establishment data (one row per URN)", "columns": {"URN": {"name": "URN", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": true, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"gias_establishments\"", "created_at": 1784225257.0438552, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.gias_links": {"database": "school_compare", "schema": "raw", "name": "gias_links", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.gias_links", "fqn": ["school_compare", "staging", "raw", "gias_links"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "gias_links", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "GIAS predecessor/successor links between schools", "columns": {"URN": {"name": "URN", "description": "", "meta": {}, "data_type": null, "constraints": [], "quote": true, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "dimension": null, "entity": null, "doc_blocks": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"gias_links\"", "created_at": 1784225257.044908, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ofsted_inspections": {"database": "school_compare", "schema": "raw", "name": "ofsted_inspections", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ofsted_inspections", "fqn": ["school_compare", "staging", "raw", "ofsted_inspections"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ofsted_inspections", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Ofsted Management Information inspection records", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ofsted_inspections\"", "created_at": 1784225257.0450501, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks2_attainment": {"database": "school_compare", "schema": "raw", "name": "ees_ks2_attainment", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks2_attainment", "fqn": ["school_compare", "staging", "raw", "ees_ks2_attainment"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks2_attainment", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "KS2 school attainment (long format \u2014 one row per school \u00d7 subject \u00d7 breakdown)", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks2_attainment\"", "created_at": 1784225257.045182, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks2_info": {"database": "school_compare", "schema": "raw", "name": "ees_ks2_info", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks2_info", "fqn": ["school_compare", "staging", "raw", "ees_ks2_info"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks2_info", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "KS2 school information (wide format \u2014 context/demographics per school)", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks2_info\"", "created_at": 1784225257.045315, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.legacy_ks2": {"database": "school_compare", "schema": "raw", "name": "legacy_ks2", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.legacy_ks2", "fqn": ["school_compare", "staging", "raw", "legacy_ks2"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "legacy_ks2", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Pre-COVID KS2 school-level data (2015-16 to 2018-19) from DfE performance tables", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"legacy_ks2\"", "created_at": 1784225257.045443, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks4_performance": {"database": "school_compare", "schema": "raw", "name": "ees_ks4_performance", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks4_performance", "fqn": ["school_compare", "staging", "raw", "ees_ks4_performance"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks4_performance", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "KS4 performance tables (long format \u2014 one row per school \u00d7 breakdown \u00d7 sex)", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks4_performance\"", "created_at": 1784225257.045571, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks4_info": {"database": "school_compare", "schema": "raw", "name": "ees_ks4_info", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks4_info", "fqn": ["school_compare", "staging", "raw", "ees_ks4_info"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks4_info", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "KS4 school information (wide format \u2014 context/demographics per school)", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks4_info\"", "created_at": 1784225257.0456982, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.legacy_ks4": {"database": "school_compare", "schema": "raw", "name": "legacy_ks4", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.legacy_ks4", "fqn": ["school_compare", "staging", "raw", "legacy_ks4"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "legacy_ks4", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Pre-EES KS4 school-level data (2015/16\u20132018/19) from DfE Compare School Performance ZIPs", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"legacy_ks4\"", "created_at": 1784225257.045825, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_census": {"database": "school_compare", "schema": "raw", "name": "ees_census", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_census", "fqn": ["school_compare", "staging", "raw", "ees_census"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_census", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "School census pupil characteristics", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_census\"", "created_at": 1784225257.0459478, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_admissions": {"database": "school_compare", "schema": "raw", "name": "ees_admissions", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_admissions", "fqn": ["school_compare", "staging", "raw", "ees_admissions"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_admissions", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Primary and secondary school admissions data", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_admissions\"", "created_at": 1784225257.046114, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks2_national": {"database": "school_compare", "schema": "raw", "name": "ees_ks2_national", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks2_national", "fqn": ["school_compare", "staging", "raw", "ees_ks2_national"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks2_national", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "KS2 national headline averages from DfE EES data catalogue \u2014 one row per academic year", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks2_national\"", "created_at": 1784225257.0462809, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.ees_ks4_national": {"database": "school_compare", "schema": "raw", "name": "ees_ks4_national", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.ees_ks4_national", "fqn": ["school_compare", "staging", "raw", "ees_ks4_national"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "ees_ks4_national", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Official KS4 national headline averages from DfE EES data catalogue \u2014 one row per academic year", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"ees_ks4_national\"", "created_at": 1784225257.046441, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.fbit_finance": {"database": "school_compare", "schema": "raw", "name": "fbit_finance", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.fbit_finance", "fqn": ["school_compare", "staging", "raw", "fbit_finance"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "fbit_finance", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Financial benchmarking data from FBIT API", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"fbit_finance\"", "created_at": 1784225257.046582, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}, "source.school_compare.raw.idaci": {"database": "school_compare", "schema": "raw", "name": "idaci", "resource_type": "source", "package_name": "school_compare", "path": "models/staging/_stg_sources.yml", "original_file_path": "models/staging/_stg_sources.yml", "unique_id": "source.school_compare.raw.idaci", "fqn": ["school_compare", "staging", "raw", "idaci"], "source_name": "raw", "source_description": "Raw data loaded by Meltano Singer taps into the raw schema", "loader": "", "identifier": "idaci", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": null, "loaded_at_query": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "external": null, "description": "Income Deprivation Affecting Children Index lookups", "columns": {}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": null, "period": null}, "error_after": {"count": null, "period": null}, "filter": null}, "loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": [], "static_analysis": null}, "patch_path": null, "unrendered_config": {"loaded_at_field": null, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"school_compare\".\"raw\".\"idaci\"", "created_at": 1784225257.0467148, "unrendered_database": null, "unrendered_schema": "raw", "doc_blocks": []}}, "macros": {"macro.school_compare.parse_ofsted_grade": {"name": "parse_ofsted_grade", "resource_type": "macro", "package_name": "school_compare", "path": "macros/parse_ofsted_grade.sql", "original_file_path": "macros/parse_ofsted_grade.sql", "unique_id": "macro.school_compare.parse_ofsted_grade", "macro_sql": "{% macro parse_ofsted_grade(column) %}\n case\n when {{ column }}::text in ('1', 'Outstanding') then 1\n when {{ column }}::text in ('2', 'Good') then 2\n when {{ column }}::text in ('3', 'Requires improvement', 'Requires Improvement', 'Satisfactory') then 3\n when {{ column }}::text in ('4', 'Inadequate') then 4\n when {{ column }}::text in ('9', 'SWK', 'Serious Weaknesses') then 4\n when {{ column }}::text in ('SM', 'Special Measures') then 4\n else null\n end\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "column", "type": null, "description": ""}], "created_at": 1784225035.212215, "supported_languages": null}, "macro.school_compare.validate_uk_coordinates": {"name": "validate_uk_coordinates", "resource_type": "macro", "package_name": "school_compare", "path": "macros/validate_uk_coordinates.sql", "original_file_path": "macros/validate_uk_coordinates.sql", "unique_id": "macro.school_compare.validate_uk_coordinates", "macro_sql": "{% macro validate_uk_coordinates(lat_col, lng_col) %}\n (\n {{ lat_col }} between 49.0 and 61.0\n and {{ lng_col }} between -8.0 and 2.0\n )\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "lat_col", "type": null, "description": ""}, {"name": "lng_col", "type": null, "description": ""}], "created_at": 1784225035.212335, "supported_languages": null}, "macro.school_compare.parse_report_card_grade": {"name": "parse_report_card_grade", "resource_type": "macro", "package_name": "school_compare", "path": "macros/parse_report_card_grade.sql", "original_file_path": "macros/parse_report_card_grade.sql", "unique_id": "macro.school_compare.parse_report_card_grade", "macro_sql": "{% macro parse_report_card_grade(column_name) %}\n case lower(trim(nullif({{ column_name }}, 'NULL')))\n when 'exceptional' then 1\n when 'strong standard' then 2\n when 'expected standard' then 3\n when 'needs attention' then 4\n when 'urgent improvement' then 5\n else null\n end\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "column_name", "type": null, "description": ""}], "created_at": 1784225035.212427, "supported_languages": null}, "macro.school_compare.parse_ungraded_outcome": {"name": "parse_ungraded_outcome", "resource_type": "macro", "package_name": "school_compare", "path": "macros/parse_ungraded_outcome.sql", "original_file_path": "macros/parse_ungraded_outcome.sql", "unique_id": "macro.school_compare.parse_ungraded_outcome", "macro_sql": "{% macro parse_ungraded_outcome(column) %}\n case\n when {{ column }} ilike '%remains Outstanding%' then 1\n when {{ column }} ilike '%remains Good%' then 2\n else null\n end\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "column", "type": null, "description": ""}], "created_at": 1784225035.2125282, "supported_languages": null}, "macro.school_compare.generate_schema_name": {"name": "generate_schema_name", "resource_type": "macro", "package_name": "school_compare", "path": "macros/generate_schema_name.sql", "original_file_path": "macros/generate_schema_name.sql", "unique_id": "macro.school_compare.generate_schema_name", "macro_sql": "{% macro generate_schema_name(custom_schema_name, node) -%}\n {%- if custom_schema_name is not none -%}\n {{ custom_schema_name | trim }}\n {%- else -%}\n {{ target.schema }}\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_schema_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.212668, "supported_languages": null}, "macro.school_compare.safe_numeric": {"name": "safe_numeric", "resource_type": "macro", "package_name": "school_compare", "path": "macros/safe_numeric.sql", "original_file_path": "macros/safe_numeric.sql", "unique_id": "macro.school_compare.safe_numeric", "macro_sql": "{% macro safe_numeric(col) -%}\n CASE WHEN {{ col }} ~ '^-?[0-9]+(\\.[0-9]+)?$' THEN {{ col }}::numeric ELSE NULL END\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "col", "type": null, "description": ""}], "created_at": 1784225035.212754, "supported_languages": null}, "macro.school_compare.chain_lineage": {"name": "chain_lineage", "resource_type": "macro", "package_name": "school_compare", "path": "macros/chain_lineage.sql", "original_file_path": "macros/chain_lineage.sql", "unique_id": "macro.school_compare.chain_lineage", "macro_sql": "{% macro chain_lineage(source_ref, urn_col='urn', year_col='year') %}\n\nwith current_data as (\n select\n {{ urn_col }} as current_urn,\n {{ urn_col }} as source_urn,\n *\n from {{ source_ref }}\n),\n\npredecessor_data as (\n select\n lin.current_urn,\n src.{{ urn_col }} as source_urn,\n src.*\n from {{ source_ref }} src\n inner join {{ ref('int_school_lineage') }} lin\n on src.{{ urn_col }} = lin.predecessor_urn\n where not exists (\n select 1 from {{ source_ref }} curr\n where curr.{{ urn_col }} = lin.current_urn\n and curr.{{ year_col }} = src.{{ year_col }}\n )\n),\n\ncombined as (\n select * from current_data\n union all\n select * from predecessor_data\n)\n\nselect * from combined\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_ref", "type": null, "description": ""}, {"name": "urn_col", "type": null, "description": ""}, {"name": "year_col", "type": null, "description": ""}], "created_at": 1784225035.2130072, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp": {"name": "postgres__current_timestamp", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp", "macro_sql": "{% macro postgres__current_timestamp() -%}\n now()\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.213104, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_string_as_time": {"name": "postgres__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_string_as_time", "macro_sql": "{% macro postgres__snapshot_string_as_time(timestamp) -%}\n {%- set result = \"'\" ~ timestamp ~ \"'::timestamp without time zone\" -%}\n {{ return(result) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "timestamp", "type": null, "description": ""}], "created_at": 1784225035.21347, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_get_time": {"name": "postgres__snapshot_get_time", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_get_time", "macro_sql": "{% macro postgres__snapshot_get_time() -%}\n {{ current_timestamp() }}::timestamp without time zone\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2135198, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp_backcompat": {"name": "postgres__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp_backcompat", "macro_sql": "{% macro postgres__current_timestamp_backcompat() %}\n current_timestamp::{{ type_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.213564, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat": {"name": "postgres__current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat", "macro_sql": "{% macro postgres__current_timestamp_in_utc_backcompat() %}\n (current_timestamp at time zone 'utc')::{{ type_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2136068, "supported_languages": null}, "macro.dbt_postgres.postgres__get_catalog_relations": {"name": "postgres__get_catalog_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/catalog.sql", "original_file_path": "macros/catalog.sql", "unique_id": "macro.dbt_postgres.postgres__get_catalog_relations", "macro_sql": "{% macro postgres__get_catalog_relations(information_schema, relations) -%}\n {%- call statement('catalog', fetch_result=True) -%}\n\n {#\n If the user has multiple databases set and the first one is wrong, this will fail.\n But we won't fail in the case where there are multiple quoting-difference-only dbs, which is better.\n #}\n {% set database = information_schema.database %}\n {{ adapter.verify_database(database) }}\n\n select\n '{{ database }}' as table_database,\n sch.nspname as table_schema,\n tbl.relname as table_name,\n case tbl.relkind\n when 'v' then 'VIEW'\n when 'm' then 'MATERIALIZED VIEW'\n else 'BASE TABLE'\n end as table_type,\n tbl_desc.description as table_comment,\n col.attname as column_name,\n col.attnum as column_index,\n pg_catalog.format_type(col.atttypid, col.atttypmod) as column_type,\n col_desc.description as column_comment,\n pg_get_userbyid(tbl.relowner) as table_owner\n\n from pg_catalog.pg_namespace sch\n join pg_catalog.pg_class tbl on tbl.relnamespace = sch.oid\n join pg_catalog.pg_attribute col on col.attrelid = tbl.oid\n left outer join pg_catalog.pg_description tbl_desc on (tbl_desc.objoid = tbl.oid and tbl_desc.objsubid = 0)\n left outer join pg_catalog.pg_description col_desc on (col_desc.objoid = tbl.oid and col_desc.objsubid = col.attnum)\n where (\n {%- for relation in relations -%}\n {%- if relation.identifier -%}\n (upper(sch.nspname) = upper('{{ relation.schema }}') and\n upper(tbl.relname) = upper('{{ relation.identifier }}'))\n {%- else-%}\n upper(sch.nspname) = upper('{{ relation.schema }}')\n {%- endif -%}\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n )\n and not pg_is_other_temp_schema(sch.oid) -- not a temporary schema belonging to another session\n and tbl.relpersistence in ('p', 'u') -- [p]ermanent table or [u]nlogged table. Exclude [t]emporary tables\n and tbl.relkind in ('r', 'v', 'f', 'p', 'm') -- o[r]dinary table, [v]iew, [f]oreign table, [p]artitioned table, [m]aterialized view. Other values are [i]ndex, [S]equence, [c]omposite type, [t]OAST table\n and col.attnum > 0 -- negative numbers are used for system columns such as oid\n and not col.attisdropped -- column as not been dropped\n\n order by\n sch.nspname,\n tbl.relname,\n col.attnum\n\n {%- endcall -%}\n\n {{ return(load_result('catalog').table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "relations", "type": null, "description": ""}], "created_at": 1784225035.214046, "supported_languages": null}, "macro.dbt_postgres.postgres__get_catalog": {"name": "postgres__get_catalog", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/catalog.sql", "original_file_path": "macros/catalog.sql", "unique_id": "macro.dbt_postgres.postgres__get_catalog", "macro_sql": "{% macro postgres__get_catalog(information_schema, schemas) -%}\n {%- set relations = [] -%}\n {%- for schema in schemas -%}\n {%- set dummy = relations.append({'schema': schema}) -%}\n {%- endfor -%}\n {{ return(postgres__get_catalog_relations(information_schema, relations)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schemas", "type": null, "description": ""}], "created_at": 1784225035.2141912, "supported_languages": null}, "macro.dbt_postgres.postgres__get_relations": {"name": "postgres__get_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations.sql", "original_file_path": "macros/relations.sql", "unique_id": "macro.dbt_postgres.postgres__get_relations", "macro_sql": "{% macro postgres__get_relations() -%}\n\n {#\n -- in pg_depend, objid is the dependent, refobjid is the referenced object\n -- > a pg_depend entry indicates that the referenced object cannot be\n -- > dropped without also dropping the dependent object.\n #}\n\n {%- call statement('relations', fetch_result=True) -%}\n select distinct\n dependent_namespace.nspname as dependent_schema,\n dependent_class.relname as dependent_name,\n referenced_namespace.nspname as referenced_schema,\n referenced_class.relname as referenced_name\n\n -- Query for views: views are entries in pg_class with an entry in pg_rewrite, but we avoid\n -- a seq scan on pg_rewrite by leveraging the fact there is an \"internal\" row in pg_depend for\n -- the view...\n from pg_class as dependent_class\n join pg_namespace as dependent_namespace on dependent_namespace.oid = dependent_class.relnamespace\n join pg_depend as dependent_depend on dependent_depend.refobjid = dependent_class.oid\n and dependent_depend.classid = 'pg_rewrite'::regclass\n and dependent_depend.refclassid = 'pg_class'::regclass\n and dependent_depend.deptype = 'i'\n\n -- ... and via pg_depend (that has a row per column, hence the need for \"distinct\" above, and\n -- making sure to exclude the internal row to avoid a view appearing to depend on itself)...\n join pg_depend as joining_depend on joining_depend.objid = dependent_depend.objid\n and joining_depend.classid = 'pg_rewrite'::regclass\n and joining_depend.refclassid = 'pg_class'::regclass\n and joining_depend.refobjid != dependent_depend.refobjid\n\n -- ... we can find the tables they query from in pg_class, but excluding system tables. Note we\n -- don't need need to exclude _dependent_ system tables, because they only query from other\n -- system tables, and so are automatically excluded by excluding _referenced_ system tables\n join pg_class as referenced_class on referenced_class.oid = joining_depend.refobjid\n join pg_namespace as referenced_namespace on referenced_namespace.oid = referenced_class.relnamespace\n and referenced_namespace.nspname != 'information_schema'\n and referenced_namespace.nspname not like 'pg\\_%'\n\n order by\n dependent_schema, dependent_name, referenced_schema, referenced_name;\n\n {%- endcall -%}\n\n {{ return(load_result('relations').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.214432, "supported_languages": null}, "macro.dbt_postgres.postgres_get_relations": {"name": "postgres_get_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations.sql", "original_file_path": "macros/relations.sql", "unique_id": "macro.dbt_postgres.postgres_get_relations", "macro_sql": "{% macro postgres_get_relations() %}\n {{ return(postgres__get_relations()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2144818, "supported_languages": null}, "macro.dbt_postgres.postgres__create_table_as": {"name": "postgres__create_table_as", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__create_table_as", "macro_sql": "{% macro postgres__create_table_as(temporary, relation, sql) -%}\n {%- set unlogged = config.get('unlogged', default=false) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary -%}\n temporary\n {%- elif unlogged -%}\n unlogged\n {%- endif %} table {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {% endif -%}\n {% if contract_config.enforced and (not temporary) -%}\n {{ get_table_columns_and_constraints() }} ;\n insert into {{ relation }} (\n {{ adapter.dispatch('get_column_names', 'dbt')() }}\n )\n {%- set sql = get_select_subquery(sql) %}\n {% else %}\n as\n {% endif %}\n (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.default__get_column_names", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "temporary", "type": null, "description": ""}, {"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.215414, "supported_languages": null}, "macro.dbt_postgres.postgres__get_create_index_sql": {"name": "postgres__get_create_index_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_create_index_sql", "macro_sql": "{% macro postgres__get_create_index_sql(relation, index_dict) -%}\n {%- set index_config = adapter.parse_index(index_dict) -%}\n {%- set comma_separated_columns = \", \".join(index_config.columns) -%}\n {%- set index_name = index_config.render(relation) -%}\n\n create {% if index_config.unique -%}\n unique\n {%- endif %} index if not exists\n \"{{ index_name }}\"\n on {{ relation }} {% if index_config.type -%}\n using {{ index_config.type }}\n {%- endif %}\n ({{ comma_separated_columns }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_dict", "type": null, "description": ""}], "created_at": 1784225035.2156029, "supported_languages": null}, "macro.dbt_postgres.postgres__create_schema": {"name": "postgres__create_schema", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__create_schema", "macro_sql": "{% macro postgres__create_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier().include(database=False) }}\n {%- endcall -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.215725, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_schema": {"name": "postgres__drop_schema", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__drop_schema", "macro_sql": "{% macro postgres__drop_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier().include(database=False) }} cascade\n {%- endcall -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.215845, "supported_languages": null}, "macro.dbt_postgres.postgres__get_columns_in_relation": {"name": "postgres__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_columns_in_relation", "macro_sql": "{% macro postgres__get_columns_in_relation(relation) -%}\n {% call statement('get_columns_in_relation', fetch_result=True) %}\n select\n column_name,\n data_type,\n character_maximum_length,\n numeric_precision,\n numeric_scale\n\n from {{ relation.information_schema('columns') }}\n where table_name = '{{ relation.identifier }}'\n {% if relation.schema %}\n and table_schema = '{{ relation.schema }}'\n {% endif %}\n order by ordinal_position\n\n {% endcall %}\n {% set table = load_result('get_columns_in_relation').table %}\n {{ return(sql_convert_columns_in_relation(table)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.sql_convert_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2160242, "supported_languages": null}, "macro.dbt_postgres.postgres__list_relations_without_caching": {"name": "postgres__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__list_relations_without_caching", "macro_sql": "{% macro postgres__list_relations_without_caching(schema_relation) %}\n {% call statement('list_relations_without_caching', fetch_result=True) -%}\n select\n '{{ schema_relation.database }}' as database,\n tablename as name,\n schemaname as schema,\n 'table' as type\n from pg_tables\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select\n '{{ schema_relation.database }}' as database,\n viewname as name,\n schemaname as schema,\n 'view' as type\n from pg_views\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select\n '{{ schema_relation.database }}' as database,\n matviewname as name,\n schemaname as schema,\n 'materialized_view' as type\n from pg_matviews\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select distinct\n '{{ schema_relation.database }}' as database,\n proname as name,\n ns.nspname as schema,\n 'function' as type\n from pg_proc\n join pg_namespace as ns on pronamespace = ns.oid\n where ns.nspname ilike '{{ schema_relation.schema }}'\n {% endcall %}\n {{ return(load_result('list_relations_without_caching').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_relation", "type": null, "description": ""}], "created_at": 1784225035.216217, "supported_languages": null}, "macro.dbt_postgres.postgres__information_schema_name": {"name": "postgres__information_schema_name", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__information_schema_name", "macro_sql": "{% macro postgres__information_schema_name(database) -%}\n {% if database_name -%}\n {{ adapter.verify_database(database_name) }}\n {%- endif -%}\n information_schema\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.216286, "supported_languages": null}, "macro.dbt_postgres.postgres__list_schemas": {"name": "postgres__list_schemas", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__list_schemas", "macro_sql": "{% macro postgres__list_schemas(database) %}\n {% if database -%}\n {{ adapter.verify_database(database) }}\n {%- endif -%}\n {% call statement('list_schemas', fetch_result=True, auto_begin=False) %}\n select distinct nspname from pg_namespace\n {% endcall %}\n {{ return(load_result('list_schemas').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.216414, "supported_languages": null}, "macro.dbt_postgres.postgres__check_schema_exists": {"name": "postgres__check_schema_exists", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__check_schema_exists", "macro_sql": "{% macro postgres__check_schema_exists(information_schema, schema) -%}\n {% if information_schema.database -%}\n {{ adapter.verify_database(information_schema.database) }}\n {%- endif -%}\n {% call statement('check_schema_exists', fetch_result=True, auto_begin=False) %}\n select count(*) from pg_namespace where nspname = '{{ schema }}'\n {% endcall %}\n {{ return(load_result('check_schema_exists').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schema", "type": null, "description": ""}], "created_at": 1784225035.216556, "supported_languages": null}, "macro.dbt_postgres.postgres__make_relation_with_suffix": {"name": "postgres__make_relation_with_suffix", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_relation_with_suffix", "macro_sql": "{% macro postgres__make_relation_with_suffix(base_relation, suffix, dstring) %}\n {% if dstring %}\n {% set dt = modules.datetime.datetime.now() %}\n {% set dtstring = dt.strftime(\"%H%M%S%f\") %}\n {% set suffix = suffix ~ dtstring %}\n {% endif %}\n {% set suffix_length = suffix|length %}\n {% set relation_max_name_length = base_relation.relation_max_name_length() %}\n {% if suffix_length > relation_max_name_length %}\n {% do exceptions.raise_compiler_error('Relation suffix is too long (' ~ suffix_length ~ ' characters). Maximum length is ' ~ relation_max_name_length ~ ' characters.') %}\n {% endif %}\n {% set identifier = base_relation.identifier[:relation_max_name_length - suffix_length] ~ suffix %}\n\n {{ return(base_relation.incorporate(path={\"identifier\": identifier })) }}\n\n {% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}, {"name": "dstring", "type": null, "description": ""}], "created_at": 1784225035.216872, "supported_languages": null}, "macro.dbt_postgres.postgres__make_intermediate_relation": {"name": "postgres__make_intermediate_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_intermediate_relation", "macro_sql": "{% macro postgres__make_intermediate_relation(base_relation, suffix) %}\n {{ return(postgres__make_relation_with_suffix(base_relation, suffix, dstring=False)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.2169468, "supported_languages": null}, "macro.dbt_postgres.postgres__make_temp_relation": {"name": "postgres__make_temp_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_temp_relation", "macro_sql": "{% macro postgres__make_temp_relation(base_relation, suffix) %}\n {% set temp_relation = postgres__make_relation_with_suffix(base_relation, suffix, dstring=True) %}\n {{ return(temp_relation.incorporate(path={\"schema\": none,\n \"database\": none})) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.2170691, "supported_languages": null}, "macro.dbt_postgres.postgres__make_backup_relation": {"name": "postgres__make_backup_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_backup_relation", "macro_sql": "{% macro postgres__make_backup_relation(base_relation, backup_relation_type, suffix) %}\n {% set backup_relation = postgres__make_relation_with_suffix(base_relation, suffix, dstring=False) %}\n {{ return(backup_relation.incorporate(type=backup_relation_type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "backup_relation_type", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.217172, "supported_languages": null}, "macro.dbt_postgres.postgres_escape_comment": {"name": "postgres_escape_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres_escape_comment", "macro_sql": "{% macro postgres_escape_comment(comment) -%}\n {% if comment is not string %}\n {% do exceptions.raise_compiler_error('cannot escape a non-string: ' ~ comment) %}\n {% endif %}\n {%- set magic = '$dbt_comment_literal_block$' -%}\n {%- if magic in comment -%}\n {%- do exceptions.raise_compiler_error('The string ' ~ magic ~ ' is not allowed in comments.') -%}\n {%- endif -%}\n {{ magic }}{{ comment }}{{ magic }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "comment", "type": null, "description": ""}], "created_at": 1784225035.217377, "supported_languages": null}, "macro.dbt_postgres.postgres__alter_relation_comment": {"name": "postgres__alter_relation_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__alter_relation_comment", "macro_sql": "{% macro postgres__alter_relation_comment(relation, comment) %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n {% if relation.type == 'materialized_view' -%}\n {% set relation_type = \"materialized view\" %}\n {%- else -%}\n {%- set relation_type = relation.type -%}\n {%- endif -%}\n comment on {{ relation_type }} {{ relation }} is {{ escaped_comment }};\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "comment", "type": null, "description": ""}], "created_at": 1784225035.217526, "supported_languages": null}, "macro.dbt_postgres.postgres__alter_column_comment": {"name": "postgres__alter_column_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__alter_column_comment", "macro_sql": "{% macro postgres__alter_column_comment(relation, column_dict) %}\n {% set existing_columns = adapter.get_columns_in_relation(relation) | map(attribute=\"name\") | list %}\n {% for column_name in column_dict if (column_name in existing_columns) %}\n {% set comment = column_dict[column_name]['description'] %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n comment on column {{ relation }}.{{ adapter.quote(column_name) if column_dict[column_name]['quote'] else column_name }} is {{ escaped_comment }};\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_dict", "type": null, "description": ""}], "created_at": 1784225035.2177532, "supported_languages": null}, "macro.dbt_postgres.postgres__get_show_grant_sql": {"name": "postgres__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_show_grant_sql", "macro_sql": "\n\n{%- macro postgres__get_show_grant_sql(relation) -%}\n select grantee, privilege_type\n from {{ relation.information_schema('role_table_grants') }}\n where grantor = current_role\n and grantee != current_role\n and table_schema = '{{ relation.schema }}'\n and table_name = '{{ relation.identifier }}'\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.217837, "supported_languages": null}, "macro.dbt_postgres.postgres__copy_grants": {"name": "postgres__copy_grants", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__copy_grants", "macro_sql": "{% macro postgres__copy_grants() %}\n {{ return(False) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2178838, "supported_languages": null}, "macro.dbt_postgres.postgres__get_show_indexes_sql": {"name": "postgres__get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_show_indexes_sql", "macro_sql": "{% macro postgres__get_show_indexes_sql(relation) %}\n select\n i.relname as name,\n m.amname as method,\n ix.indisunique as \"unique\",\n array_to_string(array_agg(a.attname), ',') as column_names\n from pg_index ix\n join pg_class i\n on i.oid = ix.indexrelid\n join pg_am m\n on m.oid=i.relam\n join pg_class t\n on t.oid = ix.indrelid\n join pg_namespace n\n on n.oid = t.relnamespace\n join pg_attribute a\n on a.attrelid = t.oid\n and a.attnum = ANY(ix.indkey)\n where t.relname = '{{ relation.identifier }}'\n and n.nspname = '{{ relation.schema }}'\n and t.relkind in ('r', 'm')\n group by 1, 2, 3\n order by 1, 2, 3\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.217956, "supported_languages": null}, "macro.dbt_postgres.postgres__get_drop_index_sql": {"name": "postgres__get_drop_index_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_drop_index_sql", "macro_sql": "\n\n\n{%- macro postgres__get_drop_index_sql(relation, index_name) -%}\n drop index if exists \"{{ relation.schema }}\".\"{{ index_name }}\"\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_name", "type": null, "description": ""}], "created_at": 1784225035.2180102, "supported_languages": null}, "macro.dbt_postgres.postgres__get_incremental_default_sql": {"name": "postgres__get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/incremental_strategies.sql", "original_file_path": "macros/materializations/incremental_strategies.sql", "unique_id": "macro.dbt_postgres.postgres__get_incremental_default_sql", "macro_sql": "{% macro postgres__get_incremental_default_sql(arg_dict) %}\n\n {% if arg_dict[\"unique_key\"] %}\n {% do return(get_incremental_delete_insert_sql(arg_dict)) %}\n {% else %}\n {% do return(get_incremental_append_sql(arg_dict)) %}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_delete_insert_sql", "macro.dbt.get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.218184, "supported_languages": null}, "macro.dbt_postgres.postgres__get_incremental_microbatch_sql": {"name": "postgres__get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/incremental_strategies.sql", "original_file_path": "macros/materializations/incremental_strategies.sql", "unique_id": "macro.dbt_postgres.postgres__get_incremental_microbatch_sql", "macro_sql": "{% macro postgres__get_incremental_microbatch_sql(arg_dict) %}\n\n {% if arg_dict[\"unique_key\"] %}\n {% do return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"dbt-postgres 'microbatch' requires a `unique_key` config\") }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_merge_sql", "macro.dbt.default__get_incremental_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.2183092, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_merge_sql": {"name": "postgres__snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshot_merge.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_merge_sql", "macro_sql": "{% macro postgres__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n {%- set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() -%}\n\n update {{ target }}\n set {{ columns.dbt_valid_to }} = DBT_INTERNAL_SOURCE.{{ columns.dbt_valid_to }}\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.{{ columns.dbt_scd_id }}::text = {{ target }}.{{ columns.dbt_scd_id }}::text\n and DBT_INTERNAL_SOURCE.dbt_change_type::text in ('update'::text, 'delete'::text)\n {% if config.get(\"dbt_valid_to_current\") %}\n and ({{ target }}.{{ columns.dbt_valid_to }} = {{ config.get('dbt_valid_to_current') }} or {{ target }}.{{ columns.dbt_valid_to }} is null);\n {% else %}\n and {{ target }}.{{ columns.dbt_valid_to }} is null;\n {% endif %}\n\n\n insert into {{ target }} ({{ insert_cols_csv }})\n select {% for column in insert_cols -%}\n DBT_INTERNAL_SOURCE.{{ column }} {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.dbt_change_type::text = 'insert'::text;\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "insert_cols", "type": null, "description": ""}], "created_at": 1784225035.218737, "supported_languages": null}, "macro.dbt_postgres.postgres__formatted_scalar_function_args_sql": {"name": "postgres__formatted_scalar_function_args_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt_postgres.postgres__formatted_scalar_function_args_sql", "macro_sql": "{% macro postgres__formatted_scalar_function_args_sql() %}\n {% set args = [] %}\n {% for arg in model.arguments -%}\n {% set default_value = arg.get('default_value', none) %}\n {% if default_value != none %}\n {%- do args.append(arg.name ~ ' ' ~ arg.data_type ~ ' DEFAULT ' ~ default_value) -%}\n {% else %}\n {%- do args.append(arg.name ~ ' ' ~ arg.data_type) -%}\n {% endif %}\n {%- endfor %}\n {{ args | join(', ') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.219011, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_materialized_view": {"name": "postgres__drop_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_materialized_view", "macro_sql": "{% macro postgres__drop_materialized_view(relation) -%}\n drop materialized view if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.219073, "supported_languages": null}, "macro.dbt_postgres.postgres__describe_materialized_view": {"name": "postgres__describe_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/describe.sql", "original_file_path": "macros/relations/materialized_view/describe.sql", "unique_id": "macro.dbt_postgres.postgres__describe_materialized_view", "macro_sql": "{% macro postgres__describe_materialized_view(relation) %}\n -- for now just get the indexes, we don't need the name or the query yet\n {% set _indexes = run_query(get_show_indexes_sql(relation)) %}\n {% do return({'indexes': _indexes}) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.get_show_indexes_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.219189, "supported_languages": null}, "macro.dbt_postgres.postgres__refresh_materialized_view": {"name": "postgres__refresh_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt_postgres.postgres__refresh_materialized_view", "macro_sql": "{% macro postgres__refresh_materialized_view(relation) %}\n refresh materialized view {{ relation }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.219249, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_materialized_view_sql": {"name": "postgres__get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_materialized_view_sql", "macro_sql": "{% macro postgres__get_rename_materialized_view_sql(relation, new_name) %}\n alter materialized view {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.219317, "supported_languages": null}, "macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql": {"name": "postgres__get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql", "macro_sql": "{% macro postgres__get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n\n -- apply a full refresh immediately if needed\n {% if configuration_changes.requires_full_refresh %}\n\n {{ get_replace_sql(existing_relation, relation, sql) }}\n\n -- otherwise apply individual changes as needed\n {% else %}\n\n {{ postgres__update_indexes_on_materialized_view(relation, configuration_changes.indexes) }}\n\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_replace_sql", "macro.dbt_postgres.postgres__update_indexes_on_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "configuration_changes", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}], "created_at": 1784225035.219558, "supported_languages": null}, "macro.dbt_postgres.postgres__update_indexes_on_materialized_view": {"name": "postgres__update_indexes_on_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__update_indexes_on_materialized_view", "macro_sql": "\n\n\n{%- macro postgres__update_indexes_on_materialized_view(relation, index_changes) -%}\n {{- log(\"Applying UPDATE INDEXES to: \" ~ relation) -}}\n\n {%- for _index_change in index_changes -%}\n {%- set _index = _index_change.context -%}\n\n {%- if _index_change.action == \"drop\" -%}\n\n {{ postgres__get_drop_index_sql(relation, _index.name) }}\n\n {%- elif _index_change.action == \"create\" -%}\n\n {{ postgres__get_create_index_sql(relation, _index.as_node_config) }}\n\n {%- endif -%}\n\t{{ ';' if not loop.last else \"\" }}\n\n {%- endfor -%}\n\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_drop_index_sql", "macro.dbt_postgres.postgres__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_changes", "type": null, "description": ""}], "created_at": 1784225035.219774, "supported_languages": null}, "macro.dbt_postgres.postgres__get_materialized_view_configuration_changes": {"name": "postgres__get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__get_materialized_view_configuration_changes", "macro_sql": "{% macro postgres__get_materialized_view_configuration_changes(existing_relation, new_config) %}\n {% set _existing_materialized_view = postgres__describe_materialized_view(existing_relation) %}\n {% set _configuration_changes = existing_relation.get_materialized_view_config_change_collection(_existing_materialized_view, new_config.model) %}\n {% do return(_configuration_changes) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__describe_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "new_config", "type": null, "description": ""}], "created_at": 1784225035.219894, "supported_languages": null}, "macro.dbt_postgres.postgres__get_create_materialized_view_as_sql": {"name": "postgres__get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt_postgres.postgres__get_create_materialized_view_as_sql", "macro_sql": "{% macro postgres__get_create_materialized_view_as_sql(relation, sql) %}\n create materialized view if not exists {{ relation }} as {{ sql }};\n\n {% for _index_dict in config.get('indexes', []) -%}\n {{- get_create_index_sql(relation, _index_dict) -}}{{ ';' if not loop.last else \"\" }}\n {%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.220066, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_table": {"name": "postgres__drop_table", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_table", "macro_sql": "{% macro postgres__drop_table(relation) -%}\n drop table if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.220125, "supported_languages": null}, "macro.dbt_postgres.postgres__get_replace_table_sql": {"name": "postgres__get_replace_table_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt_postgres.postgres__get_replace_table_sql", "macro_sql": "{% macro postgres__get_replace_table_sql(relation, sql) -%}\n\n {%- set sql_header = config.get('sql_header', none) -%}\n {{ sql_header if sql_header is not none }}\n\n create or replace table {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {{ get_table_columns_and_constraints() }}\n {%- set sql = get_select_subquery(sql) %}\n {% endif %}\n as (\n {{ sql }}\n );\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.220371, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_table_sql": {"name": "postgres__get_rename_table_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_table_sql", "macro_sql": "{% macro postgres__get_rename_table_sql(relation, new_name) %}\n alter table {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.220448, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_view": {"name": "postgres__drop_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_view", "macro_sql": "{% macro postgres__drop_view(relation) -%}\n drop view if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2205088, "supported_languages": null}, "macro.dbt_postgres.postgres__get_replace_view_sql": {"name": "postgres__get_replace_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt_postgres.postgres__get_replace_view_sql", "macro_sql": "{% macro postgres__get_replace_view_sql(relation, sql) -%}\n\n {%- set sql_header = config.get('sql_header', none) -%}\n {{ sql_header if sql_header is not none }}\n\n create or replace view {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {%- endif %}\n as (\n {{ sql }}\n );\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.220763, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_view_sql": {"name": "postgres__get_rename_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_view_sql", "macro_sql": "{% macro postgres__get_rename_view_sql(relation, new_name) %}\n alter view {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.220841, "supported_languages": null}, "macro.dbt_postgres.postgres__dateadd": {"name": "postgres__dateadd", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt_postgres.postgres__dateadd", "macro_sql": "{% macro postgres__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {{ from_date_or_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "interval", "type": null, "description": ""}, {"name": "from_date_or_timestamp", "type": null, "description": ""}], "created_at": 1784225035.220931, "supported_languages": null}, "macro.dbt_postgres.postgres__listagg": {"name": "postgres__listagg", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt_postgres.postgres__listagg", "macro_sql": "{% macro postgres__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n (array_agg(\n {{ measure }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n ))[1:{{ limit_num }}],\n {{ delimiter_text }}\n )\n {%- else %}\n string_agg(\n {{ measure }},\n {{ delimiter_text }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n )\n {%- endif %}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "measure", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "order_by_clause", "type": null, "description": ""}, {"name": "limit_num", "type": null, "description": ""}], "created_at": 1784225035.2211368, "supported_languages": null}, "macro.dbt_postgres.postgres__datediff": {"name": "postgres__datediff", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt_postgres.postgres__datediff", "macro_sql": "{% macro postgres__datediff(first_date, second_date, datepart) -%}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "first_date", "type": null, "description": ""}, {"name": "second_date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.222014, "supported_languages": null}, "macro.dbt_postgres.postgres__equals": {"name": "postgres__equals", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/equals.sql", "original_file_path": "macros/utils/equals.sql", "unique_id": "macro.dbt_postgres.postgres__equals", "macro_sql": "{% macro postgres__equals(expr1, expr2) -%}\n{%- if adapter.behavior.enable_truthy_nulls_equals_macro.no_warn %}\n ({{ expr1 }} IS NOT DISTINCT FROM {{ expr2 }})\n{%- else -%}\n ({{ expr1 }} = {{ expr2 }})\n{%- endif %}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expr1", "type": null, "description": ""}, {"name": "expr2", "type": null, "description": ""}], "created_at": 1784225035.2221708, "supported_languages": null}, "macro.dbt_postgres.postgres__any_value": {"name": "postgres__any_value", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt_postgres.postgres__any_value", "macro_sql": "{% macro postgres__any_value(expression) -%}\n\n min({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.2222452, "supported_languages": null}, "macro.dbt_postgres.postgres__last_day": {"name": "postgres__last_day", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt_postgres.postgres__last_day", "macro_sql": "{% macro postgres__last_day(date, datepart) -%}\n\n {%- if datepart == 'quarter' -%}\n -- postgres dateadd does not support quarter interval.\n cast(\n {{dbt.dateadd('day', '-1',\n dbt.dateadd('month', '3', dbt.date_trunc(datepart, date))\n )}}\n as date)\n {%- else -%}\n {{dbt.default_last_day(date, datepart)}}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.date_trunc", "macro.dbt.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.2224572, "supported_languages": null}, "macro.dbt_postgres.postgres__split_part": {"name": "postgres__split_part", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt_postgres.postgres__split_part", "macro_sql": "{% macro postgres__split_part(string_text, delimiter_text, part_number) %}\n\n {% if part_number >= 0 %}\n {{ dbt.default__split_part(string_text, delimiter_text, part_number) }}\n {% else %}\n {{ dbt._split_part_negative(string_text, delimiter_text, part_number) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__split_part", "macro.dbt._split_part_negative"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "part_number", "type": null, "description": ""}], "created_at": 1784225035.222636, "supported_languages": null}, "macro.dbt.run_hooks": {"name": "run_hooks", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.run_hooks", "macro_sql": "{% macro run_hooks(hooks, inside_transaction=True) %}\n {% for hook in hooks | selectattr('transaction', 'equalto', inside_transaction) %}\n {% if not inside_transaction and loop.first %}\n {% call statement(auto_begin=inside_transaction) %}\n commit;\n {% endcall %}\n {% endif %}\n {% set rendered = render(hook.get('sql')) | trim %}\n {% if (rendered | length) > 0 %}\n {% call statement(auto_begin=inside_transaction) %}\n {{ rendered }}\n {% endcall %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "hooks", "type": null, "description": ""}, {"name": "inside_transaction", "type": null, "description": ""}], "created_at": 1784225035.222998, "supported_languages": null}, "macro.dbt.make_hook_config": {"name": "make_hook_config", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.make_hook_config", "macro_sql": "{% macro make_hook_config(sql, inside_transaction) %}\n {{ tojson({\"sql\": sql, \"transaction\": inside_transaction}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}, {"name": "inside_transaction", "type": null, "description": ""}], "created_at": 1784225035.2230809, "supported_languages": null}, "macro.dbt.before_begin": {"name": "before_begin", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.before_begin", "macro_sql": "{% macro before_begin(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.22314, "supported_languages": null}, "macro.dbt.in_transaction": {"name": "in_transaction", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.in_transaction", "macro_sql": "{% macro in_transaction(sql) %}\n {{ make_hook_config(sql, inside_transaction=True) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2231948, "supported_languages": null}, "macro.dbt.after_commit": {"name": "after_commit", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.after_commit", "macro_sql": "{% macro after_commit(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.223249, "supported_languages": null}, "macro.dbt.set_sql_header": {"name": "set_sql_header", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.set_sql_header", "macro_sql": "{% macro set_sql_header(config) -%}\n {{ config.set('sql_header', caller()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "config", "type": null, "description": ""}], "created_at": 1784225035.223378, "supported_languages": null}, "macro.dbt.should_full_refresh": {"name": "should_full_refresh", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_full_refresh", "macro_sql": "{% macro should_full_refresh() %}\n {% set config_full_refresh = config.get('full_refresh') %}\n {% if config_full_refresh is none %}\n {% set config_full_refresh = flags.FULL_REFRESH %}\n {% endif %}\n {% do return(config_full_refresh) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.223497, "supported_languages": null}, "macro.dbt.should_store_failures": {"name": "should_store_failures", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_store_failures", "macro_sql": "{% macro should_store_failures() %}\n {% set config_store_failures = config.get('store_failures') %}\n {% if config_store_failures is none %}\n {% set config_store_failures = flags.STORE_FAILURES %}\n {% endif %}\n {% do return(config_store_failures) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.223615, "supported_languages": null}, "macro.dbt.snapshot_merge_sql": {"name": "snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.snapshot_merge_sql", "macro_sql": "{% macro snapshot_merge_sql(target, source, insert_cols) -%}\n {{ adapter.dispatch('snapshot_merge_sql', 'dbt')(target, source, insert_cols) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "insert_cols", "type": null, "description": ""}], "created_at": 1784225035.223797, "supported_languages": null}, "macro.dbt.default__snapshot_merge_sql": {"name": "default__snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.default__snapshot_merge_sql", "macro_sql": "{% macro default__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n {%- set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() -%}\n\n merge into {{ target.render() }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on DBT_INTERNAL_SOURCE.{{ columns.dbt_scd_id }} = DBT_INTERNAL_DEST.{{ columns.dbt_scd_id }}\n\n when matched\n {% if config.get(\"dbt_valid_to_current\") %}\n\t{% set source_unique_key = (\"DBT_INTERNAL_DEST.\" ~ columns.dbt_valid_to) | trim %}\n\t{% set target_unique_key = config.get('dbt_valid_to_current') | trim %}\n\tand ({{ equals(source_unique_key, target_unique_key) }} or {{ source_unique_key }} is null)\n\n {% else %}\n and DBT_INTERNAL_DEST.{{ columns.dbt_valid_to }} is null\n {% endif %}\n and DBT_INTERNAL_SOURCE.dbt_change_type in ('update', 'delete')\n then update\n set {{ columns.dbt_valid_to }} = DBT_INTERNAL_SOURCE.{{ columns.dbt_valid_to }}\n\n when not matched\n and DBT_INTERNAL_SOURCE.dbt_change_type = 'insert'\n then insert ({{ insert_cols_csv }})\n values ({{ insert_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "insert_cols", "type": null, "description": ""}], "created_at": 1784225035.224118, "supported_languages": null}, "macro.dbt.strategy_dispatch": {"name": "strategy_dispatch", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.strategy_dispatch", "macro_sql": "{% macro strategy_dispatch(name) -%}\n{% set original_name = name %}\n {% if '.' in name %}\n {% set package_name, name = name.split(\".\", 1) %}\n {% else %}\n {% set package_name = none %}\n {% endif %}\n\n {% if package_name is none %}\n {% set package_context = context %}\n {% elif package_name in context %}\n {% set package_context = context[package_name] %}\n {% else %}\n {% set error_msg %}\n Could not find package '{{package_name}}', called with '{{original_name}}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n\n {%- set search_name = 'snapshot_' ~ name ~ '_strategy' -%}\n\n {% if search_name not in package_context %}\n {% set error_msg %}\n The specified strategy macro '{{name}}' was not found in package '{{ package_name }}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n {{ return(package_context[search_name]) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "name", "type": null, "description": ""}], "created_at": 1784225035.225087, "supported_languages": null}, "macro.dbt.snapshot_hash_arguments": {"name": "snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_hash_arguments", "macro_sql": "{% macro snapshot_hash_arguments(args) -%}\n {{ adapter.dispatch('snapshot_hash_arguments', 'dbt')(args) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "args", "type": null, "description": ""}], "created_at": 1784225035.225164, "supported_languages": null}, "macro.dbt.default__snapshot_hash_arguments": {"name": "default__snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_hash_arguments", "macro_sql": "{% macro default__snapshot_hash_arguments(args) -%}\n md5({%- for arg in args -%}\n coalesce(cast({{ arg }} as varchar ), '')\n {% if not loop.last %} || '|' || {% endif %}\n {%- endfor -%})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "args", "type": null, "description": ""}], "created_at": 1784225035.225264, "supported_languages": null}, "macro.dbt.snapshot_timestamp_strategy": {"name": "snapshot_timestamp_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_timestamp_strategy", "macro_sql": "{% macro snapshot_timestamp_strategy(node, snapshotted_rel, current_rel, model_config, target_exists) %}\n {# The model_config parameter is no longer used, but is passed in anyway for compatibility. #}\n {% set primary_key = config.get('unique_key') %}\n {% set updated_at = config.get('updated_at') %}\n {% set hard_deletes = adapter.get_hard_deletes_behavior(config) %}\n {% set invalidate_hard_deletes = hard_deletes == 'invalidate' %}\n {% set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() %}\n\n {#/*\n The snapshot relation might not have an {{ updated_at }} value if the\n snapshot strategy is changed from `check` to `timestamp`. We\n should use a dbt-created column for the comparison in the snapshot\n table instead of assuming that the user-supplied {{ updated_at }}\n will be present in the historical data.\n\n See https://github.com/dbt-labs/dbt-core/issues/2350\n */ #}\n {% set row_changed_expr -%}\n ({{ snapshotted_rel }}.{{ columns.dbt_valid_from }} < {{ current_rel }}.{{ updated_at }})\n {%- endset %}\n\n {% set scd_args = api.Relation.scd_args(primary_key, updated_at) %}\n {% set scd_id_expr = snapshot_hash_arguments(scd_args) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes,\n \"hard_deletes\": hard_deletes\n }) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "node", "type": null, "description": ""}, {"name": "snapshotted_rel", "type": null, "description": ""}, {"name": "current_rel", "type": null, "description": ""}, {"name": "model_config", "type": null, "description": ""}, {"name": "target_exists", "type": null, "description": ""}], "created_at": 1784225035.225667, "supported_languages": null}, "macro.dbt.snapshot_string_as_time": {"name": "snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_string_as_time", "macro_sql": "{% macro snapshot_string_as_time(timestamp) -%}\n {{ adapter.dispatch('snapshot_string_as_time', 'dbt')(timestamp) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_string_as_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "timestamp", "type": null, "description": ""}], "created_at": 1784225035.225736, "supported_languages": null}, "macro.dbt.default__snapshot_string_as_time": {"name": "default__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_string_as_time", "macro_sql": "{% macro default__snapshot_string_as_time(timestamp) %}\n {% do exceptions.raise_not_implemented(\n 'snapshot_string_as_time macro not implemented for adapter '+adapter.type()\n ) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "timestamp", "type": null, "description": ""}], "created_at": 1784225035.225808, "supported_languages": null}, "macro.dbt.snapshot_check_all_get_existing_columns": {"name": "snapshot_check_all_get_existing_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_all_get_existing_columns", "macro_sql": "{% macro snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) -%}\n {%- if not target_exists -%}\n {#-- no table yet -> return whatever the query does --#}\n {{ return((false, query_columns)) }}\n {%- endif -%}\n\n {#-- handle any schema changes --#}\n {%- set target_relation = adapter.get_relation(database=node.database, schema=node.schema, identifier=node.alias) -%}\n\n {% if check_cols_config == 'all' %}\n {%- set query_columns = get_columns_in_query(node['compiled_code']) -%}\n\n {% elif check_cols_config is iterable and (check_cols_config | length) > 0 %}\n {#-- query for proper casing/quoting, to support comparison below --#}\n {%- set select_check_cols_from_target -%}\n {#-- N.B. The whitespace below is necessary to avoid edge case issue with comments --#}\n {#-- See: https://github.com/dbt-labs/dbt-core/issues/6781 --#}\n select {{ check_cols_config | join(', ') }} from (\n {{ node['compiled_code'] }}\n ) subq\n {%- endset -%}\n {% set query_columns = get_columns_in_query(select_check_cols_from_target) %}\n\n {% else %}\n {% do exceptions.raise_compiler_error(\"Invalid value for 'check_cols': \" ~ check_cols_config) %}\n {% endif %}\n\n {%- set existing_cols = adapter.get_columns_in_relation(target_relation) | map(attribute = 'name') | list -%}\n {%- set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}\n {%- set ns.column_added = false -%}\n\n {%- set intersection = [] -%}\n {%- for col in query_columns -%}\n {%- if col in existing_cols -%}\n {%- do intersection.append(adapter.quote(col)) -%}\n {%- else -%}\n {% set ns.column_added = true %}\n {%- endif -%}\n {%- endfor -%}\n {{ return((ns.column_added, intersection)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "node", "type": null, "description": ""}, {"name": "target_exists", "type": null, "description": ""}, {"name": "check_cols_config", "type": null, "description": ""}], "created_at": 1784225035.226366, "supported_languages": null}, "macro.dbt.snapshot_check_strategy": {"name": "snapshot_check_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_strategy", "macro_sql": "{% macro snapshot_check_strategy(node, snapshotted_rel, current_rel, model_config, target_exists) %}\n {# The model_config parameter is no longer used, but is passed in anyway for compatibility. #}\n {% set check_cols_config = config.get('check_cols') %}\n {% set primary_key = config.get('unique_key') %}\n {% set hard_deletes = adapter.get_hard_deletes_behavior(config) %}\n {% set invalidate_hard_deletes = hard_deletes == 'invalidate' %}\n {% set updated_at = config.get('updated_at') or snapshot_get_time() %}\n\n {% set column_added = false %}\n\n {% set column_added, check_cols = snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) %}\n\n {%- set row_changed_expr -%}\n (\n {%- if column_added -%}\n {{ get_true_sql() }}\n {%- else -%}\n {%- for col in check_cols -%}\n {{ snapshotted_rel }}.{{ col }} != {{ current_rel }}.{{ col }}\n or\n (\n (({{ snapshotted_rel }}.{{ col }} is null) and not ({{ current_rel }}.{{ col }} is null))\n or\n ((not {{ snapshotted_rel }}.{{ col }} is null) and ({{ current_rel }}.{{ col }} is null))\n )\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n {%- endif -%}\n )\n {%- endset %}\n\n {% set scd_args = api.Relation.scd_args(primary_key, updated_at) %}\n {% set scd_id_expr = snapshot_hash_arguments(scd_args) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes,\n \"hard_deletes\": hard_deletes\n }) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.snapshot_get_time", "macro.dbt.snapshot_check_all_get_existing_columns", "macro.dbt.get_true_sql", "macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "node", "type": null, "description": ""}, {"name": "snapshotted_rel", "type": null, "description": ""}, {"name": "current_rel", "type": null, "description": ""}, {"name": "model_config", "type": null, "description": ""}, {"name": "target_exists", "type": null, "description": ""}], "created_at": 1784225035.226913, "supported_languages": null}, "macro.dbt.create_columns": {"name": "create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.create_columns", "macro_sql": "{% macro create_columns(relation, columns) %}\n {{ adapter.dispatch('create_columns', 'dbt')(relation, columns) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.22782, "supported_languages": null}, "macro.dbt.default__create_columns": {"name": "default__create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__create_columns", "macro_sql": "{% macro default__create_columns(relation, columns) %}\n {% for column in columns %}\n {% call statement() %}\n alter table {{ relation.render() }} add column {{ adapter.quote(column.name) }} {{ column.expanded_data_type }};\n {% endcall %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.227948, "supported_languages": null}, "macro.dbt.post_snapshot": {"name": "post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.post_snapshot", "macro_sql": "{% macro post_snapshot(staging_relation) %}\n {{ adapter.dispatch('post_snapshot', 'dbt')(staging_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "staging_relation", "type": null, "description": ""}], "created_at": 1784225035.2280169, "supported_languages": null}, "macro.dbt.default__post_snapshot": {"name": "default__post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__post_snapshot", "macro_sql": "{% macro default__post_snapshot(staging_relation) %}\n {# no-op #}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "staging_relation", "type": null, "description": ""}], "created_at": 1784225035.228054, "supported_languages": null}, "macro.dbt.get_true_sql": {"name": "get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_true_sql", "macro_sql": "{% macro get_true_sql() %}\n {{ adapter.dispatch('get_true_sql', 'dbt')() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_true_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.228112, "supported_languages": null}, "macro.dbt.default__get_true_sql": {"name": "default__get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__get_true_sql", "macro_sql": "{% macro default__get_true_sql() %}\n {{ return('TRUE') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.228158, "supported_languages": null}, "macro.dbt.snapshot_staging_table": {"name": "snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.snapshot_staging_table", "macro_sql": "{% macro snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {{ adapter.dispatch('snapshot_staging_table', 'dbt')(strategy, source_sql, target_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_staging_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "source_sql", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.228236, "supported_languages": null}, "macro.dbt.get_snapshot_table_column_names": {"name": "get_snapshot_table_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_snapshot_table_column_names", "macro_sql": "{% macro get_snapshot_table_column_names() %}\n {{ return({'dbt_valid_to': 'dbt_valid_to', 'dbt_valid_from': 'dbt_valid_from', 'dbt_scd_id': 'dbt_scd_id', 'dbt_updated_at': 'dbt_updated_at', 'dbt_is_deleted': 'dbt_is_deleted'}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.228341, "supported_languages": null}, "macro.dbt.default__snapshot_staging_table": {"name": "default__snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__snapshot_staging_table", "macro_sql": "{% macro default__snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {% set columns = config.get('snapshot_table_column_names') or get_snapshot_table_column_names() %}\n {% if strategy.hard_deletes == 'new_record' %}\n {% set new_scd_id = snapshot_hash_arguments([columns.dbt_scd_id, snapshot_get_time()]) %}\n {% endif %}\n with snapshot_query as (\n\n {{ source_sql }}\n\n ),\n\n snapshotted_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }}\n from {{ target_relation }}\n where\n {% if config.get('dbt_valid_to_current') %}\n\t\t{% set source_unique_key = columns.dbt_valid_to | trim %}\n\t\t{% set target_unique_key = config.get('dbt_valid_to_current') | trim %}\n\n\t\t{# The exact equals semantics between NULL values depends on the current behavior flag set. Also, update records if the source field is null #}\n ( {{ equals(source_unique_key, target_unique_key) }} or {{ source_unique_key }} is null )\n {% else %}\n {{ columns.dbt_valid_to }} is null\n {% endif %}\n\n ),\n\n insertions_source_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ get_dbt_valid_to_current(strategy, columns) }},\n {{ strategy.scd_id }} as {{ columns.dbt_scd_id }}\n\n from snapshot_query\n ),\n\n updates_source_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_to }}\n\n from snapshot_query\n ),\n\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n\n deletes_source_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }}\n from snapshot_query\n ),\n {% endif %}\n\n insertions as (\n\n select\n 'insert' as dbt_change_type,\n source_data.*\n {%- if strategy.hard_deletes == 'new_record' -%}\n ,'False' as {{ columns.dbt_is_deleted }}\n {%- endif %}\n\n from insertions_source_data as source_data\n left outer join snapshotted_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"snapshotted_data\") }}\n or ({{ unique_key_is_not_null(strategy.unique_key, \"snapshotted_data\") }} and (\n {{ strategy.row_changed }} {%- if strategy.hard_deletes == 'new_record' -%} or snapshotted_data.{{ columns.dbt_is_deleted }} = 'True' {% endif %}\n )\n\n )\n\n ),\n\n updates as (\n\n select\n 'update' as dbt_change_type,\n source_data.*,\n snapshotted_data.{{ columns.dbt_scd_id }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , snapshotted_data.{{ columns.dbt_is_deleted }}\n {%- endif %}\n\n from updates_source_data as source_data\n join snapshotted_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where (\n {{ strategy.row_changed }} {%- if strategy.hard_deletes == 'new_record' -%} or snapshotted_data.{{ columns.dbt_is_deleted }} = 'True' {% endif %}\n )\n )\n\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n ,\n deletes as (\n\n select\n 'delete' as dbt_change_type,\n source_data.*,\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_from }},\n {{ snapshot_get_time() }} as {{ columns.dbt_updated_at }},\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_to }},\n snapshotted_data.{{ columns.dbt_scd_id }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , snapshotted_data.{{ columns.dbt_is_deleted }}\n {%- endif %}\n from snapshotted_data\n left join deletes_source_data as source_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"source_data\") }}\n\n {%- if strategy.hard_deletes == 'new_record' %}\n and not (\n --avoid updating the record's valid_to if the latest entry is marked as deleted\n snapshotted_data.{{ columns.dbt_is_deleted }} = 'True'\n and\n {% if config.get('dbt_valid_to_current') -%}\n snapshotted_data.{{ columns.dbt_valid_to }} = {{ config.get('dbt_valid_to_current') }}\n {%- else -%}\n snapshotted_data.{{ columns.dbt_valid_to }} is null\n {%- endif %}\n )\n {%- endif %}\n )\n {%- endif %}\n\n {%- if strategy.hard_deletes == 'new_record' %}\n {% set snapshotted_cols = get_list_of_column_names(get_columns_in_relation(target_relation)) %}\n {% set source_col_names = get_columns_in_query(source_sql) %}\n ,\n deletion_records as (\n\n select\n 'insert' as dbt_change_type,\n {%- for col_name in source_col_names -%}\n {%- if col_name in snapshotted_cols -%}\n snapshotted_data.{{ adapter.quote(col_name) }},\n {%- else -%}\n source_data.{{ adapter.quote(col_name) }},\n {%- endif -%}\n {% endfor -%}\n {%- if strategy.unique_key | is_list -%}\n {%- for key in strategy.unique_key -%}\n snapshotted_data.{{ key }} as dbt_unique_key_{{ loop.index }},\n {% endfor -%}\n {%- else -%}\n snapshotted_data.dbt_unique_key as dbt_unique_key,\n {% endif -%}\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_from }},\n {{ snapshot_get_time() }} as {{ columns.dbt_updated_at }},\n snapshotted_data.{{ columns.dbt_valid_to }} as {{ columns.dbt_valid_to }},\n {{ new_scd_id }} as {{ columns.dbt_scd_id }},\n 'True' as {{ columns.dbt_is_deleted }}\n from snapshotted_data\n left join deletes_source_data as source_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"source_data\") }}\n and not (\n --avoid inserting a new record if the latest one is marked as deleted\n snapshotted_data.{{ columns.dbt_is_deleted }} = 'True'\n and\n {% if config.get('dbt_valid_to_current') -%}\n snapshotted_data.{{ columns.dbt_valid_to }} = {{ config.get('dbt_valid_to_current') }}\n {%- else -%}\n snapshotted_data.{{ columns.dbt_valid_to }} is null\n {%- endif %}\n )\n\n )\n {%- endif %}\n\n select * from insertions\n union all\n select * from updates\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n union all\n select * from deletes\n {%- endif %}\n {%- if strategy.hard_deletes == 'new_record' %}\n union all\n select * from deletion_records\n {%- endif %}\n\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.snapshot_hash_arguments", "macro.dbt.snapshot_get_time", "macro.dbt.unique_key_fields", "macro.dbt.equals", "macro.dbt.get_dbt_valid_to_current", "macro.dbt.unique_key_join_on", "macro.dbt.unique_key_is_null", "macro.dbt.unique_key_is_not_null", "macro.dbt.get_list_of_column_names", "macro.dbt.get_columns_in_relation", "macro.dbt.get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "source_sql", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.2300842, "supported_languages": null}, "macro.dbt.build_snapshot_table": {"name": "build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_table", "macro_sql": "{% macro build_snapshot_table(strategy, sql) -%}\n {{ adapter.dispatch('build_snapshot_table', 'dbt')(strategy, sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__build_snapshot_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.230189, "supported_languages": null}, "macro.dbt.default__build_snapshot_table": {"name": "default__build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__build_snapshot_table", "macro_sql": "{% macro default__build_snapshot_table(strategy, sql) %}\n {% set columns = config.get('snapshot_table_column_names') or get_snapshot_table_column_names() %}\n\n select *,\n {{ strategy.scd_id }} as {{ columns.dbt_scd_id }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ get_dbt_valid_to_current(strategy, columns) }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , 'False' as {{ columns.dbt_is_deleted }}\n {% endif -%}\n from (\n {{ sql }}\n ) sbq\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.get_dbt_valid_to_current"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.230402, "supported_languages": null}, "macro.dbt.build_snapshot_staging_table": {"name": "build_snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_staging_table", "macro_sql": "{% macro build_snapshot_staging_table(strategy, sql, target_relation) %}\n {% set temp_relation = make_temp_relation(target_relation) %}\n\n {% set select = snapshot_staging_table(strategy, sql, target_relation) %}\n\n {% call statement('build_snapshot_staging_relation') %}\n {{ create_table_as(True, temp_relation, select) }}\n {% endcall %}\n\n {% do return(temp_relation) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_temp_relation", "macro.dbt.snapshot_staging_table", "macro.dbt.statement", "macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.230578, "supported_languages": null}, "macro.dbt.get_updated_at_column_data_type": {"name": "get_updated_at_column_data_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_updated_at_column_data_type", "macro_sql": "{% macro get_updated_at_column_data_type(snapshot_sql) %}\n {% set snapshot_sql_column_schema = get_column_schema_from_query(snapshot_sql) %}\n {% set dbt_updated_at_data_type = null %}\n {% set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}\n {% set ns.dbt_updated_at_data_type = null -%}\n {% for column in snapshot_sql_column_schema %}\n {% if ((column.column == 'dbt_updated_at') or (column.column == 'DBT_UPDATED_AT')) %}\n {% set ns.dbt_updated_at_data_type = column.dtype %}\n {% endif %}\n {% endfor %}\n {{ return(ns.dbt_updated_at_data_type or none) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_column_schema_from_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "snapshot_sql", "type": null, "description": ""}], "created_at": 1784225035.23084, "supported_languages": null}, "macro.dbt.check_time_data_types": {"name": "check_time_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.check_time_data_types", "macro_sql": "{% macro check_time_data_types(sql) %}\n {% set dbt_updated_at_data_type = get_updated_at_column_data_type(sql) %}\n {% set snapshot_get_time_data_type = get_snapshot_get_time_data_type() %}\n {% if snapshot_get_time_data_type is not none and dbt_updated_at_data_type is not none and snapshot_get_time_data_type != dbt_updated_at_data_type %}\n {% if exceptions.warn_snapshot_timestamp_data_types %}\n {{ exceptions.warn_snapshot_timestamp_data_types(snapshot_get_time_data_type, dbt_updated_at_data_type) }}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_updated_at_column_data_type", "macro.dbt.get_snapshot_get_time_data_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2310138, "supported_languages": null}, "macro.dbt.get_dbt_valid_to_current": {"name": "get_dbt_valid_to_current", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_dbt_valid_to_current", "macro_sql": "{% macro get_dbt_valid_to_current(strategy, columns) %}\n {% set dbt_valid_to_current = config.get('dbt_valid_to_current') or \"null\" %}\n coalesce(nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}), {{dbt_valid_to_current}})\n as {{ columns.dbt_valid_to }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "strategy", "type": null, "description": ""}, {"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.2311318, "supported_languages": null}, "macro.dbt.unique_key_fields": {"name": "unique_key_fields", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_fields", "macro_sql": "{% macro unique_key_fields(unique_key) %}\n {% if unique_key | is_list %}\n {% for key in unique_key %}\n {{ key }} as dbt_unique_key_{{ loop.index }}\n {%- if not loop.last %} , {%- endif %}\n {% endfor %}\n {% else %}\n {{ unique_key }} as dbt_unique_key\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "unique_key", "type": null, "description": ""}], "created_at": 1784225035.231342, "supported_languages": null}, "macro.dbt.unique_key_join_on": {"name": "unique_key_join_on", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_join_on", "macro_sql": "{% macro unique_key_join_on(unique_key, identifier, from_identifier) %}\n {% if unique_key | is_list %}\n {% for key in unique_key %}\n\t {% set source_unique_key = (identifier ~ \".dbt_unique_key_\" ~ loop.index) | trim %}\n\t {% set target_unique_key = (from_identifier ~ \".dbt_unique_key_\" ~ loop.index) | trim %}\n\t {{ equals(source_unique_key, target_unique_key) }}\n {%- if not loop.last %} and {%- endif %}\n {% endfor %}\n {% else %}\n {{ identifier }}.dbt_unique_key = {{ from_identifier }}.dbt_unique_key\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "unique_key", "type": null, "description": ""}, {"name": "identifier", "type": null, "description": ""}, {"name": "from_identifier", "type": null, "description": ""}], "created_at": 1784225035.2316, "supported_languages": null}, "macro.dbt.unique_key_is_null": {"name": "unique_key_is_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_is_null", "macro_sql": "{% macro unique_key_is_null(unique_key, identifier) %}\n {% if unique_key | is_list %}\n {{ identifier }}.dbt_unique_key_1 is null\n {% else %}\n {{ identifier }}.dbt_unique_key is null\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "unique_key", "type": null, "description": ""}, {"name": "identifier", "type": null, "description": ""}], "created_at": 1784225035.231696, "supported_languages": null}, "macro.dbt.unique_key_is_not_null": {"name": "unique_key_is_not_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_is_not_null", "macro_sql": "{% macro unique_key_is_not_null(unique_key, identifier) %}\n {% if unique_key | is_list %}\n {{ identifier }}.dbt_unique_key_1 is not null\n {% else %}\n {{ identifier }}.dbt_unique_key is not null\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "unique_key", "type": null, "description": ""}, {"name": "identifier", "type": null, "description": ""}], "created_at": 1784225035.231779, "supported_languages": null}, "macro.dbt.materialization_snapshot_default": {"name": "materialization_snapshot_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot.sql", "original_file_path": "macros/materializations/snapshots/snapshot.sql", "unique_id": "macro.dbt.materialization_snapshot_default", "macro_sql": "{% materialization snapshot, default %}\n\n {%- set target_table = model.get('alias', model.get('name')) -%}\n\n {%- set strategy_name = config.get('strategy') -%}\n {%- set unique_key = config.get('unique_key') %}\n -- grab current tables grants config for comparision later on\n {%- set grant_config = config.get('grants') -%}\n\n {% set target_relation_exists, target_relation = get_or_create_relation(\n database=model.database,\n schema=model.schema,\n identifier=target_table,\n type='table') -%}\n\n {%- if not target_relation.is_table -%}\n {% do exceptions.relation_wrong_type(target_relation, 'table') %}\n {%- endif -%}\n\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set strategy_macro = strategy_dispatch(strategy_name) %}\n {# The model['config'] parameter below is no longer used, but passing anyway for compatibility #}\n {# It was a dictionary of config, instead of the config object from the context #}\n {% set strategy = strategy_macro(model, \"snapshotted_data\", \"source_data\", model['config'], target_relation_exists) %}\n\n {% if not target_relation_exists %}\n\n {% set build_sql = build_snapshot_table(strategy, model['compiled_code']) %}\n {% set build_or_select_sql = build_sql %}\n {% set final_sql = create_table_as(False, target_relation, build_sql) %}\n\n {% else %}\n\n {% set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() %}\n\n {{ adapter.assert_valid_snapshot_target_given_strategy(target_relation, columns, strategy) }}\n\n {% set build_or_select_sql = snapshot_staging_table(strategy, sql, target_relation) %}\n {% set staging_table = build_snapshot_staging_table(strategy, sql, target_relation) %}\n\n -- this may no-op if the database does not require column expansion\n {% do adapter.expand_target_column_types(from_relation=staging_table,\n to_relation=target_relation) %}\n\n {% set remove_columns = ['dbt_change_type', 'DBT_CHANGE_TYPE', 'dbt_unique_key', 'DBT_UNIQUE_KEY'] %}\n {% if unique_key | is_list %}\n {% for key in strategy.unique_key %}\n {{ remove_columns.append('dbt_unique_key_' + loop.index|string) }}\n {{ remove_columns.append('DBT_UNIQUE_KEY_' + loop.index|string) }}\n {% endfor %}\n {% endif %}\n\n {% set missing_columns = adapter.get_missing_columns(staging_table, target_relation)\n | rejectattr('name', 'in', remove_columns)\n | list %}\n\n {% do create_columns(target_relation, missing_columns) %}\n\n {% set source_columns = adapter.get_columns_in_relation(staging_table)\n | rejectattr('name', 'in', remove_columns)\n | list %}\n\n {% set quoted_source_columns = [] %}\n {% for column in source_columns %}\n {% do quoted_source_columns.append(adapter.quote(column.name)) %}\n {% endfor %}\n\n {% set final_sql = snapshot_merge_sql(\n target = target_relation,\n source = staging_table,\n insert_cols = quoted_source_columns\n )\n %}\n\n {% endif %}\n\n\n {{ check_time_data_types(build_or_select_sql) }}\n\n {% call statement('main') %}\n {{ final_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(target_relation_exists, full_refresh_mode=False) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if not target_relation_exists %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {% if staging_table is defined %}\n {% do post_snapshot(staging_table) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.get_or_create_relation", "macro.dbt.run_hooks", "macro.dbt.strategy_dispatch", "macro.dbt.build_snapshot_table", "macro.dbt.create_table_as", "macro.dbt.get_snapshot_table_column_names", "macro.dbt.snapshot_staging_table", "macro.dbt.build_snapshot_staging_table", "macro.dbt.create_columns", "macro.dbt.snapshot_merge_sql", "macro.dbt.check_time_data_types", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs", "macro.dbt.create_indexes", "macro.dbt.post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.233463, "supported_languages": ["sql"]}, "macro.dbt.materialization_test_default": {"name": "materialization_test_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/test.sql", "original_file_path": "macros/materializations/tests/test.sql", "unique_id": "macro.dbt.materialization_test_default", "macro_sql": "{%- materialization test, default -%}\n\n {% set relations = [] %}\n {% set limit = config.get('limit') %}\n {% set sql_header = config.get('sql_header') if flags.REQUIRE_SQL_HEADER_IN_TEST_CONFIGS else none %}\n\n {% set sql_with_limit %}\n {{ get_limit_subquery_sql(sql, limit) }}\n {% endset %}\n\n {% if should_store_failures() %}\n\n {% set identifier = model['alias'] %}\n {% set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% set store_failures_as = config.get('store_failures_as') %}\n -- if `--store-failures` is invoked via command line and `store_failures_as` is not set,\n -- config.get('store_failures_as', 'table') returns None, not 'table'\n {% if store_failures_as == none %}{% set store_failures_as = 'table' %}{% endif %}\n {% if store_failures_as not in ['table', 'view'] %}\n {{ exceptions.raise_compiler_error(\n \"'\" ~ store_failures_as ~ \"' is not a valid value for `store_failures_as`. \"\n \"Accepted values are: ['ephemeral', 'table', 'view']\"\n ) }}\n {% endif %}\n\n {% set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database, type=store_failures_as) -%} %}\n\n {% if old_relation %}\n {% do adapter.drop_relation(old_relation) %}\n {% endif %}\n\n {% call statement(auto_begin=True) %}\n {% if sql_header %}{{ sql_header }}{% endif %}\n {{ get_create_sql(target_relation, sql_with_limit) }}\n {% endcall %}\n\n {% do relations.append(target_relation) %}\n\n {# Since the test failures have already been saved to the database, reuse that result rather than querying again #}\n {% set main_sql %}\n select *\n from {{ target_relation }}\n {% endset %}\n\n {{ adapter.commit() }}\n\n {% else %}\n\n {% set main_sql = sql_with_limit %}\n\n {% endif %}\n\n {% set fail_calc = config.get('fail_calc') %}\n {% set warn_if = config.get('warn_if') %}\n {% set error_if = config.get('error_if') %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {% if sql_header %}{{ sql_header }}{% endif %}\n {# The limit has already been included above, and we do not want to duplicate it again. We also want to be safe for macro overrides treating `limit` as a required parameter. #}\n {{ get_test_sql(main_sql, fail_calc, warn_if, error_if, limit=none)}}\n\n {%- endcall %}\n\n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.get_limit_subquery_sql", "macro.dbt.should_store_failures", "macro.dbt.statement", "macro.dbt.get_create_sql", "macro.dbt.get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.2344708, "supported_languages": ["sql"]}, "macro.dbt.get_test_sql": {"name": "get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.get_test_sql", "macro_sql": "{% macro get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n {{ adapter.dispatch('get_test_sql', 'dbt')(main_sql, fail_calc, warn_if, error_if, limit) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "main_sql", "type": null, "description": ""}, {"name": "fail_calc", "type": null, "description": ""}, {"name": "warn_if", "type": null, "description": ""}, {"name": "error_if", "type": null, "description": ""}, {"name": "limit", "type": null, "description": ""}], "created_at": 1784225035.234706, "supported_languages": null}, "macro.dbt.default__get_test_sql": {"name": "default__get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.default__get_test_sql", "macro_sql": "{% macro default__get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n select\n {{ fail_calc }} as failures,\n {{ fail_calc }} {{ warn_if }} as should_warn,\n {{ fail_calc }} {{ error_if }} as should_error\n from (\n {{ main_sql }}\n {{ \"limit \" ~ limit if limit != none }}\n ) dbt_internal_test\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "main_sql", "type": null, "description": ""}, {"name": "fail_calc", "type": null, "description": ""}, {"name": "warn_if", "type": null, "description": ""}, {"name": "error_if", "type": null, "description": ""}, {"name": "limit", "type": null, "description": ""}], "created_at": 1784225035.234825, "supported_languages": null}, "macro.dbt.get_unit_test_sql": {"name": "get_unit_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.get_unit_test_sql", "macro_sql": "{% macro get_unit_test_sql(main_sql, expected_fixture_sql, expected_column_names) -%}\n {{ adapter.dispatch('get_unit_test_sql', 'dbt')(main_sql, expected_fixture_sql, expected_column_names) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_unit_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "main_sql", "type": null, "description": ""}, {"name": "expected_fixture_sql", "type": null, "description": ""}, {"name": "expected_column_names", "type": null, "description": ""}], "created_at": 1784225035.234905, "supported_languages": null}, "macro.dbt.default__get_unit_test_sql": {"name": "default__get_unit_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.default__get_unit_test_sql", "macro_sql": "{% macro default__get_unit_test_sql(main_sql, expected_fixture_sql, expected_column_names) -%}\n-- Build actual result given inputs\nwith dbt_internal_unit_test_actual as (\n select\n {% for expected_column_name in expected_column_names %}{{expected_column_name}}{% if not loop.last -%},{% endif %}{%- endfor -%}, {{ dbt.string_literal(\"actual\") }} as {{ adapter.quote(\"actual_or_expected\") }}\n from (\n {{ main_sql }}\n ) _dbt_internal_unit_test_actual\n),\n-- Build expected result\ndbt_internal_unit_test_expected as (\n select\n {% for expected_column_name in expected_column_names %}{{expected_column_name}}{% if not loop.last -%}, {% endif %}{%- endfor -%}, {{ dbt.string_literal(\"expected\") }} as {{ adapter.quote(\"actual_or_expected\") }}\n from (\n {{ expected_fixture_sql }}\n ) _dbt_internal_unit_test_expected\n)\n-- Union actual and expected results\nselect * from dbt_internal_unit_test_actual\nunion all\nselect * from dbt_internal_unit_test_expected\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "main_sql", "type": null, "description": ""}, {"name": "expected_fixture_sql", "type": null, "description": ""}, {"name": "expected_column_names", "type": null, "description": ""}], "created_at": 1784225035.235138, "supported_languages": null}, "macro.dbt.get_where_subquery": {"name": "get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.get_where_subquery", "macro_sql": "{% macro get_where_subquery(relation) -%}\n {% do return(adapter.dispatch('get_where_subquery', 'dbt')(relation)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_where_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.235272, "supported_languages": null}, "macro.dbt.default__get_where_subquery": {"name": "default__get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.default__get_where_subquery", "macro_sql": "{% macro default__get_where_subquery(relation) -%}\n {% set where = config.get('where', '') %}\n {% if where %}\n {%- set filtered -%}\n (select * from {{ relation }} where {{ where }}) dbt_subquery\n {%- endset -%}\n {% do return(filtered) %}\n {%- else -%}\n {% do return(relation) %}\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2354162, "supported_languages": null}, "macro.dbt.materialization_unit_default": {"name": "materialization_unit_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/unit.sql", "original_file_path": "macros/materializations/tests/unit.sql", "unique_id": "macro.dbt.materialization_unit_default", "macro_sql": "{%- materialization unit, default -%}\n\n {% set relations = [] %}\n {% set sql_header = config.get('sql_header') if flags.REQUIRE_SQL_HEADER_IN_TEST_CONFIGS else none %}\n\n {% set expected_rows = config.get('expected_rows') %}\n {% set expected_sql = config.get('expected_sql') %}\n {% set tested_expected_column_names = expected_rows[0].keys() if (expected_rows | length ) > 0 else get_columns_in_query(sql) %}\n\n {%- set target_relation = this.incorporate(type='table') -%}\n {%- set temp_relation = make_temp_relation(target_relation)-%}\n {% do run_query(get_create_table_as_sql(True, temp_relation, get_empty_subquery_sql(sql))) %}\n {%- set columns_in_relation = adapter.get_columns_in_relation(temp_relation) -%}\n {%- set column_name_to_data_types = {} -%}\n {%- set column_name_to_quoted = {} -%}\n {%- for column in columns_in_relation -%}\n {%- do column_name_to_data_types.update({column.name|lower: column.data_type}) -%}\n {%- do column_name_to_quoted.update({column.name|lower: column.quoted}) -%}\n {%- endfor -%}\n\n {%- set expected_column_names_quoted = [] -%}\n {%- for column_name in tested_expected_column_names -%}\n {%- do expected_column_names_quoted.append(column_name_to_quoted[column_name|lower]) -%}\n {%- endfor -%}\n\n {% if not expected_sql %}\n {% set expected_sql = get_expected_sql(expected_rows, column_name_to_data_types, column_name_to_quoted) %}\n {% endif %}\n {% set unit_test_sql = get_unit_test_sql(sql, expected_sql, expected_column_names_quoted) %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {% if sql_header %}{{ sql_header }}{% endif %}\n {{ unit_test_sql }}\n\n {%- endcall %}\n\n {% do adapter.drop_relation(temp_relation) %}\n\n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.get_columns_in_query", "macro.dbt.make_temp_relation", "macro.dbt.run_query", "macro.dbt.get_create_table_as_sql", "macro.dbt.get_empty_subquery_sql", "macro.dbt.get_expected_sql", "macro.dbt.get_unit_test_sql", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.236189, "supported_languages": ["sql"]}, "macro.dbt.materialization_materialized_view_default": {"name": "materialization_materialized_view_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialization_materialized_view_default", "macro_sql": "{% materialization materialized_view, default %}\n {% set existing_relation = load_cached_relation(this) %}\n {% set target_relation = this.incorporate(type=this.MaterializedView) %}\n {% set intermediate_relation = make_intermediate_relation(target_relation) %}\n {% set backup_relation_type = target_relation.MaterializedView if existing_relation is none else existing_relation.type %}\n {% set backup_relation = make_backup_relation(target_relation, backup_relation_type) %}\n\n {{ materialized_view_setup(backup_relation, intermediate_relation, pre_hooks) }}\n\n {% set build_sql = materialized_view_get_build_sql(existing_relation, target_relation, backup_relation, intermediate_relation) %}\n\n {% if build_sql == '' %}\n {{ materialized_view_execute_no_op(target_relation) }}\n {% else %}\n {{ materialized_view_execute_build_sql(build_sql, existing_relation, target_relation, post_hooks) }}\n {% endif %}\n\n {{ materialized_view_teardown(backup_relation, intermediate_relation, post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.materialized_view_setup", "macro.dbt.materialized_view_get_build_sql", "macro.dbt.materialized_view_execute_no_op", "macro.dbt.materialized_view_execute_build_sql", "macro.dbt.materialized_view_teardown"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.23681, "supported_languages": ["sql"]}, "macro.dbt.materialized_view_setup": {"name": "materialized_view_setup", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_setup", "macro_sql": "{% macro materialized_view_setup(backup_relation, intermediate_relation, pre_hooks) %}\n\n -- backup_relation and intermediate_relation should not already exist in the database\n -- it's possible these exist because of a previous run that exited unexpectedly\n {% set preexisting_backup_relation = load_cached_relation(backup_relation) %}\n {% set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) %}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}, {"name": "pre_hooks", "type": null, "description": ""}], "created_at": 1784225035.2369611, "supported_languages": null}, "macro.dbt.materialized_view_teardown": {"name": "materialized_view_teardown", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_teardown", "macro_sql": "{% macro materialized_view_teardown(backup_relation, intermediate_relation, post_hooks) %}\n\n -- drop the temp relations if they exist to leave the database clean for the next run\n {{ drop_relation_if_exists(backup_relation) }}\n {{ drop_relation_if_exists(intermediate_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}, {"name": "post_hooks", "type": null, "description": ""}], "created_at": 1784225035.237083, "supported_languages": null}, "macro.dbt.materialized_view_get_build_sql": {"name": "materialized_view_get_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_get_build_sql", "macro_sql": "{% macro materialized_view_get_build_sql(existing_relation, target_relation, backup_relation, intermediate_relation) %}\n\n {% set full_refresh_mode = should_full_refresh() %}\n\n -- determine the scenario we're in: create, full_refresh, alter, refresh data\n {% if existing_relation is none %}\n {% set build_sql = get_create_materialized_view_as_sql(target_relation, sql) %}\n {% elif full_refresh_mode or not existing_relation.is_materialized_view %}\n {% set build_sql = get_replace_sql(existing_relation, target_relation, sql) %}\n {% else %}\n\n -- get config options\n {% set on_configuration_change = config.get('on_configuration_change') %}\n {% set configuration_changes = get_materialized_view_configuration_changes(existing_relation, config) %}\n\n {% if configuration_changes is none %}\n {% set build_sql = refresh_materialized_view(target_relation) %}\n\n {% elif on_configuration_change == 'apply' %}\n {% set build_sql = get_alter_materialized_view_as_sql(target_relation, configuration_changes, sql, existing_relation, backup_relation, intermediate_relation) %}\n {% elif on_configuration_change == 'continue' %}\n {% set build_sql = '' %}\n {{ exceptions.warn(\"Configuration changes were identified and `on_configuration_change` was set to `continue` for `\" ~ target_relation.render() ~ \"`\") }}\n {% elif on_configuration_change == 'fail' %}\n {{ exceptions.raise_fail_fast_error(\"Configuration changes were identified and `on_configuration_change` was set to `fail` for `\" ~ target_relation.render() ~ \"`\") }}\n\n {% else %}\n -- this only happens if the user provides a value other than `apply`, 'skip', 'fail'\n {{ exceptions.raise_compiler_error(\"Unexpected configuration scenario\") }}\n\n {% endif %}\n\n {% endif %}\n\n {% do return(build_sql) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh", "macro.dbt.get_create_materialized_view_as_sql", "macro.dbt.get_replace_sql", "macro.dbt.get_materialized_view_configuration_changes", "macro.dbt.refresh_materialized_view", "macro.dbt.get_alter_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}], "created_at": 1784225035.237568, "supported_languages": null}, "macro.dbt.materialized_view_execute_no_op": {"name": "materialized_view_execute_no_op", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_execute_no_op", "macro_sql": "{% macro materialized_view_execute_no_op(target_relation) %}\n {% do store_raw_result(\n name=\"main\",\n message=\"skip \" ~ target_relation,\n code=\"skip\",\n rows_affected=\"-1\"\n ) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.237663, "supported_languages": null}, "macro.dbt.materialized_view_execute_build_sql": {"name": "materialized_view_execute_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_execute_build_sql", "macro_sql": "{% macro materialized_view_execute_build_sql(build_sql, existing_relation, target_relation, post_hooks) %}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set grant_config = config.get('grants') %}\n\n {% call statement(name=\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "build_sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "post_hooks", "type": null, "description": ""}], "created_at": 1784225035.237908, "supported_languages": null}, "macro.dbt.materialization_view_default": {"name": "materialization_view_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view.sql", "original_file_path": "macros/materializations/models/view.sql", "unique_id": "macro.dbt.materialization_view_default", "macro_sql": "{%- materialization view, default -%}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='view') -%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n This relation (probably) doesn't exist yet. If it does exist, it's a leftover from\n a previous run, and we're going to try to drop it immediately. At the end of this\n materialization, we're going to rename the \"existing_relation\" to this identifier,\n and then we're going to drop it. In order to make sure we run the correct one of:\n - drop view ...\n - drop table ...\n\n We need to set the type of this relation to be the type of the existing_relation, if it exists,\n or else \"view\" as a sane default if it does not. Note that if the existing_relation does not\n exist, then there is nothing to move out of the way and subsequentally drop. In that case,\n this relation will be effectively unused.\n */\n {%- set backup_relation_type = 'view' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n -- move the existing view out of the way\n {% if existing_relation is not none %}\n /* Do the equivalent of rename_if_exists. 'existing_relation' could have been dropped\n since the variable was first set. */\n {% set existing_relation = load_cached_relation(existing_relation) %}\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n {% endif %}\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.run_hooks", "macro.dbt.drop_relation_if_exists", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.238715, "supported_languages": ["sql"]}, "macro.dbt.materialization_table_default": {"name": "materialization_table_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table.sql", "original_file_path": "macros/materializations/models/table.sql", "unique_id": "macro.dbt.materialization_table_default", "macro_sql": "{% materialization table, default %}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') %}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n See ../view/view.sql for more information about this relation.\n */\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_table_as_sql(False, intermediate_relation, sql) }}\n {%- endcall %}\n\n {% do create_indexes(intermediate_relation) %}\n\n -- cleanup\n {% if existing_relation is not none %}\n /* Do the equivalent of rename_if_exists. 'existing_relation' could have been dropped\n since the variable was first set. */\n {% set existing_relation = load_cached_relation(existing_relation) %}\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n {% endif %}\n\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n -- finally, drop the existing/backup relation after the commit\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.get_create_table_as_sql", "macro.dbt.create_indexes", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.2395608, "supported_languages": ["sql"]}, "macro.dbt.get_quoted_csv": {"name": "get_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_quoted_csv", "macro_sql": "{% macro get_quoted_csv(column_names) %}\n\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote(col)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "column_names", "type": null, "description": ""}], "created_at": 1784225035.239943, "supported_languages": null}, "macro.dbt.diff_columns": {"name": "diff_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_columns", "macro_sql": "{% macro diff_columns(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% set source_names = source_columns | map(attribute = 'column') | list %}\n {% set target_names = target_columns | map(attribute = 'column') | list %}\n\n {# --check whether the name attribute exists in the target - this does not perform a data type check #}\n {% for sc in source_columns %}\n {% if sc.name not in target_names %}\n {{ result.append(sc) }}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_columns", "type": null, "description": ""}, {"name": "target_columns", "type": null, "description": ""}], "created_at": 1784225035.240166, "supported_languages": null}, "macro.dbt.diff_column_data_types": {"name": "diff_column_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_column_data_types", "macro_sql": "{% macro diff_column_data_types(source_columns, target_columns) %}\n {{ return(adapter.dispatch('diff_column_data_types', 'dbt')(source_columns, target_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__diff_column_data_types"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_columns", "type": null, "description": ""}, {"name": "target_columns", "type": null, "description": ""}], "created_at": 1784225035.240252, "supported_languages": null}, "macro.dbt.default__diff_column_data_types": {"name": "default__diff_column_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.default__diff_column_data_types", "macro_sql": "{% macro default__diff_column_data_types(source_columns, target_columns) %}\n {% set result = [] %}\n {% for sc in source_columns %}\n {% set tc = target_columns | selectattr(\"name\", \"equalto\", sc.name) | list | first %}\n {% if tc %}\n {% if sc.expanded_data_type != tc.expanded_data_type and not sc.can_expand_to(other_column=tc) %}\n {{ result.append( { 'column_name': tc.name, 'new_type': sc.expanded_data_type } ) }}\n {% endif %}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_columns", "type": null, "description": ""}, {"name": "target_columns", "type": null, "description": ""}], "created_at": 1784225035.240507, "supported_languages": null}, "macro.dbt.get_merge_update_columns": {"name": "get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_merge_update_columns", "macro_sql": "{% macro get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {{ return(adapter.dispatch('get_merge_update_columns', 'dbt')(merge_update_columns, merge_exclude_columns, dest_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_update_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "merge_update_columns", "type": null, "description": ""}, {"name": "merge_exclude_columns", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}], "created_at": 1784225035.2406049, "supported_languages": null}, "macro.dbt.default__get_merge_update_columns": {"name": "default__get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.default__get_merge_update_columns", "macro_sql": "{% macro default__get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {%- set default_cols = dest_columns | map(attribute=\"quoted\") | list -%}\n\n {%- if merge_update_columns and merge_exclude_columns -%}\n {{ exceptions.raise_compiler_error(\n 'Model cannot specify merge_update_columns and merge_exclude_columns. Please update model to use only one config'\n )}}\n {%- elif merge_update_columns -%}\n {%- set update_columns = merge_update_columns -%}\n {%- elif merge_exclude_columns -%}\n {%- set update_columns = [] -%}\n {%- for column in dest_columns -%}\n {% if column.column | lower not in merge_exclude_columns | map(\"lower\") | list %}\n {%- do update_columns.append(column.quoted) -%}\n {% endif %}\n {%- endfor -%}\n {%- else -%}\n {%- set update_columns = default_cols -%}\n {%- endif -%}\n\n {{ return(update_columns) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "merge_update_columns", "type": null, "description": ""}, {"name": "merge_exclude_columns", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}], "created_at": 1784225035.240895, "supported_languages": null}, "macro.dbt.get_merge_sql": {"name": "get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_merge_sql", "macro_sql": "{% macro get_merge_sql(target, source, unique_key, dest_columns, incremental_predicates=none) -%}\n -- back compat for old kwarg name\n {% set incremental_predicates = kwargs.get('predicates', incremental_predicates) %}\n {{ adapter.dispatch('get_merge_sql', 'dbt')(target, source, unique_key, dest_columns, incremental_predicates) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "unique_key", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "incremental_predicates", "type": null, "description": ""}], "created_at": 1784225035.241386, "supported_languages": null}, "macro.dbt.get_merge_unique_key_match": {"name": "get_merge_unique_key_match", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_merge_unique_key_match", "macro_sql": "{% macro get_merge_unique_key_match(source_unique_key, target_unique_key) %}\n {{ return(adapter.dispatch('get_merge_unique_key_match', 'dbt')(source_unique_key, target_unique_key)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_unique_key_match"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_unique_key", "type": null, "description": ""}, {"name": "target_unique_key", "type": null, "description": ""}], "created_at": 1784225035.241468, "supported_languages": null}, "macro.dbt.default__get_merge_unique_key_match": {"name": "default__get_merge_unique_key_match", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_merge_unique_key_match", "macro_sql": "{% macro default__get_merge_unique_key_match(source_unique_key, target_unique_key) -%}\n {{ return(equals(source_unique_key, target_unique_key) | trim) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_unique_key", "type": null, "description": ""}, {"name": "target_unique_key", "type": null, "description": ""}], "created_at": 1784225035.241533, "supported_languages": null}, "macro.dbt.default__get_merge_sql": {"name": "default__get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_merge_sql", "macro_sql": "{% macro default__get_merge_sql(target, source, unique_key, dest_columns, incremental_predicates=none) -%}\n {%- set predicates = [] if incremental_predicates is none else [] + incremental_predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set merge_update_columns = config.get('merge_update_columns') -%}\n {%- set merge_exclude_columns = config.get('merge_exclude_columns') -%}\n {%- set update_columns = get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {% if unique_key %}\n {% if unique_key is sequence and unique_key is not mapping and unique_key is not string %}\n {% for key in unique_key %}\n {% set this_key_match %}\n DBT_INTERNAL_SOURCE.{{ key }} = DBT_INTERNAL_DEST.{{ key }}\n {% endset %}\n {% do predicates.append(this_key_match) %}\n {% endfor %}\n {% else %}\n {% set source_unique_key = (\"DBT_INTERNAL_SOURCE.\" ~ unique_key) | trim %}\n {% set target_unique_key = (\"DBT_INTERNAL_DEST.\" ~ unique_key) | trim %}\n {% set unique_key_match = get_merge_unique_key_match(source_unique_key, target_unique_key) %}\n {% do predicates.append(unique_key_match) %}\n {% endif %}\n {% else %}\n {% do predicates.append('FALSE') %}\n {% endif %}\n\n {{ sql_header if sql_header is not none }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on {{\"(\" ~ predicates | join(\") and (\") ~ \")\"}}\n\n {% if unique_key %}\n when matched then update set\n {% for column_name in update_columns -%}\n {{ column_name }} = DBT_INTERNAL_SOURCE.{{ column_name }}\n {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n {% endif %}\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv", "macro.dbt.get_merge_update_columns", "macro.dbt.get_merge_unique_key_match"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "unique_key", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "incremental_predicates", "type": null, "description": ""}], "created_at": 1784225035.242184, "supported_languages": null}, "macro.dbt.get_delete_insert_merge_sql": {"name": "get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_delete_insert_merge_sql", "macro_sql": "{% macro get_delete_insert_merge_sql(target, source, unique_key, dest_columns, incremental_predicates) -%}\n {{ adapter.dispatch('get_delete_insert_merge_sql', 'dbt')(target, source, unique_key, dest_columns, incremental_predicates) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "unique_key", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "incremental_predicates", "type": null, "description": ""}], "created_at": 1784225035.2422888, "supported_languages": null}, "macro.dbt.default__get_delete_insert_merge_sql": {"name": "default__get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_delete_insert_merge_sql", "macro_sql": "{% macro default__get_delete_insert_merge_sql(target, source, unique_key, dest_columns, incremental_predicates) -%}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n {% if unique_key %}\n {% if unique_key is string %}\n {% set unique_key = [unique_key] %}\n {% endif %}\n\n {%- set unique_key_str = unique_key|join(', ') -%}\n\n delete from {{ target }} as DBT_INTERNAL_DEST\n where ({{ unique_key_str }}) in (\n select distinct {{ unique_key_str }}\n from {{ source }} as DBT_INTERNAL_SOURCE\n )\n {%- if incremental_predicates %}\n {% for predicate in incremental_predicates %}\n and {{ predicate }}\n {% endfor %}\n {%- endif -%};\n\n {% endif %}\n\n insert into {{ target }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ source }}\n )\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "unique_key", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "incremental_predicates", "type": null, "description": ""}], "created_at": 1784225035.242562, "supported_languages": null}, "macro.dbt.get_insert_overwrite_merge_sql": {"name": "get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_insert_overwrite_merge_sql", "macro_sql": "{% macro get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header=false) -%}\n {{ adapter.dispatch('get_insert_overwrite_merge_sql', 'dbt')(target, source, dest_columns, predicates, include_sql_header) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "predicates", "type": null, "description": ""}, {"name": "include_sql_header", "type": null, "description": ""}], "created_at": 1784225035.242666, "supported_languages": null}, "macro.dbt.default__get_insert_overwrite_merge_sql": {"name": "default__get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_insert_overwrite_merge_sql", "macro_sql": "{% macro default__get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header) -%}\n {#-- The only time include_sql_header is True: --#}\n {#-- BigQuery + insert_overwrite strategy + \"static\" partitions config --#}\n {#-- We should consider including the sql header at the materialization level instead --#}\n\n {%- set predicates = [] if predicates is none else [] + predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none and include_sql_header }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on FALSE\n\n when not matched by source\n {% if predicates %} and {{ predicates | join(' and ') }} {% endif %}\n then delete\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target", "type": null, "description": ""}, {"name": "source", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}, {"name": "predicates", "type": null, "description": ""}, {"name": "include_sql_header", "type": null, "description": ""}], "created_at": 1784225035.242919, "supported_languages": null}, "macro.dbt.is_incremental": {"name": "is_incremental", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/is_incremental.sql", "original_file_path": "macros/materializations/models/incremental/is_incremental.sql", "unique_id": "macro.dbt.is_incremental", "macro_sql": "{% macro is_incremental() %}\n {#-- do not run introspective queries in parsing #}\n {% if not execute %}\n {{ return(False) }}\n {% else %}\n {% set relation = adapter.get_relation(this.database, this.schema, this.table) %}\n {{ return(relation is not none\n and relation.type == 'table'\n and model.config.materialized == 'incremental'\n and not should_full_refresh()) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2431629, "supported_languages": null}, "macro.dbt.get_incremental_append_sql": {"name": "get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_append_sql", "macro_sql": "{% macro get_incremental_append_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_append_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.2434292, "supported_languages": null}, "macro.dbt.default__get_incremental_append_sql": {"name": "default__get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_append_sql", "macro_sql": "{% macro default__get_incremental_append_sql(arg_dict) %}\n\n {% do return(get_insert_into_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_insert_into_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.24352, "supported_languages": null}, "macro.dbt.get_incremental_delete_insert_sql": {"name": "get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_delete_insert_sql", "macro_sql": "{% macro get_incremental_delete_insert_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_delete_insert_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_delete_insert_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.2435899, "supported_languages": null}, "macro.dbt.default__get_incremental_delete_insert_sql": {"name": "default__get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_delete_insert_sql", "macro_sql": "{% macro default__get_incremental_delete_insert_sql(arg_dict) %}\n\n {% do return(get_delete_insert_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.243697, "supported_languages": null}, "macro.dbt.get_incremental_merge_sql": {"name": "get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_merge_sql", "macro_sql": "{% macro get_incremental_merge_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.243812, "supported_languages": null}, "macro.dbt.default__get_incremental_merge_sql": {"name": "default__get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_merge_sql", "macro_sql": "{% macro default__get_incremental_merge_sql(arg_dict) %}\n\n {% do return(get_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.243924, "supported_languages": null}, "macro.dbt.get_incremental_insert_overwrite_sql": {"name": "get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_insert_overwrite_sql", "macro_sql": "{% macro get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_insert_overwrite_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_insert_overwrite_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.243996, "supported_languages": null}, "macro.dbt.default__get_incremental_insert_overwrite_sql": {"name": "default__get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_insert_overwrite_sql", "macro_sql": "{% macro default__get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {% do return(get_insert_overwrite_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.244092, "supported_languages": null}, "macro.dbt.get_incremental_default_sql": {"name": "get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_default_sql", "macro_sql": "{% macro get_incremental_default_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_default_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_incremental_default_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.244164, "supported_languages": null}, "macro.dbt.default__get_incremental_default_sql": {"name": "default__get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_default_sql", "macro_sql": "{% macro default__get_incremental_default_sql(arg_dict) %}\n\n {% do return(get_incremental_append_sql(arg_dict)) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.244222, "supported_languages": null}, "macro.dbt.get_incremental_microbatch_sql": {"name": "get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_microbatch_sql", "macro_sql": "{% macro get_incremental_microbatch_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_microbatch_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_incremental_microbatch_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.244291, "supported_languages": null}, "macro.dbt.default__get_incremental_microbatch_sql": {"name": "default__get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_microbatch_sql", "macro_sql": "{% macro default__get_incremental_microbatch_sql(arg_dict) %}\n\n {{ exceptions.raise_not_implemented('microbatch materialization strategy not implemented for adapter ' + adapter.type()) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "arg_dict", "type": null, "description": ""}], "created_at": 1784225035.2443562, "supported_languages": null}, "macro.dbt.get_insert_into_sql": {"name": "get_insert_into_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_insert_into_sql", "macro_sql": "{% macro get_insert_into_sql(target_relation, temp_relation, dest_columns) %}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n insert into {{ target_relation }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ temp_relation }}\n )\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}, {"name": "temp_relation", "type": null, "description": ""}, {"name": "dest_columns", "type": null, "description": ""}], "created_at": 1784225035.244462, "supported_languages": null}, "macro.dbt.materialization_incremental_default": {"name": "materialization_incremental_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/incremental.sql", "original_file_path": "macros/materializations/models/incremental/incremental.sql", "unique_id": "macro.dbt.materialization_incremental_default", "macro_sql": "{% materialization incremental, default -%}\n\n -- relations\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') -%}\n {%- set temp_relation = make_temp_relation(target_relation)-%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation)-%}\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n\n -- configs\n {%- set unique_key = config.get('unique_key') -%}\n {%- set full_refresh_mode = (should_full_refresh() or existing_relation.is_view) -%}\n {%- set on_schema_change = incremental_validate_on_schema_change(config.get('on_schema_change'), default='ignore') -%}\n\n -- the temp_ and backup_ relations should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation. This has to happen before\n -- BEGIN, in a separate transaction\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation)-%}\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set to_drop = [] %}\n\n {% set incremental_strategy = config.get('incremental_strategy') or 'default' %}\n {% set strategy_sql_macro_func = adapter.get_incremental_strategy_macro(context, incremental_strategy) %}\n\n {% if existing_relation is none %}\n {% set build_sql = get_create_table_as_sql(False, target_relation, sql) %}\n {% set relation_for_indexes = target_relation %}\n {% elif full_refresh_mode %}\n {% set build_sql = get_create_table_as_sql(False, intermediate_relation, sql) %}\n {% set relation_for_indexes = intermediate_relation %}\n {% set need_swap = true %}\n {% else %}\n {% do run_query(get_create_table_as_sql(True, temp_relation, sql)) %}\n {% set relation_for_indexes = temp_relation %}\n {% set contract_config = config.get('contract') %}\n {% if not contract_config or not contract_config.enforced %}\n {% do adapter.expand_target_column_types(\n from_relation=temp_relation,\n to_relation=target_relation) %}\n {% endif %}\n {#-- Process schema changes. Returns dict of changes if successful. Use source columns for upserting/merging --#}\n {% set dest_columns = process_schema_changes(on_schema_change, temp_relation, existing_relation) %}\n {% if not dest_columns %}\n {% set dest_columns = adapter.get_columns_in_relation(existing_relation) %}\n {% endif %}\n\n {#-- Get the incremental_strategy, the macro to use for the strategy, and build the sql --#}\n {% set incremental_predicates = config.get('predicates', none) or config.get('incremental_predicates', none) %}\n {% set strategy_arg_dict = ({'target_relation': target_relation, 'temp_relation': temp_relation, 'unique_key': unique_key, 'dest_columns': dest_columns, 'incremental_predicates': incremental_predicates }) %}\n {% set build_sql = strategy_sql_macro_func(strategy_arg_dict) %}\n\n {% endif %}\n\n {% call statement(\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% if existing_relation is none or existing_relation.is_view or should_full_refresh() %}\n {% do create_indexes(relation_for_indexes) %}\n {% endif %}\n\n {% if need_swap %}\n {% do adapter.rename_relation(target_relation, backup_relation) %}\n {% do adapter.rename_relation(intermediate_relation, target_relation) %}\n {% do to_drop.append(backup_relation) %}\n {% endif %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {% do adapter.commit() %}\n\n {% for rel in to_drop %}\n {% do adapter.drop_relation(rel) %}\n {% endfor %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.make_temp_relation", "macro.dbt.make_intermediate_relation", "macro.dbt.make_backup_relation", "macro.dbt.should_full_refresh", "macro.dbt.incremental_validate_on_schema_change", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks", "macro.dbt.get_create_table_as_sql", "macro.dbt.run_query", "macro.dbt.process_schema_changes", "macro.dbt.statement", "macro.dbt.create_indexes", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.246111, "supported_languages": ["sql"]}, "macro.dbt.incremental_validate_on_schema_change": {"name": "incremental_validate_on_schema_change", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.incremental_validate_on_schema_change", "macro_sql": "{% macro incremental_validate_on_schema_change(on_schema_change, default='ignore') %}\n\n {% if on_schema_change not in ['sync_all_columns', 'append_new_columns', 'fail', 'ignore'] %}\n\n {% set log_message = 'Invalid value for on_schema_change (%s) specified. Setting default value of %s.' % (on_schema_change, default) %}\n {% do log(log_message) %}\n\n {{ return(default) }}\n\n {% else %}\n\n {{ return(on_schema_change) }}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "on_schema_change", "type": null, "description": ""}, {"name": "default", "type": null, "description": ""}], "created_at": 1784225035.246672, "supported_languages": null}, "macro.dbt.check_for_schema_changes": {"name": "check_for_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.check_for_schema_changes", "macro_sql": "{% macro check_for_schema_changes(source_relation, target_relation) %}\n {{ return(adapter.dispatch('check_for_schema_changes', 'dbt')(source_relation, target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__check_for_schema_changes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.246758, "supported_languages": null}, "macro.dbt.default__check_for_schema_changes": {"name": "default__check_for_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.default__check_for_schema_changes", "macro_sql": "{% macro default__check_for_schema_changes(source_relation, target_relation) %}\n\n {% set schema_changed = False %}\n\n {%- set source_columns = adapter.get_columns_in_relation(source_relation) -%}\n {%- set target_columns = adapter.get_columns_in_relation(target_relation) -%}\n {%- set source_not_in_target = diff_columns(source_columns, target_columns) -%}\n {%- set target_not_in_source = diff_columns(target_columns, source_columns) -%}\n\n {% set new_target_types = diff_column_data_types(source_columns, target_columns) %}\n\n {% if source_not_in_target != [] %}\n {% set schema_changed = True %}\n {% elif target_not_in_source != [] or new_target_types != [] %}\n {% set schema_changed = True %}\n {% elif new_target_types != [] %}\n {% set schema_changed = True %}\n {% endif %}\n\n {% set changes_dict = {\n 'schema_changed': schema_changed,\n 'source_not_in_target': source_not_in_target,\n 'target_not_in_source': target_not_in_source,\n 'source_columns': source_columns,\n 'target_columns': target_columns,\n 'new_target_types': new_target_types\n } %}\n\n {% set msg %}\n In {{ target_relation }}:\n Schema changed: {{ schema_changed }}\n Source columns not in target: {{ source_not_in_target }}\n Target columns not in source: {{ target_not_in_source }}\n New column types: {{ new_target_types }}\n {% endset %}\n\n {% do log(msg) %}\n\n {{ return(changes_dict) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.diff_columns", "macro.dbt.diff_column_data_types"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.247231, "supported_languages": null}, "macro.dbt.sync_column_schemas": {"name": "sync_column_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.sync_column_schemas", "macro_sql": "{% macro sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n {{ return(adapter.dispatch('sync_column_schemas', 'dbt')(on_schema_change, target_relation, schema_changes_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__sync_column_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "on_schema_change", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "schema_changes_dict", "type": null, "description": ""}], "created_at": 1784225035.247332, "supported_languages": null}, "macro.dbt.default__sync_column_schemas": {"name": "default__sync_column_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.default__sync_column_schemas", "macro_sql": "{% macro default__sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {%- set add_to_target_arr = schema_changes_dict['source_not_in_target'] -%}\n {%- set remove_from_target_arr = schema_changes_dict['target_not_in_source'] -%}\n {%- set new_target_types = schema_changes_dict['new_target_types'] -%}\n\n {%- if on_schema_change == 'append_new_columns'-%}\n {%- if add_to_target_arr | length > 0 -%}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, none) -%}\n {%- endif -%}\n\n {% elif on_schema_change == 'sync_all_columns' %}\n\n {% if add_to_target_arr | length > 0 or remove_from_target_arr | length > 0 %}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, remove_from_target_arr) -%}\n {% endif %}\n\n {% if new_target_types != [] %}\n {% for ntt in new_target_types %}\n {% set column_name = ntt['column_name'] %}\n {% set new_type = ntt['new_type'] %}\n {% do alter_column_type(target_relation, column_name, new_type) %}\n {% endfor %}\n {% endif %}\n\n {% endif %}\n\n {% set schema_change_message %}\n In {{ target_relation }}:\n Schema change approach: {{ on_schema_change }}\n Columns added: {{ add_to_target_arr }}\n Columns removed: {{ remove_from_target_arr }}\n Data types changed: {{ new_target_types }}\n {% endset %}\n\n {% do log(schema_change_message) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.alter_relation_add_remove_columns", "macro.dbt.alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "on_schema_change", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "schema_changes_dict", "type": null, "description": ""}], "created_at": 1784225035.2477949, "supported_languages": null}, "macro.dbt.process_schema_changes": {"name": "process_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.process_schema_changes", "macro_sql": "{% macro process_schema_changes(on_schema_change, source_relation, target_relation) %}\n {{ return(adapter.dispatch('process_schema_changes', 'dbt')(on_schema_change, source_relation, target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__process_schema_changes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "on_schema_change", "type": null, "description": ""}, {"name": "source_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.247891, "supported_languages": null}, "macro.dbt.default__process_schema_changes": {"name": "default__process_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.default__process_schema_changes", "macro_sql": "{% macro default__process_schema_changes(on_schema_change, source_relation, target_relation) %}\n\n {% if on_schema_change == 'ignore' %}\n\n {{ return({}) }}\n\n {% else %}\n\n {% set schema_changes_dict = check_for_schema_changes(source_relation, target_relation) %}\n\n {% if schema_changes_dict['schema_changed'] %}\n\n {% if on_schema_change == 'fail' %}\n\n {% set fail_msg %}\n The source and target schemas on this incremental model are out of sync!\n They can be reconciled in several ways:\n - set the `on_schema_change` config to either append_new_columns or sync_all_columns, depending on your situation.\n - Re-run the incremental model with `full_refresh: True` to update the target schema.\n - update the schema manually and re-run the process.\n\n Additional troubleshooting context:\n Source columns not in target: {{ schema_changes_dict['source_not_in_target'] }}\n Target columns not in source: {{ schema_changes_dict['target_not_in_source'] }}\n New column types: {{ schema_changes_dict['new_target_types'] }}\n {% endset %}\n\n {% do exceptions.raise_compiler_error(fail_msg) %}\n\n {# -- unless we ignore, run the sync operation per the config #}\n {% else %}\n\n {% do sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {% endif %}\n\n {% endif %}\n\n {{ return(schema_changes_dict['source_columns']) }}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.check_for_schema_changes", "macro.dbt.sync_column_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "on_schema_change", "type": null, "description": ""}, {"name": "source_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.2482262, "supported_languages": null}, "macro.dbt.can_clone_table": {"name": "can_clone_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/can_clone_table.sql", "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", "unique_id": "macro.dbt.can_clone_table", "macro_sql": "{% macro can_clone_table() %}\n {{ return(adapter.dispatch('can_clone_table', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__can_clone_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2483351, "supported_languages": null}, "macro.dbt.default__can_clone_table": {"name": "default__can_clone_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/can_clone_table.sql", "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", "unique_id": "macro.dbt.default__can_clone_table", "macro_sql": "{% macro default__can_clone_table() %}\n {{ return(False) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.248387, "supported_languages": null}, "macro.dbt.create_or_replace_clone": {"name": "create_or_replace_clone", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/create_or_replace_clone.sql", "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", "unique_id": "macro.dbt.create_or_replace_clone", "macro_sql": "{% macro create_or_replace_clone(this_relation, defer_relation) %}\n {{ return(adapter.dispatch('create_or_replace_clone', 'dbt')(this_relation, defer_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_or_replace_clone"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "this_relation", "type": null, "description": ""}, {"name": "defer_relation", "type": null, "description": ""}], "created_at": 1784225035.248508, "supported_languages": null}, "macro.dbt.default__create_or_replace_clone": {"name": "default__create_or_replace_clone", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/create_or_replace_clone.sql", "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", "unique_id": "macro.dbt.default__create_or_replace_clone", "macro_sql": "{% macro default__create_or_replace_clone(this_relation, defer_relation) %}\n create or replace table {{ this_relation.render() }} clone {{ defer_relation.render() }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "this_relation", "type": null, "description": ""}, {"name": "defer_relation", "type": null, "description": ""}], "created_at": 1784225035.2485812, "supported_languages": null}, "macro.dbt.materialization_clone_default": {"name": "materialization_clone_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/clone.sql", "original_file_path": "macros/materializations/models/clone/clone.sql", "unique_id": "macro.dbt.materialization_clone_default", "macro_sql": "{%- materialization clone, default -%}\n\n {%- set relations = {'relations': []} -%}\n\n {%- if not defer_relation -%}\n -- nothing to do\n {{ log(\"No relation found in state manifest for \" ~ model.unique_id, info=True) }}\n {{ return(relations) }}\n {%- endif -%}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n\n {%- if existing_relation and not flags.FULL_REFRESH -%}\n -- noop!\n {{ log(\"Relation \" ~ existing_relation ~ \" already exists\", info=True) }}\n {{ return(relations) }}\n {%- endif -%}\n\n {%- set other_existing_relation = load_cached_relation(defer_relation) -%}\n\n -- If this is a database that can do zero-copy cloning of tables, and the other relation is a table, then this will be a table\n -- Otherwise, this will be a view\n\n {% set can_clone_table = can_clone_table() %}\n {%- set grant_config = config.get('grants') -%}\n\n {%- if other_existing_relation and other_existing_relation.type == 'table' and can_clone_table -%}\n\n {%- set target_relation = this.incorporate(type='table') -%}\n {% if existing_relation is not none and not existing_relation.is_table %}\n {{ log(\"Dropping relation \" ~ existing_relation.render() ~ \" because it is of type \" ~ existing_relation.type) }}\n {{ drop_relation_if_exists(existing_relation) }}\n {% endif %}\n\n -- as a general rule, data platforms that can clone tables can also do atomic 'create or replace'\n {% if target_relation.database == defer_relation.database and\n target_relation.schema == defer_relation.schema and\n target_relation.identifier == defer_relation.identifier %}\n {{ log(\"Target relation and defer relation are the same, skipping clone for relation: \" ~ target_relation.render()) }}\n {% else %}\n {% call statement('main') %}\n {{ create_or_replace_clone(target_relation, defer_relation) }}\n {% endcall %}\n {% endif %}\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n {% do persist_docs(target_relation, model) %}\n\n {{ return({'relations': [target_relation]}) }}\n\n {%- else -%}\n\n {%- set target_relation = this.incorporate(type='view') -%}\n\n -- reuse the view materialization\n -- TODO: support actual dispatch for materialization macros\n -- Tracking ticket: https://github.com/dbt-labs/dbt-core/issues/7799\n {% set search_name = \"materialization_view_\" ~ adapter.type() %}\n {% if not search_name in context %}\n {% set search_name = \"materialization_view_default\" %}\n {% endif %}\n {% set materialization_macro = context[search_name] %}\n {% set relations = materialization_macro() %}\n {{ return(relations) }}\n\n {%- endif -%}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.can_clone_table", "macro.dbt.drop_relation_if_exists", "macro.dbt.statement", "macro.dbt.create_or_replace_clone", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.2496881, "supported_languages": ["sql"]}, "macro.dbt.materialization_seed_default": {"name": "materialization_seed_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/seed.sql", "original_file_path": "macros/materializations/seeds/seed.sql", "unique_id": "macro.dbt.materialization_seed_default", "macro_sql": "{% materialization seed, default %}\n\n {%- set identifier = model['alias'] -%}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n\n {%- set exists_as_table = (old_relation is not none and old_relation.is_table) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set grant_config = config.get('grants') -%}\n {%- set agate_table = load_agate_table() -%}\n -- grab current tables grants config for comparison later on\n\n {%- do store_result('agate_table', response='OK', agate_table=agate_table) -%}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% set create_table_sql = \"\" %}\n {% if exists_as_view %}\n {{ exceptions.raise_compiler_error(\"Cannot seed to '{}', it is a view\".format(old_relation.render())) }}\n {% elif exists_as_table %}\n {% set create_table_sql = reset_csv_table(model, full_refresh_mode, old_relation, agate_table) %}\n {% else %}\n {% set create_table_sql = create_csv_table(model, agate_table) %}\n {% endif %}\n\n {% set code = 'CREATE' if full_refresh_mode else 'INSERT' %}\n {% set rows_affected = (agate_table.rows | length) %}\n {% set sql = \"\" %}\n {% if rows_affected > 0 %}\n {% set sql = load_csv_rows(model, agate_table) %}\n {% endif %}\n\n {% call noop_statement('main', code ~ ' ' ~ rows_affected, code, rows_affected) %}\n {{ get_csv_sql(create_table_sql, sql) }};\n {% endcall %}\n\n {% set target_relation = this.incorporate(type='table') %}\n\n {% set should_revoke = should_revoke(old_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if full_refresh_mode or not exists_as_table %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh", "macro.dbt.run_hooks", "macro.dbt.reset_csv_table", "macro.dbt.create_csv_table", "macro.dbt.load_csv_rows", "macro.dbt.noop_statement", "macro.dbt.get_csv_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs", "macro.dbt.create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.250761, "supported_languages": ["sql"]}, "macro.dbt.create_csv_table": {"name": "create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.create_csv_table", "macro_sql": "{% macro create_csv_table(model, agate_table) -%}\n {{ adapter.dispatch('create_csv_table', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.251154, "supported_languages": null}, "macro.dbt.default__create_csv_table": {"name": "default__create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__create_csv_table", "macro_sql": "{% macro default__create_csv_table(model, agate_table) %}\n {%- set column_override = model['config'].get('column_types', {}) -%}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n\n {% set sql %}\n create table {{ this.render() }} (\n {%- for col_name in agate_table.column_names -%}\n {%- set inferred_type = adapter.convert_type(agate_table, loop.index0) -%}\n {%- set type = column_override.get(col_name, inferred_type) -%}\n {%- set column_name = (col_name | string) -%}\n {{ adapter.quote_seed_column(column_name, quote_seed_column) }} {{ type }} {%- if not loop.last -%}, {%- endif -%}\n {%- endfor -%}\n )\n {% endset %}\n\n {% call statement('_') -%}\n {{ sql }}\n {%- endcall %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.251488, "supported_languages": null}, "macro.dbt.reset_csv_table": {"name": "reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.reset_csv_table", "macro_sql": "{% macro reset_csv_table(model, full_refresh, old_relation, agate_table) -%}\n {{ adapter.dispatch('reset_csv_table', 'dbt')(model, full_refresh, old_relation, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__reset_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "full_refresh", "type": null, "description": ""}, {"name": "old_relation", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.2515788, "supported_languages": null}, "macro.dbt.default__reset_csv_table": {"name": "default__reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__reset_csv_table", "macro_sql": "{% macro default__reset_csv_table(model, full_refresh, old_relation, agate_table) %}\n {% set sql = \"\" %}\n {% if full_refresh %}\n {{ adapter.drop_relation(old_relation) }}\n {% set sql = create_csv_table(model, agate_table) %}\n {% else %}\n {{ adapter.truncate_relation(old_relation) }}\n {% set sql = \"truncate table \" ~ old_relation.render() %}\n {% endif %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "full_refresh", "type": null, "description": ""}, {"name": "old_relation", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.2517602, "supported_languages": null}, "macro.dbt.get_csv_sql": {"name": "get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_csv_sql", "macro_sql": "{% macro get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ adapter.dispatch('get_csv_sql', 'dbt')(create_or_truncate_sql, insert_sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_csv_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "create_or_truncate_sql", "type": null, "description": ""}, {"name": "insert_sql", "type": null, "description": ""}], "created_at": 1784225035.2518358, "supported_languages": null}, "macro.dbt.default__get_csv_sql": {"name": "default__get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_csv_sql", "macro_sql": "{% macro default__get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ create_or_truncate_sql }};\n -- dbt seed --\n {{ insert_sql }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "create_or_truncate_sql", "type": null, "description": ""}, {"name": "insert_sql", "type": null, "description": ""}], "created_at": 1784225035.25189, "supported_languages": null}, "macro.dbt.get_binding_char": {"name": "get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_binding_char", "macro_sql": "{% macro get_binding_char() -%}\n {{ adapter.dispatch('get_binding_char', 'dbt')() }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2519438, "supported_languages": null}, "macro.dbt.default__get_binding_char": {"name": "default__get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_binding_char", "macro_sql": "{% macro default__get_binding_char() %}\n {{ return('%s') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.252042, "supported_languages": null}, "macro.dbt.get_batch_size": {"name": "get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_batch_size", "macro_sql": "{% macro get_batch_size() -%}\n {{ return(adapter.dispatch('get_batch_size', 'dbt')()) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_batch_size"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2521029, "supported_languages": null}, "macro.dbt.default__get_batch_size": {"name": "default__get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_batch_size", "macro_sql": "{% macro default__get_batch_size() %}\n {{ return(10000) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.252149, "supported_languages": null}, "macro.dbt.get_seed_column_quoted_csv": {"name": "get_seed_column_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_seed_column_quoted_csv", "macro_sql": "{% macro get_seed_column_quoted_csv(model, column_names) %}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote_seed_column(col, quote_seed_column)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "column_names", "type": null, "description": ""}], "created_at": 1784225035.252327, "supported_languages": null}, "macro.dbt.load_csv_rows": {"name": "load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.load_csv_rows", "macro_sql": "{% macro load_csv_rows(model, agate_table) -%}\n {{ adapter.dispatch('load_csv_rows', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__load_csv_rows"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.2524009, "supported_languages": null}, "macro.dbt.default__load_csv_rows": {"name": "default__load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__load_csv_rows", "macro_sql": "{% macro default__load_csv_rows(model, agate_table) %}\n\n {% set batch_size = get_batch_size() %}\n\n {% set cols_sql = get_seed_column_quoted_csv(model, agate_table.column_names) %}\n {% set bindings = [] %}\n\n {% set statements = [] %}\n\n {% for chunk in agate_table.rows | batch(batch_size) %}\n {% set bindings = [] %}\n\n {% for row in chunk %}\n {% do bindings.extend(row) %}\n {% endfor %}\n\n {% set sql %}\n insert into {{ this.render() }} ({{ cols_sql }}) values\n {% for row in chunk -%}\n ({%- for column in agate_table.column_names -%}\n {{ get_binding_char() }}\n {%- if not loop.last%},{%- endif %}\n {%- endfor -%})\n {%- if not loop.last%},{%- endif %}\n {%- endfor %}\n {% endset %}\n\n {% do adapter.add_query(sql, bindings=bindings, abridge_sql_log=True) %}\n\n {% if loop.index0 == 0 %}\n {% do statements.append(sql) %}\n {% endif %}\n {% endfor %}\n\n {# Return SQL so we can render it out into the compiled files #}\n {{ return(statements[0]) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_batch_size", "macro.dbt.get_seed_column_quoted_csv", "macro.dbt.get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "agate_table", "type": null, "description": ""}], "created_at": 1784225035.2528582, "supported_languages": null}, "macro.dbt.scalar_function_sql": {"name": "scalar_function_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.scalar_function_sql", "macro_sql": "{% macro scalar_function_sql(target_relation) %}\n {{ return(adapter.dispatch('scalar_function_sql', 'dbt')(target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__scalar_function_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.253196, "supported_languages": null}, "macro.dbt.default__scalar_function_sql": {"name": "default__scalar_function_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__scalar_function_sql", "macro_sql": "{% macro default__scalar_function_sql(target_relation) %}\n {{ scalar_function_create_replace_signature_sql(target_relation) }}\n {{ scalar_function_body_sql() }};\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.scalar_function_create_replace_signature_sql", "macro.dbt.scalar_function_body_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.253268, "supported_languages": null}, "macro.dbt.scalar_function_create_replace_signature_sql": {"name": "scalar_function_create_replace_signature_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.scalar_function_create_replace_signature_sql", "macro_sql": "{% macro scalar_function_create_replace_signature_sql(target_relation) %}\n {{ return(adapter.dispatch('scalar_function_create_replace_signature_sql', 'dbt')(target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__scalar_function_create_replace_signature_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.253338, "supported_languages": null}, "macro.dbt.default__scalar_function_create_replace_signature_sql": {"name": "default__scalar_function_create_replace_signature_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__scalar_function_create_replace_signature_sql", "macro_sql": "{% macro default__scalar_function_create_replace_signature_sql(target_relation) %}\n CREATE OR REPLACE FUNCTION {{ target_relation.render() }} ({{ formatted_scalar_function_args_sql()}})\n RETURNS {{ model.returns.data_type }}\n {{ scalar_function_volatility_sql() }}\n AS\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.formatted_scalar_function_args_sql", "macro.dbt.scalar_function_volatility_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.253428, "supported_languages": null}, "macro.dbt.formatted_scalar_function_args_sql": {"name": "formatted_scalar_function_args_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.formatted_scalar_function_args_sql", "macro_sql": "{% macro formatted_scalar_function_args_sql() %}\n {{ return(adapter.dispatch('formatted_scalar_function_args_sql', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__formatted_scalar_function_args_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2534971, "supported_languages": null}, "macro.dbt.formatted_scalar_function_args_javascript": {"name": "formatted_scalar_function_args_javascript", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.formatted_scalar_function_args_javascript", "macro_sql": "{% macro formatted_scalar_function_args_javascript() %}\n {{ return(adapter.dispatch('formatted_scalar_function_args_javascript', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__formatted_scalar_function_args_javascript"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2535748, "supported_languages": null}, "macro.dbt.default__formatted_scalar_function_args_sql": {"name": "default__formatted_scalar_function_args_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__formatted_scalar_function_args_sql", "macro_sql": "{% macro default__formatted_scalar_function_args_sql() %}\n {% set args = [] %}\n {% for arg in model.arguments -%}\n {%- do args.append(arg.name ~ ' ' ~ arg.data_type) -%}\n {%- endfor %}\n {{ args | join(', ') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.253711, "supported_languages": null}, "macro.dbt.default__formatted_scalar_function_args_javascript": {"name": "default__formatted_scalar_function_args_javascript", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__formatted_scalar_function_args_javascript", "macro_sql": "{% macro default__formatted_scalar_function_args_javascript() %}\n {% set msg = \"formatted_scalar_function_args_javascript not implemented for adapter \" ~ adapter.type() %}\n {% do exceptions.raise_compiler_error(msg) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.253796, "supported_languages": null}, "macro.dbt.scalar_function_body_sql": {"name": "scalar_function_body_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.scalar_function_body_sql", "macro_sql": "{% macro scalar_function_body_sql() %}\n {{ return(adapter.dispatch('scalar_function_body_sql', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__scalar_function_body_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.253859, "supported_languages": null}, "macro.dbt.default__scalar_function_body_sql": {"name": "default__scalar_function_body_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__scalar_function_body_sql", "macro_sql": "{% macro default__scalar_function_body_sql() %}\n $$\n {{ model.compiled_code }}\n $$ LANGUAGE SQL\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2539022, "supported_languages": null}, "macro.dbt.scalar_function_volatility_sql": {"name": "scalar_function_volatility_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.scalar_function_volatility_sql", "macro_sql": "{% macro scalar_function_volatility_sql() %}\n {{ return(adapter.dispatch('scalar_function_volatility_sql', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__scalar_function_volatility_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.253964, "supported_languages": null}, "macro.dbt.scalar_function_volatility_javascript": {"name": "scalar_function_volatility_javascript", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.scalar_function_volatility_javascript", "macro_sql": "{% macro scalar_function_volatility_javascript() %}\n {{ return(adapter.dispatch('scalar_function_volatility_javascript', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__scalar_function_volatility_javascript"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.254025, "supported_languages": null}, "macro.dbt.default__scalar_function_volatility_javascript": {"name": "default__scalar_function_volatility_javascript", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__scalar_function_volatility_javascript", "macro_sql": "{% macro default__scalar_function_volatility_javascript() %}\n {% set volatility = model.config.get('volatility') %}\n {% if volatility != none %}\n {% set msg = \"Volatility is not supported by \" ~ adapter.type() ~ \" in javascript UDF and will be ignored\" %}\n {% do exceptions.warn(msg) %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.254156, "supported_languages": null}, "macro.dbt.default__scalar_function_volatility_sql": {"name": "default__scalar_function_volatility_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__scalar_function_volatility_sql", "macro_sql": "{% macro default__scalar_function_volatility_sql() %}\n {% set volatility = model.config.get('volatility') %}\n {% if volatility == 'deterministic' %}\n IMMUTABLE\n {% elif volatility == 'stable' %}\n STABLE\n {% elif volatility == 'non-deterministic' %}\n VOLATILE\n {% elif volatility != none %}\n {# This shouldn't happen unless a new volatility is invented #}\n {% do unsupported_volatility_warning(volatility) %}\n {% endif %}\n {# If no volatility is set, don't add anything and let the data warehouse default it #}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.unsupported_volatility_warning"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.254315, "supported_languages": null}, "macro.dbt.unsupported_volatility_warning": {"name": "unsupported_volatility_warning", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.unsupported_volatility_warning", "macro_sql": "{% macro unsupported_volatility_warning(volatility) %}\n {{ return(adapter.dispatch('unsupported_volatility_warning', 'dbt')(volatility)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__unsupported_volatility_warning"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "volatility", "type": null, "description": ""}], "created_at": 1784225035.2543879, "supported_languages": null}, "macro.dbt.default__unsupported_volatility_warning": {"name": "default__unsupported_volatility_warning", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/scalar.sql", "original_file_path": "macros/materializations/functions/scalar.sql", "unique_id": "macro.dbt.default__unsupported_volatility_warning", "macro_sql": "{% macro default__unsupported_volatility_warning(volatility) %}\n {% set msg = \"Found `\" ~ volatility ~ \"` volatility specified on function `\" ~ model.name ~ \"`. This volatility is not supported by \" ~ adapter.type() ~ \", and will be ignored\" %}\n {% do exceptions.warn(msg) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "volatility", "type": null, "description": ""}], "created_at": 1784225035.2544901, "supported_languages": null}, "macro.dbt.function_execute_build_sql": {"name": "function_execute_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/helpers.sql", "original_file_path": "macros/materializations/functions/helpers.sql", "unique_id": "macro.dbt.function_execute_build_sql", "macro_sql": "{% macro function_execute_build_sql(build_sql, existing_relation, target_relation) %}\n {{ return(adapter.dispatch('function_execute_build_sql', 'dbt')(build_sql, existing_relation, target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__function_execute_build_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "build_sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.2546391, "supported_languages": null}, "macro.dbt.default__function_execute_build_sql": {"name": "default__function_execute_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/helpers.sql", "original_file_path": "macros/materializations/functions/helpers.sql", "unique_id": "macro.dbt.default__function_execute_build_sql", "macro_sql": "{% macro default__function_execute_build_sql(build_sql, existing_relation, target_relation) %}\n\n {% set grant_config = config.get('grants') %}\n\n {% call statement(name=\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ adapter.commit() }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "build_sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.254876, "supported_languages": null}, "macro.dbt.get_aggregate_function_create_replace_signature": {"name": "get_aggregate_function_create_replace_signature", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.get_aggregate_function_create_replace_signature", "macro_sql": "{% macro get_aggregate_function_create_replace_signature(target_relation) %}\n {{ return(adapter.dispatch('get_aggregate_function_create_replace_signature', 'dbt')(target_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_aggregate_function_create_replace_signature"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.255144, "supported_languages": null}, "macro.dbt.default__get_aggregate_function_create_replace_signature": {"name": "default__get_aggregate_function_create_replace_signature", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.default__get_aggregate_function_create_replace_signature", "macro_sql": "{% macro default__get_aggregate_function_create_replace_signature(target_relation) %}\n CREATE OR REPLACE AGGREGATE FUNCTION {{ target_relation.render() }} ({{ get_formatted_aggregate_function_args()}})\n RETURNS {{ model.returns.data_type }}\n {{ get_function_language_specifier() }}\n {{ get_aggregate_function_volatility_specifier() }}\n {% if model.get('language') == 'python' %}\n {{ get_function_python_options() }}\n {% endif %}\n AS\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_formatted_aggregate_function_args", "macro.dbt.get_function_language_specifier", "macro.dbt.get_aggregate_function_volatility_specifier", "macro.dbt.get_function_python_options"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "target_relation", "type": null, "description": ""}], "created_at": 1784225035.255285, "supported_languages": null}, "macro.dbt.get_formatted_aggregate_function_args": {"name": "get_formatted_aggregate_function_args", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.get_formatted_aggregate_function_args", "macro_sql": "{% macro get_formatted_aggregate_function_args() %}\n {{ return(adapter.dispatch('get_formatted_aggregate_function_args', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_formatted_aggregate_function_args"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2553542, "supported_languages": null}, "macro.dbt.default__get_formatted_aggregate_function_args": {"name": "default__get_formatted_aggregate_function_args", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.default__get_formatted_aggregate_function_args", "macro_sql": "{% macro default__get_formatted_aggregate_function_args() %}\n {# conveniently we can reuse the sql scalar function args #}\n {{ formatted_scalar_function_args_sql() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.formatted_scalar_function_args_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2554, "supported_languages": null}, "macro.dbt.get_function_language_specifier": {"name": "get_function_language_specifier", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.get_function_language_specifier", "macro_sql": "{% macro get_function_language_specifier() %}\n {{ return(adapter.dispatch('get_function_language_specifier', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_function_language_specifier"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.255462, "supported_languages": null}, "macro.dbt.default__get_function_language_specifier": {"name": "default__get_function_language_specifier", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.default__get_function_language_specifier", "macro_sql": "{% macro default__get_function_language_specifier() %}\n {% set language = model.get('language') %}\n {% if language == 'sql' %}\n {# generally you dont need to specify the language for sql functions #}\n {% elif language == 'python' %}\n LANGUAGE PYTHON\n {% elif language == 'javascript' %}\n LANGUAGE js\n {% else %}\n {{ 'LANGUAGE ' ~ language.upper() }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.255601, "supported_languages": null}, "macro.dbt.get_aggregate_function_volatility_specifier": {"name": "get_aggregate_function_volatility_specifier", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.get_aggregate_function_volatility_specifier", "macro_sql": "{% macro get_aggregate_function_volatility_specifier() %}\n {{ return(adapter.dispatch('get_aggregate_function_volatility_specifier', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_aggregate_function_volatility_specifier"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.255667, "supported_languages": null}, "macro.dbt.default__get_aggregate_function_volatility_specifier": {"name": "default__get_aggregate_function_volatility_specifier", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.default__get_aggregate_function_volatility_specifier", "macro_sql": "{% macro default__get_aggregate_function_volatility_specifier() %}\n {{ scalar_function_volatility_sql() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.scalar_function_volatility_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2557068, "supported_languages": null}, "macro.dbt.get_function_python_options": {"name": "get_function_python_options", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.get_function_python_options", "macro_sql": "{% macro get_function_python_options() %}\n {{ return(adapter.dispatch('get_function_python_options', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_function_python_options"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.255768, "supported_languages": null}, "macro.dbt.default__get_function_python_options": {"name": "default__get_function_python_options", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/aggregate.sql", "original_file_path": "macros/materializations/functions/aggregate.sql", "unique_id": "macro.dbt.default__get_function_python_options", "macro_sql": "{% macro default__get_function_python_options() %}\n RUNTIME_VERSION = '{{ model.config.get('runtime_version') }}'\n HANDLER = '{{ model.config.get('entry_point') }}'\n {% set packages = model.config.get('packages', []) %}\n {% if packages %}\n PACKAGES = ('{{ packages | join(\"','\") }}')\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.255906, "supported_languages": null}, "macro.dbt.materialization_function_default": {"name": "materialization_function_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/functions/function.sql", "original_file_path": "macros/materializations/functions/function.sql", "unique_id": "macro.dbt.materialization_function_default", "macro_sql": "{% materialization function, default, supported_languages=['sql', 'python', 'javascript'] %}\n {% set existing_relation = load_cached_relation(this) %}\n {% set target_relation = this.incorporate(type=this.Function) %}\n\n {{ run_hooks(pre_hooks) }}\n\n {% set function_config = this.get_function_config(model) %}\n {% set macro_name = this.get_function_macro_name(function_config) %}\n\n {# Doing this aliasing of adapter.dispatch is a hacky way to disable the static analysis of actually calling adapter.dispatch #}\n {# This is necessary because the static analysis breaks being able to dynamically pass a macro_name #}\n {% set _dispatch = adapter.dispatch %}\n\n {% set build_sql = _dispatch(macro_name, 'dbt')(target_relation) %}\n {{ function_execute_build_sql(build_sql, existing_relation, target_relation) }}\n {{ run_hooks(post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.run_hooks", "macro.dbt.function_execute_build_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "supported_languages", "type": null, "description": ""}], "created_at": 1784225035.256268, "supported_languages": ["sql", "python", "javascript"]}, "macro.dbt.generate_alias_name": {"name": "generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.generate_alias_name", "macro_sql": "{% macro generate_alias_name(custom_alias_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_alias_name', 'dbt')(custom_alias_name, node)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_alias_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_alias_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.256427, "supported_languages": null}, "macro.dbt.default__generate_alias_name": {"name": "default__generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.default__generate_alias_name", "macro_sql": "{% macro default__generate_alias_name(custom_alias_name=none, node=none) -%}\n\n {%- if custom_alias_name -%}\n\n {{ custom_alias_name | trim }}\n\n {%- elif node.version -%}\n\n {{ return(node.name ~ \"_v\" ~ (node.version | replace(\".\", \"_\"))) }}\n\n {%- else -%}\n\n {{ node.name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_alias_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.256581, "supported_languages": null}, "macro.dbt.generate_latest_version_pointer_alias": {"name": "generate_latest_version_pointer_alias", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_latest_version_pointer_alias.sql", "original_file_path": "macros/get_custom_name/get_latest_version_pointer_alias.sql", "unique_id": "macro.dbt.generate_latest_version_pointer_alias", "macro_sql": "{% macro generate_latest_version_pointer_alias(custom_alias_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_latest_version_pointer_alias', 'dbt')(custom_alias_name, node)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_latest_version_pointer_alias"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_alias_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.2567308, "supported_languages": null}, "macro.dbt.default__generate_latest_version_pointer_alias": {"name": "default__generate_latest_version_pointer_alias", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_latest_version_pointer_alias.sql", "original_file_path": "macros/get_custom_name/get_latest_version_pointer_alias.sql", "unique_id": "macro.dbt.default__generate_latest_version_pointer_alias", "macro_sql": "{% macro default__generate_latest_version_pointer_alias(custom_alias_name=none, node=none) -%}\n {%- if custom_alias_name -%}\n {{ custom_alias_name | trim }}\n {%- else -%}\n {{ node.name }}\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_alias_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.2568169, "supported_languages": null}, "macro.dbt.generate_schema_name": {"name": "generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name", "macro_sql": "{% macro generate_schema_name(custom_schema_name=none, node=none) -%}\n {{ return(adapter.dispatch('generate_schema_name', 'dbt')(custom_schema_name, node)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_schema_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.2569962, "supported_languages": null}, "macro.dbt.default__generate_schema_name": {"name": "default__generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.default__generate_schema_name", "macro_sql": "{% macro default__generate_schema_name(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if custom_schema_name is none -%}\n\n {{ default_schema }}\n\n {%- else -%}\n\n {{ default_schema }}_{{ custom_schema_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_schema_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.257099, "supported_languages": null}, "macro.dbt.generate_schema_name_for_env": {"name": "generate_schema_name_for_env", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name_for_env", "macro_sql": "{% macro generate_schema_name_for_env(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if target.name == 'prod' and custom_schema_name is not none -%}\n\n {{ custom_schema_name | trim }}\n\n {%- else -%}\n\n {{ default_schema }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_schema_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.257215, "supported_languages": null}, "macro.dbt.generate_database_name": {"name": "generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.generate_database_name", "macro_sql": "{% macro generate_database_name(custom_database_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_database_name', 'dbt')(custom_database_name, node)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_database_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_database_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.2573838, "supported_languages": null}, "macro.dbt.default__generate_database_name": {"name": "default__generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.default__generate_database_name", "macro_sql": "{% macro default__generate_database_name(custom_database_name=none, node=none) -%}\n {%- set default_database = target.database -%}\n {%- if node is not none and node|attr('database') -%}\n {%- set catalog_relation = adapter.build_catalog_relation(node) -%}\n {%- if catalog_relation and catalog_relation|attr('catalog_database') -%}\n {{ return(catalog_relation.catalog_database) }}\n {%- endif -%}\n {%- endif -%}\n {%- if custom_database_name is none -%}\n\n {{ default_database }}\n\n {%- else -%}\n\n {{ custom_database_name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "custom_database_name", "type": null, "description": ""}, {"name": "node", "type": null, "description": ""}], "created_at": 1784225035.257584, "supported_languages": null}, "macro.dbt.get_drop_sql": {"name": "get_drop_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.get_drop_sql", "macro_sql": "{%- macro get_drop_sql(relation) -%}\n {{- log('Applying DROP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_drop_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.257782, "supported_languages": null}, "macro.dbt.default__get_drop_sql": {"name": "default__get_drop_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.default__get_drop_sql", "macro_sql": "{%- macro default__get_drop_sql(relation) -%}\n\n {%- if relation.is_view -%}\n {{ drop_view(relation) }}\n\n {%- elif relation.is_table -%}\n {{ drop_table(relation) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ drop_materialized_view(relation) }}\n\n {%- else -%}\n drop {{ relation.type }} if exists {{ relation.render() }} cascade\n\n {%- endif -%}\n\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.drop_view", "macro.dbt.drop_table", "macro.dbt.drop_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.257984, "supported_languages": null}, "macro.dbt.drop_relation": {"name": "drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.drop_relation", "macro_sql": "{% macro drop_relation(relation) -%}\n {{ return(adapter.dispatch('drop_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__drop_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.258065, "supported_languages": null}, "macro.dbt.default__drop_relation": {"name": "default__drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.default__drop_relation", "macro_sql": "{% macro default__drop_relation(relation) -%}\n {% call statement('drop_relation', auto_begin=False) -%}\n {{ get_drop_sql(relation) }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.258147, "supported_languages": null}, "macro.dbt.drop_relation_if_exists": {"name": "drop_relation_if_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.drop_relation_if_exists", "macro_sql": "{% macro drop_relation_if_exists(relation) %}\n {% if relation is not none %}\n {{ adapter.drop_relation(relation) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.258226, "supported_languages": null}, "macro.dbt.get_replace_sql": {"name": "get_replace_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/replace.sql", "original_file_path": "macros/relations/replace.sql", "unique_id": "macro.dbt.get_replace_sql", "macro_sql": "{% macro get_replace_sql(existing_relation, target_relation, sql) %}\n {{- log('Applying REPLACE to: ' ~ existing_relation) -}}\n {{- adapter.dispatch('get_replace_sql', 'dbt')(existing_relation, target_relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.258467, "supported_languages": null}, "macro.dbt.default__get_replace_sql": {"name": "default__get_replace_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/replace.sql", "original_file_path": "macros/relations/replace.sql", "unique_id": "macro.dbt.default__get_replace_sql", "macro_sql": "{% macro default__get_replace_sql(existing_relation, target_relation, sql) %}\n\n {# /* use a create or replace statement if possible */ #}\n\n {% set is_replaceable = existing_relation.type == target_relation.type and existing_relation.can_be_replaced %}\n\n {% if is_replaceable and existing_relation.is_view %}\n {{ get_replace_view_sql(target_relation, sql) }}\n\n {% elif is_replaceable and existing_relation.is_table %}\n {{ get_replace_table_sql(target_relation, sql) }}\n\n {% elif is_replaceable and existing_relation.is_materialized_view %}\n {{ get_replace_materialized_view_sql(target_relation, sql) }}\n\n {# /* a create or replace statement is not possible, so try to stage and/or backup to be safe */ #}\n\n {# /* create target_relation as an intermediate relation, then swap it out with the existing one using a backup */ #}\n {%- elif target_relation.can_be_renamed and existing_relation.can_be_renamed -%}\n {{ get_create_intermediate_sql(target_relation, sql) }};\n {{ get_create_backup_sql(existing_relation) }};\n {{ get_rename_intermediate_sql(target_relation) }};\n {{ get_drop_backup_sql(existing_relation) }}\n\n {# /* create target_relation as an intermediate relation, then swap it out with the existing one without using a backup */ #}\n {%- elif target_relation.can_be_renamed -%}\n {{ get_create_intermediate_sql(target_relation, sql) }};\n {{ get_drop_sql(existing_relation) }};\n {{ get_rename_intermediate_sql(target_relation) }}\n\n {# /* create target_relation in place by first backing up the existing relation */ #}\n {%- elif existing_relation.can_be_renamed -%}\n {{ get_create_backup_sql(existing_relation) }};\n {{ get_create_sql(target_relation, sql) }};\n {{ get_drop_backup_sql(existing_relation) }}\n\n {# /* no renaming is allowed, so just drop and create */ #}\n {%- else -%}\n {{ get_drop_sql(existing_relation) }};\n {{ get_create_sql(target_relation, sql) }}\n\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_replace_view_sql", "macro.dbt.get_replace_table_sql", "macro.dbt.get_replace_materialized_view_sql", "macro.dbt.get_create_intermediate_sql", "macro.dbt.get_create_backup_sql", "macro.dbt.get_rename_intermediate_sql", "macro.dbt.get_drop_backup_sql", "macro.dbt.get_drop_sql", "macro.dbt.get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "target_relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.258959, "supported_languages": null}, "macro.dbt.get_create_intermediate_sql": {"name": "get_create_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_intermediate.sql", "original_file_path": "macros/relations/create_intermediate.sql", "unique_id": "macro.dbt.get_create_intermediate_sql", "macro_sql": "{%- macro get_create_intermediate_sql(relation, sql) -%}\n {{- log('Applying CREATE INTERMEDIATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_intermediate_sql', 'dbt')(relation, sql) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_create_intermediate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.259108, "supported_languages": null}, "macro.dbt.default__get_create_intermediate_sql": {"name": "default__get_create_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_intermediate.sql", "original_file_path": "macros/relations/create_intermediate.sql", "unique_id": "macro.dbt.default__get_create_intermediate_sql", "macro_sql": "{%- macro default__get_create_intermediate_sql(relation, sql) -%}\n\n -- get the standard intermediate name\n {% set intermediate_relation = make_intermediate_relation(relation) %}\n\n -- drop any pre-existing intermediate\n {{ get_drop_sql(intermediate_relation) }};\n\n {{ get_create_sql(intermediate_relation, sql) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_intermediate_relation", "macro.dbt.get_drop_sql", "macro.dbt.get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2592041, "supported_languages": null}, "macro.dbt.drop_schema_named": {"name": "drop_schema_named", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/schema.sql", "original_file_path": "macros/relations/schema.sql", "unique_id": "macro.dbt.drop_schema_named", "macro_sql": "{% macro drop_schema_named(schema_name) %}\n {{ return(adapter.dispatch('drop_schema_named', 'dbt') (schema_name)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__drop_schema_named"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_name", "type": null, "description": ""}], "created_at": 1784225035.2593122, "supported_languages": null}, "macro.dbt.default__drop_schema_named": {"name": "default__drop_schema_named", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/schema.sql", "original_file_path": "macros/relations/schema.sql", "unique_id": "macro.dbt.default__drop_schema_named", "macro_sql": "{% macro default__drop_schema_named(schema_name) %}\n {% set schema_relation = api.Relation.create(schema=schema_name) %}\n {{ adapter.drop_schema(schema_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_name", "type": null, "description": ""}], "created_at": 1784225035.259392, "supported_languages": null}, "macro.dbt.get_drop_backup_sql": {"name": "get_drop_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop_backup.sql", "original_file_path": "macros/relations/drop_backup.sql", "unique_id": "macro.dbt.get_drop_backup_sql", "macro_sql": "{%- macro get_drop_backup_sql(relation) -%}\n {{- log('Applying DROP BACKUP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_drop_backup_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_drop_backup_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.259509, "supported_languages": null}, "macro.dbt.default__get_drop_backup_sql": {"name": "default__get_drop_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop_backup.sql", "original_file_path": "macros/relations/drop_backup.sql", "unique_id": "macro.dbt.default__get_drop_backup_sql", "macro_sql": "{%- macro default__get_drop_backup_sql(relation) -%}\n\n -- get the standard backup name\n {% set backup_relation = make_backup_relation(relation, relation.type) %}\n\n {{ get_drop_sql(backup_relation) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_backup_relation", "macro.dbt.get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.259636, "supported_languages": null}, "macro.dbt.get_rename_sql": {"name": "get_rename_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.get_rename_sql", "macro_sql": "{%- macro get_rename_sql(relation, new_name) -%}\n {{- log('Applying RENAME to: ' ~ relation) -}}\n {{- adapter.dispatch('get_rename_sql', 'dbt')(relation, new_name) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.259831, "supported_languages": null}, "macro.dbt.default__get_rename_sql": {"name": "default__get_rename_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.default__get_rename_sql", "macro_sql": "{%- macro default__get_rename_sql(relation, new_name) -%}\n\n {%- if relation.is_view -%}\n {{ get_rename_view_sql(relation, new_name) }}\n\n {%- elif relation.is_table -%}\n {{ get_rename_table_sql(relation, new_name) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ get_rename_materialized_view_sql(relation, new_name) }}\n\n {%- else -%}\n {{- exceptions.raise_compiler_error(\"`get_rename_sql` has not been implemented for: \" ~ relation.type ) -}}\n\n {%- endif -%}\n\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.get_rename_view_sql", "macro.dbt.get_rename_table_sql", "macro.dbt.get_rename_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.259997, "supported_languages": null}, "macro.dbt.rename_relation": {"name": "rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.rename_relation", "macro_sql": "{% macro rename_relation(from_relation, to_relation) -%}\n {{ return(adapter.dispatch('rename_relation', 'dbt')(from_relation, to_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__rename_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "from_relation", "type": null, "description": ""}, {"name": "to_relation", "type": null, "description": ""}], "created_at": 1784225035.2600782, "supported_languages": null}, "macro.dbt.default__rename_relation": {"name": "default__rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.default__rename_relation", "macro_sql": "{% macro default__rename_relation(from_relation, to_relation) -%}\n {% set target_name = adapter.quote_as_configured(to_relation.identifier, 'identifier') %}\n {% call statement('rename_relation') -%}\n alter table {{ from_relation.render() }} rename to {{ target_name }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "from_relation", "type": null, "description": ""}, {"name": "to_relation", "type": null, "description": ""}], "created_at": 1784225035.260192, "supported_languages": null}, "macro.dbt.get_create_backup_sql": {"name": "get_create_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_backup.sql", "original_file_path": "macros/relations/create_backup.sql", "unique_id": "macro.dbt.get_create_backup_sql", "macro_sql": "{%- macro get_create_backup_sql(relation) -%}\n {{- log('Applying CREATE BACKUP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_backup_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_create_backup_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.260319, "supported_languages": null}, "macro.dbt.default__get_create_backup_sql": {"name": "default__get_create_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_backup.sql", "original_file_path": "macros/relations/create_backup.sql", "unique_id": "macro.dbt.default__get_create_backup_sql", "macro_sql": "{%- macro default__get_create_backup_sql(relation) -%}\n\n -- get the standard backup name\n {% set backup_relation = make_backup_relation(relation, relation.type) %}\n\n -- drop any pre-existing backup\n {{ get_drop_sql(backup_relation) }};\n\n {{ get_rename_sql(relation, backup_relation.identifier) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_backup_relation", "macro.dbt.get_drop_sql", "macro.dbt.get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.260422, "supported_languages": null}, "macro.dbt.get_create_sql": {"name": "get_create_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create.sql", "original_file_path": "macros/relations/create.sql", "unique_id": "macro.dbt.get_create_sql", "macro_sql": "{%- macro get_create_sql(relation, sql) -%}\n {{- log('Applying CREATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_sql', 'dbt')(relation, sql) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2605708, "supported_languages": null}, "macro.dbt.default__get_create_sql": {"name": "default__get_create_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create.sql", "original_file_path": "macros/relations/create.sql", "unique_id": "macro.dbt.default__get_create_sql", "macro_sql": "{%- macro default__get_create_sql(relation, sql) -%}\n\n {%- if relation.is_view -%}\n {{ get_create_view_as_sql(relation, sql) }}\n\n {%- elif relation.is_table -%}\n {{ get_create_table_as_sql(False, relation, sql) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ get_create_materialized_view_as_sql(relation, sql) }}\n\n {%- else -%}\n {{- exceptions.raise_compiler_error(\"`get_create_sql` has not been implemented for: \" ~ relation.type ) -}}\n\n {%- endif -%}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.get_create_view_as_sql", "macro.dbt.get_create_table_as_sql", "macro.dbt.get_create_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.260739, "supported_languages": null}, "macro.dbt.get_rename_intermediate_sql": {"name": "get_rename_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename_intermediate.sql", "original_file_path": "macros/relations/rename_intermediate.sql", "unique_id": "macro.dbt.get_rename_intermediate_sql", "macro_sql": "{%- macro get_rename_intermediate_sql(relation) -%}\n {{- log('Applying RENAME INTERMEDIATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_rename_intermediate_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.default__get_rename_intermediate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2608619, "supported_languages": null}, "macro.dbt.default__get_rename_intermediate_sql": {"name": "default__get_rename_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename_intermediate.sql", "original_file_path": "macros/relations/rename_intermediate.sql", "unique_id": "macro.dbt.default__get_rename_intermediate_sql", "macro_sql": "{%- macro default__get_rename_intermediate_sql(relation) -%}\n\n -- get the standard intermediate name\n {% set intermediate_relation = make_intermediate_relation(relation) %}\n\n {{ get_rename_sql(intermediate_relation, relation.identifier) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.make_intermediate_relation", "macro.dbt.get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.260944, "supported_languages": null}, "macro.dbt.drop_materialized_view": {"name": "drop_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt.drop_materialized_view", "macro_sql": "{% macro drop_materialized_view(relation) -%}\n {{- adapter.dispatch('drop_materialized_view', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.261044, "supported_languages": null}, "macro.dbt.default__drop_materialized_view": {"name": "default__drop_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt.default__drop_materialized_view", "macro_sql": "{% macro default__drop_materialized_view(relation) -%}\n drop materialized view if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.261256, "supported_languages": null}, "macro.dbt.get_replace_materialized_view_sql": {"name": "get_replace_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/replace.sql", "original_file_path": "macros/relations/materialized_view/replace.sql", "unique_id": "macro.dbt.get_replace_materialized_view_sql", "macro_sql": "{% macro get_replace_materialized_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_materialized_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.261365, "supported_languages": null}, "macro.dbt.default__get_replace_materialized_view_sql": {"name": "default__get_replace_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/replace.sql", "original_file_path": "macros/relations/materialized_view/replace.sql", "unique_id": "macro.dbt.default__get_replace_materialized_view_sql", "macro_sql": "{% macro default__get_replace_materialized_view_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_materialized_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.261426, "supported_languages": null}, "macro.dbt.refresh_materialized_view": {"name": "refresh_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt.refresh_materialized_view", "macro_sql": "{% macro refresh_materialized_view(relation) %}\n {{- log('Applying REFRESH to: ' ~ relation) -}}\n {{- adapter.dispatch('refresh_materialized_view', 'dbt')(relation) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__refresh_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.261554, "supported_languages": null}, "macro.dbt.default__refresh_materialized_view": {"name": "default__refresh_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt.default__refresh_materialized_view", "macro_sql": "{% macro default__refresh_materialized_view(relation) %}\n {{ exceptions.raise_compiler_error(\"`refresh_materialized_view` has not been implemented for this adapter.\") }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.261606, "supported_languages": null}, "macro.dbt.get_rename_materialized_view_sql": {"name": "get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt.get_rename_materialized_view_sql", "macro_sql": "{% macro get_rename_materialized_view_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_materialized_view_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.261732, "supported_languages": null}, "macro.dbt.default__get_rename_materialized_view_sql": {"name": "default__get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt.default__get_rename_materialized_view_sql", "macro_sql": "{% macro default__get_rename_materialized_view_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_materialized_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.2617931, "supported_languages": null}, "macro.dbt.get_alter_materialized_view_as_sql": {"name": "get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.get_alter_materialized_view_as_sql", "macro_sql": "{% macro get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n {{- log('Applying ALTER to: ' ~ relation) -}}\n {{- adapter.dispatch('get_alter_materialized_view_as_sql', 'dbt')(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n ) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "configuration_changes", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}], "created_at": 1784225035.2620091, "supported_languages": null}, "macro.dbt.default__get_alter_materialized_view_as_sql": {"name": "default__get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.default__get_alter_materialized_view_as_sql", "macro_sql": "{% macro default__get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n {{ exceptions.raise_compiler_error(\"Materialized views have not been implemented for this adapter.\") }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "configuration_changes", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}, {"name": "existing_relation", "type": null, "description": ""}, {"name": "backup_relation", "type": null, "description": ""}, {"name": "intermediate_relation", "type": null, "description": ""}], "created_at": 1784225035.262083, "supported_languages": null}, "macro.dbt.get_materialized_view_configuration_changes": {"name": "get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.get_materialized_view_configuration_changes", "macro_sql": "{% macro get_materialized_view_configuration_changes(existing_relation, new_config) %}\n /* {#\n It's recommended that configuration changes be formatted as follows:\n {\"\": [{\"action\": \"\", \"context\": ...}]}\n\n For example:\n {\n \"indexes\": [\n {\"action\": \"drop\", \"context\": \"index_abc\"},\n {\"action\": \"create\", \"context\": {\"columns\": [\"column_1\", \"column_2\"], \"type\": \"hash\", \"unique\": True}},\n ],\n }\n\n Either way, `get_materialized_view_configuration_changes` needs to align with `get_alter_materialized_view_as_sql`.\n #} */\n {{- log('Determining configuration changes on: ' ~ existing_relation) -}}\n {%- do return(adapter.dispatch('get_materialized_view_configuration_changes', 'dbt')(existing_relation, new_config)) -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_materialized_view_configuration_changes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "new_config", "type": null, "description": ""}], "created_at": 1784225035.262196, "supported_languages": null}, "macro.dbt.default__get_materialized_view_configuration_changes": {"name": "default__get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.default__get_materialized_view_configuration_changes", "macro_sql": "{% macro default__get_materialized_view_configuration_changes(existing_relation, new_config) %}\n {{ exceptions.raise_compiler_error(\"Materialized views have not been implemented for this adapter.\") }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "new_config", "type": null, "description": ""}], "created_at": 1784225035.262254, "supported_languages": null}, "macro.dbt.get_create_materialized_view_as_sql": {"name": "get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt.get_create_materialized_view_as_sql", "macro_sql": "{% macro get_create_materialized_view_as_sql(relation, sql) -%}\n {{- adapter.dispatch('get_create_materialized_view_as_sql', 'dbt')(relation, sql) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_create_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.262363, "supported_languages": null}, "macro.dbt.default__get_create_materialized_view_as_sql": {"name": "default__get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt.default__get_create_materialized_view_as_sql", "macro_sql": "{% macro default__get_create_materialized_view_as_sql(relation, sql) -%}\n {{ exceptions.raise_compiler_error(\n \"`get_create_materialized_view_as_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.26242, "supported_languages": null}, "macro.dbt.get_table_columns_and_constraints": {"name": "get_table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.get_table_columns_and_constraints", "macro_sql": "{%- macro get_table_columns_and_constraints() -%}\n {{ adapter.dispatch('get_table_columns_and_constraints', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_table_columns_and_constraints"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.26273, "supported_languages": null}, "macro.dbt.default__get_table_columns_and_constraints": {"name": "default__get_table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__get_table_columns_and_constraints", "macro_sql": "{% macro default__get_table_columns_and_constraints() -%}\n {{ return(table_columns_and_constraints()) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.table_columns_and_constraints"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.262778, "supported_languages": null}, "macro.dbt.table_columns_and_constraints": {"name": "table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.table_columns_and_constraints", "macro_sql": "{% macro table_columns_and_constraints() %}\n {# loop through user_provided_columns to create DDL with data types and constraints #}\n {%- set raw_column_constraints = adapter.render_raw_columns_constraints(raw_columns=model['columns']) -%}\n {%- set raw_model_constraints = adapter.render_raw_model_constraints(raw_constraints=model['constraints']) -%}\n (\n {% for c in raw_column_constraints -%}\n {{ c }}{{ \",\" if not loop.last or raw_model_constraints }}\n {% endfor %}\n {% for c in raw_model_constraints -%}\n {{ c }}{{ \",\" if not loop.last }}\n {% endfor -%}\n )\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.26298, "supported_languages": null}, "macro.dbt.get_assert_columns_equivalent": {"name": "get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.get_assert_columns_equivalent", "macro_sql": "\n\n{%- macro get_assert_columns_equivalent(sql) -%}\n {{ adapter.dispatch('get_assert_columns_equivalent', 'dbt')(sql) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2630458, "supported_languages": null}, "macro.dbt.default__get_assert_columns_equivalent": {"name": "default__get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__get_assert_columns_equivalent", "macro_sql": "{% macro default__get_assert_columns_equivalent(sql) -%}\n {{ return(assert_columns_equivalent(sql)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.263098, "supported_languages": null}, "macro.dbt.assert_columns_equivalent": {"name": "assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.assert_columns_equivalent", "macro_sql": "{% macro assert_columns_equivalent(sql) %}\n\n {#-- First ensure the user has defined 'columns' in yaml specification --#}\n {%- set user_defined_columns = model['columns'] -%}\n {%- if not user_defined_columns -%}\n {{ exceptions.raise_contract_error([], []) }}\n {%- endif -%}\n\n {#-- Obtain the column schema provided by sql file. #}\n {%- set sql_file_provided_columns = get_column_schema_from_query(sql, config.get('sql_header', none)) -%}\n {#--Obtain the column schema provided by the schema file by generating an 'empty schema' query from the model's columns. #}\n {%- set schema_file_provided_columns = get_column_schema_from_query(get_empty_schema_sql(user_defined_columns)) -%}\n\n {#-- create dictionaries with name and formatted data type and strings for exception #}\n {%- set sql_columns = format_columns(sql_file_provided_columns) -%}\n {%- set yaml_columns = format_columns(schema_file_provided_columns) -%}\n\n {%- if sql_columns|length != yaml_columns|length -%}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n\n {%- for sql_col in sql_columns -%}\n {%- set yaml_col = [] -%}\n {%- for this_col in yaml_columns -%}\n {%- if this_col['name'] == sql_col['name'] -%}\n {%- do yaml_col.append(this_col) -%}\n {%- break -%}\n {%- endif -%}\n {%- endfor -%}\n {%- if not yaml_col -%}\n {#-- Column with name not found in yaml #}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n {%- if sql_col['formatted'] != yaml_col[0]['formatted'] -%}\n {#-- Column data types don't match #}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n {%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_column_schema_from_query", "macro.dbt.get_empty_schema_sql", "macro.dbt.format_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.263626, "supported_languages": null}, "macro.dbt.format_columns": {"name": "format_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.format_columns", "macro_sql": "{% macro format_columns(columns) %}\n {% set formatted_columns = [] %}\n {% for column in columns %}\n {%- set formatted_column = adapter.dispatch('format_column', 'dbt')(column) -%}\n {%- do formatted_columns.append(formatted_column) -%}\n {% endfor %}\n {{ return(formatted_columns) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__format_column"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.263776, "supported_languages": null}, "macro.dbt.default__format_column": {"name": "default__format_column", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__format_column", "macro_sql": "{% macro default__format_column(column) -%}\n {% set data_type = column.dtype %}\n {% set formatted = column.column.lower() ~ \" \" ~ data_type %}\n {{ return({'name': column.name, 'data_type': data_type, 'formatted': formatted}) }}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "column", "type": null, "description": ""}], "created_at": 1784225035.2639081, "supported_languages": null}, "macro.dbt.drop_table": {"name": "drop_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt.drop_table", "macro_sql": "{% macro drop_table(relation) -%}\n {{- adapter.dispatch('drop_table', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.264013, "supported_languages": null}, "macro.dbt.default__drop_table": {"name": "default__drop_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt.default__drop_table", "macro_sql": "{% macro default__drop_table(relation) -%}\n drop table if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.264063, "supported_languages": null}, "macro.dbt.get_replace_table_sql": {"name": "get_replace_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt.get_replace_table_sql", "macro_sql": "{% macro get_replace_table_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_table_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_replace_table_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.26417, "supported_languages": null}, "macro.dbt.default__get_replace_table_sql": {"name": "default__get_replace_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt.default__get_replace_table_sql", "macro_sql": "{% macro default__get_replace_table_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_table_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.264226, "supported_languages": null}, "macro.dbt.get_rename_table_sql": {"name": "get_rename_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt.get_rename_table_sql", "macro_sql": "{% macro get_rename_table_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_table_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_table_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.264332, "supported_languages": null}, "macro.dbt.default__get_rename_table_sql": {"name": "default__get_rename_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt.default__get_rename_table_sql", "macro_sql": "{% macro default__get_rename_table_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_table_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.264388, "supported_languages": null}, "macro.dbt.get_create_table_as_sql": {"name": "get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.get_create_table_as_sql", "macro_sql": "{% macro get_create_table_as_sql(temporary, relation, sql) -%}\n {{ adapter.dispatch('get_create_table_as_sql', 'dbt')(temporary, relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_create_table_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "temporary", "type": null, "description": ""}, {"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2646348, "supported_languages": null}, "macro.dbt.default__get_create_table_as_sql": {"name": "default__get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_create_table_as_sql", "macro_sql": "{% macro default__get_create_table_as_sql(temporary, relation, sql) -%}\n {{ return(create_table_as(temporary, relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "temporary", "type": null, "description": ""}, {"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.264703, "supported_languages": null}, "macro.dbt.create_table_as": {"name": "create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.create_table_as", "macro_sql": "{% macro create_table_as(temporary, relation, compiled_code, language='sql') -%}\n {# backward compatibility for create_table_as that does not support language #}\n {% if language == \"sql\" %}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, compiled_code)}}\n {% else %}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, compiled_code, language) }}\n {% endif %}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "temporary", "type": null, "description": ""}, {"name": "relation", "type": null, "description": ""}, {"name": "compiled_code", "type": null, "description": ""}, {"name": "language", "type": null, "description": ""}], "created_at": 1784225035.264863, "supported_languages": null}, "macro.dbt.default__create_table_as": {"name": "default__create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__create_table_as", "macro_sql": "{% macro default__create_table_as(temporary, relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary: -%}temporary{%- endif %} table\n {{ relation.include(database=(not temporary), schema=(not temporary)) }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced and (not temporary) %}\n {{ get_assert_columns_equivalent(sql) }}\n {{ get_table_columns_and_constraints() }}\n {%- set sql = get_select_subquery(sql) %}\n {% endif %}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "temporary", "type": null, "description": ""}, {"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.265124, "supported_languages": null}, "macro.dbt.default__get_column_names": {"name": "default__get_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_column_names", "macro_sql": "{% macro default__get_column_names() %}\n {#- loop through user_provided_columns to get column names -#}\n {%- set user_provided_columns = model['columns'] -%}\n {%- for i in user_provided_columns %}\n {%- set col = user_provided_columns[i] -%}\n {%- set col_name = adapter.quote(col['name']) if col.get('quote') else col['name'] -%}\n {{ col_name }}{{ \", \" if not loop.last }}\n {%- endfor -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.265305, "supported_languages": null}, "macro.dbt.get_select_subquery": {"name": "get_select_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.get_select_subquery", "macro_sql": "{% macro get_select_subquery(sql) %}\n {{ return(adapter.dispatch('get_select_subquery', 'dbt')(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.265376, "supported_languages": null}, "macro.dbt.default__get_select_subquery": {"name": "default__get_select_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_select_subquery", "macro_sql": "{% macro default__get_select_subquery(sql) %}\n select {{ adapter.dispatch('get_column_names', 'dbt')() }}\n from (\n {{ sql }}\n ) as model_subq\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_column_names"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.265443, "supported_languages": null}, "macro.dbt.drop_view": {"name": "drop_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt.drop_view", "macro_sql": "{% macro drop_view(relation) -%}\n {{- adapter.dispatch('drop_view', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.265549, "supported_languages": null}, "macro.dbt.default__drop_view": {"name": "default__drop_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt.default__drop_view", "macro_sql": "{% macro default__drop_view(relation) -%}\n drop view if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.265598, "supported_languages": null}, "macro.dbt.get_replace_view_sql": {"name": "get_replace_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.get_replace_view_sql", "macro_sql": "{% macro get_replace_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_replace_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2658062, "supported_languages": null}, "macro.dbt.default__get_replace_view_sql": {"name": "default__get_replace_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.default__get_replace_view_sql", "macro_sql": "{% macro default__get_replace_view_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.265864, "supported_languages": null}, "macro.dbt.create_or_replace_view": {"name": "create_or_replace_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.create_or_replace_view", "macro_sql": "{% macro create_or_replace_view() %}\n {%- set identifier = model['alias'] -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database,\n type='view') -%}\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks) }}\n\n -- If there's a table with the same name and we weren't told to full refresh,\n -- that's an error. If we were told to full refresh, drop it. This behavior differs\n -- for Snowflake and BigQuery, so multiple dispatch is used.\n {%- if old_relation is not none and old_relation.is_table -%}\n {{ handle_existing_table(should_full_refresh(), old_relation) }}\n {%- endif -%}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(target_relation, sql) }}\n {%- endcall %}\n\n {% set should_revoke = should_revoke(exists_as_view, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {{ run_hooks(post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.handle_existing_table", "macro.dbt.should_full_refresh", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2663622, "supported_languages": null}, "macro.dbt.handle_existing_table": {"name": "handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.handle_existing_table", "macro_sql": "{% macro handle_existing_table(full_refresh, old_relation) %}\n {{ adapter.dispatch('handle_existing_table', 'dbt')(full_refresh, old_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__handle_existing_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "full_refresh", "type": null, "description": ""}, {"name": "old_relation", "type": null, "description": ""}], "created_at": 1784225035.266449, "supported_languages": null}, "macro.dbt.default__handle_existing_table": {"name": "default__handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.default__handle_existing_table", "macro_sql": "{% macro default__handle_existing_table(full_refresh, old_relation) %}\n {{ log(\"Dropping relation \" ~ old_relation.render() ~ \" because it is of type \" ~ old_relation.type) }}\n {{ adapter.drop_relation(old_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "full_refresh", "type": null, "description": ""}, {"name": "old_relation", "type": null, "description": ""}], "created_at": 1784225035.2665448, "supported_languages": null}, "macro.dbt.get_rename_view_sql": {"name": "get_rename_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt.get_rename_view_sql", "macro_sql": "{% macro get_rename_view_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_view_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.266664, "supported_languages": null}, "macro.dbt.default__get_rename_view_sql": {"name": "default__get_rename_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt.default__get_rename_view_sql", "macro_sql": "{% macro default__get_rename_view_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "new_name", "type": null, "description": ""}], "created_at": 1784225035.266725, "supported_languages": null}, "macro.dbt.get_create_view_as_sql": {"name": "get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.get_create_view_as_sql", "macro_sql": "{% macro get_create_view_as_sql(relation, sql) -%}\n {{ adapter.dispatch('get_create_view_as_sql', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_create_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2668831, "supported_languages": null}, "macro.dbt.default__get_create_view_as_sql": {"name": "default__get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.default__get_create_view_as_sql", "macro_sql": "{% macro default__get_create_view_as_sql(relation, sql) -%}\n {{ return(create_view_as(relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.266947, "supported_languages": null}, "macro.dbt.create_view_as": {"name": "create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.create_view_as", "macro_sql": "{% macro create_view_as(relation, sql) -%}\n {{ adapter.dispatch('create_view_as', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.267017, "supported_languages": null}, "macro.dbt.default__create_view_as": {"name": "default__create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.default__create_view_as", "macro_sql": "{% macro default__create_view_as(relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n create view {{ relation.render() }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {%- endif %}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.267191, "supported_languages": null}, "macro.dbt.default__test_relationships": {"name": "default__test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/relationships.sql", "original_file_path": "macros/generic_test_sql/relationships.sql", "unique_id": "macro.dbt.default__test_relationships", "macro_sql": "{% macro default__test_relationships(model, column_name, to, field) %}\n\nwith child as (\n select {{ column_name }} as from_field\n from {{ model }}\n where {{ column_name }} is not null\n),\n\nparent as (\n select {{ field }} as to_field\n from {{ to }}\n)\n\nselect\n from_field\n\nfrom child\nleft join parent\n on child.from_field = parent.to_field\n\nwhere parent.to_field is null\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}, {"name": "to", "type": null, "description": ""}, {"name": "field", "type": null, "description": ""}], "created_at": 1784225035.267328, "supported_languages": null}, "macro.dbt.default__test_not_null": {"name": "default__test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/not_null.sql", "original_file_path": "macros/generic_test_sql/not_null.sql", "unique_id": "macro.dbt.default__test_not_null", "macro_sql": "{% macro default__test_not_null(model, column_name) %}\n\n{% set column_list = '*' if should_store_failures() else column_name %}\n\nselect {{ column_list }}\nfrom {{ model }}\nwhere {{ column_name }} is null\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_store_failures"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}], "created_at": 1784225035.267445, "supported_languages": null}, "macro.dbt.default__test_unique": {"name": "default__test_unique", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/unique.sql", "original_file_path": "macros/generic_test_sql/unique.sql", "unique_id": "macro.dbt.default__test_unique", "macro_sql": "{% macro default__test_unique(model, column_name) %}\n\nselect\n {{ column_name }} as unique_field,\n count(*) as n_records\n\nfrom {{ model }}\nwhere {{ column_name }} is not null\ngroup by {{ column_name }}\nhaving count(*) > 1\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}], "created_at": 1784225035.26754, "supported_languages": null}, "macro.dbt.default__test_accepted_values": {"name": "default__test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/accepted_values.sql", "original_file_path": "macros/generic_test_sql/accepted_values.sql", "unique_id": "macro.dbt.default__test_accepted_values", "macro_sql": "{% macro default__test_accepted_values(model, column_name, values, quote=True) %}\n\nwith all_values as (\n\n select\n {{ column_name }} as value_field,\n count(*) as n_records\n\n from {{ model }}\n group by {{ column_name }}\n\n)\n\nselect *\nfrom all_values\nwhere value_field not in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n)\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}, {"name": "values", "type": null, "description": ""}, {"name": "quote", "type": null, "description": ""}], "created_at": 1784225035.2677429, "supported_languages": null}, "macro.dbt.statement": {"name": "statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.statement", "macro_sql": "\n{%- macro statement(name=None, fetch_result=False, auto_begin=True, language='sql') -%}\n {%- if execute: -%}\n {%- set compiled_code = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime {} for node \"{}\"'.format(language, model['unique_id'])) }}\n {{ write(compiled_code) }}\n {%- endif -%}\n {%- if language == 'sql'-%}\n {%- set res, table = adapter.execute(compiled_code, auto_begin=auto_begin, fetch=fetch_result) -%}\n {%- elif language == 'python' -%}\n {%- set res = submit_python_job(model, compiled_code) -%}\n {#-- TODO: What should table be for python models? --#}\n {%- set table = None -%}\n {%- else -%}\n {% do exceptions.raise_compiler_error(\"statement macro didn't get supported language\") %}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_result(name, response=res, agate_table=table) }}\n {%- endif -%}\n\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "name", "type": null, "description": ""}, {"name": "fetch_result", "type": null, "description": ""}, {"name": "auto_begin", "type": null, "description": ""}, {"name": "language", "type": null, "description": ""}], "created_at": 1784225035.268249, "supported_languages": null}, "macro.dbt.noop_statement": {"name": "noop_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.noop_statement", "macro_sql": "{% macro noop_statement(name=None, message=None, code=None, rows_affected=None, res=None) -%}\n {%- set sql = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime SQL for node \"{}\"'.format(model['unique_id'])) }}\n {{ write(sql) }}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_raw_result(name, message=message, code=code, rows_affected=rows_affected, agate_table=res) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "name", "type": null, "description": ""}, {"name": "message", "type": null, "description": ""}, {"name": "code", "type": null, "description": ""}, {"name": "rows_affected", "type": null, "description": ""}, {"name": "res", "type": null, "description": ""}], "created_at": 1784225035.268476, "supported_languages": null}, "macro.dbt.run_query": {"name": "run_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.run_query", "macro_sql": "{% macro run_query(sql) %}\n {% call statement(\"run_query_statement\", fetch_result=true, auto_begin=false) %}\n {{ sql }}\n {% endcall %}\n\n {% do return(load_result(\"run_query_statement\").table) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2685912, "supported_languages": null}, "macro.dbt.convert_datetime": {"name": "convert_datetime", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.convert_datetime", "macro_sql": "{% macro convert_datetime(date_str, date_fmt) %}\n\n {% set error_msg -%}\n The provided partition date '{{ date_str }}' does not match the expected format '{{ date_fmt }}'\n {%- endset %}\n\n {% set res = try_or_compiler_error(error_msg, modules.datetime.datetime.strptime, date_str.strip(), date_fmt) %}\n {{ return(res) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "date_str", "type": null, "description": ""}, {"name": "date_fmt", "type": null, "description": ""}], "created_at": 1784225035.268883, "supported_languages": null}, "macro.dbt.dates_in_range": {"name": "dates_in_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.dates_in_range", "macro_sql": "{% macro dates_in_range(start_date_str, end_date_str=none, in_fmt=\"%Y%m%d\", out_fmt=\"%Y%m%d\") %}\n {% set end_date_str = start_date_str if end_date_str is none else end_date_str %}\n\n {% set start_date = convert_datetime(start_date_str, in_fmt) %}\n {% set end_date = convert_datetime(end_date_str, in_fmt) %}\n\n {% set day_count = (end_date - start_date).days %}\n {% if day_count < 0 %}\n {% set msg -%}\n Partition start date is after the end date ({{ start_date }}, {{ end_date }})\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg, model) }}\n {% endif %}\n\n {% set date_list = [] %}\n {% for i in range(0, day_count + 1) %}\n {% set the_date = (modules.datetime.timedelta(days=i) + start_date) %}\n {% if not out_fmt %}\n {% set _ = date_list.append(the_date) %}\n {% else %}\n {% set _ = date_list.append(the_date.strftime(out_fmt)) %}\n {% endif %}\n {% endfor %}\n\n {{ return(date_list) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.convert_datetime"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "start_date_str", "type": null, "description": ""}, {"name": "end_date_str", "type": null, "description": ""}, {"name": "in_fmt", "type": null, "description": ""}, {"name": "out_fmt", "type": null, "description": ""}], "created_at": 1784225035.2693288, "supported_languages": null}, "macro.dbt.partition_range": {"name": "partition_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.partition_range", "macro_sql": "{% macro partition_range(raw_partition_date, date_fmt='%Y%m%d') %}\n {% set partition_range = (raw_partition_date | string).split(\",\") %}\n\n {% if (partition_range | length) == 1 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = none %}\n {% elif (partition_range | length) == 2 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = partition_range[1] %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"Invalid partition time. Expected format: {Start Date}[,{End Date}]. Got: \" ~ raw_partition_date) }}\n {% endif %}\n\n {{ return(dates_in_range(start_date, end_date, in_fmt=date_fmt)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dates_in_range"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "raw_partition_date", "type": null, "description": ""}, {"name": "date_fmt", "type": null, "description": ""}], "created_at": 1784225035.269717, "supported_languages": null}, "macro.dbt.py_current_timestring": {"name": "py_current_timestring", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.py_current_timestring", "macro_sql": "{% macro py_current_timestring() %}\n {% set dt = modules.datetime.datetime.now() %}\n {% do return(dt.strftime(\"%Y%m%d%H%M%S%f\")) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.269832, "supported_languages": null}, "macro.dbt.except": {"name": "except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.except", "macro_sql": "{% macro except() %}\n {{ return(adapter.dispatch('except', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.269933, "supported_languages": null}, "macro.dbt.default__except": {"name": "default__except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.default__except", "macro_sql": "{% macro default__except() %}\n\n except\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2699661, "supported_languages": null}, "macro.dbt.get_intervals_between": {"name": "get_intervals_between", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.get_intervals_between", "macro_sql": "{% macro get_intervals_between(start_date, end_date, datepart) -%}\n {{ return(adapter.dispatch('get_intervals_between', 'dbt')(start_date, end_date, datepart)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_intervals_between"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "start_date", "type": null, "description": ""}, {"name": "end_date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.2701728, "supported_languages": null}, "macro.dbt.default__get_intervals_between": {"name": "default__get_intervals_between", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.default__get_intervals_between", "macro_sql": "{% macro default__get_intervals_between(start_date, end_date, datepart) -%}\n {%- call statement('get_intervals_between', fetch_result=True) %}\n\n select {{ dbt.datediff(start_date, end_date, datepart) }}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_intervals_between') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values[0]) }}\n {%- else -%}\n {{ return(1) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "start_date", "type": null, "description": ""}, {"name": "end_date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.270414, "supported_languages": null}, "macro.dbt.date_spine": {"name": "date_spine", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.date_spine", "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt')(datepart, start_date, end_date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "start_date", "type": null, "description": ""}, {"name": "end_date", "type": null, "description": ""}], "created_at": 1784225035.270505, "supported_languages": null}, "macro.dbt.default__date_spine": {"name": "default__date_spine", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.default__date_spine", "macro_sql": "{% macro default__date_spine(datepart, start_date, end_date) %}\n\n\n {# call as follows:\n\n date_spine(\n \"day\",\n \"to_date('01/01/2016', 'mm/dd/yyyy')\",\n \"dbt.dateadd(week, 1, current_date)\"\n ) #}\n\n\n with rawdata as (\n\n {{dbt.generate_series(\n dbt.get_intervals_between(start_date, end_date, datepart)\n )}}\n\n ),\n\n all_periods as (\n\n select (\n {{\n dbt.dateadd(\n datepart,\n \"row_number() over (order by 1) - 1\",\n start_date\n )\n }}\n ) as date_{{datepart}}\n from rawdata\n\n ),\n\n filtered as (\n\n select *\n from all_periods\n where date_{{datepart}} <= {{ end_date }}\n\n )\n\n select * from filtered\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.generate_series", "macro.dbt.get_intervals_between", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "start_date", "type": null, "description": ""}, {"name": "end_date", "type": null, "description": ""}], "created_at": 1784225035.2706492, "supported_languages": null}, "macro.dbt.date": {"name": "date", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date.sql", "original_file_path": "macros/utils/date.sql", "unique_id": "macro.dbt.date", "macro_sql": "{% macro date(year, month, day) %}\n {{ return(adapter.dispatch('date', 'dbt') (year, month, day)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "year", "type": null, "description": ""}, {"name": "month", "type": null, "description": ""}, {"name": "day", "type": null, "description": ""}], "created_at": 1784225035.2707798, "supported_languages": null}, "macro.dbt.default__date": {"name": "default__date", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date.sql", "original_file_path": "macros/utils/date.sql", "unique_id": "macro.dbt.default__date", "macro_sql": "{% macro default__date(year, month, day) -%}\n {%- set dt = modules.datetime.date(year, month, day) -%}\n {%- set iso_8601_formatted_date = dt.strftime('%Y-%m-%d') -%}\n to_date('{{ iso_8601_formatted_date }}', 'YYYY-MM-DD')\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "year", "type": null, "description": ""}, {"name": "month", "type": null, "description": ""}, {"name": "day", "type": null, "description": ""}], "created_at": 1784225035.2708921, "supported_languages": null}, "macro.dbt.replace": {"name": "replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.replace", "macro_sql": "{% macro replace(field, old_chars, new_chars) -%}\n {{ return(adapter.dispatch('replace', 'dbt') (field, old_chars, new_chars)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__replace"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "old_chars", "type": null, "description": ""}, {"name": "new_chars", "type": null, "description": ""}], "created_at": 1784225035.271019, "supported_languages": null}, "macro.dbt.default__replace": {"name": "default__replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.default__replace", "macro_sql": "{% macro default__replace(field, old_chars, new_chars) %}\n\n replace(\n {{ field }},\n {{ old_chars }},\n {{ new_chars }}\n )\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "old_chars", "type": null, "description": ""}, {"name": "new_chars", "type": null, "description": ""}], "created_at": 1784225035.2710881, "supported_languages": null}, "macro.dbt.concat": {"name": "concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.concat", "macro_sql": "{% macro concat(fields) -%}\n {{ return(adapter.dispatch('concat', 'dbt')(fields)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "fields", "type": null, "description": ""}], "created_at": 1784225035.271189, "supported_languages": null}, "macro.dbt.default__concat": {"name": "default__concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.default__concat", "macro_sql": "{% macro default__concat(fields) -%}\n {{ fields|join(' || ') }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "fields", "type": null, "description": ""}], "created_at": 1784225035.27124, "supported_languages": null}, "macro.dbt.get_powers_of_two": {"name": "get_powers_of_two", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.get_powers_of_two", "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "upper_bound", "type": null, "description": ""}], "created_at": 1784225035.2714188, "supported_languages": null}, "macro.dbt.default__get_powers_of_two": {"name": "default__get_powers_of_two", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.default__get_powers_of_two", "macro_sql": "{% macro default__get_powers_of_two(upper_bound) %}\n\n {% if upper_bound <= 0 %}\n {{ exceptions.raise_compiler_error(\"upper bound must be positive\") }}\n {% endif %}\n\n {% for _ in range(1, 100) %}\n {% if upper_bound <= 2 ** loop.index %}{{ return(loop.index) }}{% endif %}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "upper_bound", "type": null, "description": ""}], "created_at": 1784225035.271582, "supported_languages": null}, "macro.dbt.generate_series": {"name": "generate_series", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.generate_series", "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_series"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "upper_bound", "type": null, "description": ""}], "created_at": 1784225035.2716532, "supported_languages": null}, "macro.dbt.default__generate_series": {"name": "default__generate_series", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.default__generate_series", "macro_sql": "{% macro default__generate_series(upper_bound) %}\n\n {% set n = dbt.get_powers_of_two(upper_bound) %}\n\n with p as (\n select 0 as generated_number union all select 1\n ), unioned as (\n\n select\n\n {% for i in range(n) %}\n p{{i}}.generated_number * power(2, {{i}})\n {% if not loop.last %} + {% endif %}\n {% endfor %}\n + 1\n as generated_number\n\n from\n\n {% for i in range(n) %}\n p as p{{i}}\n {% if not loop.last %} cross join {% endif %}\n {% endfor %}\n\n )\n\n select *\n from unioned\n where generated_number <= {{upper_bound}}\n order by generated_number\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "upper_bound", "type": null, "description": ""}], "created_at": 1784225035.271859, "supported_languages": null}, "macro.dbt.length": {"name": "length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.length", "macro_sql": "{% macro length(expression) -%}\n {{ return(adapter.dispatch('length', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__length"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.2719731, "supported_languages": null}, "macro.dbt.default__length": {"name": "default__length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.default__length", "macro_sql": "{% macro default__length(expression) %}\n\n length(\n {{ expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.2720158, "supported_languages": null}, "macro.dbt.dateadd": {"name": "dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.dateadd", "macro_sql": "{% macro dateadd(datepart, interval, from_date_or_timestamp) %}\n {{ return(adapter.dispatch('dateadd', 'dbt')(datepart, interval, from_date_or_timestamp)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "interval", "type": null, "description": ""}, {"name": "from_date_or_timestamp", "type": null, "description": ""}], "created_at": 1784225035.27214, "supported_languages": null}, "macro.dbt.default__dateadd": {"name": "default__dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.default__dateadd", "macro_sql": "{% macro default__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_date_or_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "interval", "type": null, "description": ""}, {"name": "from_date_or_timestamp", "type": null, "description": ""}], "created_at": 1784225035.272204, "supported_languages": null}, "macro.dbt.intersect": {"name": "intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.intersect", "macro_sql": "{% macro intersect() %}\n {{ return(adapter.dispatch('intersect', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__intersect"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.272293, "supported_languages": null}, "macro.dbt.default__intersect": {"name": "default__intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.default__intersect", "macro_sql": "{% macro default__intersect() %}\n\n intersect\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.272367, "supported_languages": null}, "macro.dbt.escape_single_quotes": {"name": "escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.escape_single_quotes", "macro_sql": "{% macro escape_single_quotes(expression) %}\n {{ return(adapter.dispatch('escape_single_quotes', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__escape_single_quotes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.272479, "supported_languages": null}, "macro.dbt.default__escape_single_quotes": {"name": "default__escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.default__escape_single_quotes", "macro_sql": "{% macro default__escape_single_quotes(expression) -%}\n{{ expression | replace(\"'\",\"''\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.272537, "supported_languages": null}, "macro.dbt.right": {"name": "right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.right", "macro_sql": "{% macro right(string_text, length_expression) -%}\n {{ return(adapter.dispatch('right', 'dbt') (string_text, length_expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__right"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "length_expression", "type": null, "description": ""}], "created_at": 1784225035.272651, "supported_languages": null}, "macro.dbt.default__right": {"name": "default__right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.default__right", "macro_sql": "{% macro default__right(string_text, length_expression) %}\n\n right(\n {{ string_text }},\n {{ length_expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "length_expression", "type": null, "description": ""}], "created_at": 1784225035.272707, "supported_languages": null}, "macro.dbt.listagg": {"name": "listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.listagg", "macro_sql": "{% macro listagg(measure, delimiter_text=\"','\", order_by_clause=none, limit_num=none) -%}\n {{ return(adapter.dispatch('listagg', 'dbt') (measure, delimiter_text, order_by_clause, limit_num)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__listagg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "measure", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "order_by_clause", "type": null, "description": ""}, {"name": "limit_num", "type": null, "description": ""}], "created_at": 1784225035.272888, "supported_languages": null}, "macro.dbt.default__listagg": {"name": "default__listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.default__listagg", "macro_sql": "{% macro default__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n array_slice(\n array_agg(\n {{ measure }}\n ){% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n ,0\n ,{{ limit_num }}\n ),\n {{ delimiter_text }}\n )\n {%- else %}\n listagg(\n {{ measure }},\n {{ delimiter_text }}\n )\n {% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n {%- endif %}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "measure", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "order_by_clause", "type": null, "description": ""}, {"name": "limit_num", "type": null, "description": ""}], "created_at": 1784225035.273042, "supported_languages": null}, "macro.dbt.datediff": {"name": "datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.datediff", "macro_sql": "{% macro datediff(first_date, second_date, datepart) %}\n {{ return(adapter.dispatch('datediff', 'dbt')(first_date, second_date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "first_date", "type": null, "description": ""}, {"name": "second_date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.2731678, "supported_languages": null}, "macro.dbt.default__datediff": {"name": "default__datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.default__datediff", "macro_sql": "{% macro default__datediff(first_date, second_date, datepart) -%}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "first_date", "type": null, "description": ""}, {"name": "second_date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.273233, "supported_languages": null}, "macro.dbt.safe_cast": {"name": "safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.safe_cast", "macro_sql": "{% macro safe_cast(field, type) %}\n {{ return(adapter.dispatch('safe_cast', 'dbt') (field, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.2733471, "supported_languages": null}, "macro.dbt.default__safe_cast": {"name": "default__safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.default__safe_cast", "macro_sql": "{% macro default__safe_cast(field, type) %}\n {# most databases don't support this function yet\n so we just need to use cast #}\n cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.273403, "supported_languages": null}, "macro.dbt.equals": {"name": "equals", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/equals.sql", "original_file_path": "macros/utils/equals.sql", "unique_id": "macro.dbt.equals", "macro_sql": "{% macro equals(expr1, expr2) %}\n {{ return(adapter.dispatch('equals', 'dbt') (expr1, expr2)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expr1", "type": null, "description": ""}, {"name": "expr2", "type": null, "description": ""}], "created_at": 1784225035.273529, "supported_languages": null}, "macro.dbt.default__equals": {"name": "default__equals", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/equals.sql", "original_file_path": "macros/utils/equals.sql", "unique_id": "macro.dbt.default__equals", "macro_sql": "{% macro default__equals(expr1, expr2) -%}\n{%- if adapter.behavior.enable_truthy_nulls_equals_macro.no_warn %}\n case when (({{ expr1 }} = {{ expr2 }}) or ({{ expr1 }} is null and {{ expr2 }} is null))\n then 0\n else 1\n end = 0\n{%- else -%}\n ({{ expr1 }} = {{ expr2 }})\n{%- endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expr1", "type": null, "description": ""}, {"name": "expr2", "type": null, "description": ""}], "created_at": 1784225035.273648, "supported_languages": null}, "macro.dbt.hash": {"name": "hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.hash", "macro_sql": "{% macro hash(field) -%}\n {{ return(adapter.dispatch('hash', 'dbt') (field)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__hash"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}], "created_at": 1784225035.273751, "supported_languages": null}, "macro.dbt.default__hash": {"name": "default__hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.default__hash", "macro_sql": "{% macro default__hash(field) -%}\n md5(cast({{ field }} as {{ api.Column.translate_type('string') }}))\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}], "created_at": 1784225035.273814, "supported_languages": null}, "macro.dbt.cast_bool_to_text": {"name": "cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.cast_bool_to_text", "macro_sql": "{% macro cast_bool_to_text(field) %}\n {{ adapter.dispatch('cast_bool_to_text', 'dbt') (field) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}], "created_at": 1784225035.273911, "supported_languages": null}, "macro.dbt.default__cast_bool_to_text": {"name": "default__cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.default__cast_bool_to_text", "macro_sql": "{% macro default__cast_bool_to_text(field) %}\n cast({{ field }} as {{ api.Column.translate_type('string') }})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}], "created_at": 1784225035.273973, "supported_languages": null}, "macro.dbt.cast": {"name": "cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast.sql", "original_file_path": "macros/utils/cast.sql", "unique_id": "macro.dbt.cast", "macro_sql": "{% macro cast(field, type) %}\n {{ return(adapter.dispatch('cast', 'dbt') (field, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.274086, "supported_languages": null}, "macro.dbt.default__cast": {"name": "default__cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast.sql", "original_file_path": "macros/utils/cast.sql", "unique_id": "macro.dbt.default__cast", "macro_sql": "{% macro default__cast(field, type) %}\n cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "field", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.2741382, "supported_languages": null}, "macro.dbt.any_value": {"name": "any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.any_value", "macro_sql": "{% macro any_value(expression) -%}\n {{ return(adapter.dispatch('any_value', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__any_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.274237, "supported_languages": null}, "macro.dbt.default__any_value": {"name": "default__any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.default__any_value", "macro_sql": "{% macro default__any_value(expression) -%}\n\n any_value({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.274292, "supported_languages": null}, "macro.dbt.position": {"name": "position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.position", "macro_sql": "{% macro position(substring_text, string_text) -%}\n {{ return(adapter.dispatch('position', 'dbt') (substring_text, string_text)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__position"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "substring_text", "type": null, "description": ""}, {"name": "string_text", "type": null, "description": ""}], "created_at": 1784225035.274412, "supported_languages": null}, "macro.dbt.default__position": {"name": "default__position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.default__position", "macro_sql": "{% macro default__position(substring_text, string_text) %}\n\n position(\n {{ substring_text }} in {{ string_text }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "substring_text", "type": null, "description": ""}, {"name": "string_text", "type": null, "description": ""}], "created_at": 1784225035.274518, "supported_languages": null}, "macro.dbt.string_literal": {"name": "string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.string_literal", "macro_sql": "{%- macro string_literal(value) -%}\n {{ return(adapter.dispatch('string_literal', 'dbt') (value)) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "value", "type": null, "description": ""}], "created_at": 1784225035.274627, "supported_languages": null}, "macro.dbt.default__string_literal": {"name": "default__string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.default__string_literal", "macro_sql": "{% macro default__string_literal(value) -%}\n '{{ value }}'\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "value", "type": null, "description": ""}], "created_at": 1784225035.274672, "supported_languages": null}, "macro.dbt.type_string": {"name": "type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_string", "macro_sql": "\n\n{%- macro type_string() -%}\n {{ return(adapter.dispatch('type_string', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.274988, "supported_languages": null}, "macro.dbt.default__type_string": {"name": "default__type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_string", "macro_sql": "{% macro default__type_string() %}\n {{ return(api.Column.translate_type(\"string\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275048, "supported_languages": null}, "macro.dbt.type_timestamp": {"name": "type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_timestamp", "macro_sql": "\n\n{%- macro type_timestamp() -%}\n {{ return(adapter.dispatch('type_timestamp', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275115, "supported_languages": null}, "macro.dbt.default__type_timestamp": {"name": "default__type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_timestamp", "macro_sql": "{% macro default__type_timestamp() %}\n {{ return(api.Column.translate_type(\"timestamp\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275172, "supported_languages": null}, "macro.dbt.type_float": {"name": "type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_float", "macro_sql": "\n\n{%- macro type_float() -%}\n {{ return(adapter.dispatch('type_float', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_float"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275233, "supported_languages": null}, "macro.dbt.default__type_float": {"name": "default__type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_float", "macro_sql": "{% macro default__type_float() %}\n {{ return(api.Column.translate_type(\"float\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275297, "supported_languages": null}, "macro.dbt.type_numeric": {"name": "type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_numeric", "macro_sql": "\n\n{%- macro type_numeric() -%}\n {{ return(adapter.dispatch('type_numeric', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275368, "supported_languages": null}, "macro.dbt.default__type_numeric": {"name": "default__type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_numeric", "macro_sql": "{% macro default__type_numeric() %}\n {{ return(api.Column.numeric_type(\"numeric\", 28, 6)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275438, "supported_languages": null}, "macro.dbt.type_bigint": {"name": "type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_bigint", "macro_sql": "\n\n{%- macro type_bigint() -%}\n {{ return(adapter.dispatch('type_bigint', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_bigint"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275499, "supported_languages": null}, "macro.dbt.default__type_bigint": {"name": "default__type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_bigint", "macro_sql": "{% macro default__type_bigint() %}\n {{ return(api.Column.translate_type(\"bigint\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275559, "supported_languages": null}, "macro.dbt.type_int": {"name": "type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_int", "macro_sql": "\n\n{%- macro type_int() -%}\n {{ return(adapter.dispatch('type_int', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275618, "supported_languages": null}, "macro.dbt.default__type_int": {"name": "default__type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_int", "macro_sql": "{%- macro default__type_int() -%}\n {{ return(api.Column.translate_type(\"integer\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2756748, "supported_languages": null}, "macro.dbt.type_boolean": {"name": "type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_boolean", "macro_sql": "\n\n{%- macro type_boolean() -%}\n {{ return(adapter.dispatch('type_boolean', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_boolean"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275737, "supported_languages": null}, "macro.dbt.default__type_boolean": {"name": "default__type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_boolean", "macro_sql": "{%- macro default__type_boolean() -%}\n {{ return(api.Column.translate_type(\"boolean\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.275792, "supported_languages": null}, "macro.dbt.array_concat": {"name": "array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.array_concat", "macro_sql": "{% macro array_concat(array_1, array_2) -%}\n {{ return(adapter.dispatch('array_concat', 'dbt')(array_1, array_2)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "array_1", "type": null, "description": ""}, {"name": "array_2", "type": null, "description": ""}], "created_at": 1784225035.275908, "supported_languages": null}, "macro.dbt.default__array_concat": {"name": "default__array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.default__array_concat", "macro_sql": "{% macro default__array_concat(array_1, array_2) -%}\n array_cat({{ array_1 }}, {{ array_2 }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "array_1", "type": null, "description": ""}, {"name": "array_2", "type": null, "description": ""}], "created_at": 1784225035.275962, "supported_languages": null}, "macro.dbt.bool_or": {"name": "bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.bool_or", "macro_sql": "{% macro bool_or(expression) -%}\n {{ return(adapter.dispatch('bool_or', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__bool_or"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.2760599, "supported_languages": null}, "macro.dbt.default__bool_or": {"name": "default__bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.default__bool_or", "macro_sql": "{% macro default__bool_or(expression) -%}\n\n bool_or({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "expression", "type": null, "description": ""}], "created_at": 1784225035.276101, "supported_languages": null}, "macro.dbt.last_day": {"name": "last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.last_day", "macro_sql": "{% macro last_day(date, datepart) %}\n {{ return(adapter.dispatch('last_day', 'dbt') (date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.276224, "supported_languages": null}, "macro.dbt.default_last_day": {"name": "default_last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default_last_day", "macro_sql": "\n\n{%- macro default_last_day(date, datepart) -%}\n cast(\n {{dbt.dateadd('day', '-1',\n dbt.dateadd(datepart, '1', dbt.date_trunc(datepart, date))\n )}}\n as date)\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.276372, "supported_languages": null}, "macro.dbt.default__last_day": {"name": "default__last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default__last_day", "macro_sql": "{% macro default__last_day(date, datepart) -%}\n {{dbt.default_last_day(date, datepart)}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "date", "type": null, "description": ""}, {"name": "datepart", "type": null, "description": ""}], "created_at": 1784225035.276434, "supported_languages": null}, "macro.dbt.split_part": {"name": "split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.split_part", "macro_sql": "{% macro split_part(string_text, delimiter_text, part_number) %}\n {{ return(adapter.dispatch('split_part', 'dbt') (string_text, delimiter_text, part_number)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__split_part"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "part_number", "type": null, "description": ""}], "created_at": 1784225035.276583, "supported_languages": null}, "macro.dbt.default__split_part": {"name": "default__split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.default__split_part", "macro_sql": "{% macro default__split_part(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n {{ part_number }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "part_number", "type": null, "description": ""}], "created_at": 1784225035.276649, "supported_languages": null}, "macro.dbt._split_part_negative": {"name": "_split_part_negative", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt._split_part_negative", "macro_sql": "{% macro _split_part_negative(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n length({{ string_text }})\n - length(\n replace({{ string_text }}, {{ delimiter_text }}, '')\n ) + 2 + {{ part_number }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "string_text", "type": null, "description": ""}, {"name": "delimiter_text", "type": null, "description": ""}, {"name": "part_number", "type": null, "description": ""}], "created_at": 1784225035.276733, "supported_languages": null}, "macro.dbt.date_trunc": {"name": "date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.date_trunc", "macro_sql": "{% macro date_trunc(datepart, date) -%}\n {{ return(adapter.dispatch('date_trunc', 'dbt') (datepart, date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "date", "type": null, "description": ""}], "created_at": 1784225035.276843, "supported_languages": null}, "macro.dbt.default__date_trunc": {"name": "default__date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.default__date_trunc", "macro_sql": "{% macro default__date_trunc(datepart, date) -%}\n date_trunc('{{datepart}}', {{date}})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "datepart", "type": null, "description": ""}, {"name": "date", "type": null, "description": ""}], "created_at": 1784225035.276897, "supported_languages": null}, "macro.dbt.array_construct": {"name": "array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.array_construct", "macro_sql": "{% macro array_construct(inputs=[], data_type=api.Column.translate_type('integer')) -%}\n {{ return(adapter.dispatch('array_construct', 'dbt')(inputs, data_type)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_construct"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "inputs", "type": null, "description": ""}, {"name": "data_type", "type": null, "description": ""}], "created_at": 1784225035.277044, "supported_languages": null}, "macro.dbt.default__array_construct": {"name": "default__array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.default__array_construct", "macro_sql": "{% macro default__array_construct(inputs, data_type) -%}\n {% if inputs|length > 0 %}\n array[ {{ inputs|join(' , ') }} ]\n {% else %}\n array[]::{{data_type}}[]\n {% endif %}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "inputs", "type": null, "description": ""}, {"name": "data_type", "type": null, "description": ""}], "created_at": 1784225035.27715, "supported_languages": null}, "macro.dbt.array_append": {"name": "array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.array_append", "macro_sql": "{% macro array_append(array, new_element) -%}\n {{ return(adapter.dispatch('array_append', 'dbt')(array, new_element)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_append"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "array", "type": null, "description": ""}, {"name": "new_element", "type": null, "description": ""}], "created_at": 1784225035.277266, "supported_languages": null}, "macro.dbt.default__array_append": {"name": "default__array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.default__array_append", "macro_sql": "{% macro default__array_append(array, new_element) -%}\n array_append({{ array }}, {{ new_element }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "array", "type": null, "description": ""}, {"name": "new_element", "type": null, "description": ""}], "created_at": 1784225035.277319, "supported_languages": null}, "macro.dbt.create_schema": {"name": "create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.create_schema", "macro_sql": "{% macro create_schema(relation) -%}\n {{ adapter.dispatch('create_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2774458, "supported_languages": null}, "macro.dbt.default__create_schema": {"name": "default__create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__create_schema", "macro_sql": "{% macro default__create_schema(relation) -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier() }}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.277517, "supported_languages": null}, "macro.dbt.drop_schema": {"name": "drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.drop_schema", "macro_sql": "{% macro drop_schema(relation) -%}\n {{ adapter.dispatch('drop_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.277577, "supported_languages": null}, "macro.dbt.default__drop_schema": {"name": "default__drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__drop_schema", "macro_sql": "{% macro default__drop_schema(relation) -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier() }} cascade\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.277645, "supported_languages": null}, "macro.dbt.current_timestamp": {"name": "current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp", "macro_sql": "{%- macro current_timestamp() -%}\n {{ adapter.dispatch('current_timestamp', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.277834, "supported_languages": null}, "macro.dbt.default__current_timestamp": {"name": "default__current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp", "macro_sql": "{% macro default__current_timestamp() -%}\n {{ exceptions.raise_not_implemented(\n 'current_timestamp macro not implemented for adapter ' + adapter.type()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.277892, "supported_languages": null}, "macro.dbt.snapshot_get_time": {"name": "snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.snapshot_get_time", "macro_sql": "\n\n{%- macro snapshot_get_time() -%}\n {{ adapter.dispatch('snapshot_get_time', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.277945, "supported_languages": null}, "macro.dbt.default__snapshot_get_time": {"name": "default__snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__snapshot_get_time", "macro_sql": "{% macro default__snapshot_get_time() %}\n {{ current_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.277985, "supported_languages": null}, "macro.dbt.get_snapshot_get_time_data_type": {"name": "get_snapshot_get_time_data_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.get_snapshot_get_time_data_type", "macro_sql": "{% macro get_snapshot_get_time_data_type() %}\n {% set snapshot_time = adapter.dispatch('snapshot_get_time', 'dbt')() %}\n {% set time_data_type_sql = 'select ' ~ snapshot_time ~ ' as dbt_snapshot_time' %}\n {% set snapshot_time_column_schema = get_column_schema_from_query(time_data_type_sql) %}\n {% set time_data_type = snapshot_time_column_schema[0].dtype %}\n {{ return(time_data_type or none) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.snapshot_get_time", "macro.dbt_postgres.postgres__snapshot_get_time", "macro.dbt.get_column_schema_from_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2781398, "supported_languages": null}, "macro.dbt.current_timestamp_backcompat": {"name": "current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_backcompat", "macro_sql": "{% macro current_timestamp_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2782028, "supported_languages": null}, "macro.dbt.default__current_timestamp_backcompat": {"name": "default__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_backcompat", "macro_sql": "{% macro default__current_timestamp_backcompat() %}\n current_timestamp::timestamp\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2782369, "supported_languages": null}, "macro.dbt.current_timestamp_in_utc_backcompat": {"name": "current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_in_utc_backcompat", "macro_sql": "{% macro current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_in_utc_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.278307, "supported_languages": null}, "macro.dbt.default__current_timestamp_in_utc_backcompat": {"name": "default__current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_in_utc_backcompat", "macro_sql": "{% macro default__current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp_backcompat", "macro.dbt_postgres.postgres__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.278421, "supported_languages": null}, "macro.dbt.get_create_index_sql": {"name": "get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_create_index_sql", "macro_sql": "{% macro get_create_index_sql(relation, index_dict) -%}\n {{ return(adapter.dispatch('get_create_index_sql', 'dbt')(relation, index_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_dict", "type": null, "description": ""}], "created_at": 1784225035.27862, "supported_languages": null}, "macro.dbt.default__get_create_index_sql": {"name": "default__get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_create_index_sql", "macro_sql": "{% macro default__get_create_index_sql(relation, index_dict) -%}\n {% do return(None) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_dict", "type": null, "description": ""}], "created_at": 1784225035.2786748, "supported_languages": null}, "macro.dbt.create_indexes": {"name": "create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.create_indexes", "macro_sql": "{% macro create_indexes(relation) -%}\n {{ adapter.dispatch('create_indexes', 'dbt')(relation) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.278738, "supported_languages": null}, "macro.dbt.default__create_indexes": {"name": "default__create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__create_indexes", "macro_sql": "{% macro default__create_indexes(relation) -%}\n {%- set _indexes = config.get('indexes', default=[]) -%}\n\n {% for _index_dict in _indexes %}\n {% set create_index_sql = get_create_index_sql(relation, _index_dict) %}\n {% if create_index_sql %}\n {% do run_query(create_index_sql) %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_create_index_sql", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2788858, "supported_languages": null}, "macro.dbt.get_drop_index_sql": {"name": "get_drop_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_drop_index_sql", "macro_sql": "{% macro get_drop_index_sql(relation, index_name) -%}\n {{ adapter.dispatch('get_drop_index_sql', 'dbt')(relation, index_name) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_drop_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_name", "type": null, "description": ""}], "created_at": 1784225035.278961, "supported_languages": null}, "macro.dbt.default__get_drop_index_sql": {"name": "default__get_drop_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_drop_index_sql", "macro_sql": "{% macro default__get_drop_index_sql(relation, index_name) -%}\n {{ exceptions.raise_compiler_error(\"`get_drop_index_sql has not been implemented for this adapter.\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "index_name", "type": null, "description": ""}], "created_at": 1784225035.279016, "supported_languages": null}, "macro.dbt.get_show_indexes_sql": {"name": "get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_show_indexes_sql", "macro_sql": "{% macro get_show_indexes_sql(relation) -%}\n {{ adapter.dispatch('get_show_indexes_sql', 'dbt')(relation) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_show_indexes_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.279076, "supported_languages": null}, "macro.dbt.default__get_show_indexes_sql": {"name": "default__get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_show_indexes_sql", "macro_sql": "{% macro default__get_show_indexes_sql(relation) -%}\n {{ exceptions.raise_compiler_error(\"`get_show_indexes_sql has not been implemented for this adapter.\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2791219, "supported_languages": null}, "macro.dbt.make_intermediate_relation": {"name": "make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_intermediate_relation", "macro_sql": "{% macro make_intermediate_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_intermediate_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_intermediate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.279399, "supported_languages": null}, "macro.dbt.default__make_intermediate_relation": {"name": "default__make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_intermediate_relation", "macro_sql": "{% macro default__make_intermediate_relation(base_relation, suffix) %}\n {{ return(default__make_temp_relation(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.2794619, "supported_languages": null}, "macro.dbt.make_temp_relation": {"name": "make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_temp_relation", "macro_sql": "{% macro make_temp_relation(base_relation, suffix='__dbt_tmp') %}\n {#-- This ensures microbatch batches get unique temp relations to avoid clobbering --#}\n {% if suffix == '__dbt_tmp' and model.batch %}\n {% set suffix = suffix ~ '_' ~ model.batch.id %}\n {% endif %}\n\n {{ return(adapter.dispatch('make_temp_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.279677, "supported_languages": null}, "macro.dbt.default__make_temp_relation": {"name": "default__make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_temp_relation", "macro_sql": "{% macro default__make_temp_relation(base_relation, suffix) %}\n {%- set temp_identifier = base_relation.identifier ~ suffix -%}\n {%- set temp_relation = base_relation.incorporate(\n path={\"identifier\": temp_identifier}) -%}\n\n {{ return(temp_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.279831, "supported_languages": null}, "macro.dbt.make_backup_relation": {"name": "make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_backup_relation", "macro_sql": "{% macro make_backup_relation(base_relation, backup_relation_type, suffix='__dbt_backup') %}\n {{ return(adapter.dispatch('make_backup_relation', 'dbt')(base_relation, backup_relation_type, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_backup_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "backup_relation_type", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.2799392, "supported_languages": null}, "macro.dbt.default__make_backup_relation": {"name": "default__make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_backup_relation", "macro_sql": "{% macro default__make_backup_relation(base_relation, backup_relation_type, suffix) %}\n {%- set backup_identifier = base_relation.identifier ~ suffix -%}\n {%- set backup_relation = base_relation.incorporate(\n path={\"identifier\": backup_identifier},\n type=backup_relation_type\n ) -%}\n {{ return(backup_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "base_relation", "type": null, "description": ""}, {"name": "backup_relation_type", "type": null, "description": ""}, {"name": "suffix", "type": null, "description": ""}], "created_at": 1784225035.280067, "supported_languages": null}, "macro.dbt.truncate_relation": {"name": "truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.truncate_relation", "macro_sql": "{% macro truncate_relation(relation) -%}\n {{ return(adapter.dispatch('truncate_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__truncate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.280139, "supported_languages": null}, "macro.dbt.default__truncate_relation": {"name": "default__truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__truncate_relation", "macro_sql": "{% macro default__truncate_relation(relation) -%}\n {% call statement('truncate_relation') -%}\n truncate table {{ relation.render() }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.28021, "supported_languages": null}, "macro.dbt.get_or_create_relation": {"name": "get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.get_or_create_relation", "macro_sql": "{% macro get_or_create_relation(database, schema, identifier, type) -%}\n {{ return(adapter.dispatch('get_or_create_relation', 'dbt')(database, schema, identifier, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_or_create_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}, {"name": "schema", "type": null, "description": ""}, {"name": "identifier", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.2803042, "supported_languages": null}, "macro.dbt.default__get_or_create_relation": {"name": "default__get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__get_or_create_relation", "macro_sql": "{% macro default__get_or_create_relation(database, schema, identifier, type) %}\n {%- set target_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% if target_relation %}\n {% do return([true, target_relation]) %}\n {% endif %}\n\n {%- set new_relation = api.Relation.create(\n database=database,\n schema=schema,\n identifier=identifier,\n type=type\n ) -%}\n {% do return([false, new_relation]) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}, {"name": "schema", "type": null, "description": ""}, {"name": "identifier", "type": null, "description": ""}, {"name": "type", "type": null, "description": ""}], "created_at": 1784225035.280512, "supported_languages": null}, "macro.dbt.load_cached_relation": {"name": "load_cached_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_cached_relation", "macro_sql": "{% macro load_cached_relation(relation) %}\n {% do return(adapter.get_relation(\n database=relation.database,\n schema=relation.schema,\n identifier=relation.identifier\n )) -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2806022, "supported_languages": null}, "macro.dbt.load_relation": {"name": "load_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_relation", "macro_sql": "{% macro load_relation(relation) %}\n {{ return(load_cached_relation(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.280659, "supported_languages": null}, "macro.dbt.is_core_v2": {"name": "is_core_v2", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/runtime.sql", "original_file_path": "macros/adapters/runtime.sql", "unique_id": "macro.dbt.is_core_v2", "macro_sql": "{% macro is_core_v2() -%}\n {%- set major_version = (dbt_version.split('.') | first) | int -%}\n {{ return(major_version == 2) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.280787, "supported_languages": null}, "macro.dbt.collect_freshness": {"name": "collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness', 'dbt')(source, loaded_at_field, filter))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source", "type": null, "description": ""}, {"name": "loaded_at_field", "type": null, "description": ""}, {"name": "filter", "type": null, "description": ""}], "created_at": 1784225035.2810292, "supported_languages": null}, "macro.dbt.default__collect_freshness": {"name": "default__collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n select\n max({{ loaded_at_field }}) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endcall %}\n {{ return(load_result('collect_freshness')) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source", "type": null, "description": ""}, {"name": "loaded_at_field", "type": null, "description": ""}, {"name": "filter", "type": null, "description": ""}], "created_at": 1784225035.281193, "supported_languages": null}, "macro.dbt.collect_freshness_custom_sql": {"name": "collect_freshness_custom_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.collect_freshness_custom_sql", "macro_sql": "{% macro collect_freshness_custom_sql(source, loaded_at_query) %}\n {{ return(adapter.dispatch('collect_freshness_custom_sql', 'dbt')(source, loaded_at_query))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__collect_freshness_custom_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source", "type": null, "description": ""}, {"name": "loaded_at_query", "type": null, "description": ""}], "created_at": 1784225035.281279, "supported_languages": null}, "macro.dbt.default__collect_freshness_custom_sql": {"name": "default__collect_freshness_custom_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.default__collect_freshness_custom_sql", "macro_sql": "{% macro default__collect_freshness_custom_sql(source, loaded_at_query) %}\n {% call statement('collect_freshness_custom_sql', fetch_result=True, auto_begin=False) -%}\n with source_query as (\n {{ loaded_at_query }}\n )\n select\n (select * from source_query) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n {% endcall %}\n {{ return(load_result('collect_freshness_custom_sql')) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "source", "type": null, "description": ""}, {"name": "loaded_at_query", "type": null, "description": ""}], "created_at": 1784225035.2814121, "supported_languages": null}, "macro.dbt.validate_sql": {"name": "validate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/validate_sql.sql", "original_file_path": "macros/adapters/validate_sql.sql", "unique_id": "macro.dbt.validate_sql", "macro_sql": "{% macro validate_sql(sql) -%}\n {{ return(adapter.dispatch('validate_sql', 'dbt')(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__validate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.2815292, "supported_languages": null}, "macro.dbt.default__validate_sql": {"name": "default__validate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/validate_sql.sql", "original_file_path": "macros/adapters/validate_sql.sql", "unique_id": "macro.dbt.default__validate_sql", "macro_sql": "{% macro default__validate_sql(sql) -%}\n {% call statement('validate_sql') -%}\n explain {{ sql }}\n {% endcall %}\n {{ return(load_result('validate_sql')) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}], "created_at": 1784225035.281624, "supported_languages": null}, "macro.dbt.copy_grants": {"name": "copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.copy_grants", "macro_sql": "{% macro copy_grants() %}\n {{ return(adapter.dispatch('copy_grants', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2820969, "supported_languages": null}, "macro.dbt.default__copy_grants": {"name": "default__copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__copy_grants", "macro_sql": "{% macro default__copy_grants() %}\n {{ return(True) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.282142, "supported_languages": null}, "macro.dbt.support_multiple_grantees_per_dcl_statement": {"name": "support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.support_multiple_grantees_per_dcl_statement", "macro_sql": "{% macro support_multiple_grantees_per_dcl_statement() %}\n {{ return(adapter.dispatch('support_multiple_grantees_per_dcl_statement', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2822049, "supported_languages": null}, "macro.dbt.default__support_multiple_grantees_per_dcl_statement": {"name": "default__support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__support_multiple_grantees_per_dcl_statement", "macro_sql": "\n\n{%- macro default__support_multiple_grantees_per_dcl_statement() -%}\n {{ return(True) }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.282249, "supported_languages": null}, "macro.dbt.should_revoke": {"name": "should_revoke", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.should_revoke", "macro_sql": "{% macro should_revoke(existing_relation, full_refresh_mode=True) %}\n\n {% if not existing_relation %}\n {#-- The table doesn't already exist, so no grants to copy over --#}\n {{ return(False) }}\n {% elif full_refresh_mode %}\n {#-- The object is being REPLACED -- whether grants are copied over depends on the value of user config --#}\n {{ return(copy_grants()) }}\n {% else %}\n {#-- The table is being merged/upserted/inserted -- grants will be carried over --#}\n {{ return(True) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "existing_relation", "type": null, "description": ""}, {"name": "full_refresh_mode", "type": null, "description": ""}], "created_at": 1784225035.282384, "supported_languages": null}, "macro.dbt.get_show_grant_sql": {"name": "get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_show_grant_sql", "macro_sql": "{% macro get_show_grant_sql(relation) %}\n {{ return(adapter.dispatch(\"get_show_grant_sql\", \"dbt\")(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_show_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.282457, "supported_languages": null}, "macro.dbt.default__get_show_grant_sql": {"name": "default__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_show_grant_sql", "macro_sql": "{% macro default__get_show_grant_sql(relation) %}\n show grants on {{ relation.render() }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.282503, "supported_languages": null}, "macro.dbt.get_grant_sql": {"name": "get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_grant_sql", "macro_sql": "{% macro get_grant_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_grant_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "privilege", "type": null, "description": ""}, {"name": "grantees", "type": null, "description": ""}], "created_at": 1784225035.2825952, "supported_languages": null}, "macro.dbt.default__get_grant_sql": {"name": "default__get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_grant_sql", "macro_sql": "\n\n{%- macro default__get_grant_sql(relation, privilege, grantees) -%}\n grant {{ privilege }} on {{ relation.render() }} to {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "privilege", "type": null, "description": ""}, {"name": "grantees", "type": null, "description": ""}], "created_at": 1784225035.282686, "supported_languages": null}, "macro.dbt.get_revoke_sql": {"name": "get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_revoke_sql", "macro_sql": "{% macro get_revoke_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_revoke_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_revoke_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "privilege", "type": null, "description": ""}, {"name": "grantees", "type": null, "description": ""}], "created_at": 1784225035.282781, "supported_languages": null}, "macro.dbt.default__get_revoke_sql": {"name": "default__get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_revoke_sql", "macro_sql": "\n\n{%- macro default__get_revoke_sql(relation, privilege, grantees) -%}\n {%- set quoted_grantees = [] -%}\n {%- for grantee in grantees -%}\n {%- do quoted_grantees.append(adapter.quote(grantee)) -%}\n {%- endfor -%}\n revoke {{ privilege }} on {{ relation.render() }} from {{ quoted_grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "privilege", "type": null, "description": ""}, {"name": "grantees", "type": null, "description": ""}], "created_at": 1784225035.282943, "supported_languages": null}, "macro.dbt.get_dcl_statement_list": {"name": "get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_dcl_statement_list", "macro_sql": "{% macro get_dcl_statement_list(relation, grant_config, get_dcl_macro) %}\n {{ return(adapter.dispatch('get_dcl_statement_list', 'dbt')(relation, grant_config, get_dcl_macro)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_dcl_statement_list"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "grant_config", "type": null, "description": ""}, {"name": "get_dcl_macro", "type": null, "description": ""}], "created_at": 1784225035.283037, "supported_languages": null}, "macro.dbt.default__get_dcl_statement_list": {"name": "default__get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_dcl_statement_list", "macro_sql": "\n\n{%- macro default__get_dcl_statement_list(relation, grant_config, get_dcl_macro) -%}\n {#\n -- Unpack grant_config into specific privileges and the set of users who need them granted/revoked.\n -- Depending on whether this database supports multiple grantees per statement, pass in the list of\n -- all grantees per privilege, or (if not) template one statement per privilege-grantee pair.\n -- `get_dcl_macro` will be either `get_grant_sql` or `get_revoke_sql`\n #}\n {%- set dcl_statements = [] -%}\n {%- for privilege, grantees in grant_config.items() %}\n {%- if support_multiple_grantees_per_dcl_statement() and grantees -%}\n {%- set dcl = get_dcl_macro(relation, privilege, grantees) -%}\n {%- do dcl_statements.append(dcl) -%}\n {%- else -%}\n {%- for grantee in grantees -%}\n {% set dcl = get_dcl_macro(relation, privilege, [grantee]) %}\n {%- do dcl_statements.append(dcl) -%}\n {% endfor -%}\n {%- endif -%}\n {%- endfor -%}\n {{ return(dcl_statements) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "grant_config", "type": null, "description": ""}, {"name": "get_dcl_macro", "type": null, "description": ""}], "created_at": 1784225035.2833128, "supported_languages": null}, "macro.dbt.call_dcl_statements": {"name": "call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.call_dcl_statements", "macro_sql": "{% macro call_dcl_statements(dcl_statement_list) %}\n {{ return(adapter.dispatch(\"call_dcl_statements\", \"dbt\")(dcl_statement_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "dcl_statement_list", "type": null, "description": ""}], "created_at": 1784225035.2833889, "supported_languages": null}, "macro.dbt.default__call_dcl_statements": {"name": "default__call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__call_dcl_statements", "macro_sql": "{% macro default__call_dcl_statements(dcl_statement_list) %}\n {#\n -- By default, supply all grant + revoke statements in a single semicolon-separated block,\n -- so that they're all processed together.\n\n -- Some databases do not support this. Those adapters will need to override this macro\n -- to run each statement individually.\n #}\n {% call statement('grants') %}\n {% for dcl_statement in dcl_statement_list %}\n {{ dcl_statement }};\n {% endfor %}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "dcl_statement_list", "type": null, "description": ""}], "created_at": 1784225035.28349, "supported_languages": null}, "macro.dbt.apply_grants": {"name": "apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.apply_grants", "macro_sql": "{% macro apply_grants(relation, grant_config, should_revoke) %}\n {{ return(adapter.dispatch(\"apply_grants\", \"dbt\")(relation, grant_config, should_revoke)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "grant_config", "type": null, "description": ""}, {"name": "should_revoke", "type": null, "description": ""}], "created_at": 1784225035.2836301, "supported_languages": null}, "macro.dbt.default__apply_grants": {"name": "default__apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__apply_grants", "macro_sql": "{% macro default__apply_grants(relation, grant_config, should_revoke=True) %}\n {#-- If grant_config is {} or None, this is a no-op --#}\n {% if grant_config %}\n {% if should_revoke %}\n {#-- We think previous grants may have carried over --#}\n {#-- Show current grants and calculate diffs --#}\n {% set current_grants_table = run_query(get_show_grant_sql(relation)) %}\n {% set current_grants_dict = adapter.standardize_grants_dict(current_grants_table) %}\n {% set needs_granting = diff_of_two_dicts(grant_config, current_grants_dict) %}\n {% set needs_revoking = diff_of_two_dicts(current_grants_dict, grant_config) %}\n {% if not (needs_granting or needs_revoking) %}\n {{ log('On ' ~ relation.render() ~': All grants are in place, no revocation or granting needed.')}}\n {% endif %}\n {% else %}\n {#-- We don't think there's any chance of previous grants having carried over. --#}\n {#-- Jump straight to granting what the user has configured. --#}\n {% set needs_revoking = {} %}\n {% set needs_granting = grant_config %}\n {% endif %}\n {% if needs_granting or needs_revoking %}\n {% set revoke_statement_list = get_dcl_statement_list(relation, needs_revoking, get_revoke_sql) %}\n {% set grant_statement_list = get_dcl_statement_list(relation, needs_granting, get_grant_sql) %}\n {% set dcl_statement_list = revoke_statement_list + grant_statement_list %}\n {% if dcl_statement_list %}\n {{ call_dcl_statements(dcl_statement_list) }}\n {% endif %}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.get_show_grant_sql", "macro.dbt.get_dcl_statement_list", "macro.dbt.call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "grant_config", "type": null, "description": ""}, {"name": "should_revoke", "type": null, "description": ""}], "created_at": 1784225035.284075, "supported_languages": null}, "macro.dbt.get_show_sql": {"name": "get_show_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.get_show_sql", "macro_sql": "{% macro get_show_sql(compiled_code, sql_header, limit) -%}\n {%- if sql_header is not none -%}\n {{ sql_header }}\n {%- endif %}\n {{ get_limit_subquery_sql(compiled_code, limit) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_limit_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "compiled_code", "type": null, "description": ""}, {"name": "sql_header", "type": null, "description": ""}, {"name": "limit", "type": null, "description": ""}], "created_at": 1784225035.284245, "supported_languages": null}, "macro.dbt.get_limit_subquery_sql": {"name": "get_limit_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.get_limit_subquery_sql", "macro_sql": "\n{%- macro get_limit_subquery_sql(sql, limit) -%}\n {{ adapter.dispatch('get_limit_sql', 'dbt')(sql, limit) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_limit_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}, {"name": "limit", "type": null, "description": ""}], "created_at": 1784225035.284317, "supported_languages": null}, "macro.dbt.default__get_limit_sql": {"name": "default__get_limit_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.default__get_limit_sql", "macro_sql": "{% macro default__get_limit_sql(sql, limit) %}\n {{ sql }}\n {% if limit is not none %}\n limit {{ limit }}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "sql", "type": null, "description": ""}, {"name": "limit", "type": null, "description": ""}], "created_at": 1784225035.2843919, "supported_languages": null}, "macro.dbt.alter_column_comment": {"name": "alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_column_comment", "macro_sql": "{% macro alter_column_comment(relation, column_dict) -%}\n {{ return(adapter.dispatch('alter_column_comment', 'dbt')(relation, column_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_dict", "type": null, "description": ""}], "created_at": 1784225035.284659, "supported_languages": null}, "macro.dbt.default__alter_column_comment": {"name": "default__alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_column_comment", "macro_sql": "{% macro default__alter_column_comment(relation, column_dict) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_column_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_dict", "type": null, "description": ""}], "created_at": 1784225035.284723, "supported_languages": null}, "macro.dbt.alter_relation_comment": {"name": "alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_relation_comment", "macro_sql": "{% macro alter_relation_comment(relation, relation_comment) -%}\n {{ return(adapter.dispatch('alter_relation_comment', 'dbt')(relation, relation_comment)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_relation_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "relation_comment", "type": null, "description": ""}], "created_at": 1784225035.2848, "supported_languages": null}, "macro.dbt.default__alter_relation_comment": {"name": "default__alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_relation_comment", "macro_sql": "{% macro default__alter_relation_comment(relation, relation_comment) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_relation_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "relation_comment", "type": null, "description": ""}], "created_at": 1784225035.284864, "supported_languages": null}, "macro.dbt.persist_docs": {"name": "persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.persist_docs", "macro_sql": "{% macro persist_docs(relation, model, for_relation=true, for_columns=true) -%}\n {{ return(adapter.dispatch('persist_docs', 'dbt')(relation, model, for_relation, for_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "model", "type": null, "description": ""}, {"name": "for_relation", "type": null, "description": ""}, {"name": "for_columns", "type": null, "description": ""}], "created_at": 1784225035.284965, "supported_languages": null}, "macro.dbt.validate_doc_columns": {"name": "validate_doc_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.validate_doc_columns", "macro_sql": "{% macro validate_doc_columns(relation, column_dict, existing_column_names) %}\n {% set existing_lower = existing_column_names | map(\"lower\") | list %}\n {% set missing = [] %}\n {% set filtered = {} %}\n {% for col_name in column_dict %}\n {% set is_quoted = column_dict[col_name]['quote'] %}\n {% if is_quoted %}\n {% set present = col_name in existing_column_names %}\n {% else %}\n {% set present = col_name | lower in existing_lower %}\n {% endif %}\n {% if present %}\n {% do filtered.update({col_name: column_dict[col_name]}) %}\n {% else %}\n {% do missing.append(col_name) %}\n {% endif %}\n {% endfor %}\n {% if missing | length > 0 %}\n {{ exceptions.warn(\"In relation \" ~ relation.render() ~ \": The following columns are specified in the schema but are not present in the database: \" ~ missing | join(\", \")) }}\n {% endif %}\n {{ return(filtered) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_dict", "type": null, "description": ""}, {"name": "existing_column_names", "type": null, "description": ""}], "created_at": 1784225035.285355, "supported_languages": null}, "macro.dbt.default__persist_docs": {"name": "default__persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__persist_docs", "macro_sql": "{% macro default__persist_docs(relation, model, for_relation, for_columns) -%}\n {% if for_relation and config.persist_relation_docs() and model.description %}\n {% do run_query(alter_relation_comment(relation, model.description)) %}\n {% endif %}\n\n {% if for_columns and config.persist_column_docs() and model.columns %}\n {% set existing_columns = adapter.get_columns_in_relation(relation) | map(attribute=\"name\") | list %}\n {% set filtered_columns = validate_doc_columns(relation, model.columns, existing_columns) %}\n {% set alter_comment_sql = alter_column_comment(relation, filtered_columns) %}\n {% if alter_comment_sql and alter_comment_sql | trim | length > 0 %}\n {% do run_query(alter_comment_sql) %}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.alter_relation_comment", "macro.dbt.validate_doc_columns", "macro.dbt.alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "model", "type": null, "description": ""}, {"name": "for_relation", "type": null, "description": ""}, {"name": "for_columns", "type": null, "description": ""}], "created_at": 1784225035.2856882, "supported_languages": null}, "macro.dbt.get_catalog_relations": {"name": "get_catalog_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog_relations", "macro_sql": "{% macro get_catalog_relations(information_schema, relations) -%}\n {{ return(adapter.dispatch('get_catalog_relations', 'dbt')(information_schema, relations)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "relations", "type": null, "description": ""}], "created_at": 1784225035.286056, "supported_languages": null}, "macro.dbt.default__get_catalog_relations": {"name": "default__get_catalog_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog_relations", "macro_sql": "{% macro default__get_catalog_relations(information_schema, relations) -%}\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog_relations not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "relations", "type": null, "description": ""}], "created_at": 1784225035.286159, "supported_languages": null}, "macro.dbt.get_catalog": {"name": "get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog", "macro_sql": "{% macro get_catalog(information_schema, schemas) -%}\n {{ return(adapter.dispatch('get_catalog', 'dbt')(information_schema, schemas)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schemas", "type": null, "description": ""}], "created_at": 1784225035.2862358, "supported_languages": null}, "macro.dbt.default__get_catalog": {"name": "default__get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog", "macro_sql": "{% macro default__get_catalog(information_schema, schemas) -%}\n\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schemas", "type": null, "description": ""}], "created_at": 1784225035.2863371, "supported_languages": null}, "macro.dbt.information_schema_name": {"name": "information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.information_schema_name", "macro_sql": "{% macro information_schema_name(database) %}\n {{ return(adapter.dispatch('information_schema_name', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__information_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.2864058, "supported_languages": null}, "macro.dbt.default__information_schema_name": {"name": "default__information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__information_schema_name", "macro_sql": "{% macro default__information_schema_name(database) -%}\n {%- if database -%}\n {{ database }}.INFORMATION_SCHEMA\n {%- else -%}\n INFORMATION_SCHEMA\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.28647, "supported_languages": null}, "macro.dbt.list_schemas": {"name": "list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_schemas", "macro_sql": "{% macro list_schemas(database) -%}\n {{ return(adapter.dispatch('list_schemas', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.286538, "supported_languages": null}, "macro.dbt.default__list_schemas": {"name": "default__list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_schemas", "macro_sql": "{% macro default__list_schemas(database) -%}\n {% set sql %}\n select distinct schema_name\n from {{ information_schema_name(database) }}.SCHEMATA\n where catalog_name ilike '{{ database }}'\n {% endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.information_schema_name", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "database", "type": null, "description": ""}], "created_at": 1784225035.286628, "supported_languages": null}, "macro.dbt.check_schema_exists": {"name": "check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.check_schema_exists", "macro_sql": "{% macro check_schema_exists(information_schema, schema) -%}\n {{ return(adapter.dispatch('check_schema_exists', 'dbt')(information_schema, schema)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__check_schema_exists"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schema", "type": null, "description": ""}], "created_at": 1784225035.286707, "supported_languages": null}, "macro.dbt.default__check_schema_exists": {"name": "default__check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__check_schema_exists", "macro_sql": "{% macro default__check_schema_exists(information_schema, schema) -%}\n {% set sql -%}\n select count(*)\n from {{ information_schema.replace(information_schema_view='SCHEMATA') }}\n where catalog_name='{{ information_schema.database }}'\n and schema_name='{{ schema }}'\n {%- endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.replace", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "schema", "type": null, "description": ""}], "created_at": 1784225035.28688, "supported_languages": null}, "macro.dbt.list_relations_without_caching": {"name": "list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_relations_without_caching", "macro_sql": "{% macro list_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_relations_without_caching"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_relation", "type": null, "description": ""}], "created_at": 1784225035.286956, "supported_languages": null}, "macro.dbt.default__list_relations_without_caching": {"name": "default__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_relations_without_caching", "macro_sql": "{% macro default__list_relations_without_caching(schema_relation) %}\n {{ exceptions.raise_not_implemented(\n 'list_relations_without_caching macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_relation", "type": null, "description": ""}], "created_at": 1784225035.287022, "supported_languages": null}, "macro.dbt.list_function_relations_without_caching": {"name": "list_function_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_function_relations_without_caching", "macro_sql": "{% macro list_function_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_function_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__list_function_relations_without_caching"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_relation", "type": null, "description": ""}], "created_at": 1784225035.2870898, "supported_languages": null}, "macro.dbt.default__list_function_relations_without_caching": {"name": "default__list_function_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_function_relations_without_caching", "macro_sql": "{% macro default__list_function_relations_without_caching(schema_relation) %}\n {{ exceptions.raise_not_implemented(\n 'list_function_relations_without_caching macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "schema_relation", "type": null, "description": ""}], "created_at": 1784225035.287151, "supported_languages": null}, "macro.dbt.get_catalog_for_single_relation": {"name": "get_catalog_for_single_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog_for_single_relation", "macro_sql": "{% macro get_catalog_for_single_relation(relation) %}\n {{ return(adapter.dispatch('get_catalog_for_single_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_catalog_for_single_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.287221, "supported_languages": null}, "macro.dbt.default__get_catalog_for_single_relation": {"name": "default__get_catalog_for_single_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog_for_single_relation", "macro_sql": "{% macro default__get_catalog_for_single_relation(relation) %}\n {{ exceptions.raise_not_implemented(\n 'get_catalog_for_single_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2872808, "supported_languages": null}, "macro.dbt.get_relations": {"name": "get_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_relations", "macro_sql": "{% macro get_relations() %}\n {{ return(adapter.dispatch('get_relations', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.287342, "supported_languages": null}, "macro.dbt.default__get_relations": {"name": "default__get_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_relations", "macro_sql": "{% macro default__get_relations() %}\n {{ exceptions.raise_not_implemented(\n 'get_relations macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2873979, "supported_languages": null}, "macro.dbt.get_relation_last_modified": {"name": "get_relation_last_modified", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_relation_last_modified", "macro_sql": "{% macro get_relation_last_modified(information_schema, relations) %}\n {{ return(adapter.dispatch('get_relation_last_modified', 'dbt')(information_schema, relations)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_relation_last_modified"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "relations", "type": null, "description": ""}], "created_at": 1784225035.287474, "supported_languages": null}, "macro.dbt.default__get_relation_last_modified": {"name": "default__get_relation_last_modified", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_relation_last_modified", "macro_sql": "{% macro default__get_relation_last_modified(information_schema, relations) %}\n {{ exceptions.raise_not_implemented(\n 'get_relation_last_modified macro not implemented for adapter ' + adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "information_schema", "type": null, "description": ""}, {"name": "relations", "type": null, "description": ""}], "created_at": 1784225035.287539, "supported_languages": null}, "macro.dbt.get_columns_in_relation": {"name": "get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_relation", "macro_sql": "{% macro get_columns_in_relation(relation) -%}\n {{ return(adapter.dispatch('get_columns_in_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.2880151, "supported_languages": null}, "macro.dbt.default__get_columns_in_relation": {"name": "default__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_relation", "macro_sql": "{% macro default__get_columns_in_relation(relation) -%}\n {{ exceptions.raise_not_implemented(\n 'get_columns_in_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}], "created_at": 1784225035.288077, "supported_languages": null}, "macro.dbt.sql_convert_columns_in_relation": {"name": "sql_convert_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.sql_convert_columns_in_relation", "macro_sql": "{% macro sql_convert_columns_in_relation(table) -%}\n {% set columns = [] %}\n {% for row in table %}\n {% do columns.append(api.Column(*row)) %}\n {% endfor %}\n {{ return(columns) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "table", "type": null, "description": ""}], "created_at": 1784225035.288196, "supported_languages": null}, "macro.dbt.get_list_of_column_names": {"name": "get_list_of_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_list_of_column_names", "macro_sql": "\n\n{%- macro get_list_of_column_names(columns) -%}\n {% set col_names = [] %}\n {% for col in columns %}\n {% do col_names.append(col.name) %}\n {% endfor %}\n {{ return(col_names) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.2883031, "supported_languages": null}, "macro.dbt.get_empty_subquery_sql": {"name": "get_empty_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_empty_subquery_sql", "macro_sql": "{% macro get_empty_subquery_sql(select_sql, select_sql_header=none) -%}\n {{ return(adapter.dispatch('get_empty_subquery_sql', 'dbt')(select_sql, select_sql_header)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "select_sql", "type": null, "description": ""}, {"name": "select_sql_header", "type": null, "description": ""}], "created_at": 1784225035.288387, "supported_languages": null}, "macro.dbt.default__get_empty_subquery_sql": {"name": "default__get_empty_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_empty_subquery_sql", "macro_sql": "{% macro default__get_empty_subquery_sql(select_sql, select_sql_header=none) %}\n {%- if select_sql_header is not none -%}\n {{ select_sql_header }}\n {%- endif -%}\n select * from (\n {{ select_sql }}\n ) as __dbt_sbq\n where false\n limit 0\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "select_sql", "type": null, "description": ""}, {"name": "select_sql_header", "type": null, "description": ""}], "created_at": 1784225035.288468, "supported_languages": null}, "macro.dbt.get_empty_schema_sql": {"name": "get_empty_schema_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_empty_schema_sql", "macro_sql": "{% macro get_empty_schema_sql(columns) -%}\n {{ return(adapter.dispatch('get_empty_schema_sql', 'dbt')(columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_empty_schema_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.2885382, "supported_languages": null}, "macro.dbt.default__get_empty_schema_sql": {"name": "default__get_empty_schema_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_empty_schema_sql", "macro_sql": "{% macro default__get_empty_schema_sql(columns) %}\n {%- set col_err = [] -%}\n {%- set col_naked_numeric = [] -%}\n select\n {% for i in columns %}\n {%- set col = columns[i] -%}\n {%- if col['data_type'] is not defined -%}\n {%- do col_err.append(col['name']) -%}\n {#-- If this column's type is just 'numeric' then it is missing precision/scale, raise a warning --#}\n {%- elif col['data_type'].strip().lower() in ('numeric', 'decimal', 'number') -%}\n {%- do col_naked_numeric.append(col['name']) -%}\n {%- endif -%}\n {% set col_name = adapter.quote(col['name']) if col.get('quote') else col['name'] %}\n {{ cast('null', col['data_type']) }} as {{ col_name }}{{ \", \" if not loop.last }}\n {%- endfor -%}\n {%- if (col_err | length) > 0 -%}\n {{ exceptions.column_type_missing(column_names=col_err) }}\n {%- elif (col_naked_numeric | length) > 0 -%}\n {{ exceptions.warn(\"Detected columns with numeric type and unspecified precision/scale, this can lead to unintended rounding: \" ~ col_naked_numeric ~ \"`\") }}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "columns", "type": null, "description": ""}], "created_at": 1784225035.2889779, "supported_languages": null}, "macro.dbt.get_column_schema_from_query": {"name": "get_column_schema_from_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_column_schema_from_query", "macro_sql": "{% macro get_column_schema_from_query(select_sql, select_sql_header=none) -%}\n {% set columns = [] %}\n {# -- Using an 'empty subquery' here to get the same schema as the given select_sql statement, without necessitating a data scan.#}\n {% set sql = get_empty_subquery_sql(select_sql, select_sql_header) %}\n {% set column_schema = adapter.get_column_schema_from_query(sql) %}\n {{ return(column_schema) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "select_sql", "type": null, "description": ""}, {"name": "select_sql_header", "type": null, "description": ""}], "created_at": 1784225035.2891579, "supported_languages": null}, "macro.dbt.get_columns_in_query": {"name": "get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_query", "macro_sql": "{% macro get_columns_in_query(select_sql) -%}\n {{ return(adapter.dispatch('get_columns_in_query', 'dbt')(select_sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "select_sql", "type": null, "description": ""}], "created_at": 1784225035.2892318, "supported_languages": null}, "macro.dbt.default__get_columns_in_query": {"name": "default__get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_query", "macro_sql": "{% macro default__get_columns_in_query(select_sql) %}\n {% call statement('get_columns_in_query', fetch_result=True, auto_begin=False) -%}\n {{ get_empty_subquery_sql(select_sql) }}\n {% endcall %}\n {{ return(load_result('get_columns_in_query').table.columns | map(attribute='name') | list) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "select_sql", "type": null, "description": ""}], "created_at": 1784225035.289361, "supported_languages": null}, "macro.dbt.alter_column_type": {"name": "alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_column_type", "macro_sql": "{% macro alter_column_type(relation, column_name, new_column_type) -%}\n {{ return(adapter.dispatch('alter_column_type', 'dbt')(relation, column_name, new_column_type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}, {"name": "new_column_type", "type": null, "description": ""}], "created_at": 1784225035.289449, "supported_languages": null}, "macro.dbt.default__alter_column_type": {"name": "default__alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_column_type", "macro_sql": "{% macro default__alter_column_type(relation, column_name, new_column_type) -%}\n {#\n 1. Create a new column (w/ temp name and correct type)\n 2. Copy data over to it\n 3. Drop the existing column (cascade!)\n 4. Rename the new column to existing column\n #}\n {%- set tmp_column = column_name + \"__dbt_alter\" -%}\n\n {% call statement('alter_column_type') %}\n alter table {{ relation.render() }} add column {{ adapter.quote(tmp_column) }} {{ new_column_type }};\n update {{ relation.render() }} set {{ adapter.quote(tmp_column) }} = {{ adapter.quote(column_name) }};\n alter table {{ relation.render() }} drop column {{ adapter.quote(column_name) }} cascade;\n alter table {{ relation.render() }} rename column {{ adapter.quote(tmp_column) }} to {{ adapter.quote(column_name) }}\n {% endcall %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "column_name", "type": null, "description": ""}, {"name": "new_column_type", "type": null, "description": ""}], "created_at": 1784225035.289737, "supported_languages": null}, "macro.dbt.alter_relation_add_remove_columns": {"name": "alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_relation_add_remove_columns", "macro_sql": "{% macro alter_relation_add_remove_columns(relation, add_columns = none, remove_columns = none) -%}\n {{ return(adapter.dispatch('alter_relation_add_remove_columns', 'dbt')(relation, add_columns, remove_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_relation_add_remove_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "add_columns", "type": null, "description": ""}, {"name": "remove_columns", "type": null, "description": ""}], "created_at": 1784225035.2898428, "supported_languages": null}, "macro.dbt.default__alter_relation_add_remove_columns": {"name": "default__alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_relation_add_remove_columns", "macro_sql": "{% macro default__alter_relation_add_remove_columns(relation, add_columns, remove_columns) %}\n\n {% if add_columns is none %}\n {% set add_columns = [] %}\n {% endif %}\n {% if remove_columns is none %}\n {% set remove_columns = [] %}\n {% endif %}\n\n {% set sql -%}\n\n alter {{ relation.type }} {{ relation.render() }}\n\n {% for column in add_columns %}\n add column {{ column.quoted }} {{ column.expanded_data_type }}{{ ',' if not loop.last }}\n {% endfor %}{{ ',' if add_columns and remove_columns }}\n\n {% for column in remove_columns %}\n drop column {{ column.quoted }}{{ ',' if not loop.last }}\n {% endfor %}\n\n {%- endset -%}\n\n {% do run_query(sql) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "relation", "type": null, "description": ""}, {"name": "add_columns", "type": null, "description": ""}, {"name": "remove_columns", "type": null, "description": ""}], "created_at": 1784225035.2901492, "supported_languages": null}, "macro.dbt.get_fixture_sql": {"name": "get_fixture_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.get_fixture_sql", "macro_sql": "{% macro get_fixture_sql(rows, column_name_to_data_types) %}\n-- Fixture for {{ model.name }}\n{% set default_row = {} %}\n\n{%- if not column_name_to_data_types -%}\n{#-- Use defer_relation IFF it is available in the manifest and 'this' is missing from the database --#}\n{%- set this_or_defer_relation = defer_relation if (defer_relation and not load_relation(this)) else this -%}\n{%- set columns_in_relation = adapter.get_columns_in_relation(this_or_defer_relation) -%}\n\n{%- set column_name_to_data_types = {} -%}\n{%- set column_name_to_quoted = {} -%}\n{%- for column in columns_in_relation -%}\n\n{#-- This needs to be a case-insensitive comparison --#}\n{%- do column_name_to_data_types.update({column.name|lower: column.data_type}) -%}\n{%- do column_name_to_quoted.update({column.name|lower: column.quoted}) -%}\n{%- endfor -%}\n{%- endif -%}\n\n{%- if not column_name_to_data_types -%}\n {{ exceptions.raise_compiler_error(\"Not able to get columns for unit test '\" ~ model.name ~ \"' from relation \" ~ this ~ \" because the relation doesn't exist\") }}\n{%- endif -%}\n\n{%- for column_name, column_type in column_name_to_data_types.items() -%}\n {%- do default_row.update({column_name: (safe_cast(\"null\", column_type) | trim )}) -%}\n{%- endfor -%}\n\n{{ validate_fixture_rows(rows, row_number) }}\n\n{%- for row in rows -%}\n{%- set formatted_row = format_row(row, column_name_to_data_types) -%}\n{%- set default_row_copy = default_row.copy() -%}\n{%- do default_row_copy.update(formatted_row) -%}\nselect\n{%- for column_name, column_value in default_row_copy.items() %} {{ column_value }} as {{ column_name_to_quoted[column_name] }}{% if not loop.last -%}, {%- endif %}\n{%- endfor %}\n{%- if not loop.last %}\nunion all\n{% endif %}\n{%- endfor -%}\n\n{%- if (rows | length) == 0 -%}\n select\n {%- for column_name, column_value in default_row.items() %} {{ column_value }} as {{ column_name_to_quoted[column_name] }}{% if not loop.last -%},{%- endif %}\n {%- endfor %}\n limit 0\n{%- endif -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_relation", "macro.dbt.safe_cast", "macro.dbt.validate_fixture_rows", "macro.dbt.format_row"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "rows", "type": null, "description": ""}, {"name": "column_name_to_data_types", "type": null, "description": ""}], "created_at": 1784225035.2912042, "supported_languages": null}, "macro.dbt.get_expected_sql": {"name": "get_expected_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.get_expected_sql", "macro_sql": "{% macro get_expected_sql(rows, column_name_to_data_types, column_name_to_quoted) %}\n\n{%- if (rows | length) == 0 -%}\n select * from dbt_internal_unit_test_actual\n limit 0\n{%- else -%}\n{%- for row in rows -%}\n{%- set formatted_row = format_row(row, column_name_to_data_types) -%}\nselect\n{%- for column_name, column_value in formatted_row.items() %} {{ column_value }} as {{ column_name_to_quoted[column_name] }}{% if not loop.last -%}, {%- endif %}\n{%- endfor %}\n{%- if not loop.last %}\nunion all\n{% endif %}\n{%- endfor -%}\n{%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.format_row"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "rows", "type": null, "description": ""}, {"name": "column_name_to_data_types", "type": null, "description": ""}, {"name": "column_name_to_quoted", "type": null, "description": ""}], "created_at": 1784225035.291439, "supported_languages": null}, "macro.dbt.format_row": {"name": "format_row", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.format_row", "macro_sql": "\n\n{%- macro format_row(row, column_name_to_data_types) -%}\n {#-- generate case-insensitive formatted row --#}\n {% set formatted_row = {} %}\n {%- for column_name, column_value in row.items() -%}\n {% set column_name = column_name|lower %}\n\n {%- if column_name not in column_name_to_data_types %}\n {#-- if user-provided row contains column name that relation does not contain, raise an error --#}\n {% set fixture_name = \"expected output\" if model.resource_type == 'unit_test' else (\"'\" ~ model.name ~ \"'\") %}\n {{ exceptions.raise_compiler_error(\n \"Invalid column name: '\" ~ column_name ~ \"' in unit test fixture for \" ~ fixture_name ~ \".\"\n \"\\nAccepted columns for \" ~ fixture_name ~ \" are: \" ~ (column_name_to_data_types.keys()|list)\n ) }}\n {%- endif -%}\n\n {%- set column_type = column_name_to_data_types[column_name] %}\n\n {#-- For string fixture values, strip varchar length to prevent silent truncation (GH-11974) --#}\n {%- if column_value is string and 'varying' in column_type -%}\n {%- set column_type = column_type.split('(')[0] -%}\n {%- endif -%}\n\n {#-- sanitize column_value: wrap yaml strings in quotes, apply cast --#}\n {%- set column_value_clean = column_value -%}\n {%- if column_value is string -%}\n {%- set column_value_clean = dbt.string_literal(dbt.escape_single_quotes(column_value)) -%}\n {%- elif column_value is none -%}\n {%- set column_value_clean = 'null' -%}\n {%- endif -%}\n\n {%- set row_update = {column_name: safe_cast(column_value_clean, column_type) } -%}\n {%- do formatted_row.update(row_update) -%}\n {%- endfor -%}\n {{ return(formatted_row) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.string_literal", "macro.dbt.escape_single_quotes", "macro.dbt.safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "row", "type": null, "description": ""}, {"name": "column_name_to_data_types", "type": null, "description": ""}], "created_at": 1784225035.2919302, "supported_languages": null}, "macro.dbt.validate_fixture_rows": {"name": "validate_fixture_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.validate_fixture_rows", "macro_sql": "{%- macro validate_fixture_rows(rows, row_number) -%}\n {{ return(adapter.dispatch('validate_fixture_rows', 'dbt')(rows, row_number)) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__validate_fixture_rows"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "rows", "type": null, "description": ""}, {"name": "row_number", "type": null, "description": ""}], "created_at": 1784225035.292015, "supported_languages": null}, "macro.dbt.default__validate_fixture_rows": {"name": "default__validate_fixture_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.default__validate_fixture_rows", "macro_sql": "{%- macro default__validate_fixture_rows(rows, row_number) -%}\n {# This is an abstract method for adapter overrides as needed #}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "rows", "type": null, "description": ""}, {"name": "row_number", "type": null, "description": ""}], "created_at": 1784225035.292057, "supported_languages": null}, "macro.dbt.resolve_model_name": {"name": "resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.resolve_model_name", "macro_sql": "{% macro resolve_model_name(input_model_name) %}\n {{ return(adapter.dispatch('resolve_model_name', 'dbt')(input_model_name)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "input_model_name", "type": null, "description": ""}], "created_at": 1784225035.292395, "supported_languages": null}, "macro.dbt.default__resolve_model_name": {"name": "default__resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.default__resolve_model_name", "macro_sql": "\n\n{%- macro default__resolve_model_name(input_model_name) -%}\n {{ input_model_name | string | replace('\"', '\\\"') }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "input_model_name", "type": null, "description": ""}], "created_at": 1784225035.292458, "supported_languages": null}, "macro.dbt.build_ref_function": {"name": "build_ref_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_ref_function", "macro_sql": "{% macro build_ref_function(model) %}\n\n {%- set ref_dict = {} -%}\n {%- for _ref in model.refs -%}\n {% set _ref_args = [_ref.get('package'), _ref['name']] if _ref.get('package') else [_ref['name'],] %}\n {%- set resolved = ref(*_ref_args, v=_ref.get('version')) -%}\n\n {#\n We want to get the string of the returned relation by calling .render() in order to skip sample/empty\n mode rendering logic. However, people override the default ref macro, and often return a string instead\n of a relation (like the ref macro does by default). Thus, to make sure we dont blow things up, we have\n to ensure the resolved relation has a .render() method.\n #}\n {%- if resolved.render is defined and resolved.render is callable -%}\n {%- set resolved = resolved.render() -%}\n {%- endif -%}\n\n {%- if _ref.get('version') -%}\n {% do _ref_args.extend([\"v\" ~ _ref['version']]) %}\n {%- endif -%}\n {%- do ref_dict.update({_ref_args | join('.'): resolve_model_name(resolved)}) -%}\n {%- endfor -%}\n\ndef ref(*args, **kwargs):\n refs = {{ ref_dict | tojson }}\n key = '.'.join(args)\n version = kwargs.get(\"v\") or kwargs.get(\"version\")\n if version:\n key += f\".v{version}\"\n dbt_load_df_function = kwargs.get(\"dbt_load_df_function\")\n return dbt_load_df_function(refs[key])\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}], "created_at": 1784225035.2928388, "supported_languages": null}, "macro.dbt.build_source_function": {"name": "build_source_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_source_function", "macro_sql": "{% macro build_source_function(model) %}\n\n {%- set source_dict = {} -%}\n {%- for _source in model.sources -%}\n {%- set resolved = source(*_source) -%}\n {%- do source_dict.update({_source | join('.'): resolve_model_name(resolved)}) -%}\n {%- endfor -%}\n\ndef source(*args, dbt_load_df_function):\n sources = {{ source_dict | tojson }}\n key = '.'.join(args)\n return dbt_load_df_function(sources[key])\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}], "created_at": 1784225035.2929978, "supported_languages": null}, "macro.dbt.build_config_dict": {"name": "build_config_dict", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_config_dict", "macro_sql": "{% macro build_config_dict(model) %}\n {%- set config_dict = {} -%}\n {% set config_dbt_used = zip(model.config.config_keys_used, model.config.config_keys_defaults) | list %}\n {%- for key, default in config_dbt_used -%}\n {# weird type testing with enum, would be much easier to write this logic in Python! #}\n {%- if key == \"language\" -%}\n {%- set value = \"python\" -%}\n {%- endif -%}\n {%- set value = model.config.get(key, default) -%}\n {%- do config_dict.update({key: value}) -%}\n {%- endfor -%}\n {# Handle dbt.config.meta_get() calls - use separate dict to avoid overwriting native configs #}\n {%- set meta_dict = {} -%}\n {%- if model.config.meta_keys_used -%}\n {% set meta_dbt_used = zip(model.config.meta_keys_used, model.config.meta_keys_defaults) | list %}\n {%- for key, default in meta_dbt_used -%}\n {%- if model.config.meta and key in model.config.meta -%}\n {%- set value = model.config.meta[key] -%}\n {%- else -%}\n {%- set value = default -%}\n {%- endif -%}\n {%- do meta_dict.update({key: value}) -%}\n {%- endfor -%}\n {%- endif -%}\nconfig_dict = {{ config_dict }}\nmeta_dict = {{ meta_dict }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}], "created_at": 1784225035.293438, "supported_languages": null}, "macro.dbt.py_script_postfix": {"name": "py_script_postfix", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_postfix", "macro_sql": "{% macro py_script_postfix(model) %}\n# This part is user provided model code\n# you will need to copy the next section to run the code\n# COMMAND ----------\n# this part is dbt logic for get ref work, do not modify\n\n{{ build_ref_function(model ) }}\n{{ build_source_function(model ) }}\n{{ build_config_dict(model) }}\n\nclass config:\n def __init__(self, *args, **kwargs):\n pass\n\n @staticmethod\n def get(key, default=None):\n return config_dict.get(key, default)\n\n @staticmethod\n def meta_get(key, default=None):\n return meta_dict.get(key, default)\n\nclass this:\n \"\"\"dbt.this() or dbt.this.identifier\"\"\"\n database = \"{{ this.database }}\"\n schema = \"{{ this.schema }}\"\n identifier = \"{{ this.identifier }}\"\n {% set this_relation_name = resolve_model_name(this) %}\n def __repr__(self):\n return '{{ this_relation_name }}'\n\n\nclass dbtObj:\n def __init__(self, load_df_function) -> None:\n self.source = lambda *args: source(*args, dbt_load_df_function=load_df_function)\n self.ref = lambda *args, **kwargs: ref(*args, **kwargs, dbt_load_df_function=load_df_function)\n self.config = config\n self.this = this()\n self.is_incremental = {{ is_incremental() }}\n\n# COMMAND ----------\n{{py_script_comment()}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.build_ref_function", "macro.dbt.build_source_function", "macro.dbt.build_config_dict", "macro.dbt.resolve_model_name", "macro.dbt.is_incremental", "macro.dbt.py_script_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [{"name": "model", "type": null, "description": ""}], "created_at": 1784225035.293633, "supported_languages": null}, "macro.dbt.py_script_comment": {"name": "py_script_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_comment", "macro_sql": "{%macro py_script_comment()%}\n{%endmacro%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2936661, "supported_languages": null}, "macro.dbt.test_unique": {"name": "test_unique", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_unique", "macro_sql": "{% test unique(model, column_name) %}\n {% set macro = adapter.dispatch('test_unique', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_unique"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2938628, "supported_languages": null}, "macro.dbt.test_not_null": {"name": "test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_not_null", "macro_sql": "{% test not_null(model, column_name) %}\n {% set macro = adapter.dispatch('test_not_null', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.293963, "supported_languages": null}, "macro.dbt.test_accepted_values": {"name": "test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_accepted_values", "macro_sql": "{% test accepted_values(model, column_name, values, quote=True) %}\n {% set macro = adapter.dispatch('test_accepted_values', 'dbt') %}\n {{ macro(model, column_name, values, quote) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.29408, "supported_languages": null}, "macro.dbt.test_relationships": {"name": "test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_relationships", "macro_sql": "{% test relationships(model, column_name, to, field) %}\n {% set macro = adapter.dispatch('test_relationships', 'dbt') %}\n {{ macro(model, column_name, to, field) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_relationships"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "config": {"meta": {}, "docs": {"show": true, "node_color": null}}, "patch_path": null, "arguments": [], "created_at": 1784225035.2943518, "supported_languages": null}}, "docs": {"doc.dbt.__overview__": {"name": "__overview__", "resource_type": "doc", "package_name": "dbt", "path": "overview.md", "original_file_path": "docs/overview.md", "unique_id": "doc.dbt.__overview__", "block_contents": "### Welcome!\n\nWelcome to the auto-generated documentation for your dbt project!\n\n### Navigation\n\nYou can use the `Project` and `Database` navigation tabs on the left side of the window to explore the models\nin your project.\n\n#### Project Tab\nThe `Project` tab mirrors the directory structure of your dbt project. In this tab, you can see all of the\nmodels defined in your dbt project, as well as models imported from dbt packages.\n\n#### Database Tab\nThe `Database` tab also exposes your models, but in a format that looks more like a database explorer. This view\nshows relations (tables and views) grouped into database schemas. Note that ephemeral models are _not_ shown\nin this interface, as they do not exist in the database.\n\n### Graph Exploration\nYou can click the blue icon on the bottom-right corner of the page to view the lineage graph of your models.\n\nOn model pages, you'll see the immediate parents and children of the model you're exploring. By clicking the `Expand`\nbutton at the top-right of this lineage pane, you'll be able to see all of the models that are used to build,\nor are built from, the model you're exploring.\n\nOnce expanded, you'll be able to use the `--select` and `--exclude` model selection syntax to filter the\nmodels in the graph. For more information on model selection, check out the [dbt docs](https://docs.getdbt.com/docs/model-selection-syntax).\n\nNote that you can also right-click on models to interactively filter and explore the graph.\n\n---\n\n### More information\n\n- [What is dbt](https://docs.getdbt.com/docs/introduction)?\n- Read the [dbt viewpoint](https://docs.getdbt.com/docs/viewpoint)\n- [Installation](https://docs.getdbt.com/docs/installation)\n- Join the [dbt Community](https://www.getdbt.com/community/) for questions and discussion"}}, "exposures": {}, "metrics": {}, "groups": {}, "selectors": {}, "disabled": {}, "parent_map": {"seed.school_compare.la_code_names": [], "seed.school_compare.gias_code_names": [], "seed.school_compare.school_type_codes": [], "model.school_compare.stg_ees_ks4_national": ["source.school_compare.raw.ees_ks4_national"], "model.school_compare.dim_location": ["model.school_compare.stg_gias_establishments"], "model.school_compare.dim_school": ["model.school_compare.int_ofsted_latest", "model.school_compare.stg_gias_establishments"], "model.school_compare.stg_gias_establishments": ["source.school_compare.raw.gias_establishments"], "model.school_compare.fact_performance": ["model.school_compare.fact_ks2_performance", "model.school_compare.fact_ks4_performance"], "model.school_compare.fact_ks2_performance": ["model.school_compare.int_ks2_with_lineage"], "model.school_compare.int_ks2_with_lineage": ["model.school_compare.int_school_lineage", "model.school_compare.stg_ees_ks2", "model.school_compare.stg_legacy_ks2"], "model.school_compare.fact_ks4_national_averages": ["model.school_compare.stg_ees_ks4_national"], "model.school_compare.fact_ks4_performance": ["model.school_compare.int_ks4_with_lineage"], "model.school_compare.int_ks4_with_lineage": ["model.school_compare.int_school_lineage", "model.school_compare.stg_ees_ks4", "model.school_compare.stg_legacy_ks4"], "model.school_compare.map_school_lineage": ["model.school_compare.int_school_lineage"], "model.school_compare.int_school_lineage": ["model.school_compare.stg_gias_links"], "model.school_compare.stg_gias_links": ["source.school_compare.raw.gias_links"], "model.school_compare.fact_ofsted_inspection": ["model.school_compare.stg_ofsted_inspections"], "model.school_compare.int_ofsted_latest": ["model.school_compare.stg_ofsted_inspections"], "model.school_compare.stg_ofsted_inspections": ["source.school_compare.raw.ofsted_inspections"], "model.school_compare.stg_ees_ks2": ["source.school_compare.raw.ees_ks2_attainment", "source.school_compare.raw.ees_ks2_info"], "model.school_compare.stg_legacy_ks2": ["source.school_compare.raw.legacy_ks2"], "model.school_compare.stg_ees_ks4": ["source.school_compare.raw.ees_ks4_info", "source.school_compare.raw.ees_ks4_performance"], "model.school_compare.stg_legacy_ks4": ["source.school_compare.raw.legacy_ks4"], "model.school_compare.fact_census_benchmarks": ["model.school_compare.fact_pupil_characteristics"], "model.school_compare.fact_pupil_characteristics": ["model.school_compare.int_pupil_chars_merged"], "model.school_compare.int_pupil_chars_merged": ["model.school_compare.stg_ees_census"], "model.school_compare.stg_ees_census": ["source.school_compare.raw.ees_census"], "model.school_compare.fact_admissions": ["model.school_compare.stg_ees_admissions"], "model.school_compare.stg_ees_admissions": ["source.school_compare.raw.ees_admissions"], "model.school_compare.fact_ks2_national_averages": ["model.school_compare.stg_ees_ks2_national"], "model.school_compare.stg_ees_ks2_national": ["source.school_compare.raw.ees_ks2_national"], "model.school_compare.fact_finance": ["model.school_compare.stg_fbit_finance"], "model.school_compare.stg_fbit_finance": ["source.school_compare.raw.fbit_finance"], "model.school_compare.fact_deprivation": ["model.school_compare.stg_idaci"], "model.school_compare.stg_idaci": ["source.school_compare.raw.idaci"], "test.school_compare.assert_urns_in_uk_bounds": ["model.school_compare.dim_location"], "test.school_compare.assert_no_orphaned_facts": ["model.school_compare.dim_school", "model.school_compare.fact_ks2_performance"], "test.school_compare.assert_gias_code_names_match_seed": ["seed.school_compare.gias_code_names", "source.school_compare.raw.gias_establishments"], "test.school_compare.not_null_dim_location_urn.aefc04518b": ["model.school_compare.dim_location"], "test.school_compare.unique_dim_location_urn.7acc2482eb": ["model.school_compare.dim_location"], "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a": ["model.school_compare.dim_location", "model.school_compare.dim_school"], "test.school_compare.not_null_dim_location_postcode.1693ab4948": ["model.school_compare.dim_location"], "test.school_compare.not_null_dim_school_urn.06fbd2ff26": ["model.school_compare.dim_school"], "test.school_compare.unique_dim_school_urn.9851fcd288": ["model.school_compare.dim_school"], "test.school_compare.not_null_dim_school_school_name.2a2e381565": ["model.school_compare.dim_school"], "test.school_compare.not_null_dim_school_phase_code.3140ca1112": ["model.school_compare.dim_school"], "test.school_compare.not_null_dim_school_has_sixth_form.ea8e313799": ["model.school_compare.dim_school"], "test.school_compare.accepted_values_dim_school_has_sixth_form__True__False.41eaa1ffd6": ["model.school_compare.dim_school"], "test.school_compare.accepted_values_dim_school_status_code__1__3.b0a0bd9a3a": ["model.school_compare.dim_school"], "test.school_compare.accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57.66c218b8b6": ["model.school_compare.dim_school"], "test.school_compare.accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99.16074ac494": ["model.school_compare.dim_school"], "test.school_compare.accepted_values_dim_school_admissions_policy_code__0__2__4__9.cfb6e9f008": ["model.school_compare.dim_school"], "test.school_compare.not_null_fact_ks2_performance_urn.7b7546cb10": ["model.school_compare.fact_ks2_performance"], "test.school_compare.not_null_fact_ks2_performance_year.bf28467bae": ["model.school_compare.fact_ks2_performance"], "test.school_compare.unique_fact_ks2_performance_urn_year.240e6de465": ["model.school_compare.fact_ks2_performance"], "test.school_compare.not_null_fact_performance_urn.334fe56f01": ["model.school_compare.fact_performance"], "test.school_compare.not_null_fact_performance_year.eed5795761": ["model.school_compare.fact_performance"], "test.school_compare.unique_fact_performance_urn_year.f5c028dcb0": ["model.school_compare.fact_performance"], "test.school_compare.not_null_fact_ks4_performance_urn.dc24537cea": ["model.school_compare.fact_ks4_performance"], "test.school_compare.not_null_fact_ks4_performance_year.ca2d34b977": ["model.school_compare.fact_ks4_performance"], "test.school_compare.accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average.1f92b23f9b": ["model.school_compare.fact_ks4_performance"], "test.school_compare.unique_fact_ks4_performance_urn_year.eba97e8000": ["model.school_compare.fact_ks4_performance"], "test.school_compare.not_null_fact_ks4_national_averages_year.43387931fd": ["model.school_compare.fact_ks4_national_averages"], "test.school_compare.unique_fact_ks4_national_averages_year.9e4ab94935": ["model.school_compare.fact_ks4_national_averages"], "test.school_compare.not_null_map_school_lineage_urn.24da1a9909": ["model.school_compare.map_school_lineage"], "test.school_compare.not_null_fact_ofsted_inspection_urn.65304a896d": ["model.school_compare.fact_ofsted_inspection"], "test.school_compare.not_null_fact_ofsted_inspection_inspection_date.5aa4bf0513": ["model.school_compare.fact_ofsted_inspection"], "test.school_compare.not_null_fact_pupil_characteristics_urn.bdeebf869b": ["model.school_compare.fact_pupil_characteristics"], "test.school_compare.not_null_fact_pupil_characteristics_year.19bec90c81": ["model.school_compare.fact_pupil_characteristics"], "test.school_compare.not_null_fact_census_benchmarks_phase.c4c9ad96c1": ["model.school_compare.fact_census_benchmarks"], "test.school_compare.unique_fact_census_benchmarks_phase.c06d73d097": ["model.school_compare.fact_census_benchmarks"], "test.school_compare.not_null_fact_admissions_urn.fdf334f63c": ["model.school_compare.fact_admissions"], "test.school_compare.not_null_fact_admissions_year.11169d1a1f": ["model.school_compare.fact_admissions"], "test.school_compare.not_null_fact_ks2_national_averages_year.84b854a9ce": ["model.school_compare.fact_ks2_national_averages"], "test.school_compare.unique_fact_ks2_national_averages_year.99f3ae39bb": ["model.school_compare.fact_ks2_national_averages"], "test.school_compare.not_null_fact_finance_urn.162f08d129": ["model.school_compare.fact_finance"], "test.school_compare.not_null_fact_finance_year.d96868883e": ["model.school_compare.fact_finance"], "test.school_compare.not_null_fact_deprivation_urn.96d84c2c61": ["model.school_compare.fact_deprivation"], "test.school_compare.unique_fact_deprivation_urn.194d6d1f01": ["model.school_compare.fact_deprivation"], "test.school_compare.source_not_null_raw_gias_establishments__URN_.daa9473baf": ["source.school_compare.raw.gias_establishments"], "test.school_compare.source_unique_raw_gias_establishments__URN_.9f6d358797": ["source.school_compare.raw.gias_establishments"], "test.school_compare.source_not_null_raw_gias_links__URN_.588070236c": ["source.school_compare.raw.gias_links"], "source.school_compare.raw.gias_establishments": [], "source.school_compare.raw.gias_links": [], "source.school_compare.raw.ofsted_inspections": [], "source.school_compare.raw.ees_ks2_attainment": [], "source.school_compare.raw.ees_ks2_info": [], "source.school_compare.raw.legacy_ks2": [], "source.school_compare.raw.ees_ks4_performance": [], "source.school_compare.raw.ees_ks4_info": [], "source.school_compare.raw.legacy_ks4": [], "source.school_compare.raw.ees_census": [], "source.school_compare.raw.ees_admissions": [], "source.school_compare.raw.ees_ks2_national": [], "source.school_compare.raw.ees_ks4_national": [], "source.school_compare.raw.fbit_finance": [], "source.school_compare.raw.idaci": []}, "child_map": {"seed.school_compare.la_code_names": [], "seed.school_compare.gias_code_names": ["test.school_compare.assert_gias_code_names_match_seed"], "seed.school_compare.school_type_codes": [], "model.school_compare.stg_ees_ks4_national": ["model.school_compare.fact_ks4_national_averages"], "model.school_compare.dim_location": ["test.school_compare.assert_urns_in_uk_bounds", "test.school_compare.not_null_dim_location_postcode.1693ab4948", "test.school_compare.not_null_dim_location_urn.aefc04518b", "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a", "test.school_compare.unique_dim_location_urn.7acc2482eb"], "model.school_compare.dim_school": ["test.school_compare.accepted_values_dim_school_admissions_policy_code__0__2__4__9.cfb6e9f008", "test.school_compare.accepted_values_dim_school_has_sixth_form__True__False.41eaa1ffd6", "test.school_compare.accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99.16074ac494", "test.school_compare.accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57.66c218b8b6", "test.school_compare.accepted_values_dim_school_status_code__1__3.b0a0bd9a3a", "test.school_compare.assert_no_orphaned_facts", "test.school_compare.not_null_dim_school_has_sixth_form.ea8e313799", "test.school_compare.not_null_dim_school_phase_code.3140ca1112", "test.school_compare.not_null_dim_school_school_name.2a2e381565", "test.school_compare.not_null_dim_school_urn.06fbd2ff26", "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a", "test.school_compare.unique_dim_school_urn.9851fcd288"], "model.school_compare.stg_gias_establishments": ["model.school_compare.dim_location", "model.school_compare.dim_school"], "model.school_compare.fact_performance": ["test.school_compare.not_null_fact_performance_urn.334fe56f01", "test.school_compare.not_null_fact_performance_year.eed5795761", "test.school_compare.unique_fact_performance_urn_year.f5c028dcb0"], "model.school_compare.fact_ks2_performance": ["model.school_compare.fact_performance", "test.school_compare.assert_no_orphaned_facts", "test.school_compare.not_null_fact_ks2_performance_urn.7b7546cb10", "test.school_compare.not_null_fact_ks2_performance_year.bf28467bae", "test.school_compare.unique_fact_ks2_performance_urn_year.240e6de465"], "model.school_compare.int_ks2_with_lineage": ["model.school_compare.fact_ks2_performance"], "model.school_compare.fact_ks4_national_averages": ["test.school_compare.not_null_fact_ks4_national_averages_year.43387931fd", "test.school_compare.unique_fact_ks4_national_averages_year.9e4ab94935"], "model.school_compare.fact_ks4_performance": ["model.school_compare.fact_performance", "test.school_compare.accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average.1f92b23f9b", "test.school_compare.not_null_fact_ks4_performance_urn.dc24537cea", "test.school_compare.not_null_fact_ks4_performance_year.ca2d34b977", "test.school_compare.unique_fact_ks4_performance_urn_year.eba97e8000"], "model.school_compare.int_ks4_with_lineage": ["model.school_compare.fact_ks4_performance"], "model.school_compare.map_school_lineage": ["test.school_compare.not_null_map_school_lineage_urn.24da1a9909"], "model.school_compare.int_school_lineage": ["model.school_compare.int_ks2_with_lineage", "model.school_compare.int_ks4_with_lineage", "model.school_compare.map_school_lineage"], "model.school_compare.stg_gias_links": ["model.school_compare.int_school_lineage"], "model.school_compare.fact_ofsted_inspection": ["test.school_compare.not_null_fact_ofsted_inspection_inspection_date.5aa4bf0513", "test.school_compare.not_null_fact_ofsted_inspection_urn.65304a896d"], "model.school_compare.int_ofsted_latest": ["model.school_compare.dim_school"], "model.school_compare.stg_ofsted_inspections": ["model.school_compare.fact_ofsted_inspection", "model.school_compare.int_ofsted_latest"], "model.school_compare.stg_ees_ks2": ["model.school_compare.int_ks2_with_lineage"], "model.school_compare.stg_legacy_ks2": ["model.school_compare.int_ks2_with_lineage"], "model.school_compare.stg_ees_ks4": ["model.school_compare.int_ks4_with_lineage"], "model.school_compare.stg_legacy_ks4": ["model.school_compare.int_ks4_with_lineage"], "model.school_compare.fact_census_benchmarks": ["test.school_compare.not_null_fact_census_benchmarks_phase.c4c9ad96c1", "test.school_compare.unique_fact_census_benchmarks_phase.c06d73d097"], "model.school_compare.fact_pupil_characteristics": ["model.school_compare.fact_census_benchmarks", "test.school_compare.not_null_fact_pupil_characteristics_urn.bdeebf869b", "test.school_compare.not_null_fact_pupil_characteristics_year.19bec90c81"], "model.school_compare.int_pupil_chars_merged": ["model.school_compare.fact_pupil_characteristics"], "model.school_compare.stg_ees_census": ["model.school_compare.int_pupil_chars_merged"], "model.school_compare.fact_admissions": ["test.school_compare.not_null_fact_admissions_urn.fdf334f63c", "test.school_compare.not_null_fact_admissions_year.11169d1a1f"], "model.school_compare.stg_ees_admissions": ["model.school_compare.fact_admissions"], "model.school_compare.fact_ks2_national_averages": ["test.school_compare.not_null_fact_ks2_national_averages_year.84b854a9ce", "test.school_compare.unique_fact_ks2_national_averages_year.99f3ae39bb"], "model.school_compare.stg_ees_ks2_national": ["model.school_compare.fact_ks2_national_averages"], "model.school_compare.fact_finance": ["test.school_compare.not_null_fact_finance_urn.162f08d129", "test.school_compare.not_null_fact_finance_year.d96868883e"], "model.school_compare.stg_fbit_finance": ["model.school_compare.fact_finance"], "model.school_compare.fact_deprivation": ["test.school_compare.not_null_fact_deprivation_urn.96d84c2c61", "test.school_compare.unique_fact_deprivation_urn.194d6d1f01"], "model.school_compare.stg_idaci": ["model.school_compare.fact_deprivation"], "test.school_compare.assert_urns_in_uk_bounds": [], "test.school_compare.assert_no_orphaned_facts": [], "test.school_compare.assert_gias_code_names_match_seed": [], "test.school_compare.not_null_dim_location_urn.aefc04518b": [], "test.school_compare.unique_dim_location_urn.7acc2482eb": [], "test.school_compare.relationships_dim_location_urn__urn__ref_dim_school_.719013884a": [], "test.school_compare.not_null_dim_location_postcode.1693ab4948": [], "test.school_compare.not_null_dim_school_urn.06fbd2ff26": [], "test.school_compare.unique_dim_school_urn.9851fcd288": [], "test.school_compare.not_null_dim_school_school_name.2a2e381565": [], "test.school_compare.not_null_dim_school_phase_code.3140ca1112": [], "test.school_compare.not_null_dim_school_has_sixth_form.ea8e313799": [], "test.school_compare.accepted_values_dim_school_has_sixth_form__True__False.41eaa1ffd6": [], "test.school_compare.accepted_values_dim_school_status_code__1__3.b0a0bd9a3a": [], "test.school_compare.accepted_values_dim_school_school_type_code__1__2__3__5__6__7__8__10__11__12__14__15__18__24__25__26__27__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__49__56__57.66c218b8b6": [], "test.school_compare.accepted_values_dim_school_religious_character_code__0__2__3__4__5__6__7__8__9__10__11__12__13__14__15__16__17__18__19__20__21__22__24__25__26__28__29__30__31__32__33__34__35__36__37__38__39__40__41__42__43__44__45__46__47__48__49__99.16074ac494": [], "test.school_compare.accepted_values_dim_school_admissions_policy_code__0__2__4__9.cfb6e9f008": [], "test.school_compare.not_null_fact_ks2_performance_urn.7b7546cb10": [], "test.school_compare.not_null_fact_ks2_performance_year.bf28467bae": [], "test.school_compare.unique_fact_ks2_performance_urn_year.240e6de465": [], "test.school_compare.not_null_fact_performance_urn.334fe56f01": [], "test.school_compare.not_null_fact_performance_year.eed5795761": [], "test.school_compare.unique_fact_performance_urn_year.f5c028dcb0": [], "test.school_compare.not_null_fact_ks4_performance_urn.dc24537cea": [], "test.school_compare.not_null_fact_ks4_performance_year.ca2d34b977": [], "test.school_compare.accepted_values_fact_ks4_performance_progress_8_banding__Well_above_average__Above_average__Average__Below_average__Well_below_average.1f92b23f9b": [], "test.school_compare.unique_fact_ks4_performance_urn_year.eba97e8000": [], "test.school_compare.not_null_fact_ks4_national_averages_year.43387931fd": [], "test.school_compare.unique_fact_ks4_national_averages_year.9e4ab94935": [], "test.school_compare.not_null_map_school_lineage_urn.24da1a9909": [], "test.school_compare.not_null_fact_ofsted_inspection_urn.65304a896d": [], "test.school_compare.not_null_fact_ofsted_inspection_inspection_date.5aa4bf0513": [], "test.school_compare.not_null_fact_pupil_characteristics_urn.bdeebf869b": [], "test.school_compare.not_null_fact_pupil_characteristics_year.19bec90c81": [], "test.school_compare.not_null_fact_census_benchmarks_phase.c4c9ad96c1": [], "test.school_compare.unique_fact_census_benchmarks_phase.c06d73d097": [], "test.school_compare.not_null_fact_admissions_urn.fdf334f63c": [], "test.school_compare.not_null_fact_admissions_year.11169d1a1f": [], "test.school_compare.not_null_fact_ks2_national_averages_year.84b854a9ce": [], "test.school_compare.unique_fact_ks2_national_averages_year.99f3ae39bb": [], "test.school_compare.not_null_fact_finance_urn.162f08d129": [], "test.school_compare.not_null_fact_finance_year.d96868883e": [], "test.school_compare.not_null_fact_deprivation_urn.96d84c2c61": [], "test.school_compare.unique_fact_deprivation_urn.194d6d1f01": [], "test.school_compare.source_not_null_raw_gias_establishments__URN_.daa9473baf": [], "test.school_compare.source_unique_raw_gias_establishments__URN_.9f6d358797": [], "test.school_compare.source_not_null_raw_gias_links__URN_.588070236c": [], "source.school_compare.raw.gias_establishments": ["model.school_compare.stg_gias_establishments", "test.school_compare.assert_gias_code_names_match_seed", "test.school_compare.source_not_null_raw_gias_establishments__URN_.daa9473baf", "test.school_compare.source_unique_raw_gias_establishments__URN_.9f6d358797"], "source.school_compare.raw.gias_links": ["model.school_compare.stg_gias_links", "test.school_compare.source_not_null_raw_gias_links__URN_.588070236c"], "source.school_compare.raw.ofsted_inspections": ["model.school_compare.stg_ofsted_inspections"], "source.school_compare.raw.ees_ks2_attainment": ["model.school_compare.stg_ees_ks2"], "source.school_compare.raw.ees_ks2_info": ["model.school_compare.stg_ees_ks2"], "source.school_compare.raw.legacy_ks2": ["model.school_compare.stg_legacy_ks2"], "source.school_compare.raw.ees_ks4_performance": ["model.school_compare.stg_ees_ks4"], "source.school_compare.raw.ees_ks4_info": ["model.school_compare.stg_ees_ks4"], "source.school_compare.raw.legacy_ks4": ["model.school_compare.stg_legacy_ks4"], "source.school_compare.raw.ees_census": ["model.school_compare.stg_ees_census"], "source.school_compare.raw.ees_admissions": ["model.school_compare.stg_ees_admissions"], "source.school_compare.raw.ees_ks2_national": ["model.school_compare.stg_ees_ks2_national"], "source.school_compare.raw.ees_ks4_national": ["model.school_compare.stg_ees_ks4_national"], "source.school_compare.raw.fbit_finance": ["model.school_compare.stg_fbit_finance"], "source.school_compare.raw.idaci": ["model.school_compare.stg_idaci"]}, "group_map": {}, "saved_queries": {}, "semantic_models": {}, "unit_tests": {}, "functions": {}} \ No newline at end of file diff --git a/pipeline/transform/target/osi_document.json b/pipeline/transform/target/osi_document.json deleted file mode 100644 index e54060f..0000000 --- a/pipeline/transform/target/osi_document.json +++ /dev/null @@ -1 +0,0 @@ -{"version": "0.1.1", "dialects": ["ANSI_SQL"], "semantic_model": [{"name": "semantic_model", "datasets": []}]} \ No newline at end of file diff --git a/pipeline/transform/target/partial_parse.msgpack b/pipeline/transform/target/partial_parse.msgpack deleted file mode 100644 index 222bbcc7cb935f91b7f87b4a49037a53afb81176..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769735 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

+0&BlJ=pm^x%!g2{hWB3-pAYtu!^a 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