diff --git a/.gitignore b/.gitignore index c92233ec..90549110 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,7 @@ profiling/statistics # Docker .docker/ +docker/base/bin/ # dbt target/ @@ -88,3 +89,4 @@ dmypy.json # misc zz-* +/shared/projects/dbt/airbnb/dbt_internal_packages diff --git a/ade_bench/handlers/trial_handler.py b/ade_bench/handlers/trial_handler.py index 036465b4..34a02cfa 100644 --- a/ade_bench/handlers/trial_handler.py +++ b/ade_bench/handlers/trial_handler.py @@ -82,7 +82,9 @@ class Task(BaseModel): "merge_yaml.py", "run_sql.py", "run_sql.sh", + "fuzzy_compare.py" ], + description="List of test scripts to use for the task", ) run_tests_in_same_shell: bool = Field( diff --git a/docker/base/Dockerfile.duckdb-dbt b/docker/base/Dockerfile.duckdb-dbt index 9dcab047..38a6556e 100644 --- a/docker/base/Dockerfile.duckdb-dbt +++ b/docker/base/Dockerfile.duckdb-dbt @@ -11,6 +11,8 @@ RUN pip install --no-cache-dir \ dbt-core==1.10.11 \ dbt-duckdb==1.9.3 \ duckdb==1.3.0 \ + "dbt-metricflow[dbt-duckdb]" \ + pandas \ pyyaml>=6.0 \ uv>=0.7 diff --git a/docker/base/Dockerfile.snowflake-dbt b/docker/base/Dockerfile.snowflake-dbt index 7de7187b..30364b13 100644 --- a/docker/base/Dockerfile.snowflake-dbt +++ b/docker/base/Dockerfile.snowflake-dbt @@ -14,6 +14,8 @@ RUN pip install --no-cache-dir \ dbt-core==1.10.11 \ dbt-snowflake==1.10.2 \ snowflake-connector-python==3.13.1 \ + "dbt-metricflow[dbt-snowflake]" \ + pandas \ pyyaml>=6.0 \ uv>=0.7 diff --git a/docker/base/Dockerfile.snowflake-dbtf b/docker/base/Dockerfile.snowflake-dbtf index 4fd08b6b..0240a47a 100644 --- a/docker/base/Dockerfile.snowflake-dbtf +++ b/docker/base/Dockerfile.snowflake-dbtf @@ -17,6 +17,7 @@ RUN export SHELL=/bin/bash && \ # Install Snowflake connector (still needed for Snowflake connections) RUN pip install --no-cache-dir \ snowflake-connector-python==3.13.1 \ + pandas \ pyyaml>=6.0 \ uv>=0.7 diff --git a/scripts_python/import_sl_bench.py b/scripts_python/import_sl_bench.py new file mode 100644 index 00000000..45fea61e --- /dev/null +++ b/scripts_python/import_sl_bench.py @@ -0,0 +1,315 @@ +#!/usr/bin/env python3 +""" +One-off converter: import dbt Semantic Layer LLM Benchmark challenges into ADE-Bench tasks. + +Usage: + uv run --with rdflib scripts_python/import_sl_bench.py \ + --ttl /path/to/acme-benchmark.ttl \ + --output tasks/ \ + --db-path shared/databases/duckdb/acme_insurance.duckdb +""" + +import argparse +import csv +import io +import os +import re +import sys +import textwrap +from collections import defaultdict +from pathlib import Path + +import yaml + +try: + import duckdb +except ImportError: + print("ERROR: duckdb is required. Install with: pip install duckdb", file=sys.stderr) + sys.exit(1) + +try: + from rdflib import Graph, Namespace, RDF +except ImportError: + print("ERROR: rdflib is required. Run with: uv run --with rdflib scripts_python/import_sl_bench.py", file=sys.stderr) + sys.exit(1) + + +QandA = Namespace("http://models.data.world/benchmarks/QandA#") +DWT = Namespace("https://templates.data.world/") +DCT = Namespace("http://purl.org/dc/terms/") + + +def parse_ttl(ttl_path: str) -> tuple[list[dict], list[dict]]: + """Parse the .ttl file and return (inquiries, sql_queries).""" + g = Graph() + g.parse(ttl_path, format="turtle") + + # Extract SQL queries + sql_queries = {} + for subj in g.subjects(RDF.type, DWT.SqlQuery): + query_text = str(g.value(subj, QandA.queryText, default="")) + title = str(g.value(subj, DCT.title, default="")) + description = str(g.value(subj, DCT.description, default="")) + sql_queries[subj] = { + "uri": str(subj), + "query_text": query_text, + "title": title, + "description": description, + } + + # Extract SPARQL queries (to identify and skip SPARQL-only expects) + sparql_queries = set() + for subj in g.subjects(RDF.type, DWT.SparqlQuery): + sparql_queries.add(subj) + + # Extract Inquiries and link to SQL queries + inquiries = [] + for subj in g.subjects(RDF.type, QandA.Inquiry): + prompt = str(g.value(subj, QandA.prompt, default="")) + expects = list(g.objects(subj, QandA.expects)) + + # Find SQL expects (skip SPARQL) + sql_expects = [e for e in expects if e in sql_queries] + + if not sql_expects: + continue # Skip inquiries that only have SPARQL expects + + for sql_uri in sql_expects: + inquiries.append({ + "uri": str(subj), + "prompt": prompt, + "sql_query": sql_queries[sql_uri], + }) + + return inquiries, list(sql_queries.values()) + + +def extract_category(title: str) -> str: + """Extract HQLS/LQLS/HQHS/LQHS from the title.""" + match = re.match(r"(HQLS|LQLS|HQHS|LQHS)", title) + if match: + return match.group(1).lower() + return "unknown" + + +def assess_difficulty(sql: str) -> str: + """Heuristic difficulty assessment based on SQL complexity.""" + sql_upper = sql.upper() + + join_count = len(re.findall(r'\bJOIN\b', sql_upper)) + has_subquery = "SELECT" in sql_upper[sql_upper.find("FROM"):] if "FROM" in sql_upper else False + has_group_by = "GROUP BY" in sql_upper + has_avg = "AVG(" in sql_upper or "AVERAGE" in sql_upper + has_complex_agg = any(fn in sql_upper for fn in ["SUM(", "AVG(", "DATEDIFF("]) + has_case = "CASE" in sql_upper + has_window = "OVER(" in sql_upper or "OVER (" in sql_upper + + if join_count >= 4 or has_subquery or (has_complex_agg and join_count >= 3) or has_window or has_case: + return "hard" + elif join_count >= 2 or has_group_by or has_complex_agg: + return "medium" + else: + return "easy" + + +def run_gold_query(db_path: str, sql: str) -> tuple[list[str], list[tuple]]: + """Execute gold SQL against DuckDB and return (columns, rows).""" + con = duckdb.connect(db_path, read_only=True) + try: + result = con.execute(sql) + columns = [desc[0] for desc in result.description] + rows = result.fetchall() + return columns, rows + finally: + con.close() + + +def rows_to_csv(columns: list[str], rows: list[tuple]) -> str: + """Convert query results to CSV string.""" + output = io.StringIO() + writer = csv.writer(output) + writer.writerow(columns) + for row in rows: + writer.writerow(row) + return output.getvalue() + + +def adapt_sql_for_duckdb(sql: str) -> str: + """Adapt gold SQL queries for DuckDB compatibility.""" + # Fix DATE_DIFF with double-quoted "day" -> single-quoted 'day' + # DuckDB datediff syntax: datediff('unit', start, end) + sql = re.sub( + r'DATE_DIFF\s*\(\s*(\w+)\s*,\s*(\w+)\s*,\s*"(\w+)"\s*\)', + r"datediff('\3', \1, \2)", + sql, + ) + # Remove # line comments (MySQL-style) — replace with -- comments + sql = re.sub(r'(?m)^(\s*)#(.*)$', r'\1--\2', sql) + return sql + + +def generate_task( + task_id: str, + inquiry: dict, + category: str, + difficulty: str, + output_dir: Path, + db_path: str, +) -> bool: + """Generate a single task directory. Returns True on success.""" + sql_query = inquiry["sql_query"] + gold_sql_original = sql_query["query_text"] + gold_sql = adapt_sql_for_duckdb(gold_sql_original) + title = sql_query["title"] + prompt_text = inquiry["prompt"] + + task_dir = output_dir / task_id + task_dir.mkdir(parents=True, exist_ok=True) + + # Try running the gold SQL to generate solution seed + try: + columns, rows = run_gold_query(db_path, gold_sql) + except Exception as e: + print(f" WARNING: Gold SQL failed for {task_id}: {e}") + print(f" SQL: {gold_sql[:200]}...") + # Write a note file and continue — the task is still valid, just needs manual CSV + (task_dir / "GOLD_SQL_ERROR.txt").write_text(f"Error: {e}\nSQL: {gold_sql}\n") + columns, rows = [], [] + + # Write solution seed CSV + seeds_dir = task_dir / "seeds" + seeds_dir.mkdir(exist_ok=True) + if columns and rows: + csv_content = rows_to_csv(columns, rows) + (seeds_dir / "solution__result.csv").write_text(csv_content) + elif columns: + # Query returned 0 rows — still write header + csv_content = rows_to_csv(columns, []) + (seeds_dir / "solution__result.csv").write_text(csv_content) + + # Strip whitespace from prompt text to avoid YAML indentation issues + prompt_text = prompt_text.strip() + + base_prompt = f"{prompt_text}\n\nWrite a model called result.sql containing your answer." + sl_prompt = f"Using the dbt semantic layer, answer this question:\n\n{prompt_text}\n\nWrite a model called result.sql containing your answer." + + # Build task data as a dict and serialize with yaml.dump for correctness + task_data = { + "task_id": task_id, + "status": "ready", + "description": title, + "prompts": [ + {"key": "base", "prompt": base_prompt}, + {"key": "with_sl", "prompt": sl_prompt}, + ], + "author_name": "dbt-labs", + "author_email": "noreply@getdbt.com", + "difficulty": difficulty, + "tags": [ + "semantic-layer", + "metricflow", + "free-text", + "acme-insurance", + category, + ], + "test_setup": "dbt run --select result", + "solution_seeds": [{"table_name": "result"}], + "variants": [ + { + "db_type": "duckdb", + "db_name": "acme_insurance", + "project_type": "dbt", + "project_name": "acme_insurance", + } + ], + } + task_yaml = yaml.dump(task_data, default_flow_style=False, sort_keys=False, allow_unicode=True) + (task_dir / "task.yaml").write_text(task_yaml) + + # Write solution.sh + solution_sh = f"""#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +{gold_sql} +GOLD_SQL + +dbt run --select result +""" + (task_dir / "solution.sh").write_text(solution_sh) + os.chmod(task_dir / "solution.sh", 0o700) + + return True + + +def main(): + parser = argparse.ArgumentParser(description="Import dbt SL LLM benchmark into ADE-Bench tasks") + parser.add_argument("--ttl", required=True, help="Path to acme-benchmark.ttl") + parser.add_argument("--output", required=True, help="Output directory for tasks (e.g., tasks/)") + parser.add_argument("--db-path", required=True, help="Path to acme_insurance.duckdb") + parser.add_argument("--dry-run", action="store_true", help="Parse and report without generating files") + args = parser.parse_args() + + output_dir = Path(args.output) + + print(f"Parsing TTL file: {args.ttl}") + inquiries, all_sql = parse_ttl(args.ttl) + print(f"Found {len(inquiries)} inquiries with SQL queries") + print(f"Total SQL queries in file: {len(all_sql)}") + + # Deduplicate inquiries by (prompt, sql_query_text) to avoid duplicates + seen = set() + unique_inquiries = [] + for inq in inquiries: + key = (inq["prompt"], inq["sql_query"]["query_text"]) + if key not in seen: + seen.add(key) + unique_inquiries.append(inq) + print(f"Unique (prompt, SQL) pairs: {len(unique_inquiries)}") + + # Group by category + by_category = defaultdict(list) + for inq in unique_inquiries: + cat = extract_category(inq["sql_query"]["title"]) + by_category[cat].append(inq) + + print("\nCategory breakdown:") + for cat in sorted(by_category.keys()): + print(f" {cat.upper()}: {len(by_category[cat])} tasks") + + if args.dry_run: + print("\n--- DRY RUN: Not generating files ---") + for cat in sorted(by_category.keys()): + for i, inq in enumerate(by_category[cat], 1): + task_id = f"free_text_acme_{cat}_{i:03d}" + difficulty = assess_difficulty(inq["sql_query"]["query_text"]) + print(f" {task_id} [{difficulty}]: {inq['sql_query']['title']}") + print(f" Prompt: {inq['prompt'][:100]}...") + return + + # Generate tasks + all_task_ids = [] + for cat in sorted(by_category.keys()): + for i, inq in enumerate(by_category[cat], 1): + task_id = f"free_text_acme_{cat}_{i:03d}" + difficulty = assess_difficulty(inq["sql_query"]["query_text"]) + print(f"Generating {task_id} [{difficulty}]...") + success = generate_task( + task_id=task_id, + inquiry=inq, + category=cat, + difficulty=difficulty, + output_dir=output_dir, + db_path=args.db_path, + ) + if success: + all_task_ids.append(task_id) + + print(f"\nGenerated {len(all_task_ids)} tasks") + + # Print task IDs for experiment set + print("\n--- Task IDs for experiment set ---") + for tid in all_task_ids: + print(f" - {tid}") + + +if __name__ == "__main__": + main() diff --git a/shared/config/CLAUDE.md b/shared/config/CLAUDE.md index 7d41ec5d..3b52e504 100644 --- a/shared/config/CLAUDE.md +++ b/shared/config/CLAUDE.md @@ -4,6 +4,7 @@ You are acting as an expert analyst and data engineer who is taksed with solving ## Available Tools - dbt: You have access to a dbt project, and its configuration files. The project may use dbt Fusion or standard dbt. +- MetricFlow: The `mf` CLI can be used to interact with the dbt Semantic Layer. - Snowflake: Each dbt project is connected to a Snowflake database. - dbt's MCP server: In some cases, you may have access to the dbt MCP server, which you should use when appropriate. diff --git a/shared/projects/dbt/acme_insurance/dbt_project.yml b/shared/projects/dbt/acme_insurance/dbt_project.yml new file mode 100644 index 00000000..16934dc7 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/dbt_project.yml @@ -0,0 +1,18 @@ +name: 'acme_insurance' +version: '1.0.0' +config-version: 2 + +profile: 'acme_insurance-duckdb' + +model-paths: ["models"] +analysis-paths: ["analyses"] +macro-paths: ["macros"] +snapshot-paths: ["snapshots"] + +target-path: "target" +clean-targets: + - "target" + - "dbt_packages" + +models: + +materialized: table diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/agreement.sql b/shared/projects/dbt/acme_insurance/models/omg_models/agreement.sql new file mode 100644 index 00000000..33558a35 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/agreement.sql @@ -0,0 +1,7 @@ +select + Agreement_Type_Code, + Agreement_Name, + Agreement_Original_Inception_Date, + Product_Identifier +from + {{ source('acme_raw', 'Agreement') }} diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/agreement_assessment.sql b/shared/projects/dbt/acme_insurance/models/omg_models/agreement_assessment.sql new file mode 100644 index 00000000..f54c5399 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/agreement_assessment.sql @@ -0,0 +1,4 @@ +select + Agreement_Identifier, + Assessment_Identifier +from {{ source('acme_raw', 'Agreement_Assessment') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/agreement_party_role.sql b/shared/projects/dbt/acme_insurance/models/omg_models/agreement_party_role.sql new file mode 100644 index 00000000..0de26420 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/agreement_party_role.sql @@ -0,0 +1,8 @@ +select + Agreement_Identifier, + Party_Identifier, + Party_Role_Code, + Effective_Date, + Expiration_Date +from + {{ source('acme_raw', 'Agreement_Party_Role') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/assesment_party_role.sql b/shared/projects/dbt/acme_insurance/models/omg_models/assesment_party_role.sql new file mode 100644 index 00000000..bffc25a3 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/assesment_party_role.sql @@ -0,0 +1,7 @@ +select + Party_Identifier, + Assessment_Identifier, + Party_Role_Code, + Begin_Date, + End_Date +from {{ source('acme_raw', 'Assesment_Party_Role') }} diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/assessment.sql b/shared/projects/dbt/acme_insurance/models/omg_models/assessment.sql new file mode 100644 index 00000000..d9217bef --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/assessment.sql @@ -0,0 +1,7 @@ +select + Assessment_Identifier, + Begin_Date, + Assessment_Description, + End_Date, + Assessment_Reason_Description +from {{ source('acme_raw', 'Assessment') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/assessment_result.sql b/shared/projects/dbt/acme_insurance/models/omg_models/assessment_result.sql new file mode 100644 index 00000000..559eda62 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/assessment_result.sql @@ -0,0 +1,6 @@ +select + Assessment_Result_Identifier, + Assessment_Identifier, + Assessment_Result_Type_Code +from + {{ source('acme_raw', 'Assessment_Result') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/catastrophe.sql b/shared/projects/dbt/acme_insurance/models/omg_models/catastrophe.sql new file mode 100644 index 00000000..ef5724c6 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/catastrophe.sql @@ -0,0 +1,7 @@ +select + Catastrophe_Identifier, + Catastrophe_Type_Code, + Catastrophe_Name, + Industry_Catastrophe_Code, + Company_Catastrophe_Code +from {{ source('acme_raw', 'Catastrophe') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/claim.sql b/shared/projects/dbt/acme_insurance/models/omg_models/claim.sql new file mode 100644 index 00000000..42716bae --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/claim.sql @@ -0,0 +1,17 @@ +select + Claim_Identifier, + Catastrophe_Identifier, + Claim_Description, + Claims_Made_Date, + Company_Claim_Number, + Company_Subclaim_Number, + Insurable_Object_Identifier, + Occurrence_Identifier, + Entry_Into_Claims_Made_Program_Date, + Claim_Open_Date, + Claim_Close_Date, + Claim_Reopen_Date, + Claim_Status_Code, + Claim_Reported_Date +from + {{ source('acme_raw', 'Claim') }} diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/claim_amount.sql b/shared/projects/dbt/acme_insurance/models/omg_models/claim_amount.sql new file mode 100644 index 00000000..3a9f4061 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/claim_amount.sql @@ -0,0 +1,10 @@ +select + Claim_Amount_Identifier, + Claim_Identifier, + Claim_Offer_Identifier, + Amount_Type_Code, + Event_Date, + Claim_Amount, + Insurance_Type_Code +from + {{ source('acme_raw', 'Claim_Amount') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/claim_coverage.sql b/shared/projects/dbt/acme_insurance/models/omg_models/claim_coverage.sql new file mode 100644 index 00000000..5bec3113 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/claim_coverage.sql @@ -0,0 +1,5 @@ +select + Claim_Identifier, + Effective_Date, + Policy_Coverage_Detail_Identifier +from {{ source('acme_raw', 'Claim_Coverage') }} diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/expense_payment.sql b/shared/projects/dbt/acme_insurance/models/omg_models/expense_payment.sql new file mode 100644 index 00000000..dd14020b --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/expense_payment.sql @@ -0,0 +1,4 @@ +select + Claim_Amount_Identifier +from + {{ source('acme_raw', 'Expense_Payment') }} diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/expense_reserve.sql b/shared/projects/dbt/acme_insurance/models/omg_models/expense_reserve.sql new file mode 100644 index 00000000..c6668e9f --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/expense_reserve.sql @@ -0,0 +1,3 @@ +select + Claim_Amount_Identifier +from {{ source('acme_raw', 'Expense_Reserve') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/fire_claim.sql b/shared/projects/dbt/acme_insurance/models/omg_models/fire_claim.sql new file mode 100644 index 00000000..55ce0fe4 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/fire_claim.sql @@ -0,0 +1,11 @@ +select + PolicyNo, + ClaimNumber, + Premium, + InsuredLocation, + Loss_Ratio, + Nearest_Firestation_miles, + Number_of_Firefighters, + Fireplace, + Year_Built +from {{ source('acme_raw', 'FireClaim') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/geographic_location.sql b/shared/projects/dbt/acme_insurance/models/omg_models/geographic_location.sql new file mode 100644 index 00000000..d45c61cd --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/geographic_location.sql @@ -0,0 +1,11 @@ +select + Geographic_Location_Identifier, + Parent_Geographic_Location_Identifier, + Geographic_Location_Type_Code, + Location_Code, + Location_Name, + Location_Number, + State_Code, + Location_Address_Identifier, + Physical_Location_Identifier +from {{ source('acme_raw', 'Geographic_Location') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/insurable_object.sql b/shared/projects/dbt/acme_insurance/models/omg_models/insurable_object.sql new file mode 100644 index 00000000..90a57c4b --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/insurable_object.sql @@ -0,0 +1,5 @@ +select + Insurable_Object_Identifier, + Geographic_Location_Identifier, + Insurable_Object_Type_Code +from {{ source('acme_raw', 'Insurable_Object') }} diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/location_address.sql b/shared/projects/dbt/acme_insurance/models/omg_models/location_address.sql new file mode 100644 index 00000000..df1ceb16 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/location_address.sql @@ -0,0 +1,11 @@ +select +Location_Address_Identifier, +Line_1_Address, +Municipality_Name, +Line_2_Address, +Postal_Code, +Country_Code, +State_Code, +Begin_Date, +End_Date +from {{ source('acme_raw', 'Location_Address') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/loss_payment.sql b/shared/projects/dbt/acme_insurance/models/omg_models/loss_payment.sql new file mode 100644 index 00000000..eab07a8f --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/loss_payment.sql @@ -0,0 +1,3 @@ +select + Claim_Amount_Identifier +from {{ source('acme_raw', 'Loss_Payment') }} diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/loss_reserve.sql b/shared/projects/dbt/acme_insurance/models/omg_models/loss_reserve.sql new file mode 100644 index 00000000..8b488da2 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/loss_reserve.sql @@ -0,0 +1,3 @@ +select + Claim_Amount_Identifier +from {{ source('acme_raw', 'Loss_Reserve') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/occurrences.sql b/shared/projects/dbt/acme_insurance/models/omg_models/occurrences.sql new file mode 100644 index 00000000..fa67fbfb --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/occurrences.sql @@ -0,0 +1,10 @@ +select + Occurrence_Identifier, + Catastrophic_Event_Indicator, + Geographic_Location_Identifier, + Occurrence_Begin_Date, + Occurrence_End_Date, + Occurrence_Begin_Time, + Occurrence_End_Time, + Occurrence_Name +from {{ source('acme_raw', 'Occurrence') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/organizations.sql b/shared/projects/dbt/acme_insurance/models/omg_models/organizations.sql new file mode 100644 index 00000000..0744bb1a --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/organizations.sql @@ -0,0 +1,11 @@ +select + Organization_Identifier, + Industry_Code, + Organization_Name, + Dun_And_Bradstreet_Identifier, + Organization_Type_Code, + Alternate_Name, + Organization_Description, + Acronym_Name, + Industry_Type_Code +from {{ source('acme_raw', 'Organization') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/party.sql b/shared/projects/dbt/acme_insurance/models/omg_models/party.sql new file mode 100644 index 00000000..175209fc --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/party.sql @@ -0,0 +1,7 @@ +select + Party_Identifier, + Party_Name, + Begin_Date, + End_Date, + Party_Type_Code +from {{ source('acme_raw', 'Party') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/party_role.sql b/shared/projects/dbt/acme_insurance/models/omg_models/party_role.sql new file mode 100644 index 00000000..4ab903e0 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/party_role.sql @@ -0,0 +1,5 @@ +select + Party_Role_Code, + Party_Role_Name, + Party_Role_Description +from {{ source('acme_raw', 'Party_Role') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/person.sql b/shared/projects/dbt/acme_insurance/models/omg_models/person.sql new file mode 100644 index 00000000..5500dbd6 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/person.sql @@ -0,0 +1,13 @@ +select + Person_Identifier, + First_Name, + Middle_Name, + Last_Name, + Full_Legal_Name, + Nickname, + Suffix_Name, + Birth_Date, + Birth_Place_Name, + Gender_Code, + Prefix_Name +from {{ source('acme_raw', 'Person') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/policy.sql b/shared/projects/dbt/acme_insurance/models/omg_models/policy.sql new file mode 100644 index 00000000..a5ecdeb4 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/policy.sql @@ -0,0 +1,8 @@ +select + Policy_Identifier, + Effective_Date, + Expiration_Date, + Policy_Number, + Status_Code, + Geographic_Location_Identifier +from {{ source('acme_raw', 'Policy') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/policy_amount.sql b/shared/projects/dbt/acme_insurance/models/omg_models/policy_amount.sql new file mode 100644 index 00000000..ff1e6625 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/policy_amount.sql @@ -0,0 +1,13 @@ +select + Policy_Amount_Identifier, + Geographic_Location_Identifier, + Policy_Identifier, + Effective_Date, + Amount_Type_Code, + Earning_Begin_Date, + Earning_End_Date, + Policy_Coverage_Detail_Identifier, + Policy_Amount, + Insurable_Object_Identifier, + Insurance_Type_Code +from {{ source('acme_raw', 'Policy_Amount') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/policy_coverage_detail.sql b/shared/projects/dbt/acme_insurance/models/omg_models/policy_coverage_detail.sql new file mode 100644 index 00000000..aca79431 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/policy_coverage_detail.sql @@ -0,0 +1,11 @@ +select + Effective_Date, + Policy_Coverage_Detail_Identifier, + Coverage_Identifier, + Insurable_Object_Identifier, + Policy_Identifier, + Coverage_Part_Code, + Coverage_Description, + Expiration_Date, + Coverage_Inclusion_Exclusion_Code +from {{ source('acme_raw', 'Policy_Coverage_Detail') }} diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/premium.sql b/shared/projects/dbt/acme_insurance/models/omg_models/premium.sql new file mode 100644 index 00000000..5a40fcc2 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/premium.sql @@ -0,0 +1,3 @@ +select + Policy_Amount_Identifier +from {{ source('acme_raw', 'Premium') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/pysical_location.sql b/shared/projects/dbt/acme_insurance/models/omg_models/pysical_location.sql new file mode 100644 index 00000000..8c385439 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/pysical_location.sql @@ -0,0 +1,12 @@ +select + Physical_Location_Identifier, + Physical_Location_Name, + Latitude_Value, + Longitude_Value, + Altitude_Value, + Altitude_Mean_Sea_Level_Value, + Horizontal_Accuracy_Value, + Vertical_Accuracy_Value, + Travel_Direction_Description, + Location_Address_Identifier +from {{ source('acme_raw', 'Physical_Location') }} \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_models/underwriting_assessment.sql b/shared/projects/dbt/acme_insurance/models/omg_models/underwriting_assessment.sql new file mode 100644 index 00000000..5953df7d --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_models/underwriting_assessment.sql @@ -0,0 +1,3 @@ +select + Assessment_Result_Identifier +from {{ source('acme_raw', 'Underwriting_Assessment') }} diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/agreement.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/agreement.yaml new file mode 100644 index 00000000..ba53fe5b --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/agreement.yaml @@ -0,0 +1,15 @@ +semantic_models: + - name: agreement + model: ref('agreement') + entities: + - name: agreement_type_code + type: primary + - name: product_identifier + type: foreign + dimensions: + - name: agreement_name + type: categorical + - name: agreement_original_inception_date + type: time + type_params: + time_granularity: day diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/agreement_assesments.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/agreement_assesments.yaml new file mode 100644 index 00000000..4604300e --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/agreement_assesments.yaml @@ -0,0 +1,9 @@ +semantic_models: + - name: agreement_assessments + model: ref('agreement_assessment') + primary_entity: agreement_assessment + entities: + - name: agreement_identifier + type: foreign + - name: assessment_identifier + type: foreign diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/agreement_party_role.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/agreement_party_role.yaml new file mode 100644 index 00000000..293bd178 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/agreement_party_role.yaml @@ -0,0 +1,28 @@ +semantic_models: + - name: agreement_party_role + model: ref('agreement_party_role') + entities: + - name: policy + type: primary + expr: agreement_identifier + - name: party_identifier + description: "Use this in coordination with filter on party_role_code to refer to agent_id or policyholder_id " + type: foreign + dimensions: + - name: party_identifier_dim + description: "Use this in coordination with filter on party_role_code to refer to agent_id or policyholder_id " + type: categorical + expr: party_identifier + - name: effective_date + type: time + type_params: + time_granularity: day + - name: expiration_date + type: time + type_params: + time_granularity: day + - name: party_role_code + description: "Must filter using this dimension if referring to agents or policyholders. If party_role_code = 'PH' then Party_Identifier refers to policy_holder_id, if party_role_code = 'AG' then Party_Identifier refers to agent_id. Should be used in coordination with party_identifier" + type: categorical + + \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/assessment.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/assessment.yaml new file mode 100644 index 00000000..692f8fcc --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/assessment.yaml @@ -0,0 +1,19 @@ +semantic_models: + - name: assessment + model: ref('assessment') + entities: + - name: assessment_identifier + type: primary + dimensions: + - name: assessment_description + type: categorical + - name: begin_date + type: time + type_params: + time_granularity: day + - name: end_date + type: time + type_params: + time_granularity: day + - name: assessment_reason_description + type: categorical diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/assessment_party_role.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/assessment_party_role.yaml new file mode 100644 index 00000000..119ead41 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/assessment_party_role.yaml @@ -0,0 +1,20 @@ +semantic_models: + - name: assessment_party_role + model: ref('assesment_party_role') + primary_entity: assessment_party_role + entities: + - name: party_identifier + type: foreign + - name: assessment_identifier + type: foreign + dimensions: + - name: end_date + type: time + type_params: + time_granularity: day + - name: begin_date + type: time + type_params: + time_granularity: day + - name: party_role_code + type: categorical \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/assessment_result.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/assessment_result.yaml new file mode 100644 index 00000000..959f8a1a --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/assessment_result.yaml @@ -0,0 +1,11 @@ +semantic_models: + - name: assessment_result + model: ref('assessment_result') + entities: + - name: assessment_result_identifier + type: primary + - name: assessment_sdentifier + type: foreign + dimensions: + - name: assessment_result_type_code + type: categorical diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/catastrophe.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/catastrophe.yaml new file mode 100644 index 00000000..a72d9375 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/catastrophe.yaml @@ -0,0 +1,15 @@ +semantic_models: + - name: catastrophe + model: ref('catastrophe') + entities: + - name: catastrophe_identifier + type: primary + dimensions: + - name: catastrophe_type_code + type: categorical + - name: catastrophe_name + type: categorical + - name: industry_catastrophe_code + type: categorical + - name: company_catastrophe_code + type: categorical diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/claim.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/claim.yaml new file mode 100644 index 00000000..0988f190 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/claim.yaml @@ -0,0 +1,58 @@ +semantic_models: + - name: claim + model: ref('claim') + defaults: + agg_time_dimension: claims_made_date + entities: + - name: catastrophe_identifier + type: foreign + - name: insurable_object_identifier + type: foreign + - name: occurrence_identifier + type: foreign + - name: claim_identifier + type: primary + dimensions: + - name: claim_description + type: categorical + - name: company_claim_number + type: categorical + - name: company_subclaim_number + type: categorical + - name: claims_made_date + type: time + type_params: + time_granularity: day + - name: entry_into_claims_made_program_date + type: time + type_params: + time_granularity: day + - name: claim_open_date + type: time + type_params: + time_granularity: day + - name: claim_close_date + type: time + type_params: + time_granularity: day + - name: claim_reopen_date + type: time + type_params: + time_granularity: day + - name: claim_status_code + type: time + type_params: + time_granularity: day + - name: claim_reported_date + type: time + type_params: + time_granularity: day + measures: + - name: claims + expr: company_claim_number + agg: count + create_metric: true + - name: avg_time_to_settle_claim + expr: DATEDIFF('day', claim_open_date, claim_close_date) + agg: average + create_metric: true \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/claim_amount.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/claim_amount.yaml new file mode 100644 index 00000000..94553c2b --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/claim_amount.yaml @@ -0,0 +1,50 @@ +semantic_models: + - name: claim_amount + model: ref('claim_amount') + entities: + - name: claim_amount + type: primary + expr: claim_amount_identifier + - name: claim_identifier + type: foreign + - name: claim_offer_identifier + type: foreign + defaults: + agg_time_dimension: event_date + dimensions: + - name: amount_type_code + type: categorical + - name: event_date + type: time + type_params: + time_granularity: day + - name: insurance_type_code + type: categorical + measures: + - name: total_claim_amount + agg: sum + expr: claim_amount +metrics: + - name: loss_payment_amount + type: simple + label: Loss Payment Amount + type_params: + measure: total_claim_amount + filter: | + {{Dimension('claim_amount__has_loss_payment')}} = 1 + - name: loss_reserve_amount + type: simple + label: loss_reserve_amount + type_params: + measure: total_claim_amount + filter: | + {{Dimension('claim_amount__has_loss_reserve')}} = 1 + - name: total_loss_amount + description: Sum of loss_payment_amount and loss_reserve_amount + type: derived + label: Loss Amount + type_params: + expr: loss_payment_amount + loss_reserve_amount + metrics: + - name: loss_reserve_amount + - name: loss_payment_amount diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/claim_coverage.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/claim_coverage.yaml new file mode 100644 index 00000000..e6de3146 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/claim_coverage.yaml @@ -0,0 +1,14 @@ +semantic_models: + - name: claim_coverage + model: ref('claim_coverage') + entities: + - name: policy_coverage_detail + type: foreign + expr: policy_coverage_detail_identifier + - name: claim_identifier + type: primary + dimensions: + - name: effective_date + type: time + type_params: + time_granularity: day \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/expense_payment.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/expense_payment.yaml new file mode 100644 index 00000000..be156025 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/expense_payment.yaml @@ -0,0 +1,12 @@ +semantic_models: + - name: expense_payment + model: ref('expense_payment') + description: "Table containting expense_payment information." + entities: + - name: claim_amount + type: primary + expr: Claim_Amount_Identifier + dimensions: + - name: has_expense_payment + type: categorical + expr: "1" diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/expense_reserve.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/expense_reserve.yaml new file mode 100644 index 00000000..c88176d9 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/expense_reserve.yaml @@ -0,0 +1,12 @@ +semantic_models: + - name: expense_reserve + model: ref('expense_reserve') + description: "Table containting expense_reserve information." + entities: + - name: claim_amount + type: primary + expr: Claim_Amount_Identifier + dimensions: + - name: has_expense_reserve + type: categorical + expr: "1" \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/fire_claim.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/fire_claim.yaml new file mode 100644 index 00000000..98594897 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/fire_claim.yaml @@ -0,0 +1,35 @@ +semantic_models: + - name: fire_claim + model: ref('fire_claim') + description: "A semantic model for fire insurance claims data." + defaults: + agg_time_dimension: year_built + entities: + - name: policy + type: primary + expr: PolicyNo + - name: claim + type: foreign + expr: ClaimNumber + dimensions: + - name: insured_location + type: categorical + expr: InsuredLocation + - name: nearest_firestation_miles + type: categorical + expr: Nearest_Firestation_miles + - name: number_of_firefighters + type: categorical + expr: Number_of_Firefighters + - name: fireplace + type: categorical + expr: Fireplace + - name: year_built + type: time + type_params: + time_granularity: year + measures: + - name: premium + description: "The total premium amount for the policy." + agg: sum + expr: Premium diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/geographic_locations.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/geographic_locations.yaml new file mode 100644 index 00000000..d382ffe8 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/geographic_locations.yaml @@ -0,0 +1,33 @@ +semantic_models: + - name: geographic_location + description: "This semantic model represents various geographic locations along with their identifiers and types." + model: ref('geographic_location') + entities: + - name: geographic_location + type: primary + expr: Geographic_Location_Identifier + - name: location_address + type: foreign + expr: Location_Address_Identifier + dimensions: + - name: parent_geographic_location + type: categorical + expr: Parent_Geographic_Location_Identifier + - name: geographic_location_type + type: categorical + expr: Geographic_Location_Type_Code + - name: location_code + type: categorical + expr: Location_Code + - name: location_name + type: categorical + expr: Location_Name + - name: location_number + type: categorical + expr: Location_Number + - name: state_code + type: categorical + expr: State_Code + - name: physical_location + type: categorical + expr: Physical_Location_Identifier diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/insurable_objects.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/insurable_objects.yaml new file mode 100644 index 00000000..c0a912b9 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/insurable_objects.yaml @@ -0,0 +1,17 @@ +semantic_models: + - name: insurable_object # Semantic model name for insurable objects + model: ref('insurable_object') # The dbt model reference + description: "This table contains information about insurable objects, including their type and geographic location." + + entities: + - name: insurable_object_identifier + type: primary + expr: Insurable_Object_Identifier + - name: geographic_location + type: foreign + expr: Geographic_Location_Identifier + + dimensions: + - name: insurable_object_type + type: categorical + expr: Insurable_Object_Type_Code \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/location_address.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/location_address.yaml new file mode 100644 index 00000000..6a5b3424 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/location_address.yaml @@ -0,0 +1,46 @@ +semantic_models: + - name: location_address + model: ref('location_address') + description: "This table contains address information, including historical data for addresses that can change over time." + defaults: + agg_time_dimension: begin_date + + entities: + - name: location_address + type: primary + expr: location_address_identifier + + dimensions: + - name: line_1_address + type: categorical + expr: line_1_address + + - name: municipality_name + type: categorical + expr: municipality_name + + - name: line_2_address + type: categorical + expr: line_2_address + + - name: postal_code + type: categorical + expr: postal_code + + - name: country_code + type: categorical + expr: country_code + + - name: state_code + type: categorical + expr: state_code + + - name: begin_date + type: time + type_params: + time_granularity: day + + - name: end_date + type: time + type_params: + time_granularity: day \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/loss_payment.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/loss_payment.yaml new file mode 100644 index 00000000..545de3eb --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/loss_payment.yaml @@ -0,0 +1,12 @@ +semantic_models: + - name: loss_payment + model: ref('loss_payment') + description: "Table containting loss_payment information." + entities: + - name: claim_amount + type: primary + expr: Claim_Amount_Identifier + dimensions: + - name: has_loss_payment + type: categorical + expr: "1" diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/loss_reserve.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/loss_reserve.yaml new file mode 100644 index 00000000..94d83b6d --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/loss_reserve.yaml @@ -0,0 +1,12 @@ +semantic_models: + - name: loss_reserve + model: ref('loss_reserve') + description: "Table containting loss_reserve information." + entities: + - name: claim_amount + type: primary + expr: Claim_Amount_Identifier + dimensions: + - name: has_loss_reserve + type: categorical + expr: "1" diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/metricflow_time_spine.sql b/shared/projects/dbt/acme_insurance/models/omg_semantics/metricflow_time_spine.sql new file mode 100644 index 00000000..78227bcb --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/metricflow_time_spine.sql @@ -0,0 +1,24 @@ +{{ + config( + materialized = 'table', + ) +}} + +with days as ( + + {{ + dbt.date_spine( + 'day', + "cast('2000-01-01' as date)", + "cast('2027-01-01' as date)" + ) + }} + +), + +final as ( + select cast(date_day as date) as date_day + from days +) + +select * from final \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/metricflow_time_spine.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/metricflow_time_spine.yaml new file mode 100644 index 00000000..72deb4c0 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/metricflow_time_spine.yaml @@ -0,0 +1,8 @@ +models: + - name: metricflow_time_spine + description: "MetricFlow time spine with one row per day" + time_spine: + standard_granularity_column: date_day + columns: + - name: date_day + granularity: day diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/occurences.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/occurences.yaml new file mode 100644 index 00000000..6d3eed77 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/occurences.yaml @@ -0,0 +1,37 @@ +semantic_models: + - name: occurrence_events + model: ref('occurrences') + description: "Details of various occurrences including dates, times, and locations." + defaults: + # Assuming Occurrence_Begin_Date is the most relevant date for aggregation + agg_time_dimension: occurrence_begin_date + entities: + - name: occurrence + type: primary + expr: Occurrence_Identifier + - name: geographic_location_identifier + type: foreign + expr: Geographic_Location_Identifier + dimensions: + - name: catastrophic_event_indicator + type: categorical + expr: Catastrophic_Event_Indicator + - name: occurrence_begin_date + type: time + type_params: + time_granularity: day + - name: occurrence_end_date + type: time + type_params: + time_granularity: day + - name: occurrence_begin_time + type: time + type_params: + time_granularity: day + - name: occurrence_end_time + type: time + type_params: + time_granularity: day + - name: occurrence_name + type: categorical + expr: Occurrence_Name diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/organizations.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/organizations.yaml new file mode 100644 index 00000000..81d90590 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/organizations.yaml @@ -0,0 +1,33 @@ +semantic_models: + - name: organization + model: ref('organizations') + description: "A table containing information about various organizations, including identifiers and industry classifications." + entities: + - name: organization + type: primary + expr: Organization_Identifier + dimensions: + - name: industry_code + type: categorical + expr: Industry_Code + - name: organization_name + type: categorical + expr: Organization_Name + - name: dun_and_bradstreet_identifier + type: categorical + expr: Dun_And_Bradstreet_Identifier + - name: organization_type_code + type: categorical + expr: Organization_Type_Code + - name: alternate_name + type: categorical + expr: Alternate_Name + - name: organization_description + type: categorical + expr: Organization_Description + - name: acronym_name + type: categorical + expr: Acronym_Name + - name: industry_type_code + type: categorical + expr: Industry_Type_Code \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/party.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/party.yaml new file mode 100644 index 00000000..8361741a --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/party.yaml @@ -0,0 +1,32 @@ +semantic_models: + - name: party + model: ref('party') + description: "A table containing party information, including names, active dates, and types." + defaults: + agg_time_dimension: begin_date # Assuming Begin_Date is the most relevant time dimension for aggregation + + entities: + - name: party + type: primary + expr: Party_Identifier + + dimensions: + - name: party_name + type: categorical + expr: Party_Name + + - name: begin_date + type: time + type_params: + time_granularity: day + expr: Begin_Date + + - name: end_date + type: time + type_params: + time_granularity: day + expr: End_Date + + - name: party_type_code + type: categorical + expr: Party_Type_Code diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/policy.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/policy.yaml new file mode 100644 index 00000000..2069dc42 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/policy.yaml @@ -0,0 +1,35 @@ +semantic_models: + - name: policy + model: ref('policy') + description: "Table containting policy data" + defaults: + # Assuming Occurrence_Begin_Date is the most relevant date for aggregation + agg_time_dimension: policy_effective_date + entities: + - name: policy + type: primary + expr: Policy_Identifier + - name: geographic_location_identifier + type: foreign + expr: Geographic_Location_Identifier + dimensions: + - name: policy_number + type: categorical + - name: status_code + type: categorical + - name: policy_effective_date + type: time + type_params: + time_granularity: day + expr: Effective_Date + - name: policy_expiration_date + type: time + type_params: + time_granularity: day + expr: Expiration_Date + measures: + - name: number_of_policies + description: "The total number of policies." + agg: sum + expr: 1 + create_metric: true \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/policy_amount.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/policy_amount.yaml new file mode 100644 index 00000000..6ff58b2f --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/policy_amount.yaml @@ -0,0 +1,48 @@ +semantic_models: + - name: policy_amount + model: ref('policy_amount') + description: "A model representing the amounts associated with insurance policies, including details of the policy coverage and the insured object." + defaults: + agg_time_dimension: effective_date + entities: + - name: policy_amount + type: primary + expr: Policy_Amount_Identifier + - name: geographic_location + type: foreign + expr: Geographic_Location_Identifier + - name: policy + type: foreign + expr: Policy_Identifier + - name: policy_coverage_detail + type: foreign + expr: Policy_Coverage_Detail_Identifier + - name: insurable_object + type: foreign + expr: Insurable_Object_Identifier + dimensions: + - name: effective_date + type: time + type_params: + time_granularity: day + - name: amount_type_code + type: categorical + - name: earning_begin_date + type: time + type_params: + time_granularity: day + - name: earning_end_date + type: time + type_params: + time_granularity: day + - name: insurance_type_code + type: categorical + - name: policy_amount_dim + type: categorical + expr: Policy_Amount + measures: + - name: total_policy_amount + description: "The total amount associated with the policy." + agg: sum + expr: Policy_Amount + create_metric: true \ No newline at end of file diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/policy_coverage_detail.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/policy_coverage_detail.yaml new file mode 100644 index 00000000..afc574ff --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/policy_coverage_detail.yaml @@ -0,0 +1,36 @@ +semantic_models: + - name: policy_coverage_detail + model: ref('policy_coverage_detail') + description: "This semantic model represents the coverage details of policies including their effective dates, descriptions, and identifiers." + defaults: + agg_time_dimension: effective_date + + entities: + - name: policy_coverage_detail + type: primary + expr: policy_coverage_detail_identifier + - name: coverage + type: foreign + expr: coverage_identifier + - name: insurable_object + type: foreign + expr: insurable_object_identifier + - name: policy + type: foreign + expr: policy_identifier + + dimensions: + - name: effective_date + type: time + type_params: + time_granularity: day + - name: expiration_date + type: time + type_params: + time_granularity: day + - name: coverage_part_code + type: categorical + - name: coverage_description + type: categorical + - name: coverage_inclusion_exclusion_code + type: categorical diff --git a/shared/projects/dbt/acme_insurance/models/omg_semantics/premium.yaml b/shared/projects/dbt/acme_insurance/models/omg_semantics/premium.yaml new file mode 100644 index 00000000..6c848403 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/omg_semantics/premium.yaml @@ -0,0 +1,13 @@ +semantic_models: + - name: premium + model: ref('premium') + description: "Table containting premium information." + entities: + - name: policy_amount + type: primary + expr: Policy_Amount_Identifier + dimensions: + - name: has_premium + type: categorical + description: "Filter on this to determine if row represents a premium. Filter should evaluate to 'has_premium = 1' if a premium and not if not a premium" + expr: "1" diff --git a/shared/projects/dbt/acme_insurance/models/sources.yml b/shared/projects/dbt/acme_insurance/models/sources.yml new file mode 100644 index 00000000..0e7442a7 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/models/sources.yml @@ -0,0 +1,39 @@ +version: 2 + +sources: + - name: acme_raw + schema: main + tables: + - name: Agreement + - name: Agreement_Assessment + - name: Agreement_Party_Role + - name: Assesment_Party_Role + - name: Assessment + - name: Assessment_Result + - name: Catastrophe + - name: Claim + - name: Claim_Amount + - name: Claim_Coverage + - name: Expense_Payment + - name: Expense_Reserve + - name: FireClaim + identifier: fire_claim + - name: Geographic_Location + - name: Insurable_Object + - name: Location_Address + - name: Loss_Payment + - name: Loss_Reserve + - name: Occurrence + identifier: occurrences + - name: Organization + identifier: organizations + - name: Party + - name: Party_Role + - name: Person + - name: Physical_Location + identifier: pysical_location + - name: Policy + - name: Policy_Amount + - name: Policy_Coverage_Detail + - name: Premium + - name: Underwriting_Assessment diff --git a/shared/projects/dbt/acme_insurance/packages.yml b/shared/projects/dbt/acme_insurance/packages.yml new file mode 100644 index 00000000..1600223d --- /dev/null +++ b/shared/projects/dbt/acme_insurance/packages.yml @@ -0,0 +1,3 @@ +packages: + - package: dbt-labs/dbt_utils + version: 1.3.3 diff --git a/shared/projects/dbt/acme_insurance/profiles.yml b/shared/projects/dbt/acme_insurance/profiles.yml new file mode 100644 index 00000000..b8369a30 --- /dev/null +++ b/shared/projects/dbt/acme_insurance/profiles.yml @@ -0,0 +1,20 @@ +acme_insurance-duckdb: + target: dev + outputs: + dev: + type: duckdb + path: "./acme_insurance.duckdb" + schema: main + +acme_insurance-snowflake: + target: dev + outputs: + dev: + type: snowflake + account: + user: + password: + role: + database: + schema: + warehouse: diff --git a/shared/projects/dbt/airbnb/package-lock.yml b/shared/projects/dbt/airbnb/package-lock.yml index c0e4c1ad..521bb7a9 100644 --- a/shared/projects/dbt/airbnb/package-lock.yml +++ b/shared/projects/dbt/airbnb/package-lock.yml @@ -1,5 +1,5 @@ packages: - - name: dbt_utils - package: dbt-labs/dbt_utils - version: 1.3.2 -sha1_hash: ccc8b17d4482f52f5cce6cf4ab0518ae8c147118 +- package: dbt-labs/dbt_utils + name: dbt_utils + version: 1.3.2 +sha1_hash: 0f4de24c53379b20795e3fc20ee5d190b39e54d5 diff --git a/shared/scripts/fuzzy_compare.py b/shared/scripts/fuzzy_compare.py new file mode 100644 index 00000000..0547ee33 --- /dev/null +++ b/shared/scripts/fuzzy_compare.py @@ -0,0 +1,258 @@ +#!/usr/bin/env python3 +"""Fuzzy comparison of query results for ADE-Bench. + +Compares an agent's result table against a gold standard CSV file, +tolerating differences in column names, column ordering, row ordering, +and minor numeric precision differences. + +Columns are matched by their content (sorted values), not by name. +Extra columns in the result are tolerated. Numeric comparisons use +atol=1e-5, rtol=1e-5 tolerance. + +Creates a `fuzzy_match_result` table in the DuckDB database: + - Empty (0 rows) if comparison passes + - Contains error details if comparison fails + +Usage: + python fuzzy_compare.py [--db-path ] +""" + +import argparse +import os +import sys +from pathlib import Path + +try: + import duckdb +except ImportError: + print("Error: duckdb is required.", file=sys.stderr) + sys.exit(1) + +try: + import pandas as pd +except ImportError: + print("Error: pandas is required.", file=sys.stderr) + sys.exit(1) + + +def find_db_path(): + """Find the DuckDB database path from profiles.yml.""" + try: + import yaml + for profiles_path in ['/app/profiles.yml', '/app/profile.yml']: + if not os.path.exists(profiles_path): + continue + with open(profiles_path) as f: + profiles = yaml.safe_load(f) + for profile_name, profile in profiles.items(): + if not isinstance(profile, dict) or 'outputs' not in profile: + continue + dev = profile['outputs'].get('dev', {}) + if dev.get('type') != 'duckdb': + continue + db_path = dev.get('path', 'database.duckdb') + if not os.path.isabs(db_path): + db_path = os.path.join('/app', db_path) + return db_path + except Exception: + pass + + # Fallback: look for any .duckdb file in /app + for f in Path('/app').glob('*.duckdb'): + return str(f) + + return '/app/database.duckdb' + + +def _is_numeric_series(series): + """Check if a pandas Series contains numeric values.""" + if pd.api.types.is_numeric_dtype(series.dtype): + return True + if series.dtype == object and len(series) > 0: + first = series.dropna().iloc[0] if series.dropna().any() else None + if first is not None: + return isinstance(first, (int, float, complex)) or hasattr(first, '__float__') + return False + + +def match_columns(gold_df, comp_df): + """Match gold columns to comparison columns by content. + + For each column in gold, find a column in comp with the same type + and same sorted values. Returns a dict {comp_col: gold_col}. + """ + mapping = {} + + for gold_col in sorted(gold_df.columns): + gold_vals = gold_df[gold_col].sort_values().reset_index(drop=True) + is_gold_numeric = _is_numeric_series(gold_df[gold_col]) + + for comp_col in comp_df.columns: + if comp_col in mapping: + continue + + comp_vals = comp_df[comp_col].sort_values().reset_index(drop=True) + is_comp_numeric = _is_numeric_series(comp_df[comp_col]) + + # Check type compatibility + types_ok = ( + gold_df[gold_col].dtype == comp_df[comp_col].dtype + or (is_gold_numeric and is_comp_numeric) + ) + if not types_ok: + continue + + # Try exact match + if gold_vals.equals(comp_vals): + mapping[comp_col] = gold_col + break + + # Try approximate numeric match + if is_gold_numeric and is_comp_numeric: + try: + gold_float = gold_vals.astype(float) + comp_float = comp_vals.astype(float) + pd.testing.assert_series_equal( + gold_float, comp_float, + check_dtype=False, check_names=False, + atol=1e-5, rtol=1e-5, + ) + mapping[comp_col] = gold_col + break + except (AssertionError, ValueError, TypeError): + pass + + mapped_gold = set(mapping.values()) + unmapped = set(gold_df.columns) - mapped_gold + if unmapped: + raise ValueError( + f"Could not match gold columns: {unmapped}. " + f"Available comparison columns: {list(comp_df.columns)}" + ) + + return mapping + + +def compare(gold_df, comp_df): + """Compare two DataFrames with fuzzy matching. + + Returns (is_match: bool, error_message: str | None). + """ + if gold_df.empty and comp_df.empty: + return True, None + + if len(gold_df) != len(comp_df): + return False, f"Row count mismatch: gold={len(gold_df)}, result={len(comp_df)}" + + if len(gold_df.columns) > len(comp_df.columns): + return False, ( + f"Result has fewer columns ({len(comp_df.columns)}) " + f"than expected ({len(gold_df.columns)})" + ) + + # Match columns by content + try: + col_mapping = match_columns(gold_df, comp_df) + except ValueError as e: + return False, str(e) + + # Rename and reorder to match gold + comp_df = comp_df.rename(columns=col_mapping) + cols = sorted(gold_df.columns) + comp_df = comp_df[cols].copy() + gold_df = gold_df.reindex(columns=cols) + + # Sort rows + gold_df = gold_df.sort_values(by=cols).reset_index(drop=True) + comp_df = comp_df.sort_values(by=cols).reset_index(drop=True) + + # Normalize numeric types (Decimal vs float, int vs float, etc.) + for col in cols: + g_numeric = _is_numeric_series(gold_df[col]) + c_numeric = _is_numeric_series(comp_df[col]) + if g_numeric and c_numeric: + try: + gold_df[col] = gold_df[col].astype(float) + comp_df[col] = comp_df[col].astype(float) + except (ValueError, TypeError): + pass + + # Final comparison + if gold_df.equals(comp_df): + return True, None + + # Column-by-column check for detailed error reporting + for col in cols: + if gold_df[col].equals(comp_df[col]): + continue + + if pd.api.types.is_numeric_dtype(gold_df[col]): + try: + pd.testing.assert_series_equal( + gold_df[col], comp_df[col], + check_dtype=False, check_names=False, + atol=1e-5, rtol=1e-5, + ) + continue # Close enough + except AssertionError: + pass + + diff_mask = gold_df[col] != comp_df[col] + first_diff = diff_mask.idxmax() + return False, ( + f"Column '{col}' differs at row {first_diff}: " + f"gold={gold_df[col].iloc[first_diff]!r}, " + f"result={comp_df[col].iloc[first_diff]!r}" + ) + + return True, None + + +def main(): + parser = argparse.ArgumentParser(description='Fuzzy comparison of query results') + parser.add_argument('result_table', help='Name of the result table in DuckDB') + parser.add_argument('gold_csv_path', help='Path to the gold standard CSV file') + parser.add_argument('--db-path', help='Path to DuckDB database', default=None) + args = parser.parse_args() + + db_path = args.db_path or find_db_path() + + conn = duckdb.connect(db_path) + + try: + # Load gold CSV + gold_df = pd.read_csv(args.gold_csv_path) + + # Load result table + try: + result_df = conn.execute(f"SELECT * FROM {args.result_table}").fetchdf() + except Exception as e: + error_msg = f"Could not read result table '{args.result_table}': {e}" + conn.execute( + "CREATE OR REPLACE TABLE fuzzy_match_result AS SELECT ? as error", + [error_msg], + ) + print(f"FAIL: {error_msg}", file=sys.stderr) + return + + # Run comparison + is_match, error_msg = compare(gold_df, result_df) + + if is_match: + conn.execute( + "CREATE OR REPLACE TABLE fuzzy_match_result AS SELECT 1 WHERE FALSE" + ) + print("PASS: Results match") + else: + conn.execute( + "CREATE OR REPLACE TABLE fuzzy_match_result AS SELECT ? as error", + [error_msg], + ) + print(f"FAIL: {error_msg}", file=sys.stderr) + + finally: + conn.close() + + +if __name__ == '__main__': + main() diff --git a/tasks/free_text_acme_hqhs_001/seeds/_no-op.txt b/tasks/free_text_acme_hqhs_001/seeds/_no-op.txt new file mode 100644 index 00000000..86471a9b --- /dev/null +++ b/tasks/free_text_acme_hqhs_001/seeds/_no-op.txt @@ -0,0 +1,9 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + NoOfClaims: bigint + AvgLoss: double diff --git a/tasks/free_text_acme_hqhs_001/seeds/solution__result.csv b/tasks/free_text_acme_hqhs_001/seeds/solution__result.csv new file mode 100644 index 00000000..ee0ccbcb --- /dev/null +++ b/tasks/free_text_acme_hqhs_001/seeds/solution__result.csv @@ -0,0 +1,2 @@ +Policy_Number,NoOfClaims,AvgLoss +31003000336,2,6800.0 diff --git a/tasks/free_text_acme_hqhs_001/setup.sh b/tasks/free_text_acme_hqhs_001/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqhs_001/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqhs_001/solution.sh b/tasks/free_text_acme_hqhs_001/solution.sh new file mode 100755 index 00000000..1d5ce590 --- /dev/null +++ b/tasks/free_text_acme_hqhs_001/solution.sh @@ -0,0 +1,23 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + policy_number, + count(claim.claim_identifier) as NoOfClaims, + AVG(ca_lp.claim_amount + ca_lr.claim_amount + ca_ep.claim_amount + ca_er.claim_amount) as AvgLoss +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier +group by policy_number +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqhs_001/task.yaml b/tasks/free_text_acme_hqhs_001/task.yaml new file mode 100644 index 00000000..1223f5e2 --- /dev/null +++ b/tasks/free_text_acme_hqhs_001/task.yaml @@ -0,0 +1,39 @@ +task_id: free_text_acme_hqhs_001 +status: ready +description: 'HQHS: AVG-COUNT-Policy-Coverage-Claim-Loss Payment&Expense Payment&Expense + Reserve&Loss Reserve' +prompts: +- key: base + prompt: 'What is the average loss of each policy by policy number and number of + claims where loss is the sum of loss payment, loss reserve, expense payment, expense + reserve amounts? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the average loss of each policy by policy number and number of claims + where loss is the sum of loss payment, loss reserve, expense payment, expense + reserve amounts? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqhs_001/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqhs_001/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqhs_001/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqhs_002/seeds/_no-op.txt b/tasks/free_text_acme_hqhs_002/seeds/_no-op.txt new file mode 100644 index 00000000..16e82d42 --- /dev/null +++ b/tasks/free_text_acme_hqhs_002/seeds/_no-op.txt @@ -0,0 +1,9 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + Catastrophe_Name: varchar + TotalLoss: bigint diff --git a/tasks/free_text_acme_hqhs_002/seeds/solution__result.csv b/tasks/free_text_acme_hqhs_002/seeds/solution__result.csv new file mode 100644 index 00000000..2a2453de --- /dev/null +++ b/tasks/free_text_acme_hqhs_002/seeds/solution__result.csv @@ -0,0 +1,2 @@ +Policy_Number,Catastrophe_Name,TotalLoss +31003000336,Fire,13600 diff --git a/tasks/free_text_acme_hqhs_002/setup.sh b/tasks/free_text_acme_hqhs_002/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqhs_002/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqhs_002/solution.sh b/tasks/free_text_acme_hqhs_002/solution.sh new file mode 100755 index 00000000..6ceac193 --- /dev/null +++ b/tasks/free_text_acme_hqhs_002/solution.sh @@ -0,0 +1,24 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + policy_number, + catastrophe_name, + sum(ca_lp.claim_amount + ca_lr.claim_amount + ca_ep.claim_amount + ca_er.claim_amount) as TotalLoss +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join catastrophe on claim.catastrophe_identifier = catastrophe.catastrophe_identifier +group by policy_number, catastrophe_name +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqhs_002/task.yaml b/tasks/free_text_acme_hqhs_002/task.yaml new file mode 100644 index 00000000..a9687027 --- /dev/null +++ b/tasks/free_text_acme_hqhs_002/task.yaml @@ -0,0 +1,37 @@ +task_id: free_text_acme_hqhs_002 +status: ready +description: 'HQHS: SUM-Policy - Coverage - Claim - Catastrophe - Loss Payment&Expense + Payment&Expense Reserve&Loss Reserve' +prompts: +- key: base + prompt: 'What are the total loss, which is the sum of loss payment, loss reserve, + expense payment, expense reserve amount by catastrophe and policy number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are the total loss, which is the sum of loss payment, loss reserve, expense + payment, expense reserve amount by catastrophe and policy number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqhs_002/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqhs_002/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqhs_002/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqhs_003/seeds/_no-op.txt b/tasks/free_text_acme_hqhs_003/seeds/_no-op.txt new file mode 100644 index 00000000..6ca03347 --- /dev/null +++ b/tasks/free_text_acme_hqhs_003/seeds/_no-op.txt @@ -0,0 +1,10 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + Company_Claim_Number: integer + Catastrophe_Name: varchar + Loss: integer diff --git a/tasks/free_text_acme_hqhs_003/seeds/solution__result.csv b/tasks/free_text_acme_hqhs_003/seeds/solution__result.csv new file mode 100644 index 00000000..bef4471b --- /dev/null +++ b/tasks/free_text_acme_hqhs_003/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Policy_Number,Company_Claim_Number,Catastrophe_Name,Loss +31003000336,12312701,Fire,4600 +31003000336,12312702,Fire,9000 diff --git a/tasks/free_text_acme_hqhs_003/setup.sh b/tasks/free_text_acme_hqhs_003/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqhs_003/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqhs_003/solution.sh b/tasks/free_text_acme_hqhs_003/solution.sh new file mode 100755 index 00000000..a5a92428 --- /dev/null +++ b/tasks/free_text_acme_hqhs_003/solution.sh @@ -0,0 +1,25 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + policy_number, + company_claim_number, + catastrophe_name, + (ca_lp.claim_amount + ca_lr.claim_amount + ca_ep.claim_amount + ca_er.claim_amount) as Loss +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join catastrophe on claim.catastrophe_identifier = catastrophe.catastrophe_identifier + +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqhs_003/task.yaml b/tasks/free_text_acme_hqhs_003/task.yaml new file mode 100644 index 00000000..cdfe914d --- /dev/null +++ b/tasks/free_text_acme_hqhs_003/task.yaml @@ -0,0 +1,39 @@ +task_id: free_text_acme_hqhs_003 +status: ready +description: 'HQHS: Policy - Coverage - Claim - Catastrophe - Loss Payment&Expense + Payment&Expense Reserve&Loss Reserve' +prompts: +- key: base + prompt: 'What are the total loss, which is the sum of loss payment, loss reserve, + expense payment, expense reserve amount by claim number, catastrophe and corresponding + policy number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are the total loss, which is the sum of loss payment, loss reserve, expense + payment, expense reserve amount by claim number, catastrophe and corresponding + policy number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqhs_003/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqhs_003/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqhs_003/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqhs_004/seeds/_no-op.txt b/tasks/free_text_acme_hqhs_004/seeds/_no-op.txt new file mode 100644 index 00000000..a3b2dfb1 --- /dev/null +++ b/tasks/free_text_acme_hqhs_004/seeds/_no-op.txt @@ -0,0 +1,9 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + Party_Identifier: integer + LossRatio: double diff --git a/tasks/free_text_acme_hqhs_004/seeds/solution__result.csv b/tasks/free_text_acme_hqhs_004/seeds/solution__result.csv new file mode 100644 index 00000000..6f155aeb --- /dev/null +++ b/tasks/free_text_acme_hqhs_004/seeds/solution__result.csv @@ -0,0 +1,2 @@ +Policy_Number,Party_Identifier,LossRatio +31003000336,2,0.68 diff --git a/tasks/free_text_acme_hqhs_004/setup.sh b/tasks/free_text_acme_hqhs_004/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqhs_004/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqhs_004/solution.sh b/tasks/free_text_acme_hqhs_004/solution.sh new file mode 100755 index 00000000..85bb00ac --- /dev/null +++ b/tasks/free_text_acme_hqhs_004/solution.sh @@ -0,0 +1,27 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + policy_number, + agreement_party_role.party_identifier, + sum(ca_lp.claim_amount + ca_lr.claim_amount + ca_ep.claim_amount + ca_er.claim_amount)/policy_amount as LossRatio +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join policy_amount on policy_coverage_detail.policy_coverage_detail_identifier = policy_amount.policy_coverage_detail_identifier + inner join agreement_party_role on agreement_party_role.agreement_identifier = policy.policy_identifier + inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +where agreement_party_role.party_role_code = 'AG' +group by policy_number, policy_amount, party_identifier +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqhs_004/task.yaml b/tasks/free_text_acme_hqhs_004/task.yaml new file mode 100644 index 00000000..e196721c --- /dev/null +++ b/tasks/free_text_acme_hqhs_004/task.yaml @@ -0,0 +1,37 @@ +task_id: free_text_acme_hqhs_004 +status: ready +description: 'HQHS: 2Agent - Policy - Coverage - Claim - Loss Payment&Expense Payment&Expense + Reserve&Loss Reserve' +prompts: +- key: base + prompt: 'What is the loss ratio of each policy and agent who sold it by policy number + and agent id? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the loss ratio of each policy and agent who sold it by policy number and + agent id? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqhs_004/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqhs_004/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqhs_004/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqhs_005/seeds/_no-op.txt b/tasks/free_text_acme_hqhs_005/seeds/_no-op.txt new file mode 100644 index 00000000..0541bf6f --- /dev/null +++ b/tasks/free_text_acme_hqhs_005/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + AgentID: integer + Total_Loss: bigint diff --git a/tasks/free_text_acme_hqhs_005/seeds/solution__result.csv b/tasks/free_text_acme_hqhs_005/seeds/solution__result.csv new file mode 100644 index 00000000..2aa60f82 --- /dev/null +++ b/tasks/free_text_acme_hqhs_005/seeds/solution__result.csv @@ -0,0 +1,2 @@ +AgentID,Total_Loss +2,13600 diff --git a/tasks/free_text_acme_hqhs_005/setup.sh b/tasks/free_text_acme_hqhs_005/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqhs_005/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqhs_005/solution.sh b/tasks/free_text_acme_hqhs_005/solution.sh new file mode 100755 index 00000000..017a60bc --- /dev/null +++ b/tasks/free_text_acme_hqhs_005/solution.sh @@ -0,0 +1,24 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + party_identifier as AgentID, + sum(ca_lp.claim_amount + ca_lr.claim_amount + ca_ep.claim_amount + ca_er.claim_amount) as Total_Loss +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join agreement_party_role on agreement_party_role.agreement_identifier = policy.policy_identifier +where agreement_party_role.party_role_code = 'AG' +group by party_identifier +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqhs_005/task.yaml b/tasks/free_text_acme_hqhs_005/task.yaml new file mode 100644 index 00000000..a6df9a33 --- /dev/null +++ b/tasks/free_text_acme_hqhs_005/task.yaml @@ -0,0 +1,39 @@ +task_id: free_text_acme_hqhs_005 +status: ready +description: 'HQHS: Agent - Policy - Coverage - Claim - Loss Payment&Expense Payment&Expense + Reserve&Loss Reserve' +prompts: +- key: base + prompt: 'What is the total loss of each policy that an agent has sold by agent id + where total loss is the sum of loss payment, loss reserve, expense payment, expense + reserve amounts? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the total loss of each policy that an agent has sold by agent id where + total loss is the sum of loss payment, loss reserve, expense payment, expense + reserve amounts? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqhs_005/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqhs_005/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqhs_005/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqhs_006/seeds/_no-op.txt b/tasks/free_text_acme_hqhs_006/seeds/_no-op.txt new file mode 100644 index 00000000..1a0a9fa8 --- /dev/null +++ b/tasks/free_text_acme_hqhs_006/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Company_Claim_Number: integer + Total_Loss: integer diff --git a/tasks/free_text_acme_hqhs_006/seeds/solution__result.csv b/tasks/free_text_acme_hqhs_006/seeds/solution__result.csv new file mode 100644 index 00000000..4684a563 --- /dev/null +++ b/tasks/free_text_acme_hqhs_006/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Company_Claim_Number,Total_Loss +12312701,4600 +12312702,9000 diff --git a/tasks/free_text_acme_hqhs_006/setup.sh b/tasks/free_text_acme_hqhs_006/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqhs_006/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqhs_006/solution.sh b/tasks/free_text_acme_hqhs_006/solution.sh new file mode 100755 index 00000000..9544788a --- /dev/null +++ b/tasks/free_text_acme_hqhs_006/solution.sh @@ -0,0 +1,19 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + company_claim_number, + (ca_lp.claim_amount + ca_lr.claim_amount + ca_ep.claim_amount + ca_er.claim_amount) as Total_Loss +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqhs_006/task.yaml b/tasks/free_text_acme_hqhs_006/task.yaml new file mode 100644 index 00000000..fa4222e1 --- /dev/null +++ b/tasks/free_text_acme_hqhs_006/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_hqhs_006 +status: ready +description: 'HQHS: What is the total loss by claim number?' +prompts: +- key: base + prompt: 'What is the total loss of each claim by claim number where total loss is + the sum of loss payment, loss reserve, expense payment, expense reserve amount? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the total loss of each claim by claim number where total loss is the sum + of loss payment, loss reserve, expense payment, expense reserve amount? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqhs_006/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqhs_006/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqhs_006/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqhs_007/seeds/_no-op.txt b/tasks/free_text_acme_hqhs_007/seeds/_no-op.txt new file mode 100644 index 00000000..c2e9c391 --- /dev/null +++ b/tasks/free_text_acme_hqhs_007/seeds/_no-op.txt @@ -0,0 +1,11 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + premium: integer + NoOfClaims: bigint + TotalLoss: bigint + LossRatio: double diff --git a/tasks/free_text_acme_hqhs_007/seeds/solution__result.csv b/tasks/free_text_acme_hqhs_007/seeds/solution__result.csv new file mode 100644 index 00000000..98648116 --- /dev/null +++ b/tasks/free_text_acme_hqhs_007/seeds/solution__result.csv @@ -0,0 +1,2 @@ +Policy_Number,premium,NoOfClaims,TotalLoss,LossRatio +31003000336,20000,2,13600,0.68 diff --git a/tasks/free_text_acme_hqhs_007/setup.sh b/tasks/free_text_acme_hqhs_007/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqhs_007/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqhs_007/solution.sh b/tasks/free_text_acme_hqhs_007/solution.sh new file mode 100755 index 00000000..8adfe3cc --- /dev/null +++ b/tasks/free_text_acme_hqhs_007/solution.sh @@ -0,0 +1,27 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + policy_number, + policy_amount as premium, + count(company_claim_number) as NoOfClaims, + sum(ca_lp.claim_amount + ca_lr.claim_amount + ca_ep.claim_amount + ca_er.claim_amount) as TotalLoss, + sum(ca_lp.claim_amount + ca_lr.claim_amount + ca_ep.claim_amount + ca_er.claim_amount)/policy_amount as LossRatio +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join policy_amount on policy_coverage_detail.policy_coverage_detail_identifier = policy_amount.policy_coverage_detail_identifier + inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +group by policy_number, policy_amount +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqhs_007/task.yaml b/tasks/free_text_acme_hqhs_007/task.yaml new file mode 100644 index 00000000..f699f19a --- /dev/null +++ b/tasks/free_text_acme_hqhs_007/task.yaml @@ -0,0 +1,38 @@ +task_id: free_text_acme_hqhs_007 +status: ready +description: 'HQHS: What is the loss ratio by policy number?' +prompts: +- key: base + prompt: 'What is the loss ratio, number of claims, total loss by policy number and + premium where total loss is the sum of loss payment, loss reserve, expense payment, + expense reserve amount and loss ratio is total loss divided by premium? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the loss ratio, number of claims, total loss by policy number and premium + where total loss is the sum of loss payment, loss reserve, expense payment, expense + reserve amount and loss ratio is total loss divided by premium? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqhs_007/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqhs_007/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqhs_007/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqhs_008/seeds/_no-op.txt b/tasks/free_text_acme_hqhs_008/seeds/_no-op.txt new file mode 100644 index 00000000..d11e1646 --- /dev/null +++ b/tasks/free_text_acme_hqhs_008/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + AvgLoss: double diff --git a/tasks/free_text_acme_hqhs_008/seeds/solution__result.csv b/tasks/free_text_acme_hqhs_008/seeds/solution__result.csv new file mode 100644 index 00000000..5835c95b --- /dev/null +++ b/tasks/free_text_acme_hqhs_008/seeds/solution__result.csv @@ -0,0 +1,2 @@ +Policy_Number,AvgLoss +31003000336,6800.0 diff --git a/tasks/free_text_acme_hqhs_008/setup.sh b/tasks/free_text_acme_hqhs_008/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqhs_008/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqhs_008/solution.sh b/tasks/free_text_acme_hqhs_008/solution.sh new file mode 100755 index 00000000..d421769f --- /dev/null +++ b/tasks/free_text_acme_hqhs_008/solution.sh @@ -0,0 +1,22 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + policy_number, + AVG(ca_lp.claim_amount + ca_lr.claim_amount + ca_ep.claim_amount + ca_er.claim_amount) as AvgLoss +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier +group by policy_number +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqhs_008/task.yaml b/tasks/free_text_acme_hqhs_008/task.yaml new file mode 100644 index 00000000..6383a820 --- /dev/null +++ b/tasks/free_text_acme_hqhs_008/task.yaml @@ -0,0 +1,37 @@ +task_id: free_text_acme_hqhs_008 +status: ready +description: 'HQHS: AVG-Policy-Coverage-Claim-Loss Payment&Expense Payment&Expense + Reserve&Loss Reserve' +prompts: +- key: base + prompt: 'What is the average loss of each policy by policy number where loss is + the sum of loss payment, loss reserve, expense payment, expense reserve amounts? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the average loss of each policy by policy number where loss is the sum + of loss payment, loss reserve, expense payment, expense reserve amounts? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqhs_008/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqhs_008/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqhs_008/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqhs_009/seeds/_no-op.txt b/tasks/free_text_acme_hqhs_009/seeds/_no-op.txt new file mode 100644 index 00000000..85153385 --- /dev/null +++ b/tasks/free_text_acme_hqhs_009/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + Total_Loss: bigint diff --git a/tasks/free_text_acme_hqhs_009/seeds/solution__result.csv b/tasks/free_text_acme_hqhs_009/seeds/solution__result.csv new file mode 100644 index 00000000..0e1ddf19 --- /dev/null +++ b/tasks/free_text_acme_hqhs_009/seeds/solution__result.csv @@ -0,0 +1,2 @@ +Policy_Number,Total_Loss +31003000336,13600 diff --git a/tasks/free_text_acme_hqhs_009/setup.sh b/tasks/free_text_acme_hqhs_009/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqhs_009/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqhs_009/solution.sh b/tasks/free_text_acme_hqhs_009/solution.sh new file mode 100755 index 00000000..d1fc6fd7 --- /dev/null +++ b/tasks/free_text_acme_hqhs_009/solution.sh @@ -0,0 +1,22 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + policy_number, + sum(ca_lp.claim_amount + ca_lr.claim_amount + ca_ep.claim_amount + ca_er.claim_amount) as Total_Loss +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier +group by policy_number +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqhs_009/task.yaml b/tasks/free_text_acme_hqhs_009/task.yaml new file mode 100644 index 00000000..ecb6714e --- /dev/null +++ b/tasks/free_text_acme_hqhs_009/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_hqhs_009 +status: ready +description: 'HQHS: What is the total loss by policy number?' +prompts: +- key: base + prompt: 'What is the total loss of each policy by policy number where total loss + is the sum of loss payment, loss reserve, expense payment, expense reserve amounts? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the total loss of each policy by policy number where total loss is the + sum of loss payment, loss reserve, expense payment, expense reserve amounts? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqhs_009/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqhs_009/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqhs_009/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqhs_010/seeds/_no-op.txt b/tasks/free_text_acme_hqhs_010/seeds/_no-op.txt new file mode 100644 index 00000000..0576d38c --- /dev/null +++ b/tasks/free_text_acme_hqhs_010/seeds/_no-op.txt @@ -0,0 +1,11 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Party_Identifier: integer + Policy_Number: bigint + premium: integer + Company_Claim_Number: integer + Loss: integer diff --git a/tasks/free_text_acme_hqhs_010/seeds/solution__result.csv b/tasks/free_text_acme_hqhs_010/seeds/solution__result.csv new file mode 100644 index 00000000..2cd91537 --- /dev/null +++ b/tasks/free_text_acme_hqhs_010/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Party_Identifier,Policy_Number,premium,Company_Claim_Number,Loss +1,31003000336,20000,12312701,4600 +1,31003000336,20000,12312702,9000 diff --git a/tasks/free_text_acme_hqhs_010/setup.sh b/tasks/free_text_acme_hqhs_010/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqhs_010/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqhs_010/solution.sh b/tasks/free_text_acme_hqhs_010/solution.sh new file mode 100755 index 00000000..fec3964d --- /dev/null +++ b/tasks/free_text_acme_hqhs_010/solution.sh @@ -0,0 +1,28 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + party_identifier, + policy_number, + policy_amount as premium, + company_claim_number, + (ca_lp.claim_amount + ca_lr.claim_amount + ca_ep.claim_amount + ca_er.claim_amount) as Loss +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join policy_amount on policy_coverage_detail.policy_coverage_detail_identifier = policy_amount.policy_coverage_detail_identifier + inner join agreement_party_role on agreement_party_role.agreement_identifier = policy.policy_identifier + inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +where agreement_party_role.party_role_code = 'PH' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqhs_010/task.yaml b/tasks/free_text_acme_hqhs_010/task.yaml new file mode 100644 index 00000000..ffb6ce11 --- /dev/null +++ b/tasks/free_text_acme_hqhs_010/task.yaml @@ -0,0 +1,39 @@ +task_id: free_text_acme_hqhs_010 +status: ready +description: 'HQHS: What are the total loss by claim number and corresponding policy + number, policy holder and premium amount paid?' +prompts: +- key: base + prompt: 'What are the total loss, which is the sum of loss payment, loss reserve, + expense payment, expense reserve amount by claim number and corresponding policy + number, policy holder and premium amount paid? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are the total loss, which is the sum of loss payment, loss reserve, expense + payment, expense reserve amount by claim number and corresponding policy number, + policy holder and premium amount paid? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqhs_010/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqhs_010/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqhs_010/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqls_001/seeds/_no-op.txt b/tasks/free_text_acme_hqls_001/seeds/_no-op.txt new file mode 100644 index 00000000..9df3bcc2 --- /dev/null +++ b/tasks/free_text_acme_hqls_001/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + NoOfClaims: bigint diff --git a/tasks/free_text_acme_hqls_001/seeds/solution__result.csv b/tasks/free_text_acme_hqls_001/seeds/solution__result.csv new file mode 100644 index 00000000..d720b253 --- /dev/null +++ b/tasks/free_text_acme_hqls_001/seeds/solution__result.csv @@ -0,0 +1,2 @@ +Policy_Number,NoOfClaims +31003000336,2 diff --git a/tasks/free_text_acme_hqls_001/setup.sh b/tasks/free_text_acme_hqls_001/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqls_001/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqls_001/solution.sh b/tasks/free_text_acme_hqls_001/solution.sh new file mode 100755 index 00000000..6006b693 --- /dev/null +++ b/tasks/free_text_acme_hqls_001/solution.sh @@ -0,0 +1,12 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select policy_number, count(company_claim_number) as NoOfClaims +from + policy + inner join policy_coverage_detail on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join claim_coverage on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join claim on claim.claim_identifier = claim_coverage.claim_identifier +group by policy_number +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqls_001/task.yaml b/tasks/free_text_acme_hqls_001/task.yaml new file mode 100644 index 00000000..1a29163a --- /dev/null +++ b/tasks/free_text_acme_hqls_001/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_hqls_001 +status: ready +description: 'HQLS: Policy - Coverage - Claim' +prompts: +- key: base + prompt: 'How many claims have been placed by policy number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + How many claims have been placed by policy number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqls_001/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqls_001/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqls_001/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqls_002/seeds/_no-op.txt b/tasks/free_text_acme_hqls_002/seeds/_no-op.txt new file mode 100644 index 00000000..2e077178 --- /dev/null +++ b/tasks/free_text_acme_hqls_002/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + avg(datediff('day', claim_open_date, claim_close_date)): double diff --git a/tasks/free_text_acme_hqls_002/seeds/solution__result.csv b/tasks/free_text_acme_hqls_002/seeds/solution__result.csv new file mode 100644 index 00000000..61dbc4b8 --- /dev/null +++ b/tasks/free_text_acme_hqls_002/seeds/solution__result.csv @@ -0,0 +1,2 @@ +Policy_Number,"avg(datediff('day', claim_open_date, claim_close_date))" +31003000336,20.5 diff --git a/tasks/free_text_acme_hqls_002/setup.sh b/tasks/free_text_acme_hqls_002/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqls_002/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqls_002/solution.sh b/tasks/free_text_acme_hqls_002/solution.sh new file mode 100755 index 00000000..32cf8733 --- /dev/null +++ b/tasks/free_text_acme_hqls_002/solution.sh @@ -0,0 +1,13 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select policy_number, avg(datediff('day', claim_open_date, claim_close_date)) +from claim +inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier +inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier +inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier +where claim_close_date IS NOT NULL +group by policy_number + +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqls_002/task.yaml b/tasks/free_text_acme_hqls_002/task.yaml new file mode 100644 index 00000000..0ea864da --- /dev/null +++ b/tasks/free_text_acme_hqls_002/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_hqls_002 +status: ready +description: 'HQLS: What is the average time to settle a claim by policy number?' +prompts: +- key: base + prompt: 'What is the average time to settle a claim by policy number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the average time to settle a claim by policy number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqls_002/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqls_002/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqls_002/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqls_003/seeds/_no-op.txt b/tasks/free_text_acme_hqls_003/seeds/_no-op.txt new file mode 100644 index 00000000..d7bf102b --- /dev/null +++ b/tasks/free_text_acme_hqls_003/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + agentid: integer + NoOfPolicies: bigint diff --git a/tasks/free_text_acme_hqls_003/seeds/solution__result.csv b/tasks/free_text_acme_hqls_003/seeds/solution__result.csv new file mode 100644 index 00000000..cdbf51b1 --- /dev/null +++ b/tasks/free_text_acme_hqls_003/seeds/solution__result.csv @@ -0,0 +1,2 @@ +agentid,NoOfPolicies +2,2 diff --git a/tasks/free_text_acme_hqls_003/setup.sh b/tasks/free_text_acme_hqls_003/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqls_003/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqls_003/solution.sh b/tasks/free_text_acme_hqls_003/solution.sh new file mode 100755 index 00000000..7d20101f --- /dev/null +++ b/tasks/free_text_acme_hqls_003/solution.sh @@ -0,0 +1,10 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select party_identifier as agentid, count(policy.policy_number) as NoOfPolicies +from agreement_party_role +join policy on agreement_party_role.agreement_identifier = policy.policy_identifier +where agreement_party_role.party_role_code = 'AG' +group by party_identifier +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqls_003/task.yaml b/tasks/free_text_acme_hqls_003/task.yaml new file mode 100644 index 00000000..94cd190c --- /dev/null +++ b/tasks/free_text_acme_hqls_003/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_hqls_003 +status: ready +description: 'HQLS: Policy - Agent' +prompts: +- key: base + prompt: 'How many policies have agents sold by agent id? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + How many policies have agents sold by agent id? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqls_003/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqls_003/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqls_003/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqls_004/seeds/_no-op.txt b/tasks/free_text_acme_hqls_004/seeds/_no-op.txt new file mode 100644 index 00000000..9d2f44d4 --- /dev/null +++ b/tasks/free_text_acme_hqls_004/seeds/_no-op.txt @@ -0,0 +1,7 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + avgPolicySize: double diff --git a/tasks/free_text_acme_hqls_004/seeds/solution__result.csv b/tasks/free_text_acme_hqls_004/seeds/solution__result.csv new file mode 100644 index 00000000..8a44bcf2 --- /dev/null +++ b/tasks/free_text_acme_hqls_004/seeds/solution__result.csv @@ -0,0 +1,2 @@ +avgPolicySize +49000.0 diff --git a/tasks/free_text_acme_hqls_004/setup.sh b/tasks/free_text_acme_hqls_004/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqls_004/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqls_004/solution.sh b/tasks/free_text_acme_hqls_004/solution.sh new file mode 100755 index 00000000..ed17953d --- /dev/null +++ b/tasks/free_text_acme_hqls_004/solution.sh @@ -0,0 +1,13 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + SUM(policy_amount)/COUNT(DISTINCT policy_number) AS avgPolicySize +FROM + policy_coverage_detail + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join policy_amount on policy_coverage_detail.policy_coverage_detail_identifier = policy_amount.policy_coverage_detail_identifier + inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier + +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqls_004/task.yaml b/tasks/free_text_acme_hqls_004/task.yaml new file mode 100644 index 00000000..4ca010a1 --- /dev/null +++ b/tasks/free_text_acme_hqls_004/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_hqls_004 +status: ready +description: 'HQLS: Policy - Coverage - Premium' +prompts: +- key: base + prompt: 'What is the average policy size which is the the total amount of premium + divided by the number of policies? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the average policy size which is the the total amount of premium divided + by the number of policies? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqls_004/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqls_004/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqls_004/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqls_005/seeds/_no-op.txt b/tasks/free_text_acme_hqls_005/seeds/_no-op.txt new file mode 100644 index 00000000..9dbd3222 --- /dev/null +++ b/tasks/free_text_acme_hqls_005/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + TotalPremiumAmount: bigint diff --git a/tasks/free_text_acme_hqls_005/seeds/solution__result.csv b/tasks/free_text_acme_hqls_005/seeds/solution__result.csv new file mode 100644 index 00000000..98e4ff8e --- /dev/null +++ b/tasks/free_text_acme_hqls_005/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Policy_Number,TotalPremiumAmount +31003000336,86000 +31003000337,12000 diff --git a/tasks/free_text_acme_hqls_005/setup.sh b/tasks/free_text_acme_hqls_005/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqls_005/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqls_005/solution.sh b/tasks/free_text_acme_hqls_005/solution.sh new file mode 100755 index 00000000..32da01e2 --- /dev/null +++ b/tasks/free_text_acme_hqls_005/solution.sh @@ -0,0 +1,11 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select policy_number, sum(policy_amount) as TotalPremiumAmount +from + policy + inner join policy_amount on policy.policy_identifier = policy_amount.policy_identifier + inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +group by policy_number +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqls_005/task.yaml b/tasks/free_text_acme_hqls_005/task.yaml new file mode 100644 index 00000000..915ce67e --- /dev/null +++ b/tasks/free_text_acme_hqls_005/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_hqls_005 +status: ready +description: 'HQLS: What is the total amount of premiums paid by policy number?' +prompts: +- key: base + prompt: 'What is the total amount of premiums paid by policy number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the total amount of premiums paid by policy number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqls_005/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqls_005/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqls_005/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqls_006/seeds/_no-op.txt b/tasks/free_text_acme_hqls_006/seeds/_no-op.txt new file mode 100644 index 00000000..02c2e2d0 --- /dev/null +++ b/tasks/free_text_acme_hqls_006/seeds/_no-op.txt @@ -0,0 +1,7 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + NoOfClaims: bigint diff --git a/tasks/free_text_acme_hqls_006/seeds/solution__result.csv b/tasks/free_text_acme_hqls_006/seeds/solution__result.csv new file mode 100644 index 00000000..e2cf8080 --- /dev/null +++ b/tasks/free_text_acme_hqls_006/seeds/solution__result.csv @@ -0,0 +1,2 @@ +NoOfClaims +2 diff --git a/tasks/free_text_acme_hqls_006/setup.sh b/tasks/free_text_acme_hqls_006/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqls_006/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqls_006/solution.sh b/tasks/free_text_acme_hqls_006/solution.sh new file mode 100755 index 00000000..16b39a9a --- /dev/null +++ b/tasks/free_text_acme_hqls_006/solution.sh @@ -0,0 +1,7 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT COUNT(*) AS NoOfClaims +FROM claim +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqls_006/task.yaml b/tasks/free_text_acme_hqls_006/task.yaml new file mode 100644 index 00000000..438a41f8 --- /dev/null +++ b/tasks/free_text_acme_hqls_006/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_hqls_006 +status: ready +description: 'HQLS: Claim' +prompts: +- key: base + prompt: 'How many claims do we have? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + How many claims do we have? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: easy +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqls_006/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqls_006/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqls_006/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqls_007/seeds/_no-op.txt b/tasks/free_text_acme_hqls_007/seeds/_no-op.txt new file mode 100644 index 00000000..a2b91e95 --- /dev/null +++ b/tasks/free_text_acme_hqls_007/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Party_Identifier: integer + sum(policy_amount): bigint diff --git a/tasks/free_text_acme_hqls_007/seeds/solution__result.csv b/tasks/free_text_acme_hqls_007/seeds/solution__result.csv new file mode 100644 index 00000000..babca848 --- /dev/null +++ b/tasks/free_text_acme_hqls_007/seeds/solution__result.csv @@ -0,0 +1,2 @@ +Party_Identifier,sum(policy_amount) +1,98000 diff --git a/tasks/free_text_acme_hqls_007/setup.sh b/tasks/free_text_acme_hqls_007/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqls_007/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqls_007/solution.sh b/tasks/free_text_acme_hqls_007/solution.sh new file mode 100755 index 00000000..d90f06ff --- /dev/null +++ b/tasks/free_text_acme_hqls_007/solution.sh @@ -0,0 +1,12 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select party_identifier, sum(policy_amount) +from agreement_party_role +join policy on agreement_party_role.agreement_identifier = policy.policy_identifier +inner join policy_amount on policy.policy_identifier = policy_amount.policy_identifier +inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +where agreement_party_role.party_role_code = 'PH' +group by party_identifier +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqls_007/task.yaml b/tasks/free_text_acme_hqls_007/task.yaml new file mode 100644 index 00000000..91f266c3 --- /dev/null +++ b/tasks/free_text_acme_hqls_007/task.yaml @@ -0,0 +1,35 @@ +task_id: free_text_acme_hqls_007 +status: ready +description: 'HQLS: What is the total amount of premiums that a policy holder has + paid?' +prompts: +- key: base + prompt: 'What is the total amount of premiums that a policy holder has paid? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the total amount of premiums that a policy holder has paid? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqls_007/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqls_007/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqls_007/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqls_008/seeds/_no-op.txt b/tasks/free_text_acme_hqls_008/seeds/_no-op.txt new file mode 100644 index 00000000..673d2a18 --- /dev/null +++ b/tasks/free_text_acme_hqls_008/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Company_Claim_Number: integer + LossAmount: integer diff --git a/tasks/free_text_acme_hqls_008/seeds/solution__result.csv b/tasks/free_text_acme_hqls_008/seeds/solution__result.csv new file mode 100644 index 00000000..3b34c0b0 --- /dev/null +++ b/tasks/free_text_acme_hqls_008/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Company_Claim_Number,LossAmount +12312701,2200 +12312702,4400 diff --git a/tasks/free_text_acme_hqls_008/setup.sh b/tasks/free_text_acme_hqls_008/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqls_008/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqls_008/solution.sh b/tasks/free_text_acme_hqls_008/solution.sh new file mode 100755 index 00000000..9b53854c --- /dev/null +++ b/tasks/free_text_acme_hqls_008/solution.sh @@ -0,0 +1,15 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + company_claim_number, + (ca_lp.claim_amount + ca_lr.claim_amount ) as LossAmount +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqls_008/task.yaml b/tasks/free_text_acme_hqls_008/task.yaml new file mode 100644 index 00000000..374a5135 --- /dev/null +++ b/tasks/free_text_acme_hqls_008/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_hqls_008 +status: ready +description: 'HQLS: Claim - Loss Payment&Loss Reserve' +prompts: +- key: base + prompt: 'What is the total loss amounts, which is the sum of loss payment, loss + reserve amount by claim number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the total loss amounts, which is the sum of loss payment, loss reserve + amount by claim number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqls_008/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqls_008/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqls_008/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqls_009/seeds/_no-op.txt b/tasks/free_text_acme_hqls_009/seeds/_no-op.txt new file mode 100644 index 00000000..2fda1339 --- /dev/null +++ b/tasks/free_text_acme_hqls_009/seeds/_no-op.txt @@ -0,0 +1,9 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Party_Identifier: integer + Policy_Number: bigint + sum(policy_amount): bigint diff --git a/tasks/free_text_acme_hqls_009/seeds/solution__result.csv b/tasks/free_text_acme_hqls_009/seeds/solution__result.csv new file mode 100644 index 00000000..e7da91ce --- /dev/null +++ b/tasks/free_text_acme_hqls_009/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Party_Identifier,Policy_Number,sum(policy_amount) +1,31003000336,86000 +1,31003000337,12000 diff --git a/tasks/free_text_acme_hqls_009/setup.sh b/tasks/free_text_acme_hqls_009/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqls_009/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqls_009/solution.sh b/tasks/free_text_acme_hqls_009/solution.sh new file mode 100755 index 00000000..35689d01 --- /dev/null +++ b/tasks/free_text_acme_hqls_009/solution.sh @@ -0,0 +1,12 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select party_identifier, policy_number, sum(policy_amount) +from agreement_party_role +join policy on agreement_party_role.agreement_identifier = policy.policy_identifier +inner join policy_amount on policy.policy_identifier = policy_amount.policy_identifier +inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +where agreement_party_role.party_role_code = 'PH' +group by party_identifier, policy_number +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqls_009/task.yaml b/tasks/free_text_acme_hqls_009/task.yaml new file mode 100644 index 00000000..73677ff2 --- /dev/null +++ b/tasks/free_text_acme_hqls_009/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_hqls_009 +status: ready +description: 'HQLS: What is the total amount of premiums that a policy holder has + paid by policy number?' +prompts: +- key: base + prompt: 'What is the total amount of premiums that a policy holder has paid by policy + number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the total amount of premiums that a policy holder has paid by policy number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqls_009/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqls_009/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqls_009/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqls_010/seeds/_no-op.txt b/tasks/free_text_acme_hqls_010/seeds/_no-op.txt new file mode 100644 index 00000000..27f36673 --- /dev/null +++ b/tasks/free_text_acme_hqls_010/seeds/_no-op.txt @@ -0,0 +1,7 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + NoOfPolicy: bigint diff --git a/tasks/free_text_acme_hqls_010/seeds/solution__result.csv b/tasks/free_text_acme_hqls_010/seeds/solution__result.csv new file mode 100644 index 00000000..d916f24e --- /dev/null +++ b/tasks/free_text_acme_hqls_010/seeds/solution__result.csv @@ -0,0 +1,2 @@ +NoOfPolicy +2 diff --git a/tasks/free_text_acme_hqls_010/setup.sh b/tasks/free_text_acme_hqls_010/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqls_010/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqls_010/solution.sh b/tasks/free_text_acme_hqls_010/solution.sh new file mode 100755 index 00000000..0d8da212 --- /dev/null +++ b/tasks/free_text_acme_hqls_010/solution.sh @@ -0,0 +1,7 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT COUNT(*) AS NoOfPolicy +FROM policy +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqls_010/task.yaml b/tasks/free_text_acme_hqls_010/task.yaml new file mode 100644 index 00000000..3b06ff45 --- /dev/null +++ b/tasks/free_text_acme_hqls_010/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_hqls_010 +status: ready +description: 'HQLS: Policy' +prompts: +- key: base + prompt: 'How many policies do we have? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + How many policies do we have? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: easy +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqls_010/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqls_010/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqls_010/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_hqls_011/seeds/_no-op.txt b/tasks/free_text_acme_hqls_011/seeds/_no-op.txt new file mode 100644 index 00000000..708aeb52 --- /dev/null +++ b/tasks/free_text_acme_hqls_011/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Party_Identifier: integer + NoOfPolicies: bigint diff --git a/tasks/free_text_acme_hqls_011/seeds/solution__result.csv b/tasks/free_text_acme_hqls_011/seeds/solution__result.csv new file mode 100644 index 00000000..40945b58 --- /dev/null +++ b/tasks/free_text_acme_hqls_011/seeds/solution__result.csv @@ -0,0 +1,2 @@ +Party_Identifier,NoOfPolicies +1,2 diff --git a/tasks/free_text_acme_hqls_011/setup.sh b/tasks/free_text_acme_hqls_011/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_hqls_011/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_hqls_011/solution.sh b/tasks/free_text_acme_hqls_011/solution.sh new file mode 100755 index 00000000..52ec3e4f --- /dev/null +++ b/tasks/free_text_acme_hqls_011/solution.sh @@ -0,0 +1,10 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select party_identifier, count( policy.policy_number) as NoOfPolicies +from agreement_party_role +join policy on agreement_party_role.agreement_identifier = policy.policy_identifier +where agreement_party_role.party_role_code = 'PH' +group by party_identifier +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_hqls_011/task.yaml b/tasks/free_text_acme_hqls_011/task.yaml new file mode 100644 index 00000000..907fe46c --- /dev/null +++ b/tasks/free_text_acme_hqls_011/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_hqls_011 +status: ready +description: 'HQLS: Policy - Policy Holder' +prompts: +- key: base + prompt: 'How many policies does each policy holder have by policy holder id? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + How many policies does each policy holder have by policy holder id? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- hqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_hqls_011/tests/fuzzy_comparison.sql b/tasks/free_text_acme_hqls_011/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_hqls_011/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqhs_001/seeds/_no-op.txt b/tasks/free_text_acme_lqhs_001/seeds/_no-op.txt new file mode 100644 index 00000000..55a08ef8 --- /dev/null +++ b/tasks/free_text_acme_lqhs_001/seeds/_no-op.txt @@ -0,0 +1,10 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + AgentID: integer + Policy_Number: bigint + Company_Claim_Number: integer + Catastrophe_Name: varchar diff --git a/tasks/free_text_acme_lqhs_001/seeds/solution__result.csv b/tasks/free_text_acme_lqhs_001/seeds/solution__result.csv new file mode 100644 index 00000000..ff37319b --- /dev/null +++ b/tasks/free_text_acme_lqhs_001/seeds/solution__result.csv @@ -0,0 +1,3 @@ +AgentID,Policy_Number,Company_Claim_Number,Catastrophe_Name +1,31003000336,12312702,Fire +1,31003000336,12312701,Fire diff --git a/tasks/free_text_acme_lqhs_001/setup.sh b/tasks/free_text_acme_lqhs_001/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqhs_001/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqhs_001/solution.sh b/tasks/free_text_acme_lqhs_001/solution.sh new file mode 100755 index 00000000..74c1c9d0 --- /dev/null +++ b/tasks/free_text_acme_lqhs_001/solution.sh @@ -0,0 +1,18 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + party_identifier as AgentID, + policy_number, + company_claim_number, + catastrophe_name +FROM + Claim + inner join catastrophe on claim.catastrophe_identifier = catastrophe.catastrophe_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join agreement_party_role on agreement_party_role.agreement_identifier = policy.policy_identifier +where agreement_party_role.party_role_code = 'PH' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqhs_001/task.yaml b/tasks/free_text_acme_lqhs_001/task.yaml new file mode 100644 index 00000000..27f3d703 --- /dev/null +++ b/tasks/free_text_acme_lqhs_001/task.yaml @@ -0,0 +1,35 @@ +task_id: free_text_acme_lqhs_001 +status: ready +description: 'LQHS: Policy Holder - Policy - Coverage - Claim - Catastrophe' +prompts: +- key: base + prompt: 'Return policy holders and the claims they have made and the correspoinding + catastrophe + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return policy holders and the claims they have made and the correspoinding catastrophe + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqhs_001/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqhs_001/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqhs_001/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqhs_002/seeds/_no-op.txt b/tasks/free_text_acme_lqhs_002/seeds/_no-op.txt new file mode 100644 index 00000000..134a9a4e --- /dev/null +++ b/tasks/free_text_acme_lqhs_002/seeds/_no-op.txt @@ -0,0 +1,10 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + AgentID: integer + Policy_Number: bigint + Company_Claim_Number: integer + Expense_Reserve_Amount: integer diff --git a/tasks/free_text_acme_lqhs_002/seeds/solution__result.csv b/tasks/free_text_acme_lqhs_002/seeds/solution__result.csv new file mode 100644 index 00000000..9e263431 --- /dev/null +++ b/tasks/free_text_acme_lqhs_002/seeds/solution__result.csv @@ -0,0 +1,3 @@ +AgentID,Policy_Number,Company_Claim_Number,Expense_Reserve_Amount +2,31003000336,12312702,2200 +2,31003000336,12312701,1100 diff --git a/tasks/free_text_acme_lqhs_002/setup.sh b/tasks/free_text_acme_lqhs_002/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqhs_002/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqhs_002/solution.sh b/tasks/free_text_acme_lqhs_002/solution.sh new file mode 100755 index 00000000..71a9c336 --- /dev/null +++ b/tasks/free_text_acme_lqhs_002/solution.sh @@ -0,0 +1,20 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + party_identifier as AgentID, + policy_number, + company_claim_number, + claim_amount.claim_amount as Expense_Reserve_Amount +FROM + Claim + inner join claim_amount on claim.claim_identifier = claim_amount.claim_identifier + inner JOIN expense_reserve ON claim_amount.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join agreement_party_role on agreement_party_role.agreement_identifier = policy.policy_identifier + +where agreement_party_role.party_role_code = 'AG' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqhs_002/task.yaml b/tasks/free_text_acme_lqhs_002/task.yaml new file mode 100644 index 00000000..89f610fb --- /dev/null +++ b/tasks/free_text_acme_lqhs_002/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_lqhs_002 +status: ready +description: 'LQHS: Agent - Policy - Coverage - Claim - Expense Reserve' +prompts: +- key: base + prompt: 'Return agents and the policy they have sold that have had a claim and the + corresponding expense reserve amount by agent id, policy number and claim number + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return agents and the policy they have sold that have had a claim and the corresponding + expense reserve amount by agent id, policy number and claim number + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqhs_002/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqhs_002/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqhs_002/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqhs_003/seeds/_no-op.txt b/tasks/free_text_acme_lqhs_003/seeds/_no-op.txt new file mode 100644 index 00000000..2fb580c3 --- /dev/null +++ b/tasks/free_text_acme_lqhs_003/seeds/_no-op.txt @@ -0,0 +1,10 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + AgentID: integer + Policy_Number: bigint + Company_Claim_Number: integer + Loss_Reserve_Amount: integer diff --git a/tasks/free_text_acme_lqhs_003/seeds/solution__result.csv b/tasks/free_text_acme_lqhs_003/seeds/solution__result.csv new file mode 100644 index 00000000..c71c5d63 --- /dev/null +++ b/tasks/free_text_acme_lqhs_003/seeds/solution__result.csv @@ -0,0 +1,3 @@ +AgentID,Policy_Number,Company_Claim_Number,Loss_Reserve_Amount +2,31003000336,12312702,2100 +2,31003000336,12312701,1000 diff --git a/tasks/free_text_acme_lqhs_003/setup.sh b/tasks/free_text_acme_lqhs_003/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqhs_003/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqhs_003/solution.sh b/tasks/free_text_acme_lqhs_003/solution.sh new file mode 100755 index 00000000..ceda5f94 --- /dev/null +++ b/tasks/free_text_acme_lqhs_003/solution.sh @@ -0,0 +1,20 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + party_identifier as AgentID, + policy_number, + company_claim_number, + claim_amount.claim_amount as Loss_Reserve_Amount +FROM + Claim + inner join claim_amount on claim.claim_identifier = claim_amount.claim_identifier + inner JOIN loss_reserve ON claim_amount.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join agreement_party_role on agreement_party_role.agreement_identifier = policy.policy_identifier + +where agreement_party_role.party_role_code = 'AG' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqhs_003/task.yaml b/tasks/free_text_acme_lqhs_003/task.yaml new file mode 100644 index 00000000..507bb5d3 --- /dev/null +++ b/tasks/free_text_acme_lqhs_003/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_lqhs_003 +status: ready +description: 'LQHS: Agent - Policy - Coverage - Claim - Loss Reserve' +prompts: +- key: base + prompt: 'Return agents and the policy they have sold that have had a claim and the + corresponding loss reserve amount by agent id, policy number and claim number + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return agents and the policy they have sold that have had a claim and the corresponding + loss reserve amount by agent id, policy number and claim number + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqhs_003/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqhs_003/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqhs_003/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqhs_004/seeds/_no-op.txt b/tasks/free_text_acme_lqhs_004/seeds/_no-op.txt new file mode 100644 index 00000000..3a56f5d7 --- /dev/null +++ b/tasks/free_text_acme_lqhs_004/seeds/_no-op.txt @@ -0,0 +1,16 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + AgentID: integer + PolicyHolderID: integer + Policy_Number: bigint + premium: integer + Catastrophe_Name: varchar + Company_Claim_Number: integer + Loss_Payment_Amount: integer + Loss_Reserve_Amount: integer + Expense_Payment_Amount: integer + Expense_Reserve_Amount: integer diff --git a/tasks/free_text_acme_lqhs_004/seeds/solution__result.csv b/tasks/free_text_acme_lqhs_004/seeds/solution__result.csv new file mode 100644 index 00000000..c349ffa5 --- /dev/null +++ b/tasks/free_text_acme_lqhs_004/seeds/solution__result.csv @@ -0,0 +1,3 @@ +AgentID,PolicyHolderID,Policy_Number,premium,Catastrophe_Name,Company_Claim_Number,Loss_Payment_Amount,Loss_Reserve_Amount,Expense_Payment_Amount,Expense_Reserve_Amount +2,1,31003000336,20000,Fire,12312701,1200,1000,1300,1100 +2,1,31003000336,20000,Fire,12312702,2300,2100,2400,2200 diff --git a/tasks/free_text_acme_lqhs_004/setup.sh b/tasks/free_text_acme_lqhs_004/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqhs_004/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqhs_004/solution.sh b/tasks/free_text_acme_lqhs_004/solution.sh new file mode 100755 index 00000000..075ac94e --- /dev/null +++ b/tasks/free_text_acme_lqhs_004/solution.sh @@ -0,0 +1,35 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + apr2.party_identifier as AgentID, + apr1.party_identifier as PolicyHolderID, + policy_number, + policy_amount as premium, + catastrophe_name, + company_claim_number, + ca_lp.claim_amount as Loss_Payment_Amount, + ca_lr.claim_amount as Loss_Reserve_Amount, + ca_ep.claim_amount as Expense_Payment_Amount, + ca_er.claim_amount as Expense_Reserve_Amount +FROM + Claim + inner join catastrophe on claim.catastrophe_identifier = catastrophe.catastrophe_identifier + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join policy_amount on policy_coverage_detail.policy_coverage_detail_identifier = policy_amount.policy_coverage_detail_identifier + inner join agreement_party_role apr1 on apr1.agreement_identifier = policy.policy_identifier + inner join agreement_party_role apr2 on apr2.agreement_identifier = policy.policy_identifier + inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +where apr1.party_role_code = 'PH' and apr2.party_role_code = 'AG' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqhs_004/task.yaml b/tasks/free_text_acme_lqhs_004/task.yaml new file mode 100644 index 00000000..4e1ae6b2 --- /dev/null +++ b/tasks/free_text_acme_lqhs_004/task.yaml @@ -0,0 +1,39 @@ +task_id: free_text_acme_lqhs_004 +status: ready +description: 'LQHS: Agent - Policy - Coverage - Premium - Claim - Catastrophe - Loss + Payment&Expense Payment&Expense Reserve&Loss Rese' +prompts: +- key: base + prompt: 'What are the loss payment, loss reserve, expense payment, expense reserve + amount by claim number and corresponding policy number, policy holder, premium + amount paid, the catastrophe it had, and the agent who sold it? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are the loss payment, loss reserve, expense payment, expense reserve amount + by claim number and corresponding policy number, policy holder, premium amount + paid, the catastrophe it had, and the agent who sold it? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqhs_004/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqhs_004/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqhs_004/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqhs_005/seeds/_no-op.txt b/tasks/free_text_acme_lqhs_005/seeds/_no-op.txt new file mode 100644 index 00000000..98f364da --- /dev/null +++ b/tasks/free_text_acme_lqhs_005/seeds/_no-op.txt @@ -0,0 +1,14 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + PolicyHolderID: integer + Policy_Number: bigint + premium: integer + Company_Claim_Number: integer + Loss_Payment_Amount: integer + Loss_Reserve_Amount: integer + Expense_Payment_Amount: integer + Expense_Reserve_Amount: integer diff --git a/tasks/free_text_acme_lqhs_005/seeds/solution__result.csv b/tasks/free_text_acme_lqhs_005/seeds/solution__result.csv new file mode 100644 index 00000000..c5082204 --- /dev/null +++ b/tasks/free_text_acme_lqhs_005/seeds/solution__result.csv @@ -0,0 +1,3 @@ +PolicyHolderID,Policy_Number,premium,Company_Claim_Number,Loss_Payment_Amount,Loss_Reserve_Amount,Expense_Payment_Amount,Expense_Reserve_Amount +1,31003000336,20000,12312701,1200,1000,1300,1100 +1,31003000336,20000,12312702,2300,2100,2400,2200 diff --git a/tasks/free_text_acme_lqhs_005/setup.sh b/tasks/free_text_acme_lqhs_005/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqhs_005/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqhs_005/solution.sh b/tasks/free_text_acme_lqhs_005/solution.sh new file mode 100755 index 00000000..89edc3ef --- /dev/null +++ b/tasks/free_text_acme_lqhs_005/solution.sh @@ -0,0 +1,31 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + party_identifier as PolicyHolderID, + policy_number, + policy_amount as premium, + company_claim_number, + ca_lp.claim_amount as Loss_Payment_Amount, + ca_lr.claim_amount as Loss_Reserve_Amount, + ca_ep.claim_amount as Expense_Payment_Amount, + ca_er.claim_amount as Expense_Reserve_Amount +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join policy_amount on policy_coverage_detail.policy_coverage_detail_identifier = policy_amount.policy_coverage_detail_identifier + inner join agreement_party_role on agreement_party_role.agreement_identifier = policy.policy_identifier + inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +where agreement_party_role.party_role_code = 'PH' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqhs_005/task.yaml b/tasks/free_text_acme_lqhs_005/task.yaml new file mode 100644 index 00000000..b1bd063e --- /dev/null +++ b/tasks/free_text_acme_lqhs_005/task.yaml @@ -0,0 +1,39 @@ +task_id: free_text_acme_lqhs_005 +status: ready +description: 'LQHS: Policy - Coverage - Premium - Claim - Loss Payment&Expense Payment&Expense + Reserve&Loss Reserve' +prompts: +- key: base + prompt: 'What are the loss payment, loss reserve, expense payment, expense reserve + amount by claim number and corresponding policy number, policy holder and premium + amount paid? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are the loss payment, loss reserve, expense payment, expense reserve amount + by claim number and corresponding policy number, policy holder and premium amount + paid? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqhs_005/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqhs_005/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqhs_005/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqhs_006/seeds/_no-op.txt b/tasks/free_text_acme_lqhs_006/seeds/_no-op.txt new file mode 100644 index 00000000..1974defb --- /dev/null +++ b/tasks/free_text_acme_lqhs_006/seeds/_no-op.txt @@ -0,0 +1,11 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Company_Claim_Number: integer + Loss_Payment_Amount: integer + Loss_Reserve_Amount: integer + Expense_Payment_Amount: integer + Expense_Reserve_Amount: integer diff --git a/tasks/free_text_acme_lqhs_006/seeds/solution__result.csv b/tasks/free_text_acme_lqhs_006/seeds/solution__result.csv new file mode 100644 index 00000000..fef2c108 --- /dev/null +++ b/tasks/free_text_acme_lqhs_006/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Company_Claim_Number,Loss_Payment_Amount,Loss_Reserve_Amount,Expense_Payment_Amount,Expense_Reserve_Amount +12312701,1200,1000,1300,1100 +12312702,2300,2100,2400,2200 diff --git a/tasks/free_text_acme_lqhs_006/setup.sh b/tasks/free_text_acme_lqhs_006/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqhs_006/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqhs_006/solution.sh b/tasks/free_text_acme_lqhs_006/solution.sh new file mode 100755 index 00000000..135016ba --- /dev/null +++ b/tasks/free_text_acme_lqhs_006/solution.sh @@ -0,0 +1,21 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + company_claim_number, + ca_lp.claim_amount as Loss_Payment_Amount, + ca_lr.claim_amount as Loss_Reserve_Amount, + ca_ep.claim_amount as Expense_Payment_Amount, + ca_er.claim_amount as Expense_Reserve_Amount +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqhs_006/task.yaml b/tasks/free_text_acme_lqhs_006/task.yaml new file mode 100644 index 00000000..9803554c --- /dev/null +++ b/tasks/free_text_acme_lqhs_006/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_lqhs_006 +status: ready +description: 'LQHS: Claim - Loss Payment&Expense Payment&Expense Reserve&Loss Reserve' +prompts: +- key: base + prompt: 'What are the loss payment, loss reserve, expense payment, expense reserve + amount by claim number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are the loss payment, loss reserve, expense payment, expense reserve amount + by claim number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqhs_006/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqhs_006/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqhs_006/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqhs_007/seeds/_no-op.txt b/tasks/free_text_acme_lqhs_007/seeds/_no-op.txt new file mode 100644 index 00000000..6741c641 --- /dev/null +++ b/tasks/free_text_acme_lqhs_007/seeds/_no-op.txt @@ -0,0 +1,10 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + AgentID: integer + Policy_Number: bigint + Company_Claim_Number: integer + Expense_Payment_Amount: integer diff --git a/tasks/free_text_acme_lqhs_007/seeds/solution__result.csv b/tasks/free_text_acme_lqhs_007/seeds/solution__result.csv new file mode 100644 index 00000000..a43608ea --- /dev/null +++ b/tasks/free_text_acme_lqhs_007/seeds/solution__result.csv @@ -0,0 +1,3 @@ +AgentID,Policy_Number,Company_Claim_Number,Expense_Payment_Amount +2,31003000336,12312702,2400 +2,31003000336,12312701,1300 diff --git a/tasks/free_text_acme_lqhs_007/setup.sh b/tasks/free_text_acme_lqhs_007/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqhs_007/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqhs_007/solution.sh b/tasks/free_text_acme_lqhs_007/solution.sh new file mode 100755 index 00000000..7d4fcd7e --- /dev/null +++ b/tasks/free_text_acme_lqhs_007/solution.sh @@ -0,0 +1,22 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' + + +SELECT + party_identifier as AgentID, + policy_number, + company_claim_number, + claim_amount.claim_amount as Expense_Payment_Amount +FROM + Claim + inner join claim_amount on claim.claim_identifier = claim_amount.claim_identifier + inner JOIN expense_payment ON claim_amount.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join agreement_party_role on agreement_party_role.agreement_identifier = policy.policy_identifier + +where agreement_party_role.party_role_code = 'AG' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqhs_007/task.yaml b/tasks/free_text_acme_lqhs_007/task.yaml new file mode 100644 index 00000000..748568b4 --- /dev/null +++ b/tasks/free_text_acme_lqhs_007/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_lqhs_007 +status: ready +description: 'LQHS: Agent - Policy - Coverage - Claim - Expense Payment' +prompts: +- key: base + prompt: 'Return agents and the policy they have sold that have had a claim and the + corresponding expense payment amount by agent id, policy number and claim number + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return agents and the policy they have sold that have had a claim and the corresponding + expense payment amount by agent id, policy number and claim number + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqhs_007/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqhs_007/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqhs_007/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqhs_008/seeds/_no-op.txt b/tasks/free_text_acme_lqhs_008/seeds/_no-op.txt new file mode 100644 index 00000000..beffdd54 --- /dev/null +++ b/tasks/free_text_acme_lqhs_008/seeds/_no-op.txt @@ -0,0 +1,15 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + AgentID: integer + PolicyHolderID: integer + Policy_Number: bigint + premium: integer + Company_Claim_Number: integer + Loss_Payment_Amount: integer + Loss_Reserve_Amount: integer + Expense_Payment_Amount: integer + Expense_Reserve_Amount: integer diff --git a/tasks/free_text_acme_lqhs_008/seeds/solution__result.csv b/tasks/free_text_acme_lqhs_008/seeds/solution__result.csv new file mode 100644 index 00000000..5dbcca6f --- /dev/null +++ b/tasks/free_text_acme_lqhs_008/seeds/solution__result.csv @@ -0,0 +1,3 @@ +AgentID,PolicyHolderID,Policy_Number,premium,Company_Claim_Number,Loss_Payment_Amount,Loss_Reserve_Amount,Expense_Payment_Amount,Expense_Reserve_Amount +2,1,31003000336,20000,12312701,1200,1000,1300,1100 +2,1,31003000336,20000,12312702,2300,2100,2400,2200 diff --git a/tasks/free_text_acme_lqhs_008/setup.sh b/tasks/free_text_acme_lqhs_008/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqhs_008/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqhs_008/solution.sh b/tasks/free_text_acme_lqhs_008/solution.sh new file mode 100755 index 00000000..d95e0d4f --- /dev/null +++ b/tasks/free_text_acme_lqhs_008/solution.sh @@ -0,0 +1,33 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + apr2.party_identifier as AgentID, + apr1.party_identifier as PolicyHolderID, + policy_number, + policy_amount as premium, + company_claim_number, + ca_lp.claim_amount as Loss_Payment_Amount, + ca_lr.claim_amount as Loss_Reserve_Amount, + ca_ep.claim_amount as Expense_Payment_Amount, + ca_er.claim_amount as Expense_Reserve_Amount +FROM + Claim + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join policy_amount on policy_coverage_detail.policy_coverage_detail_identifier = policy_amount.policy_coverage_detail_identifier + inner join agreement_party_role apr1 on apr1.agreement_identifier = policy.policy_identifier + inner join agreement_party_role apr2 on apr2.agreement_identifier = policy.policy_identifier + inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +where apr1.party_role_code = 'PH' and apr2.party_role_code = 'AG' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqhs_008/task.yaml b/tasks/free_text_acme_lqhs_008/task.yaml new file mode 100644 index 00000000..f916aa21 --- /dev/null +++ b/tasks/free_text_acme_lqhs_008/task.yaml @@ -0,0 +1,39 @@ +task_id: free_text_acme_lqhs_008 +status: ready +description: 'LQHS: Agent - Policy - Coverage - Premium - Claim - Loss Payment&Expense + Payment&Expense Reserve&Loss Reserve' +prompts: +- key: base + prompt: 'What are the loss payment, loss reserve, expense payment, expense reserve + amount by claim number and corresponding policy number, policy holder, premium + amount paid and the agent who sold it? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are the loss payment, loss reserve, expense payment, expense reserve amount + by claim number and corresponding policy number, policy holder, premium amount + paid and the agent who sold it? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqhs_008/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqhs_008/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqhs_008/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqhs_009/seeds/_no-op.txt b/tasks/free_text_acme_lqhs_009/seeds/_no-op.txt new file mode 100644 index 00000000..f62fbd47 --- /dev/null +++ b/tasks/free_text_acme_lqhs_009/seeds/_no-op.txt @@ -0,0 +1,10 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + AgentID: integer + Policy_Number: bigint + Company_Claim_Number: integer + Loss_Payment_Amount: integer diff --git a/tasks/free_text_acme_lqhs_009/seeds/solution__result.csv b/tasks/free_text_acme_lqhs_009/seeds/solution__result.csv new file mode 100644 index 00000000..bb516e95 --- /dev/null +++ b/tasks/free_text_acme_lqhs_009/seeds/solution__result.csv @@ -0,0 +1,3 @@ +AgentID,Policy_Number,Company_Claim_Number,Loss_Payment_Amount +2,31003000336,12312701,1200 +2,31003000336,12312702,2300 diff --git a/tasks/free_text_acme_lqhs_009/setup.sh b/tasks/free_text_acme_lqhs_009/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqhs_009/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqhs_009/solution.sh b/tasks/free_text_acme_lqhs_009/solution.sh new file mode 100755 index 00000000..489d53e7 --- /dev/null +++ b/tasks/free_text_acme_lqhs_009/solution.sh @@ -0,0 +1,32 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + apr2.party_identifier as AgentID, +-- apr1.party_identifier as PolicyHolderID, + policy_number, + -- policy_amount as premium, + -- catastrophe_name, + company_claim_number, + ca_lp.claim_amount as Loss_Payment_Amount +FROM + Claim + inner join catastrophe on claim.catastrophe_identifier = catastrophe.catastrophe_identifier + inner join claim_amount ca_lp on claim.claim_identifier = ca_lp.claim_identifier + inner JOIN loss_payment ON ca_lp.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_amount ca_lr on claim.claim_identifier = ca_lr.claim_identifier + inner JOIN loss_reserve ON ca_lr.claim_amount_identifier = loss_reserve.claim_amount_identifier + inner join claim_amount ca_ep on claim.claim_identifier = ca_ep.claim_identifier + inner JOIN expense_payment ON ca_ep.claim_amount_identifier = expense_payment.claim_amount_identifier + inner join claim_amount ca_er on claim.claim_identifier = ca_er.claim_identifier + inner JOIN expense_reserve ON ca_er.claim_amount_identifier = expense_reserve.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join policy_amount on policy_coverage_detail.policy_coverage_detail_identifier = policy_amount.policy_coverage_detail_identifier + inner join agreement_party_role apr1 on apr1.agreement_identifier = policy.policy_identifier + inner join agreement_party_role apr2 on apr2.agreement_identifier = policy.policy_identifier + inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +where apr1.party_role_code = 'PH' and apr2.party_role_code = 'AG' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqhs_009/task.yaml b/tasks/free_text_acme_lqhs_009/task.yaml new file mode 100644 index 00000000..ff65c5ac --- /dev/null +++ b/tasks/free_text_acme_lqhs_009/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_lqhs_009 +status: ready +description: 'LQHS: Agent - Policy - Coverage - Claim - Loss Payment' +prompts: +- key: base + prompt: 'Return agents and the policies they have sold that have had a claim and + the corresponding loss payment amount by agent id, policy number and claim number + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return agents and the policies they have sold that have had a claim and the corresponding + loss payment amount by agent id, policy number and claim number + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqhs_009/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqhs_009/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqhs_009/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqhs_010/seeds/_no-op.txt b/tasks/free_text_acme_lqhs_010/seeds/_no-op.txt new file mode 100644 index 00000000..f62fbd47 --- /dev/null +++ b/tasks/free_text_acme_lqhs_010/seeds/_no-op.txt @@ -0,0 +1,10 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + AgentID: integer + Policy_Number: bigint + Company_Claim_Number: integer + Loss_Payment_Amount: integer diff --git a/tasks/free_text_acme_lqhs_010/seeds/solution__result.csv b/tasks/free_text_acme_lqhs_010/seeds/solution__result.csv new file mode 100644 index 00000000..c3427021 --- /dev/null +++ b/tasks/free_text_acme_lqhs_010/seeds/solution__result.csv @@ -0,0 +1,3 @@ +AgentID,Policy_Number,Company_Claim_Number,Loss_Payment_Amount +2,31003000336,12312702,2300 +2,31003000336,12312701,1200 diff --git a/tasks/free_text_acme_lqhs_010/setup.sh b/tasks/free_text_acme_lqhs_010/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqhs_010/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqhs_010/solution.sh b/tasks/free_text_acme_lqhs_010/solution.sh new file mode 100755 index 00000000..b4e17d05 --- /dev/null +++ b/tasks/free_text_acme_lqhs_010/solution.sh @@ -0,0 +1,20 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + party_identifier as AgentID, + policy_number, + company_claim_number, + claim_amount.claim_amount as Loss_Payment_Amount +FROM + Claim + inner join claim_amount on claim.claim_identifier = claim_amount.claim_identifier + inner JOIN loss_payment ON claim_amount.claim_amount_identifier = loss_payment.claim_amount_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join agreement_party_role on agreement_party_role.agreement_identifier = policy.policy_identifier + +where agreement_party_role.party_role_code = 'AG' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqhs_010/task.yaml b/tasks/free_text_acme_lqhs_010/task.yaml new file mode 100644 index 00000000..df35b4eb --- /dev/null +++ b/tasks/free_text_acme_lqhs_010/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_lqhs_010 +status: ready +description: 'LQHS: Agent - Policy - Coverage - Claim - Loss Payment' +prompts: +- key: base + prompt: 'Return agents and the policies they have sold that have had a claim and + the corresponding loss payment amount by agent id, policy number and claim number + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return agents and the policies they have sold that have had a claim and the corresponding + loss payment amount by agent id, policy number and claim number + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqhs_010/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqhs_010/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqhs_010/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqhs_011/seeds/_no-op.txt b/tasks/free_text_acme_lqhs_011/seeds/_no-op.txt new file mode 100644 index 00000000..55a08ef8 --- /dev/null +++ b/tasks/free_text_acme_lqhs_011/seeds/_no-op.txt @@ -0,0 +1,10 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + AgentID: integer + Policy_Number: bigint + Company_Claim_Number: integer + Catastrophe_Name: varchar diff --git a/tasks/free_text_acme_lqhs_011/seeds/solution__result.csv b/tasks/free_text_acme_lqhs_011/seeds/solution__result.csv new file mode 100644 index 00000000..b215b541 --- /dev/null +++ b/tasks/free_text_acme_lqhs_011/seeds/solution__result.csv @@ -0,0 +1,3 @@ +AgentID,Policy_Number,Company_Claim_Number,Catastrophe_Name +2,31003000336,12312702,Fire +2,31003000336,12312701,Fire diff --git a/tasks/free_text_acme_lqhs_011/setup.sh b/tasks/free_text_acme_lqhs_011/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqhs_011/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqhs_011/solution.sh b/tasks/free_text_acme_lqhs_011/solution.sh new file mode 100755 index 00000000..e78e1d5d --- /dev/null +++ b/tasks/free_text_acme_lqhs_011/solution.sh @@ -0,0 +1,18 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + party_identifier as AgentID, + policy_number, + company_claim_number, + catastrophe_name +FROM + Claim + inner join catastrophe on claim.catastrophe_identifier = catastrophe.catastrophe_identifier + inner join claim_coverage on claim.claim_identifier = claim_coverage.claim_identifier + inner join policy_coverage_detail on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join policy on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join agreement_party_role on agreement_party_role.agreement_identifier = policy.policy_identifier +where agreement_party_role.party_role_code = 'AG' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqhs_011/task.yaml b/tasks/free_text_acme_lqhs_011/task.yaml new file mode 100644 index 00000000..375d5546 --- /dev/null +++ b/tasks/free_text_acme_lqhs_011/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_lqhs_011 +status: ready +description: 'LQHS: Agent - Policy - Coverage - Claim - Coverage' +prompts: +- key: base + prompt: 'Return agents and the policy they have sold that have had a claim and the + corresponding catastrophe it had. + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return agents and the policy they have sold that have had a claim and the corresponding + catastrophe it had. + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: hard +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqhs +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqhs_011/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqhs_011/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqhs_011/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_001/seeds/_no-op.txt b/tasks/free_text_acme_lqls_001/seeds/_no-op.txt new file mode 100644 index 00000000..f1243b84 --- /dev/null +++ b/tasks/free_text_acme_lqls_001/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + Party_Identifier: integer diff --git a/tasks/free_text_acme_lqls_001/seeds/solution__result.csv b/tasks/free_text_acme_lqls_001/seeds/solution__result.csv new file mode 100644 index 00000000..d234eb0e --- /dev/null +++ b/tasks/free_text_acme_lqls_001/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Policy_Number,Party_Identifier +31003000336,1 +31003000337,1 diff --git a/tasks/free_text_acme_lqls_001/setup.sh b/tasks/free_text_acme_lqls_001/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_001/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_001/solution.sh b/tasks/free_text_acme_lqls_001/solution.sh new file mode 100755 index 00000000..4ce67252 --- /dev/null +++ b/tasks/free_text_acme_lqls_001/solution.sh @@ -0,0 +1,9 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select policy.policy_number, party_identifier +from agreement_party_role +join policy on agreement_party_role.agreement_identifier = policy.policy_identifier +where agreement_party_role.party_role_code = 'PH' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_001/task.yaml b/tasks/free_text_acme_lqls_001/task.yaml new file mode 100644 index 00000000..803f5aeb --- /dev/null +++ b/tasks/free_text_acme_lqls_001/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_lqls_001 +status: ready +description: 'LQLS: Return all the policies and their policy holder by id' +prompts: +- key: base + prompt: 'Return all the policies and their policy holder by id + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return all the policies and their policy holder by id + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: easy +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_001/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_001/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_001/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_002/seeds/_no-op.txt b/tasks/free_text_acme_lqls_002/seeds/_no-op.txt new file mode 100644 index 00000000..4a278311 --- /dev/null +++ b/tasks/free_text_acme_lqls_002/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Company_Claim_Number: integer + loss_reserve_amount: integer diff --git a/tasks/free_text_acme_lqls_002/seeds/solution__result.csv b/tasks/free_text_acme_lqls_002/seeds/solution__result.csv new file mode 100644 index 00000000..c306fc08 --- /dev/null +++ b/tasks/free_text_acme_lqls_002/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Company_Claim_Number,loss_reserve_amount +12312701,1000 +12312702,2100 diff --git a/tasks/free_text_acme_lqls_002/setup.sh b/tasks/free_text_acme_lqls_002/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_002/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_002/solution.sh b/tasks/free_text_acme_lqls_002/solution.sh new file mode 100755 index 00000000..032cbfb6 --- /dev/null +++ b/tasks/free_text_acme_lqls_002/solution.sh @@ -0,0 +1,12 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + company_claim_number, + claim_amount as loss_reserve_amount +FROM + Claim + inner join claim_amount on claim.claim_identifier = claim_amount.claim_identifier + inner JOIN loss_reserve ON claim_amount.claim_amount_identifier = loss_reserve.claim_amount_identifier +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_002/task.yaml b/tasks/free_text_acme_lqls_002/task.yaml new file mode 100644 index 00000000..248d0994 --- /dev/null +++ b/tasks/free_text_acme_lqls_002/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_lqls_002 +status: ready +description: 'LQLS: Claim - Loss Reserve' +prompts: +- key: base + prompt: 'What are the loss reserve amount of all claims by claim number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are the loss reserve amount of all claims by claim number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_002/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_002/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_002/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_003/seeds/_no-op.txt b/tasks/free_text_acme_lqls_003/seeds/_no-op.txt new file mode 100644 index 00000000..5540df90 --- /dev/null +++ b/tasks/free_text_acme_lqls_003/seeds/_no-op.txt @@ -0,0 +1,9 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + Party_Identifier: integer + Policy_Amount: integer diff --git a/tasks/free_text_acme_lqls_003/seeds/solution__result.csv b/tasks/free_text_acme_lqls_003/seeds/solution__result.csv new file mode 100644 index 00000000..4676cce2 --- /dev/null +++ b/tasks/free_text_acme_lqls_003/seeds/solution__result.csv @@ -0,0 +1,7 @@ +Policy_Number,Party_Identifier,Policy_Amount +31003000336,1,15000 +31003000336,1,16000 +31003000336,1,17000 +31003000336,1,18000 +31003000336,1,20000 +31003000337,1,12000 diff --git a/tasks/free_text_acme_lqls_003/setup.sh b/tasks/free_text_acme_lqls_003/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_003/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_003/solution.sh b/tasks/free_text_acme_lqls_003/solution.sh new file mode 100755 index 00000000..ea9a7c0d --- /dev/null +++ b/tasks/free_text_acme_lqls_003/solution.sh @@ -0,0 +1,11 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select policy.policy_number, party_identifier, policy_amount +from agreement_party_role +join policy on agreement_party_role.agreement_identifier = policy.policy_identifier +inner join policy_amount on policy.policy_identifier = policy_amount.policy_identifier +inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +where agreement_party_role.party_role_code = 'PH' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_003/task.yaml b/tasks/free_text_acme_lqls_003/task.yaml new file mode 100644 index 00000000..e86340dd --- /dev/null +++ b/tasks/free_text_acme_lqls_003/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_lqls_003 +status: ready +description: 'LQLS: What are all the premiums that have been paid by policy holders?' +prompts: +- key: base + prompt: 'What are all the premiums that have been paid by policy holders? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are all the premiums that have been paid by policy holders? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_003/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_003/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_003/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_004/seeds/_no-op.txt b/tasks/free_text_acme_lqls_004/seeds/_no-op.txt new file mode 100644 index 00000000..f62af09f --- /dev/null +++ b/tasks/free_text_acme_lqls_004/seeds/_no-op.txt @@ -0,0 +1,7 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Company_Claim_Number: integer diff --git a/tasks/free_text_acme_lqls_004/seeds/solution__result.csv b/tasks/free_text_acme_lqls_004/seeds/solution__result.csv new file mode 100644 index 00000000..eee64048 --- /dev/null +++ b/tasks/free_text_acme_lqls_004/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Company_Claim_Number +12312701 +12312702 diff --git a/tasks/free_text_acme_lqls_004/setup.sh b/tasks/free_text_acme_lqls_004/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_004/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_004/solution.sh b/tasks/free_text_acme_lqls_004/solution.sh new file mode 100755 index 00000000..0b3ff142 --- /dev/null +++ b/tasks/free_text_acme_lqls_004/solution.sh @@ -0,0 +1,8 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT company_claim_number +FROM claim +where claim_close_date >= '2019-01-01' and claim_close_date <= '2019-12-31' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_004/task.yaml b/tasks/free_text_acme_lqls_004/task.yaml new file mode 100644 index 00000000..96236219 --- /dev/null +++ b/tasks/free_text_acme_lqls_004/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_lqls_004 +status: ready +description: 'LQLS: Return all the claims by claim number that were closed in 2019' +prompts: +- key: base + prompt: 'Return all the claims by claim number that were closed in 2019 + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return all the claims by claim number that were closed in 2019 + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: easy +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_004/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_004/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_004/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_005/seeds/_no-op.txt b/tasks/free_text_acme_lqls_005/seeds/_no-op.txt new file mode 100644 index 00000000..f75dfed0 --- /dev/null +++ b/tasks/free_text_acme_lqls_005/seeds/_no-op.txt @@ -0,0 +1,10 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + Effective_Date: date + Expiration_Date: date + Policy_Amount: integer diff --git a/tasks/free_text_acme_lqls_005/seeds/solution__result.csv b/tasks/free_text_acme_lqls_005/seeds/solution__result.csv new file mode 100644 index 00000000..6519d428 --- /dev/null +++ b/tasks/free_text_acme_lqls_005/seeds/solution__result.csv @@ -0,0 +1,7 @@ +Policy_Number,Effective_Date,Expiration_Date,Policy_Amount +31003000336,2015-01-01,2015-12-31,15000 +31003000336,2016-01-01,2016-12-31,16000 +31003000336,2017-01-01,2017-12-31,17000 +31003000336,2018-01-01,2018-12-31,18000 +31003000336,2019-01-01,2019-12-31,20000 +31003000337,2019-06-01,2020-05-31,12000 diff --git a/tasks/free_text_acme_lqls_005/setup.sh b/tasks/free_text_acme_lqls_005/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_005/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_005/solution.sh b/tasks/free_text_acme_lqls_005/solution.sh new file mode 100755 index 00000000..c67b16b0 --- /dev/null +++ b/tasks/free_text_acme_lqls_005/solution.sh @@ -0,0 +1,11 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select policy_number, policy_coverage_detail.effective_date, policy_coverage_detail.expiration_date, policy_amount +from + policy + inner join policy_coverage_detail on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join policy_amount on policy_coverage_detail.policy_coverage_detail_identifier = policy_amount.policy_coverage_detail_identifier + inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_005/task.yaml b/tasks/free_text_acme_lqls_005/task.yaml new file mode 100644 index 00000000..9169b472 --- /dev/null +++ b/tasks/free_text_acme_lqls_005/task.yaml @@ -0,0 +1,37 @@ +task_id: free_text_acme_lqls_005 +status: ready +description: 'LQLS: What is the premium amount of all policies by policy number, coverage + effective date and coverage expiration date' +prompts: +- key: base + prompt: 'What is the premium amount of all policies by policy number, coverage effective + date and coverage expiration date + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the premium amount of all policies by policy number, coverage effective + date and coverage expiration date + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_005/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_005/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_005/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_006/seeds/_no-op.txt b/tasks/free_text_acme_lqls_006/seeds/_no-op.txt new file mode 100644 index 00000000..784861e7 --- /dev/null +++ b/tasks/free_text_acme_lqls_006/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + Company_Claim_Number: integer diff --git a/tasks/free_text_acme_lqls_006/seeds/solution__result.csv b/tasks/free_text_acme_lqls_006/seeds/solution__result.csv new file mode 100644 index 00000000..384eba2c --- /dev/null +++ b/tasks/free_text_acme_lqls_006/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Policy_Number,Company_Claim_Number +31003000336,12312701 +31003000336,12312702 diff --git a/tasks/free_text_acme_lqls_006/setup.sh b/tasks/free_text_acme_lqls_006/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_006/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_006/solution.sh b/tasks/free_text_acme_lqls_006/solution.sh new file mode 100755 index 00000000..7ee80772 --- /dev/null +++ b/tasks/free_text_acme_lqls_006/solution.sh @@ -0,0 +1,12 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select policy_number, company_claim_number +from + policy + inner join policy_coverage_detail on policy.policy_identifier = policy_coverage_detail.policy_identifier + inner join claim_coverage on claim_coverage.policy_coverage_detail_identifier = policy_coverage_detail.policy_coverage_detail_identifier + inner join claim on claim.claim_identifier = claim_coverage.claim_identifier + +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_006/task.yaml b/tasks/free_text_acme_lqls_006/task.yaml new file mode 100644 index 00000000..9fb360d2 --- /dev/null +++ b/tasks/free_text_acme_lqls_006/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_lqls_006 +status: ready +description: 'LQLS: Policy - Coverage - Claim' +prompts: +- key: base + prompt: 'What are all our policies that have a claim associated to them by policy + and claim number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are all our policies that have a claim associated to them by policy and claim + number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_006/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_006/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_006/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_007/seeds/_no-op.txt b/tasks/free_text_acme_lqls_007/seeds/_no-op.txt new file mode 100644 index 00000000..bbf65c64 --- /dev/null +++ b/tasks/free_text_acme_lqls_007/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + agentid: integer diff --git a/tasks/free_text_acme_lqls_007/seeds/solution__result.csv b/tasks/free_text_acme_lqls_007/seeds/solution__result.csv new file mode 100644 index 00000000..0ee5a1a8 --- /dev/null +++ b/tasks/free_text_acme_lqls_007/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Policy_Number,agentid +31003000336,2 +31003000337,2 diff --git a/tasks/free_text_acme_lqls_007/setup.sh b/tasks/free_text_acme_lqls_007/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_007/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_007/solution.sh b/tasks/free_text_acme_lqls_007/solution.sh new file mode 100755 index 00000000..c3c02bff --- /dev/null +++ b/tasks/free_text_acme_lqls_007/solution.sh @@ -0,0 +1,9 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select policy.policy_number, party_identifier as agentid +from agreement_party_role +join policy on agreement_party_role.agreement_identifier = policy.policy_identifier +where agreement_party_role.party_role_code = 'AG' +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_007/task.yaml b/tasks/free_text_acme_lqls_007/task.yaml new file mode 100644 index 00000000..c3953819 --- /dev/null +++ b/tasks/free_text_acme_lqls_007/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_lqls_007 +status: ready +description: 'LQLS: Policy - Agent' +prompts: +- key: base + prompt: 'Return all the policies and the agents that sold them by policy number + and agent id + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return all the policies and the agents that sold them by policy number and agent + id + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: easy +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_007/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_007/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_007/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_008/seeds/_no-op.txt b/tasks/free_text_acme_lqls_008/seeds/_no-op.txt new file mode 100644 index 00000000..8df830e5 --- /dev/null +++ b/tasks/free_text_acme_lqls_008/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Company_Claim_Number: integer + expense_payment_amount: integer diff --git a/tasks/free_text_acme_lqls_008/seeds/solution__result.csv b/tasks/free_text_acme_lqls_008/seeds/solution__result.csv new file mode 100644 index 00000000..1cef04f7 --- /dev/null +++ b/tasks/free_text_acme_lqls_008/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Company_Claim_Number,expense_payment_amount +12312701,1300 +12312702,2400 diff --git a/tasks/free_text_acme_lqls_008/setup.sh b/tasks/free_text_acme_lqls_008/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_008/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_008/solution.sh b/tasks/free_text_acme_lqls_008/solution.sh new file mode 100755 index 00000000..807ffe27 --- /dev/null +++ b/tasks/free_text_acme_lqls_008/solution.sh @@ -0,0 +1,14 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + company_claim_number, + claim_amount as expense_payment_amount +FROM + Claim + inner join claim_amount on claim.claim_identifier = claim_amount.claim_identifier + inner JOIN expense_payment ON claim_amount.claim_amount_identifier = expense_payment.claim_amount_identifier + + +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_008/task.yaml b/tasks/free_text_acme_lqls_008/task.yaml new file mode 100644 index 00000000..5a479451 --- /dev/null +++ b/tasks/free_text_acme_lqls_008/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_lqls_008 +status: ready +description: 'LQLS: Claim - Expense Payment' +prompts: +- key: base + prompt: 'What are the expense payment amount of all claims by claim number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are the expense payment amount of all claims by claim number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_008/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_008/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_008/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_009/seeds/_no-op.txt b/tasks/free_text_acme_lqls_009/seeds/_no-op.txt new file mode 100644 index 00000000..331d0ba2 --- /dev/null +++ b/tasks/free_text_acme_lqls_009/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Company_Claim_Number: integer + expense_reserve_amount: integer diff --git a/tasks/free_text_acme_lqls_009/seeds/solution__result.csv b/tasks/free_text_acme_lqls_009/seeds/solution__result.csv new file mode 100644 index 00000000..6d49e96a --- /dev/null +++ b/tasks/free_text_acme_lqls_009/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Company_Claim_Number,expense_reserve_amount +12312701,1100 +12312702,2200 diff --git a/tasks/free_text_acme_lqls_009/setup.sh b/tasks/free_text_acme_lqls_009/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_009/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_009/solution.sh b/tasks/free_text_acme_lqls_009/solution.sh new file mode 100755 index 00000000..d6e32287 --- /dev/null +++ b/tasks/free_text_acme_lqls_009/solution.sh @@ -0,0 +1,13 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + company_claim_number, + claim_amount as expense_reserve_amount +FROM + Claim + inner join claim_amount on claim.claim_identifier = claim_amount.claim_identifier + inner JOIN expense_reserve ON claim_amount.claim_amount_identifier = expense_reserve.claim_amount_identifier + +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_009/task.yaml b/tasks/free_text_acme_lqls_009/task.yaml new file mode 100644 index 00000000..6afedb9d --- /dev/null +++ b/tasks/free_text_acme_lqls_009/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_lqls_009 +status: ready +description: 'LQLS: Claim - Expense Reserve' +prompts: +- key: base + prompt: 'What are the expense reserve amount of all claims by claim number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are the expense reserve amount of all claims by claim number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_009/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_009/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_009/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_010/seeds/_no-op.txt b/tasks/free_text_acme_lqls_010/seeds/_no-op.txt new file mode 100644 index 00000000..5fe642c2 --- /dev/null +++ b/tasks/free_text_acme_lqls_010/seeds/_no-op.txt @@ -0,0 +1,9 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Company_Claim_Number: integer + Claim_Open_Date: date + Claim_Close_Date: date diff --git a/tasks/free_text_acme_lqls_010/seeds/solution__result.csv b/tasks/free_text_acme_lqls_010/seeds/solution__result.csv new file mode 100644 index 00000000..04ada464 --- /dev/null +++ b/tasks/free_text_acme_lqls_010/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Company_Claim_Number,Claim_Open_Date,Claim_Close_Date +12312701,2019-01-15,2019-01-31 +12312702,2019-06-02,2019-06-27 diff --git a/tasks/free_text_acme_lqls_010/setup.sh b/tasks/free_text_acme_lqls_010/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_010/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_010/solution.sh b/tasks/free_text_acme_lqls_010/solution.sh new file mode 100755 index 00000000..a548ff03 --- /dev/null +++ b/tasks/free_text_acme_lqls_010/solution.sh @@ -0,0 +1,8 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT company_claim_number, claim_open_date, claim_close_date +FROM claim + +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_010/task.yaml b/tasks/free_text_acme_lqls_010/task.yaml new file mode 100644 index 00000000..0c1d3f16 --- /dev/null +++ b/tasks/free_text_acme_lqls_010/task.yaml @@ -0,0 +1,35 @@ +task_id: free_text_acme_lqls_010 +status: ready +description: 'LQLS: Return all the claims we have by claim number, open date and close + date?' +prompts: +- key: base + prompt: 'Return all the claims we have by claim number, open date and close date? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return all the claims we have by claim number, open date and close date? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: easy +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_010/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_010/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_010/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_011/seeds/_no-op.txt b/tasks/free_text_acme_lqls_011/seeds/_no-op.txt new file mode 100644 index 00000000..6e82cef4 --- /dev/null +++ b/tasks/free_text_acme_lqls_011/seeds/_no-op.txt @@ -0,0 +1,9 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + Effective_Date: date + Expiration_Date: date diff --git a/tasks/free_text_acme_lqls_011/seeds/solution__result.csv b/tasks/free_text_acme_lqls_011/seeds/solution__result.csv new file mode 100644 index 00000000..c0772a06 --- /dev/null +++ b/tasks/free_text_acme_lqls_011/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Policy_Number,Effective_Date,Expiration_Date +31003000336,2015-01-01,2019-12-31 +31003000337,2019-06-01,2020-05-31 diff --git a/tasks/free_text_acme_lqls_011/setup.sh b/tasks/free_text_acme_lqls_011/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_011/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_011/solution.sh b/tasks/free_text_acme_lqls_011/solution.sh new file mode 100755 index 00000000..eca4498e --- /dev/null +++ b/tasks/free_text_acme_lqls_011/solution.sh @@ -0,0 +1,8 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select policy_number, policy.effective_date, policy.expiration_date +from policy + +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_011/task.yaml b/tasks/free_text_acme_lqls_011/task.yaml new file mode 100644 index 00000000..f07b7a87 --- /dev/null +++ b/tasks/free_text_acme_lqls_011/task.yaml @@ -0,0 +1,36 @@ +task_id: free_text_acme_lqls_011 +status: ready +description: 'LQLS: Policy' +prompts: +- key: base + prompt: 'Return all the policies we have by policy number, effective date and expiration + date? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + Return all the policies we have by policy number, effective date and expiration + date? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: easy +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_011/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_011/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_011/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_012/seeds/_no-op.txt b/tasks/free_text_acme_lqls_012/seeds/_no-op.txt new file mode 100644 index 00000000..331e702e --- /dev/null +++ b/tasks/free_text_acme_lqls_012/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Company_Claim_Number: integer + Loss_Payment_Amount: integer diff --git a/tasks/free_text_acme_lqls_012/seeds/solution__result.csv b/tasks/free_text_acme_lqls_012/seeds/solution__result.csv new file mode 100644 index 00000000..34a8b1e8 --- /dev/null +++ b/tasks/free_text_acme_lqls_012/seeds/solution__result.csv @@ -0,0 +1,3 @@ +Company_Claim_Number,Loss_Payment_Amount +12312701,1200 +12312702,2300 diff --git a/tasks/free_text_acme_lqls_012/setup.sh b/tasks/free_text_acme_lqls_012/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_012/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_012/solution.sh b/tasks/free_text_acme_lqls_012/solution.sh new file mode 100755 index 00000000..7d01afc3 --- /dev/null +++ b/tasks/free_text_acme_lqls_012/solution.sh @@ -0,0 +1,13 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +SELECT + company_claim_number, + claim_amount as Loss_Payment_Amount +FROM + Claim + inner join claim_amount on claim.claim_identifier = claim_amount.claim_identifier + inner JOIN loss_payment ON claim_amount.claim_amount_identifier = loss_payment.claim_amount_identifier + +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_012/task.yaml b/tasks/free_text_acme_lqls_012/task.yaml new file mode 100644 index 00000000..39260fff --- /dev/null +++ b/tasks/free_text_acme_lqls_012/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_lqls_012 +status: ready +description: 'LQLS: What are the loss payment amount of all claims by claim number?' +prompts: +- key: base + prompt: 'What are the loss payment amount of all claims by claim number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What are the loss payment amount of all claims by claim number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_012/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_012/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_012/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result diff --git a/tasks/free_text_acme_lqls_013/seeds/_no-op.txt b/tasks/free_text_acme_lqls_013/seeds/_no-op.txt new file mode 100644 index 00000000..ddcaef05 --- /dev/null +++ b/tasks/free_text_acme_lqls_013/seeds/_no-op.txt @@ -0,0 +1,8 @@ + + +seeds: + acme_insurance: + solution__result: + +column_types: + Policy_Number: bigint + Policy_Amount: integer diff --git a/tasks/free_text_acme_lqls_013/seeds/solution__result.csv b/tasks/free_text_acme_lqls_013/seeds/solution__result.csv new file mode 100644 index 00000000..6be70f87 --- /dev/null +++ b/tasks/free_text_acme_lqls_013/seeds/solution__result.csv @@ -0,0 +1,7 @@ +Policy_Number,Policy_Amount +31003000336,15000 +31003000336,16000 +31003000336,17000 +31003000336,18000 +31003000336,20000 +31003000337,12000 diff --git a/tasks/free_text_acme_lqls_013/setup.sh b/tasks/free_text_acme_lqls_013/setup.sh new file mode 100755 index 00000000..d10a3048 --- /dev/null +++ b/tasks/free_text_acme_lqls_013/setup.sh @@ -0,0 +1,3 @@ +#\!/bin/bash +dbt deps +dbt run diff --git a/tasks/free_text_acme_lqls_013/solution.sh b/tasks/free_text_acme_lqls_013/solution.sh new file mode 100755 index 00000000..54fd56bb --- /dev/null +++ b/tasks/free_text_acme_lqls_013/solution.sh @@ -0,0 +1,10 @@ +#!/bin/bash +cat > models/result.sql << 'GOLD_SQL' +select policy_number, policy_amount +from + policy + inner join policy_amount on policy.policy_identifier = policy_amount.policy_identifier + inner join premium on premium.policy_amount_identifier = policy_amount.policy_amount_identifier +GOLD_SQL + +dbt run --select result diff --git a/tasks/free_text_acme_lqls_013/task.yaml b/tasks/free_text_acme_lqls_013/task.yaml new file mode 100644 index 00000000..94954e95 --- /dev/null +++ b/tasks/free_text_acme_lqls_013/task.yaml @@ -0,0 +1,34 @@ +task_id: free_text_acme_lqls_013 +status: ready +description: 'LQLS: What is the premium amount of all policies by policy number?' +prompts: +- key: base + prompt: 'What is the premium amount of all policies by policy number? + + + Write a model called result.sql containing your answer.' +- key: with_sl + prompt: 'Using the dbt semantic layer, answer this question: + + + What is the premium amount of all policies by policy number? + + + Write a model called result.sql containing your answer.' +author_name: dbt-labs +author_email: noreply@getdbt.com +difficulty: medium +tags: +- semantic-layer +- metricflow +- free-text +- acme-insurance +- lqls +test_setup: |- + dbt run --select result + python /scripts/fuzzy_compare.py result /seeds/solution__result.csv +variants: +- db_type: duckdb + db_name: acme_insurance + project_type: dbt + project_name: acme_insurance diff --git a/tasks/free_text_acme_lqls_013/tests/fuzzy_comparison.sql b/tasks/free_text_acme_lqls_013/tests/fuzzy_comparison.sql new file mode 100644 index 00000000..ceeafc4c --- /dev/null +++ b/tasks/free_text_acme_lqls_013/tests/fuzzy_comparison.sql @@ -0,0 +1 @@ +SELECT * FROM fuzzy_match_result