{
  "format": "dataset-manifest/1",
  "slug": "blog",
  "version": 1,
  "seed": "blog:1",
  "spec": {
    "format": "dataset/1",
    "slug": "blog",
    "name": "Engaging Blog Ecosystem",
    "tagline": "User interactions from a vibrant blog ecosystem, including posts, comments, likes, and tags.",
    "description": "Writers craft engaging posts that captivate readers, igniting lively discussions across various topics. This online blog thrives on the interplay between users who create content and those who interact with it, generating a vibrant community. Users subscribe to newsletters, participate in comments, and express their appreciation through likes, fostering an environment where ideas and feedback flow freely. As posts gain traction, some achieve viral status, resulting in a surge of interactions that reflect the audience's diverse interests.\n\nThe data structure of this ecosystem comprises several interconnected tables: users, posts, comments, likes, and tags. Each user in the 'users' table represents an individual participating in the blog, whether as a writer or a reader. The 'posts' table contains entries for each piece of content, linking back to the users who created them. Comments on these posts are tracked in the 'comments' table, where each entry is tied to both a user and the specific post it pertains to. The 'likes' table captures how users engage with comments, allowing for a deeper understanding of popular opinions and discussions. Finally, tags in the 'tags' table categorize posts, enabling users to discover content based on their interests.\n\nThis dataset is particularly valuable for practicing data analysis and querying skills, as it allows exploration of various questions. Developers can investigate trends in user engagement, analyze which posts attract the most interaction, and identify popular topics based on tags. Additionally, insights can be gained into user behavior, such as the correlation between comments and likes or the impact of viral posts on overall interaction rates. Each table offers a unique lens through which to understand the dynamics of online community engagement. This synthetic data provides an excellent foundation for honing analytical techniques and developing meaningful interpretations.",
    "domain": "media",
    "shape": "slowly-changing",
    "useCases": [
      "etl-pipelines",
      "teaching"
    ],
    "keywords": [
      "blog",
      "comments",
      "likes",
      "subscriptions",
      "tags",
      "posts",
      "community",
      "engagement"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "users": {
        "description": "This table contains information about users who interact with the blog, including both writers and readers.",
        "rows": 200,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each user."
          },
          "full_name": {
            "kind": "fullName",
            "description": "The full name of the user.",
            "nullable": true
          },
          "email": {
            "kind": "email",
            "from": "full_name",
            "description": "User's email address.",
            "nullable": true
          },
          "joined_at": {
            "kind": "datetime",
            "from": "2020-01-01",
            "to": "2023-01-01",
            "description": "Date the user joined the blog.",
            "dayProfile": "waking"
          }
        }
      },
      "posts": {
        "description": "This table contains blog posts created by users, detailing the content shared on the platform.",
        "rows": 150,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each post."
          },
          "user_id": {
            "kind": "fk",
            "ref": "users.id",
            "description": "The user who authored the post."
          },
          "title": {
            "kind": "words",
            "description": "Title of the blog post.",
            "nullable": true
          },
          "content": {
            "kind": "paragraph",
            "description": "Content of the blog post.",
            "nullable": true
          },
          "created_at": {
            "kind": "datetime",
            "from": "2020-01-01",
            "to": "2023-01-01",
            "description": "Date the post was created.",
            "dayProfile": "waking",
            "trend": "growing"
          }
        }
      },
      "comments": {
        "description": "This table records comments made by users on blog posts, fostering discussions around the content.",
        "rows": {
          "per": "posts",
          "via": "post_id",
          "min": 3,
          "max": 10,
          "skew": "long-tail"
        },
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each comment."
          },
          "post_id": {
            "kind": "fk",
            "ref": "posts.id",
            "description": "The post that the comment is associated with."
          },
          "user_id": {
            "kind": "fk",
            "ref": "users.id",
            "description": "The user who made the comment."
          },
          "content": {
            "kind": "sentence",
            "description": "Content of the comment.",
            "nullable": true
          },
          "created_at": {
            "kind": "datetime",
            "from": "2020-01-01",
            "to": "2023-01-01",
            "description": "Date the comment was created.",
            "dayProfile": "waking"
          }
        }
      },
      "likes": {
        "description": "This table captures the likes given by users to comments, indicating approval and engagement.",
        "rows": {
          "per": "comments",
          "via": "comment_id",
          "min": 0,
          "max": 5,
          "skew": "long-tail"
        },
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each like."
          },
          "comment_id": {
            "kind": "fk",
            "ref": "comments.id",
            "description": "The comment that received the like."
          },
          "user_id": {
            "kind": "fk",
            "ref": "users.id",
            "description": "The user who liked the comment."
          },
          "liked_at": {
            "kind": "datetime",
            "from": "2020-01-01",
            "to": "2023-01-01",
            "description": "Date the like was given.",
            "dayProfile": "waking"
          }
        }
      },
      "tags": {
        "description": "This table contains tags that categorize blog posts, helping users find content based on their interests.",
        "rows": 50,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each tag."
          },
          "name": {
            "kind": "words",
            "description": "The name of the tag.",
            "nullable": true
          },
          "post_id": {
            "kind": "fk",
            "ref": "posts.id",
            "description": "The post associated with this tag."
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "categorical",
      "timestamped",
      "nullable"
    ],
    "analysisQuestions": [
      "What types of posts receive the most comments and likes?",
      "How does user engagement change over time for viral posts?",
      "Which tags are most frequently associated with user comments?",
      "What is the average time to receive a comment after a post is published?",
      "How many users subscribe to newsletters compared to those who actively comment?"
    ],
    "suggestedQueries": [
      {
        "title": "Join Posts and Comments",
        "sql": "SELECT posts.title, comments.content FROM posts JOIN comments ON posts.id = comments.post_id;",
        "dialect": "postgres"
      },
      {
        "title": "Count Likes per Comment",
        "sql": "SELECT comments.id, COUNT(likes.id) AS like_count FROM comments LEFT JOIN likes ON comments.id = likes.comment_id GROUP BY comments.id;",
        "dialect": "postgres"
      },
      {
        "title": "Engagement Over Time",
        "sql": "SELECT DATE_TRUNC('month', posts.created_at) AS month, COUNT(comments.id) AS total_comments FROM posts LEFT JOIN comments ON posts.id = comments.post_id GROUP BY month ORDER BY month;",
        "dialect": "postgres"
      },
      {
        "title": "Most Popular Tags",
        "sql": "SELECT tags.name, COUNT(posts.id) AS post_count FROM tags JOIN posts ON tags.post_id = posts.id GROUP BY tags.name ORDER BY post_count DESC;",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Blog Analytics Dashboard",
        "body": "Data analysts can utilize this dataset to build interactive dashboards that visualize user engagement metrics, such as comment trends on posts over time. This helps in understanding which content resonates most with audiences and in strategizing future posts."
      },
      {
        "title": "Content Strategy Development",
        "body": "Content marketers can analyze the relationship between tags and user interactions to tailor future blog content. By identifying which tags generate the most engagement, they can focus on topics that attract more readers and encourage discussion."
      },
      {
        "title": "User Engagement Studies",
        "body": "Researchers can examine patterns in user behavior, such as the correlation between post creation and comment activity. This analysis can provide insights into optimal posting times and content types that boost user interaction."
      },
      {
        "title": "ETL Pipeline Testing",
        "body": "Developers can use this dataset to test ETL pipelines by simulating the extraction, transformation, and loading of user interaction data into data warehouses. This is crucial for ensuring data integrity and performance in real-world applications."
      }
    ]
  },
  "counts": {
    "users": 200,
    "posts": 150,
    "comments": 753,
    "likes": 1226,
    "tags": 50
  },
  "stats": {
    "users": {
      "rows": 200,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 200,
          "min": 1,
          "max": 200
        },
        "full_name": {
          "nulls": 17,
          "distinct": 175,
          "min": "Amir Martin",
          "max": "Zoe Wilson"
        },
        "email": {
          "nulls": 38,
          "distinct": 161
        },
        "joined_at": {
          "nulls": 0,
          "distinct": 200,
          "min": "2020-01-04 15:11:51",
          "max": "2022-12-28 14:18:16"
        }
      }
    },
    "posts": {
      "rows": 150,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 150,
          "min": 1,
          "max": 150
        },
        "user_id": {
          "nulls": 0,
          "distinct": 99,
          "min": 1,
          "max": 200
        },
        "title": {
          "nulls": 16,
          "distinct": 134
        },
        "content": {
          "nulls": 18,
          "distinct": 132
        },
        "created_at": {
          "nulls": 0,
          "distinct": 150,
          "min": "2020-02-07 13:17:05",
          "max": "2022-12-16 20:14:09"
        }
      }
    },
    "comments": {
      "rows": 753,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 753,
          "min": 1,
          "max": 753
        },
        "post_id": {
          "nulls": 0,
          "distinct": 150,
          "min": 1,
          "max": 150
        },
        "user_id": {
          "nulls": 0,
          "distinct": 193,
          "min": 1,
          "max": 200
        },
        "content": {
          "nulls": 69,
          "distinct": 678
        },
        "created_at": {
          "nulls": 0,
          "distinct": 753,
          "min": "2020-01-01 12:37:40",
          "max": "2023-01-01 18:28:45"
        }
      }
    },
    "likes": {
      "rows": 1226,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 1226,
          "min": 1,
          "max": 1226
        },
        "comment_id": {
          "nulls": 0,
          "distinct": 448,
          "min": 1,
          "max": 752
        },
        "user_id": {
          "nulls": 0,
          "distinct": 200,
          "min": 1,
          "max": 200
        },
        "liked_at": {
          "nulls": 0,
          "distinct": 1226,
          "min": "2020-01-02 14:51:36",
          "max": "2023-01-01 18:40:46"
        }
      }
    },
    "tags": {
      "rows": 50,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 50,
          "min": 1,
          "max": 50
        },
        "name": {
          "nulls": 10,
          "distinct": 40
        },
        "post_id": {
          "nulls": 0,
          "distinct": 46,
          "min": 2,
          "max": 149
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/users.csv",
      "format": "csv",
      "table": "users",
      "key": "datasets/blog/v1/csv/users.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/csv/users.csv",
      "bytes": 11106,
      "sha256": "03969fc6d56ac51c36f700a10896d7b5a5dceaab1a40bfa3035b1b06946102e8",
      "rows": 200,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/posts.csv",
      "format": "csv",
      "table": "posts",
      "key": "datasets/blog/v1/csv/posts.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/csv/posts.csv",
      "bytes": 29985,
      "sha256": "63c8f0d09e61772bd91292e629b75a51d72fbf5d84265bac040b70d4e4c66a4c",
      "rows": 150,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/comments.csv",
      "format": "csv",
      "table": "comments",
      "key": "datasets/blog/v1/csv/comments.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/csv/comments.csv",
      "bytes": 62653,
      "sha256": "5bac5c03c07b9141fc8cf4868e4616c890eeff54f8286a69510fc03baa923e17",
      "rows": 753,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/likes.csv",
      "format": "csv",
      "table": "likes",
      "key": "datasets/blog/v1/csv/likes.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/csv/likes.csv",
      "bytes": 39799,
      "sha256": "bd72018464ae585663e74db3ac4d4f6b0273bfc78916bd3e42c19b9c3cf3ecf0",
      "rows": 1226,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/tags.csv",
      "format": "csv",
      "table": "tags",
      "key": "datasets/blog/v1/csv/tags.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/csv/tags.csv",
      "bytes": 1358,
      "sha256": "43f79df03214277a6be81daeb18580ec8438b5e37001a1901261e1c2082cfa37",
      "rows": 50,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "blog.json",
      "format": "json",
      "table": null,
      "key": "datasets/blog/v1/blog.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/blog.json",
      "bytes": 360915,
      "sha256": "b0e67c6bc501ba3c05d75cea950db3fd7e51f4d4078fbfeaccc87176d5f29ace",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/blog/v1/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/sql/postgres.sql",
      "bytes": 177933,
      "sha256": "88a039c0ac2382f7bf688eaed6f445cd4ca998707256a2a9d599910f280a19e2",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/blog/v1/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/sql/mysql.sql",
      "bytes": 177400,
      "sha256": "be195b57330de4b54c72f8e75cf1277a609fc035f20e7e8d8dec5590e8ff096a",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/blog/v1/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/sql/mssql.sql",
      "bytes": 181369,
      "sha256": "b2789f66b2a804744a0e4de85d35ab6fd3d750b7b8859ad527d0c1b66c6f322b",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/blog/v1/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/sql/sqlite.sql",
      "bytes": 177203,
      "sha256": "6d2e68afcc0344cda7e33d01ff083c3d3527a4ad9c04a4647db24df11402e875",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/blog/v1/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/prisma/seed.ts",
      "bytes": 314223,
      "sha256": "1c6ef19e8136ec0e0b5575d92a680cf06c27a9634f2e18c4f3930369153fefaa",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/blog/v1/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/blog/v1/django/fixtures.json",
      "bytes": 450431,
      "sha256": "7d2cf783e06e996d3bea35c9204faefff2f4e8d72478fb27bd53b6e699917ce1",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788767965730,
  "updatedAt": 1788767965730
}
