{"id":13702940,"url":"https://github.com/infinitelambda/dq-tools","last_synced_at":"2026-03-01T15:09:44.853Z","repository":{"id":109472877,"uuid":"588057098","full_name":"infinitelambda/dq-tools","owner":"infinitelambda","description":"Make simple storing test results and visualisation of these in a BI dashboard","archived":false,"fork":false,"pushed_at":"2025-09-25T03:59:53.000Z","size":3197,"stargazers_count":47,"open_issues_count":0,"forks_count":14,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-25T05:38:51.579Z","etag":null,"topics":["dataquality","dbt","package"],"latest_commit_sha":null,"homepage":"https://infinitelambda.github.io/dq-tools/","language":"PLpgSQL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/infinitelambda.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-12T08:16:14.000Z","updated_at":"2025-09-25T03:59:52.000Z","dependencies_parsed_at":"2024-01-30T05:25:30.514Z","dependency_job_id":"4f6b8345-44cf-4b44-b218-f42867e3e475","html_url":"https://github.com/infinitelambda/dq-tools","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/infinitelambda/dq-tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infinitelambda%2Fdq-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infinitelambda%2Fdq-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infinitelambda%2Fdq-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infinitelambda%2Fdq-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/infinitelambda","download_url":"https://codeload.github.com/infinitelambda/dq-tools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infinitelambda%2Fdq-tools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29973309,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T15:06:50.263Z","status":"ssl_error","status_checked_at":"2026-03-01T15:06:18.879Z","response_time":124,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dataquality","dbt","package"],"created_at":"2024-08-02T21:00:46.700Z","updated_at":"2026-03-01T15:09:44.827Z","avatar_url":"https://github.com/infinitelambda.png","language":"PLpgSQL","readme":"# Data Quality Tools\n\n\u003cimg align=\"right\" width=\"150\" height=\"150\" src=\"https://raw.githubusercontent.com/infinitelambda/dq-tools/main/docs/assets/img/il-logo.png\"\u003e\n\nThe purpose of the dq tool is to make simple storing test results and visualisation of these in a BI dashboard.\n\n[![dq-tools](https://img.shields.io/badge/official--documentation--site-visit-blueviolet)](https://infinitelambda.github.io/dq-tools/)\n\n[![dbt-hub](https://img.shields.io/badge/dbt-hub-FF694B?logo=dbt\u0026logoColor=FF694B)](https://hub.getdbt.com/infinitelambda/dq_tools)\n[![ci-pr](https://github.com/infinitelambda/dq-tools/actions/workflows/ci-pr.yml/badge.svg)](https://github.com/infinitelambda/dq-tools/actions/workflows/ci-pr.yml)\n\n**Supported DWHs**:\n\n![dwh](https://img.shields.io/badge/DWH-Snowflake-9cf?logo=snowflake\u0026logoColor=white)\n![dwh](https://img.shields.io/badge/DWH-BigQuery-green?logo=google\u0026logoColor=white)\n\n**Installation**:\n\n- Add to `packages.yml` file:\n\n  ```yml\n  packages:\n    - package: infinitelambda/dq_tools\n      version: [\"\u003e=1.8.0\", \"\u003c1.9.0\"]\n  ```\n\n- (Optional) Configure schema in `dbt_project.yml` file:\n\n  ```yml\n  models:\n    dq_tools:\n      # +database: DQ\n      +schema: AUDIT\n      \n  vars: # (TO BE DEPRECATED, currently used only in test macros)\n    # dbt_dq_tool_database: DQ\n    dbt_dq_tool_schema: AUDIT\n  ```\n\n- Add on-run-end hook:\n\n  ```yml\n  on-run-end:\n    - '{{ dq_tools.store_test_results(results) }}'\n  ```\n\n- Initialize `dq-tools` (new in v1.4+)\n\n  ```bash\n  dbt run -s dq_tools \n  ```\n\n - Then, decide to save the test result in dbt command:\n\n   ```bash\n   dbt test --vars '{dq_tools_enable_store_test_results: True}'\n   dbt build --vars '{dq_tools_enable_store_test_results: True}'\n   ```\n \n   Alternatively, we can also enable this variable in \u003ccode\u003edbt_project.yml`\u003c/code\u003e:\n   ```yml\n   vars:\n     # to store the test results in db table\n     dq_tools_enable_store_test_results: True\n   ```\n\nSee [Installation Instructions](#installation-instructions) in more details.\n\n## 3 Functional layers\n\n- store dbt test results in a table\n- create mart for DQ test result\n- provide BI dashboard for visualisation\n\nThe idea behind the layer is that each layer can be changed, extended or replaced without or with minimal impact on the other 2.\n\n## Data Quality KPIs\n\nThere are 6 main KPIs will be produced as below:\n\n- Accuracy\n- Consistency\n- Completeness\n- Timeliness\n- Validity\n- Uniqueness\n\n![DataQualityKPIs](https://raw.githubusercontent.com/infinitelambda/dq-tools/main/assets/images/DataQualityKPIs.png)\n\nNOTE: It is possible that we can have custom KPI(s) as you go but it is NOT recommended as the existing modelling design will stick to the above 6 ones only.\n\n```yaml\nmodels:\n  - name: my_model\n    columns:\n      - name: my_column\n        data_tests:\n          - dq_tools.unique_where_db:\n              kpi_category: MyKPI # not recommended\n```\n\n## Quick Demo\n\n- STEP 1 - Installation:\n  - install dq tools package\n  - create dq log issue table following the documentation in the package.\n  - create metrics views\n  - set up looker dashboard\n\n- STEP 2 - define dbt data_tests:\n  Define tests following the description in the package documentation.\n\n  ```yaml\n  models:\n  - name: dim_customers\n    description: This table has basic information about a customer, as well as some derived facts based on a customer's orders\n    data_tests:\n      - dq_tools.equal_rowcount_where_db:\n          compare_model: ref('stg_customers')\n          where: customer_id \u003e 50\n          compare_model_where: customer_id \u003e 50\n    columns:\n      - name: customer_id\n        description: This is a unique identifier for a customer\n        data_tests:\n          - dq_tools.unique_where_db\n          - dq_tools.not_null_where_db\n  ```\n\n- STEP 3 - run the dbt test and check:\n  Test results in the dq issue log table:\n  ![TestResultLog](https://raw.githubusercontent.com/infinitelambda/dq-tools/main/assets/images/TestResultLog.png)\n\n  Data quality KPIs in looker:\n  ![LookerDashboard](https://raw.githubusercontent.com/infinitelambda/dq-tools/main/assets/images/LookerDashboard.png)\n\n## Installation Instructions\n\nGo to [dbt Hub](https://hub.getdbt.com/infinitelambda/dq_tools/latest/) and register the package into your dbt `packages.yml` file:\n\n  ```yml\n  packages:\n    - package: infinitelambda/dq_tools\n      version: [\"\u003e=1.2.0\", \"\u003c1.3.0\"]\n  ```\n\n### 1. Create table DQ_ISSUE_LOG in the database\n\nSince the version 1.3, the table `dq_issue_log` is made as dbt model, no more manual hook config :tada:.\n\nIt should be created automatically within your upstream dbt command. If not, all you should do that is running the command: `dbt run -s dq_tools`.\n\n\u003e [!NOTE]\n\u003e If you already have a `metricflow_time_spine` model in your project, you will encounter a Compilation error when executing `dbt run -s dq_tools`. In this scenario, disable the `metricflow_time_spine` model by updating its configuration in your project (path: your_project/dbt_packages/dq_tools/models/04_metric/metricflow_time_spine).\n\n\n\u003cdetails\u003e\n  \u003csummary\u003eFor dq-tools legacy version \u003e=1.0,\u003c1.3\u003c/summary\u003e\n\n  A macro `create_table_dq_issue_log` ([source](https://github.com/infinitelambda/dq-tools/blob/main/macros/create_table_dq_issue_log.sql)) will create the log table in your database (Snowflake) / project (BigQuery).\n\n  Add `on-run-start` hook (required dbt \u003e= 1.0.0):\n\n  ```yml\n  on-run-start:\n    - '{{ dq_tools.create_table_dq_issue_log() }}'\n  ```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eFor dq-tools legacy version \u003c 1.0, you can run it as an operation\u003c/summary\u003e\n\n  ```bash\n  dbt run-operation create_dq_issue_log\n  ```\n\n\u003c/details\u003e\n\n### 2. Configure your DQ schema with `dbt_dq_tool_schema` variable:\n\nValue for variable `dbt_dq_tool_schema: your_schema_name` needs to be added to dbt_project.yml file in your project. And then, optionally add `dbt_dq_tool_database: your_database_name` which default value is `target.schema` in `profiles.yml` file\n\ne.g.\n\n```yaml\nvars:\n  # (optional) to create db table in the schema named as AUDIT, default to `target.schema`\n  dbt_dq_tool_schema: AUDIT\n  # (optional) to create db table in the database named as DQ_TOOLS, default to `target.database`\n  dbt_dq_tool_database: DQ_TOOLS\n```\n\n### 3. Decide to save test result to Data Warehouse table:\n\n#### With `dq_tools_enable_store_test_results` variable:\n\nAdd the `on-run-end` hook to you project:\n\n```yaml\non-run-end:\n  - '{{ dq_tools.store_test_results(results) }}'\n```\n\nThen, decide to save the test result in dbt command:\n\n```bash\ndbt test --vars '{dq_tools_enable_store_test_results: True}'\ndbt build --vars '{dq_tools_enable_store_test_results: True}'\n```\n\n\u003cdetails\u003e\n  \u003csummary\u003eAlternatively, we can also enable this variable in \u003ccode\u003edbt_project.yml`\u003c/code\u003e:\u003c/summary\u003e\n\n```yml\nvars:\n  # to store the test results in db table\n  dq_tools_enable_store_test_results: True\n```\n\n\u003c/details\u003e\n\nPros \u0026 Cons:\n\n- Pros:\n  - Save both type of tests (singular and generic) result to log table\n  - Save test result from any test functions (outside of dq-tools ones)\n- Cons\n  - Only availabe on the latest version\n  - Singular Test: table_name / ref_table: cannot be captured\n  - Singular Test: no_of_records cannot be captured\n\n\n\u003cdetails\u003e\n  \u003csummary\u003eFor dq_tools version \u003c 1.0 (with legacy variable) \u003c/summary\u003e\n\n#### Enabling test result storing by `dbt_test_results_to_db` variable\n\nOptionally, add `dbt_test_results_to_db: False` as a variable to your `dbt_profile.yml` file. Its default value is `False` meaning NOT to save test result.\n\ne.g.\n\n```yaml\nvars:\n  # to store the test results in db table\n  dbt_test_results_to_db: False\n```\n\nYou can also specify the variable in dbt commands e.g.\n\n```bash\ndbt test -s your_model vars '{dbt_test_results_to_db: True}'\ndbt build -s your_model vars '{dbt_test_results_to_db: True}'\n```\n\nAdditionally, you **MUST** know that when you generate the doc or compile the code, this variable `dbt_test_results_to_db` is super important. If it's defined as `True`, it will run the test when generating the documentation or compiling. (indeed generating the doc compile the code first [see: Generating project documentation](https://docs.getdbt.com/docs/building-a-dbt-project/documentation#generating-project-documentation)).\n\nSo you should either pass the variable when generating the doc and compiling the code.\n\n````bash\ndbt docs generate --vars  'dbt_test_results_to_db: False'\ndbt compile --vars  'dbt_test_results_to_db: False'\n````\n\nEither defined it to false in the default variables and defined the variables when running the test.\n\n````bash\ndbt test --vars  'dbt_test_results_to_db: False'\n````\n\nPros \u0026 Cons:\n\n- Pros:\n  - Automatically save generic test result (if you used dq-tools functions)\n\n- Cons:\n  - Requires to create new test function(s) in advanced case(s) to adapt with current implementation of test result capturing approach\n  - Singular test functions is not documented (?)\n\n\u003c/details\u003e\n\n### 4. Decide to enable building the downstream models of the log table\n\nSince the version 1.4+, all models and metrics will be enabled by default.\n\n\u003cdetails\u003e\n  \u003csummary\u003eFor dq-tools version \u003c1.4\u003c/summary\u003e\n  \n  Enable it in `dbt_project.yml` file:\n\n  ```yml\n  # dbt_project.yml\n  models:\n    dq_tools:\n      +enabled: true\n\n  metrics:\n    dq_tools:\n      +enabled: true\n  ```\n\u003c/details\u003e\n\n## Macros\n\n### on-run-end Context\n\n#### store_test_results ([source](https://github.com/infinitelambda/dq-tools/blob/main/macros/artifacts/test/store_test_results.sql))\n\nThis macro is used to parse `results` variable at the `on-run-end` context to achieve the test result nodes, and save them to the `DQ_ISSUE_LOG` table.\nIf the model is materialized as `ephemeral`, this macro will insert the null value for aggregated fields related to tested model.\n\nUsage:\n\n```yml\n# dbt_project.yml\non-run-end:\n  - '{{ dq_tools.store_test_results(results) }}'\n```\n\nBesides, there are couple of private macros are used as a part of it aiming to extract/calculate things under ([here](https://github.com/infinitelambda/dq-tools/blob/main/macros/artifacts/test/utilities/))\n\n### Generic Tests\n\nThese tests are based on dbt_utils test.\nThe test result will be stored in a database table and further analysis can be built on these.\n\nDetailed informations will be stored such as check_timestamp, table_name, column_name, value, severity, no_of records etc.\n\n#### not_null_where_db ([source](https://github.com/infinitelambda/dq-tools/blob/main/macros/generic_tests/test_not_null_where_db.sql))\n\nThis test validates that there are no null values present in a column for a subset of rows by specifying a `where` clause.\n\nAll data quality issues are stored in the dq_issues_log table.\n\nIf not specified the default severity level is 'warn'. This option coresponds with dbts severity setting.\n\nKpi_category option allows you to change the default category, which this test will fall into in the looker dq_mart dashboard. Accepted values are: [`Accuracy`, `Consistency`, `Completeness`, `Timeliness`, `Validity`, `Uniqueness`]. Any other value will fall into `Other`. Default option for this test is Completeness.\n\nUsage:\n\n```yaml\nversion: 2\n\nmodels:\n  - name: my_model\n    columns:\n      - name: id\n        data_tests:\n          - dq_tools.not_null_where_db:\n              where: \"_deleted = false\"\n              severity_level: error\n              kpi_category: Completeness\n```\n\n#### relationships_where_db ([source](https://github.com/infinitelambda/dq-tools/blob/main/macros/generic_tests/test_relationships_where_db.sql))\n\nThis test validates the referential integrity between two relations (same as the core relationships schema test) with an added predicate to filter out some rows from the test. This is useful to exclude records such as test entities, rows created in the last X minutes/hours to account for temporary gaps due to ETL limitations, etc.\n\nAll data quality issues are stored in the dq_issues_log table.\n\nIf not specified the default severity level is 'warn'. This option coresponds with dbts severity setting.\n\nKpi_category option allows you to change the default category, which this test will fall into in the looker dq_mart dashboard. Accepted values are: [`Accuracy`, `Consistency`, `Completeness`, `Timeliness`, `Validity`, `Uniqueness`]. Any other value will fall into `Other`. Default option for this test is Consistency.\n\nUsage:\n\n```yaml\nversion: 2\n\nmodels:\n  - name: model_name\n    columns:\n      - name: id\n        data_tests:\n          - dq_tools.relationships_where_db:\n              to: ref('other_model_name')\n              field: client_id\n              from_condition: id \u003c\u003e '4ca448b8-24bf-4b88-96c6-b1609499c38b'\n              severity_level: warn\n              kpi_category: Consistency\n\n```\n\n#### unique_where_db ([source](https://github.com/infinitelambda/dq-tools/blob/main/macros/generic_tests/test_unique_where_db.sql))\n\nThis test validates that there are no duplicate values present in a field for a subset of rows by specifying a `where` clause.\n\nAll data quality issues are stored in the dq_issues_log table.\n\nIf not specified the default severity level is 'warn'. This option coresponds with dbts severity setting.\n\nKpi_category option allows you to change the default category, which this test will fall into in the looker dq_mart dashboard. Accepted values are: [`Accuracy`, `Consistency`, `Completeness`, `Timeliness`, `Validity`, `Uniqueness`]. Any other value will fall into `Other`. Default option for this test is Uniqueness.\n\nUsage:\n\n```yaml\nversion: 2\n\nmodels:\n  - name: my_model\n    columns:\n      - name: id\n        data_tests:\n          - dq_tools.unique_where_db:\n              where: \"_deleted = false\"\n              severity_level: error\n              kpi_category: Uniqueness\n```\n\n#### recency_db ([source](https://github.com/infinitelambda/dq-tools/blob/main/macros/generic_tests/test_recency_db.sql))\n\nThis schema test asserts that there is data in the referenced model at least as recent as the defined interval prior to the current timestamp.\n\nAll data quality issues are stored in the dq_issues_log table.\n\nIf not specified the default severity level is 'warn'. This option coresponds with dbts severity setting.\n\nKpi_category option allows you to change the default category, which this test will fall into in the looker dq_mart dashboard. Accepted values are: [`Accuracy`, `Consistency`, `Completeness`, `Timeliness`, `Validity`, `Uniqueness`]. Any other value will fall into `Other`. Default option for this test is Timeliness.\n\nUsage:\n\n```yaml\nversion: 2\n\nmodels:\n  - name: model_name\n    data_tests:\n      - dq_tools.recency_db:\n          datepart: day\n          field: created_at\n          interval: 1\n          severity_level: warn\n          kpi_category: Timeliness\n```\n\n#### expression_is_true_db ([source](https://github.com/infinitelambda/dq-tools/blob/main/macros/generic_tests/test_expression_is_true_db.sql))\n\nThis schema test asserts that a valid sql expression is true for all records. This is useful when checking integrity across columns, for example, that a total is equal to the sum of its parts, or that at least one column is true.\n\nAll data quality issues are stored in the dq_issues_log table.\n\nIf not specified the default severity level is 'warn'. This option coresponds with dbts severity setting.\n\nKpi_category option allows you to change the default category, which this test will fall into in the looker dq_mart dashboard. Accepted values are: [`Accuracy`, `Consistency`, `Completeness`, `Timeliness`, `Validity`, `Uniqueness`]. Any other value will fall into `Other`. Default option for this test is Validity.\n\nUsage:\n\n```yaml\nversion: 2\n\nmodels:\n  - name: model_name\n    data_tests:\n      - dq_tools.expression_is_true_db:\n          expression: \"col_a + col_b = total\"\n          kpi_category: Validity\n\n```\n\n#### accepted_values_where_db ([source](https://github.com/infinitelambda/dq-tools/blob/main/macros/generic_tests/test_accepted_values_where_db.sql))\n\nThis schema test asserts that all of the column values are within the list of accepted values provided. As with other schema tests, optional parameter `where` can be specified for testing just a subset of the column.\n\nAll data quality issues are stored in the dq_issues_log table.\n\nIf not specified the default severity level is 'warn'. This option coresponds with dbts severity setting.\n\nKpi_category option allows you to change the default category, which this test will fall into in the looker dq_mart dashboard. Accepted values are: [`Accuracy`, `Consistency`, `Completeness`, `Timeliness`, `Validity`, `Uniqueness`]. Any other value will fall into `Other`. Default option for this test is Accuracy.\n\nUsage:\n\n```yaml\nversion: 2\n\nmodels:\n  - name: model_name\n    data_tests:\n      - dq_tools.accepted_values_where_db:\n          values: [value1, value2]\n          severity_level: warn\n          kpi_category: Accuracy\n```\n\n#### equal_rowcount_where_db ([source](https://github.com/infinitelambda/dq-tools/blob/main/macros/generic_tests/test_equal_rowcount_where_db.sql))\n\nThis schema test asserts that count of rows in two relations is the same. Optional parameters `where` and `compare_model_where` can be specified for testing just a subset of base and compared relations respectively.\n\nAll data quality issues are stored in the dq_issues_log table.\n\nIf not specified the default severity level is 'warn'. This option coresponds with dbts severity setting.\n\nKpi_category option allows you to change the default category, which this test will fall into in the looker dq_mart dashboard. Accepted values are: [`Accuracy`, `Consistency`, `Completeness`, `Timeliness`, `Validity`, `Uniqueness`]. Any other value will fall into `Other`. Default option for this test is Consistency.\n\nUsage:\n\n```yaml\nversion: 2\n\nmodels:\n  - name: model_name\n    data_tests:\n      - dq_tools.equal_rowcount_where_db:\n          compare_model: some_other_model\n          where: \"_deleted = false\"\n          compare_model_where: \"_deleted = false\"\n          severity_level: warn\n```\n\n#### equality_where_db ([source](https://github.com/infinitelambda/dq-tools/blob/main/macros/generic_tests/test_equality_where_db.sql))\n\nThis schema test asserts that two relations (or subset of their columns) are equal. Relations as a whole are considered if the parameter `compare_columns` is not provided.\nOptional parameters `where` and `compare_model_where` can be specified for testing just a subset of base and compared relations respectively.\n\nAll data quality issues are stored in the dq_issues_log table.\n\nIf not specified the default severity level is 'warn'. This option coresponds with dbts severity setting.\n\nKpi_category option allows you to change the default category, which this test will fall into in the looker dq_mart dashboard. Accepted values are: [`Accuracy`, `Consistency`, `Completeness`, `Timeliness`, `Validity`, `Uniqueness`]. Any other value will fall into `Other`. Default option for this test is Consistency.\n\nUsage:\n\n```yaml\nversion: 2\n\nmodels:\n  - name: model_name\n    data_tests:\n      - dq_tools.equality_where_db:\n          compare_model: some_other_model\n          compare_columns:\n            - column1\n            - column2\n          where: \"_deleted = false\"\n          compare_model_where: \"_deleted = false\"\n          severity_level: warn\n```\n\n## Contributing\n\n[![contributions welcome](https://img.shields.io/badge/contribution--guideline-visit-brightgreen.svg?style=for-the-badge)](https://infinitelambda.github.io/dq-tools/nav/development/contributing-guide.html)\n\nIf you've ever wanted to contribute to this tool, and a great cause, feel free to create your [Pull Request](https://github.com/infinitelambda/dq-tools/pulls), or submit a new issue via [Bug Report](https://github.com/infinitelambda/dq-tools/issues/new?assignees=\u0026labels=\u0026template=bug_report.md\u0026title=[BUG]%20Describe%20it%20shortly) / [Feature Request](https://github.com/infinitelambda/dq-tools/issues/new?assignees=\u0026labels=\u0026template=feature_request.md\u0026title=[FEATURE]%20Describe%20it%20shortly) 💖\n","funding_links":[],"categories":["Data Quality"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finfinitelambda%2Fdq-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finfinitelambda%2Fdq-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finfinitelambda%2Fdq-tools/lists"}