{
  "$defs": {
    "AnalyticsQuerySupportSource": {
      "properties": {
        "source": {
          "$ref": "#/$defs/Source"
        },
        "value": {
          "enum": [
            "Apache Druid",
            "Apache Hive",
            "Apache Impala",
            "Apache Pinot",
            "AWS Athena",
            "Azure Synapse",
            "BigQuery",
            "Clickhouse",
            "Dremio",
            "DuckDB",
            "Firebolt",
            "Presto",
            "Trino"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "Benchmarking": {
      "properties": {
        "is_repeatable": {
          "description": "Is it possible without payment or sign-up to run benchmark tests yourself?",
          "type": "boolean"
        },
        "link_to_command": {
          "description": "Link to benchmark commands to reproduce benchmarks.",
          "type": "string"
        },
        "link_to_results": {
          "description": "Link to benchmark results.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "DataProcessingFrameworkSupportSource": {
      "properties": {
        "source": {
          "$ref": "#/$defs/Source"
        },
        "value": {
          "enum": [
            "Apache Spark",
            "Apache Drill",
            "Apache Hadoop",
            "Apache Pig",
            "Apache Storm",
            "Apache Flink",
            "Apache Beam",
            "Apache NiFi",
            "Apache Gobblin"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "DataValidationCategory": {
      "type": "object"
    },
    "DataVisualisationCategory": {
      "type": "object"
    },
    "DatabaseCategory": {
      "type": "object"
    },
    "FileCategory": {
      "description": "Technology falls under category of file",
      "properties": {
        "analytics_query_support": {
          "default": [],
          "items": {
            "$ref": "#/$defs/AnalyticsQuerySupportSource"
          },
          "type": "array",
          "uniqueItems": true
        },
        "data_processing_framework_support": {
          "default": [],
          "items": {
            "$ref": "#/$defs/DataProcessingFrameworkSupportSource"
          },
          "type": "array",
          "uniqueItems": true
        },
        "has_acid_support": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "File format supports ACID transactions (i.e. guarantee that the file will be in a consistent state after running a group of operations)."
        },
        "has_constraint_support": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "File format supports column or table level constraints. An example could be a not null constraint."
        },
        "has_encoding_support": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "File format supports using different encodings for data stored"
        },
        "has_encryption_support": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "File format supports encryption at file and/or column level."
        },
        "has_metadata": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "File format contains metadata about the file and it's contents. For example summary statistics such as min and max, record count, creation time, etc."
        },
        "has_native_compression": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "File format supports compressions algorithms natively (does not rely on external tools/commands)"
        },
        "has_nested_structure_support": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "File format supports nested column structures"
        },
        "has_type_system": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "File format checks and enforces column data types"
        },
        "is_human_readable": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "File format is human readable."
        },
        "orientation": {
          "properties": {
            "source": {
              "$ref": "#/$defs/Source"
            },
            "value": {
              "description": "File format is row or column oriented (could depend on underlying storage layer)",
              "enum": [
                "row",
                "column",
                "column or row"
              ],
              "type": "string"
            }
          },
          "type": "object"
        }
      },
      "required": [
        "is_human_readable",
        "orientation",
        "has_type_system",
        "has_nested_structure_support",
        "has_native_compression",
        "has_encoding_support",
        "has_constraint_support",
        "has_acid_support",
        "has_metadata",
        "has_encryption_support",
        "data_processing_framework_support",
        "analytics_query_support"
      ],
      "type": "object"
    },
    "HasSupportSource": {
      "properties": {
        "notes": {
          "type": "string"
        },
        "source": {
          "$ref": "#/$defs/Source"
        },
        "value": {
          "enum": [
            "yes",
            "no",
            "maybe"
          ],
          "type": "string"
        }
      },
      "required": [
        "value"
      ],
      "type": "object"
    },
    "JobOrchestrationCategory": {
      "description": "Job orchestration technology",
      "properties": {
        "has_access_controls": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "Ability to define access controls for users of the job orchestrator"
        },
        "has_api_support": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "Defines an API from which you can retrieve information about the job orchestrator"
        },
        "has_audit_logs": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "Maintains an audit trail of what actions the system or users have taken"
        },
        "has_cost_tracking": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "Ability to track costs of workflows"
        },
        "has_cron_schedule_support": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "Supports defining cron schedules for jobs"
        },
        "has_data_source_connection_support": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "Ability to define and manage connections to data sources"
        },
        "has_event_based_trigger_support": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "Supports jobs being triggered from events"
        },
        "has_workflow_configuration_support": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "Ability to define configuration to inject into workflows to alter their behaviour"
        },
        "has_workflow_versioning": {
          "$ref": "#/$defs/HasSupportSource",
          "description": "Ability to define different versions of the same workflow"
        }
      },
      "required": [
        "has_cron_schedule_support",
        "has_event_based_trigger_support",
        "has_api_support",
        "has_access_controls",
        "has_workflow_versioning",
        "has_workflow_configuration_support",
        "has_audit_logs",
        "has_cost_tracking",
        "has_data_source_connection_support"
      ],
      "type": "object"
    },
    "MLPipelinesCategory": {
      "type": "object"
    },
    "MessagingCategory": {
      "type": "object"
    },
    "OLAPCategory": {
      "type": "object"
    },
    "ObjectStoreCategory": {
      "type": "object"
    },
    "Source": {
      "description": "Link to the source of this information",
      "pattern": "https://.*",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2019-09/schema",
  "description": "A data technology service, tool, library or system",
  "oneOf": [
    {
      "required": [
        "database"
      ]
    },
    {
      "required": [
        "data_validation"
      ]
    },
    {
      "required": [
        "data_visualisation"
      ]
    },
    {
      "required": [
        "file"
      ]
    },
    {
      "required": [
        "job_orchestration"
      ]
    },
    {
      "required": [
        "messaging"
      ]
    },
    {
      "required": [
        "ml_pipelines"
      ]
    },
    {
      "required": [
        "object_store"
      ]
    },
    {
      "required": [
        "olap"
      ]
    }
  ],
  "properties": {
    "company": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "data_validation": {
      "$ref": "#/$defs/DataValidationCategory"
    },
    "data_visualisation": {
      "$ref": "#/$defs/DataVisualisationCategory"
    },
    "description": {
      "description": "Brief description of the technology",
      "type": "string"
    },
    "file": {
      "$ref": "#/$defs/FileCategory"
    },
    "job_orchestration": {
      "$ref": "#/$defs/JobOrchestrationCategory"
    },
    "language_support": {
      "default": [],
      "items": {
        "enum": [
          "java",
          "scala",
          "python",
          "r",
          "c++",
          "c",
          "rust",
          "javascript",
          "perl",
          "kotlin",
          "go",
          "php",
          "swift",
          "ruby",
          "matlab",
          "typescript",
          "c#"
        ],
        "type": "string"
      },
      "type": "array",
      "uniqueItems": true
    },
    "license": {
      "enum": [
        "Academic Free License v3.0",
        "Apache license 2.0",
        "Artistic license 2.0",
        "Boost Software License 1.0",
        "BSD 2-clause \"Simplified\" license",
        "BSD 3-clause \"New\" or \"Revised\" license",
        "BSD 3-clause Clear license",
        "BSD 4-clause \"Original\" or \"Old\" license",
        "BSD Zero-Clause license",
        "Commercial license",
        "Creative Commons license family",
        "Creative Commons Zero v1.0 Universal",
        "Creative Commons Attribution 4.0",
        "Creative Commons Attribution ShareAlike 4.0",
        "Do What The F*ck You Want To Public License",
        "Educational Community License v2.0",
        "Eclipse Public License 1.0",
        "Eclipse Public License 2.0",
        "European Union Public License 1.1",
        "GNU Affero General Public License v3.0",
        "GNU General Public License family",
        "GNU General Public License v2.0",
        "GNU General Public License v3.0",
        "GNU Lesser General Public License family",
        "GNU Lesser General Public License v2.1",
        "GNU Lesser General Public License v3.0",
        "ISC",
        "LaTeX Project Public License v1.3c",
        "Microsoft Public License",
        "MIT",
        "Mozilla Public License 2.0",
        "N/A",
        "Open Software License 3.0",
        "PostgreSQL License",
        "SIL Open Font License 1.1",
        "University of Illinois/NCSA Open Source License",
        "The Unlicense",
        "zLib License"
      ],
      "type": "string"
    },
    "logo": {
      "description": "Logo of the technology. Should be a SVG, PNG or JPEG file under the assets/logo directory",
      "pattern": "^assets/logo/[a-z_]+\\.(svg|png|jpeg)$",
      "type": "string"
    },
    "messaging": {
      "$ref": "#/$defs/MessagingCategory"
    },
    "ml_pipelines": {
      "$ref": "#/$defs/MLPipelinesCategory"
    },
    "name": {
      "description": "Name of the technology",
      "type": "string"
    },
    "object_store": {
      "$ref": "#/$defs/ObjectStoreCategory"
    },
    "olap": {
      "$ref": "#/$defs/OLAPCategory"
    },
    "source_code": {
      "pattern": "https://.*|",
      "type": "string"
    },
    "use_cases": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "website": {
      "pattern": "https://.*|",
      "type": "string"
    },
    "year_created": {
      "type": "integer"
    }
  },
  "required": [
    "name",
    "description",
    "logo",
    "source_code",
    "website",
    "license",
    "year_created",
    "company",
    "use_cases",
    "language_support"
  ],
  "title": "Data technology comparison specification",
  "type": "object"
}