【问题标题】:How to generate 1000000 rows with random data?如何使用随机数据生成 1000000 行?
【发布时间】:2014-09-25 18:00:18
【问题描述】:

背景

我正在研究某种数据记录器。

我想试试 1000000 (1M) 行需要多少存储空间,以及 Raspberry Pi 如何处理这么大的表。我想通过分组、计算平均值和其他性能实验来运行一些查询。

我的桌子是这样的:

CREATE TABLE `data` 
(
  `id`         bigint(20) NOT NULL      AUTO_INCREMENT,
  `datetime`   timestamp  NULL          DEFAULT CURRENT_TIMESTAMP,
  `channel`    int(11)                  DEFAULT NULL,
  `value`      float                    DEFAULT NULL,

  PRIMARY KEY (`id`)
)

问题

我如何用 1000000 百万行 在 MySQL 中填充它?

要求:

  • data.datetime 字段:随机时间戳,但仅从一年开始
  • data.value 字段:给定范围内的随机浮点数(例如 0.00-100.00)
  • data.id 是自增的,不用管了
  • data.channel 永远是 1,不用太在意

我对SQL有点了解,但我不擅长PL/SQL, SQL中的循环等

编辑:

说清楚 - 我使用的是 MySQL 5.5。

提到 PL/SQL 是我的错误,我认为 PL/ 代表一般 SQL 中的过程特性,而不仅仅是 Oracle。

【问题讨论】:

  • 为什么只用sql来解决这个问题?使用 Perl 或 Python 等简单的脚本语言并根据需要插入数据。
  • 你需要 PL/SQL 还是 MySQL?
  • PL/SQL 适用于 Oracle,但您的标签显示 MySQL。它们远不是同一件事,而且它们绝不兼容。你具体要问什么?
  • @jmmeier 我认为它可以在 SQL 中轻松完成。我不擅长 perl 或 python。但是我在 Excel 中还不错……也许我会那样做。我没有删除问题,看起来有 2 人感兴趣。

标签: mysql sql


【解决方案1】:

尝试使用stored procedure(将1000 替换为所需的行数,将2014 替换为测试年份,另请参阅generate random timestamps in mysql

CREATE TABLE `data` 
(
  `id`         bigint(20) NOT NULL      AUTO_INCREMENT,
  `datetime`   timestamp  NULL          DEFAULT CURRENT_TIMESTAMP,
  `channel`    int(11)                  DEFAULT NULL,
  `value`      float                    DEFAULT NULL,

  PRIMARY KEY (`id`)
);


DELIMITER $$
CREATE PROCEDURE generate_data()
BEGIN
  DECLARE i INT DEFAULT 0;
  WHILE i < 1000 DO
    INSERT INTO `data` (`datetime`,`value`,`channel`) VALUES (
      FROM_UNIXTIME(UNIX_TIMESTAMP('2014-01-01 01:00:00')+FLOOR(RAND()*31536000)),
      ROUND(RAND()*100,2),
      1
    );
    SET i = i + 1;
  END WHILE;
END$$
DELIMITER ;

CALL generate_data();

根据您的需要进行修改。删除程序:

DROP PROCEDURE generate_data;

也许这可以给你一个开始!

【讨论】:

【解决方案2】:

我们有MySQL Random Data Generator - 易于使用的程序,用于从 mysql 本身内部生成随机数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2015-07-26
    • 1970-01-01
    • 2019-09-20
    • 2011-02-19
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多