{
  "format": "dataset-manifest/1",
  "slug": "machine-sensor-readings",
  "version": 1,
  "seed": "machine-sensor-readings:1",
  "spec": {
    "format": "dataset/1",
    "slug": "machine-sensor-readings",
    "name": "Machine Sensor Readings",
    "tagline": "Minute-by-minute sensor readings from production line machines, including temperature, vibration, and throughput.",
    "description": "Machines on a production line generate crucial sensor readings every minute, capturing parameters like temperature, vibration, and throughput. These readings provide insights into the operational state of the equipment, allowing for real-time monitoring and analysis. When anomalies occur—indicative of potential malfunctions or inefficiencies—they are logged alongside the regular sensor data, helping technicians anticipate breakdowns before they happen.\n\nThe data is organized into three primary tables: 'sensor_readings', 'machines', and 'anomalies'. Each row in 'sensor_readings' corresponds to a specific measurement taken from a machine, detailing the specific time, the machine ID, and the various metrics recorded. The 'machines' table contains details about each machine, including its unique ID, type, and operational status. Lastly, the 'anomalies' table captures instances where readings deviate from expected ranges, including the machine ID and the nature of the anomaly. By linking these tables through the machine ID, users can seamlessly trace the history of machine performance alongside any anomalies reported.\n\nThis dataset is particularly valuable for practicing data analysis, machine learning, and predictive maintenance strategies. Questions that can be explored include identifying patterns leading to breakdowns, understanding the correlation between different sensor readings, and developing models to predict future anomalies based on historical data. The synthetic nature of this data allows for experimentation without the limitations of real-world constraints, providing a rich ground for developers to hone their skills in data manipulation, visualization, and interpretation.",
    "domain": "manufacturing",
    "shape": "time-series",
    "useCases": [
      "analytics-demo",
      "etl-pipelines"
    ],
    "keywords": [
      "machine readings",
      "sensor data",
      "temperature",
      "vibration",
      "throughput",
      "anomalies"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "sensor_readings": {
        "description": "This table captures minute-by-minute readings from various machines, detailing temperature, vibration, and throughput. Each reading is linked to a specific machine identified by machine_id.",
        "rows": 555,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each sensor reading."
          },
          "machine_id": {
            "kind": "fk",
            "ref": "machines.id",
            "description": "Identifier for the machine from which the reading is taken."
          },
          "timestamp": {
            "kind": "datetime",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "The date and time when the reading was taken."
          },
          "temperature": {
            "kind": "decimal",
            "min": 0,
            "max": 100,
            "scale": 2,
            "description": "Temperature reading in degrees Celsius."
          },
          "vibration": {
            "kind": "decimal",
            "min": 0,
            "max": 10,
            "scale": 2,
            "description": "Vibration level measured in G-force."
          },
          "throughput": {
            "kind": "int",
            "min": 0,
            "max": 1000,
            "description": "Number of items produced per minute."
          }
        }
      },
      "machines": {
        "description": "This table contains information about the machines in the production line, providing unique identifiers and names for each machine.",
        "rows": 27,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each machine."
          },
          "name": {
            "kind": "fullName",
            "description": "Name of the machine."
          }
        }
      },
      "anomalies": {
        "description": "This table records anomalies detected in sensor readings, linking each anomaly to the specific sensor reading that preceded it. This allows for an analysis of conditions leading to machine breakdowns.",
        "rows": {
          "per": "sensor_readings",
          "via": "sensor_reading_id",
          "min": 0,
          "max": 10,
          "skew": "long-tail"
        },
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each anomaly."
          },
          "sensor_reading_id": {
            "kind": "fk",
            "ref": "sensor_readings.id",
            "description": "Link to the sensor reading that triggered the anomaly."
          },
          "anomaly_type": {
            "kind": "enum",
            "values": [
              "temperature spike",
              "high vibration",
              "low throughput"
            ],
            "description": "Type of anomaly detected."
          },
          "description": {
            "kind": "words",
            "max": 50,
            "description": "Detailed description of the anomaly."
          },
          "timestamp": {
            "kind": "datetime",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "The date and time when the anomaly was detected."
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "timestamped",
      "monetary",
      "nullable"
    ],
    "analysisQuestions": [
      "What is the average temperature reading for each machine?",
      "How often do anomalies occur relative to normal readings?",
      "What is the average throughput when vibration levels exceed a certain threshold?",
      "How do temperature spikes correlate with machine breakdowns?",
      "What are the common types of anomalies across different machines?"
    ],
    "suggestedQueries": [
      {
        "title": "Join sensor readings with machines",
        "sql": "SELECT sr.*, m.name FROM sensor_readings sr JOIN machines m ON sr.machine_id = m.id;",
        "dialect": "postgres"
      },
      {
        "title": "Average temperature by machine",
        "sql": "SELECT m.name, AVG(sr.temperature) AS avg_temperature FROM sensor_readings sr JOIN machines m ON sr.machine_id = m.id GROUP BY m.name;",
        "dialect": "postgres"
      },
      {
        "title": "Count anomalies by type",
        "sql": "SELECT a.anomaly_type, COUNT(*) FROM anomalies a GROUP BY a.anomaly_type;",
        "dialect": "postgres"
      },
      {
        "title": "Find anomalies with timestamps",
        "sql": "SELECT sr.timestamp, a.anomaly_type FROM sensor_readings sr JOIN anomalies a ON sr.id = a.sensor_reading_id ORDER BY sr.timestamp DESC;",
        "dialect": "postgres"
      },
      {
        "title": "Throughput averages during anomalies",
        "sql": "SELECT AVG(sr.throughput) FROM sensor_readings sr JOIN anomalies a ON sr.id = a.sensor_reading_id;",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Manufacturing Data Analysis",
        "body": "Data analysts in manufacturing companies can utilize this dataset to gain insights into machine performance. By analyzing sensor readings and anomalies, they can identify patterns that lead to breakdowns, thereby optimizing maintenance schedules and improving overall productivity."
      },
      {
        "title": "Predictive Maintenance",
        "body": "Engineers can leverage the data to develop predictive maintenance models. By examining the relationship between sensor readings and breakdown events, they can establish thresholds for when maintenance should occur, ultimately reducing downtime and maintenance costs."
      },
      {
        "title": "ETL Pipeline Development",
        "body": "Data engineers can use this dataset as a foundation for building ETL pipelines. By extracting data from these tables, transforming it for analysis, and loading it into a data warehouse, they can create comprehensive reports on machine performance and anomalies."
      },
      {
        "title": "Real-time Monitoring Systems",
        "body": "Developers can integrate this dataset into real-time monitoring systems for production lines. By continuously analyzing sensor readings and detecting anomalies, they can create alerts that notify operators of potential issues before they escalate into serious problems."
      }
    ]
  },
  "counts": {
    "machines": 27,
    "sensor_readings": 555,
    "anomalies": 1793
  },
  "stats": {
    "sensor_readings": {
      "rows": 555,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 555,
          "min": 1,
          "max": 555
        },
        "machine_id": {
          "nulls": 0,
          "distinct": 27,
          "min": 1,
          "max": 27
        },
        "timestamp": {
          "nulls": 0,
          "distinct": 555,
          "min": "2023-01-02 10:02:28",
          "max": "2023-12-31 19:36:28"
        },
        "temperature": {
          "nulls": 0,
          "distinct": 541,
          "min": 0.08,
          "max": 99.92
        },
        "vibration": {
          "nulls": 0,
          "distinct": 421,
          "min": 0.04,
          "max": 9.98
        },
        "throughput": {
          "nulls": 0,
          "distinct": 415,
          "min": 5,
          "max": 998
        }
      }
    },
    "machines": {
      "rows": 27,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 27,
          "min": 1,
          "max": 27
        },
        "name": {
          "nulls": 0,
          "distinct": 27,
          "min": "Alice Cruz",
          "max": "Zara Sousa"
        }
      }
    },
    "anomalies": {
      "rows": 1793,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 1793,
          "min": 1,
          "max": 1793
        },
        "sensor_reading_id": {
          "nulls": 0,
          "distinct": 384,
          "min": 2,
          "max": 552
        },
        "anomaly_type": {
          "nulls": 0,
          "distinct": 3,
          "min": "high vibration",
          "max": "temperature spike"
        },
        "description": {
          "nulls": 0,
          "distinct": 1793
        },
        "timestamp": {
          "nulls": 0,
          "distinct": 1793,
          "min": "2023-01-01 12:55:17",
          "max": "2023-12-31 17:41:47"
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/machines.csv",
      "format": "csv",
      "table": "machines",
      "key": "datasets/machine-sensor-readings/v1/csv/machines.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/machine-sensor-readings/v1/csv/machines.csv",
      "bytes": 434,
      "sha256": "52c8004a9e2321d65711d97b75467f228ea75992751faab84182be5e34bc0b36",
      "rows": 27,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/sensor_readings.csv",
      "format": "csv",
      "table": "sensor_readings",
      "key": "datasets/machine-sensor-readings/v1/csv/sensor_readings.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/machine-sensor-readings/v1/csv/sensor_readings.csv",
      "bytes": 23503,
      "sha256": "b8090f4d48383733f13415f6bab15347422bf54907677403f2c966b74f390497",
      "rows": 555,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/anomalies.csv",
      "format": "csv",
      "table": "anomalies",
      "key": "datasets/machine-sensor-readings/v1/csv/anomalies.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/machine-sensor-readings/v1/csv/anomalies.csv",
      "bytes": 386725,
      "sha256": "3b6e251ecbdeec269aae514dc0e13ddac63a0244d8a908ee02d0e15b0a910b55",
      "rows": 1793,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "machine-sensor-readings.json",
      "format": "json",
      "table": null,
      "key": "datasets/machine-sensor-readings/v1/machine-sensor-readings.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/machine-sensor-readings/v1/machine-sensor-readings.json",
      "bytes": 704272,
      "sha256": "db2aafa978c11652c598e607db541beda02257ebb673f6b6b5f2d5f89593d622",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/machine-sensor-readings/v1/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/machine-sensor-readings/v1/sql/postgres.sql",
      "bytes": 449535,
      "sha256": "440e55cbdc9095ff8d6cb32b46d8c9d54e3b119e026d25e738aa5cf1c7ebc95d",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/machine-sensor-readings/v1/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/machine-sensor-readings/v1/sql/mysql.sql",
      "bytes": 449190,
      "sha256": "c96e9da6c9bb77129aa5b2ca2beed6a12ecd7032cb6f52b5f8571fdfd907370c",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/machine-sensor-readings/v1/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/machine-sensor-readings/v1/sql/mssql.sql",
      "bytes": 455355,
      "sha256": "947d3ffddd7e8ca9c5d4a856d95aa7de7d2444126ce806068077b45a9440b573",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/machine-sensor-readings/v1/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/machine-sensor-readings/v1/sql/sqlite.sql",
      "bytes": 449060,
      "sha256": "6d74f82f679346132a0c2b09eae1ab20000b99881e76b2aa5706e30c46a3000d",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/machine-sensor-readings/v1/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/machine-sensor-readings/v1/prisma/seed.ts",
      "bytes": 644290,
      "sha256": "49a827eba1dffb7c3c00f5077038dfca316289381db0a14528c7eaa819202a59",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/machine-sensor-readings/v1/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/machine-sensor-readings/v1/django/fixtures.json",
      "bytes": 809691,
      "sha256": "a61d476391125f4557100d2570cb2002bee0889a3980e9b7521e6790a2a31c06",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788767891968,
  "updatedAt": 1788767891968
}
