Skip to content

Synthetic Data — MySQL

The Demo Factory dataset for MySQL contains a single table for testing the MySQL connection in Pirivision. Because MySQL has no generate_series, the date sequence is produced using a temporary table approach.


Created Table

The table is created in your current database with a demo_ prefix; it will not conflict with your application tables.

CREATE TABLE demo_vardiya_uretim (
    ts            DATE         NOT NULL,
    hat_id        VARCHAR(20)  NOT NULL,
    makine_id     VARCHAR(20)  NOT NULL,
    vardiya       VARCHAR(10)  NOT NULL,
    urun_ailesi   VARCHAR(20)  NOT NULL,
    uretim_adet   INT          NOT NULL,
    hedef         INT          NOT NULL,
    INDEX idx_demo_vardiya_ts  (ts),
    INDEX idx_demo_vardiya_hat (hat_id, ts)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Data Generation Logic

1. Temporary Date Table

Because MySQL has no generate_series, a 31-day date list is built by cross-joining the numbers 0–30:

CREATE TEMPORARY TABLE _seed_gunler (gun DATE);

INSERT INTO _seed_gunler (gun)
SELECT DATE_SUB(CURDATE(), INTERVAL t.n DAY)
FROM (
    SELECT a.N + b.N * 10 AS n
    FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
          UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7
          UNION ALL SELECT 8 UNION ALL SELECT 9) a
    CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2) b
    WHERE (a.N + b.N * 10) <= 30
) t;

2. Data Generation

The date list is cross-joined with machine and shift lists to produce one row per combination:

INSERT INTO demo_vardiya_uretim
    (ts, hat_id, makine_id, vardiya, urun_ailesi, uretim_adet, hedef)
SELECT
    g.gun,
    CASE WHEN m.idx <= 3 THEN 'HAT-1' ELSE 'HAT-2' END,
    CONCAT('M0', m.idx),
    v.vardiya,
    ELT(1 + FLOOR(RAND() * 4), 'Product-A','Product-B','Product-C','Product-D'),
    250 + FLOOR(RAND() * 200),   -- production count 250–449
    400                           -- fixed target
FROM _seed_gunler g
CROSS JOIN (
    SELECT 1 AS idx UNION ALL SELECT 2 UNION ALL SELECT 3
    UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
) m
CROSS JOIN (
    SELECT 'V1' AS vardiya UNION ALL SELECT 'V2' UNION ALL SELECT 'V3'
) v;

Result: 31 days × 6 machines × 3 shifts = 558 rows

A verification query runs automatically when the script completes:

SELECT COUNT(*) AS total_rows FROM demo_vardiya_uretim;
-- Expected: 558

Loading into the Database

Run the SQL script against your database:

mysql -h <server> -u <user> -p <database> < demo_fabrika_mysql.sql

Running the script again is safe — the existing table is dropped first if it exists.


Adding to Pirivision

  1. Go to Port → New Data Source → MySQL.
  2. Enter the server, database, and credentials.
  3. Click Test and Save to store the connection.

Once saved, an example query you can write in Compass:

SELECT ts, hat_id, makine_id, vardiya, urun_ailesi, uretim_adet
FROM demo_vardiya_uretim
WHERE ts >= DATE_SUB(NOW(), INTERVAL 7 DAY)
ORDER BY ts DESC, hat_id
LIMIT 50;