标签: random

如何生成随机字节

我希望能够生成bytea任意长度(<1Gb)的随机字段来填充测试数据。

这样做的最佳方法是什么?

postgresql testing random bytea

21
推荐指数
3
解决办法
5017
查看次数

创建多个级别的层次结构,其中每个节点都有随机数量的子节点

我需要创建一些涉及层次结构的测试数据。我可以让它变得简单并做几个CROSS JOINs,但这会给我一个完全统一/没有任何变化的结构。这不仅看起来很乏味,而且测试数据缺乏变化有时会掩盖原本会发现的问题。所以,我想生成一个遵循以下规则的非统一层次结构:

  • 3 层深
    • 1 级随机 5 - 20 个节点
    • 级别 2 是 1 - 10 个节点,每个级别 1 的每个节点随机
    • 级别 3 是 1 - 5 个节点,每个级别 2 的每个节点随机
  • 所有分支都将有 3 层深。在这一点上,深度的均匀性是可以的。
  • 任何给定级别上的子节点的名称都可以重叠(即子节点的名称在同一级别的所有节点中不需要是唯一的)。
  • 术语“随机”在这里定义为伪随机,而不是唯一随机。这需要提及,因为术语“随机”通常用于表示“不产生重复的给定集合的随机排序”。我接受 random = random 并且如果级别 1 的每个节点的子节点数仅为 4、7 和 8,即使级别 1 上的 20 个节点每个节点的潜在分布为 1 - 10 个子节点,那很好,因为这就是随机。
  • 尽管使用嵌套WHILE循环可以很容易地做到这一点,但首选是找到一种基于集合的方法。一般而言,生成测试数据没有生产代码对效率的要求,但尝试基于集合的方法可能会更具教育意义,并有助于在未来找到基于集合的方法来解决问题。因此WHILE,不排除循环,但只有在不可能使用基于集合的方法时才能使用循环。
  • Set-based = 理想情况下是单个查询,无论 CTE、APPLY 等如何。因此使用现有或内联数字表很好。使用 WHILE / CURSOR / 程序方法是行不通的。我想将部分数据暂存到临时表或表变量中就可以了,只要操作都是基于集合的,没有循环。然而,话虽如此,单查询方法可能比多查询更受青睐,除非可以证明多查询方法实际上更好。另请记住,“更好”的构成通常是主观的;-)。还请记住,前一句中“典型地”的用法也是主观的。
  • 任何版本的 SQL Server(我想是 2005 和更新版本)都可以。
  • 只有纯 T-SQL:没有那些愚蠢的 SQLCLR 东西!!至少在生成数据方面。将使用 SQLCLR 创建目录和文件。但在这里,我只是专注于产生要创造的价值。 …

sql-server hierarchy random t-sql

16
推荐指数
2
解决办法
1万
查看次数

从集合中设置随机值

我需要将一些随机值放入数据库,但我不想最终得到完全随机的文本(如 7hfg43d3)。相反,我想随机选择自己提供的值之一。

postgresql random

13
推荐指数
2
解决办法
1万
查看次数

如何使用默认值随机字符串在数据库中创建列

我可以在 DB 表 (PostgreSQL) 中创建具有默认值随机字符串的列,以及如何创建?

如果不可能,请告诉我。

postgresql random default-value

12
推荐指数
2
解决办法
2万
查看次数

如何在 MySQL 中执行复杂的 GROUP BY?

我有一个表,其中包含进入其他表的几个键(其中每个键由多列组成)。我希望能够将具有相同键的行组合在一起,但我不想将所有行组合在一起。这不是一个简单GROUP BY的键,而是我希望能够分组说 10。所以如果一个特定的键出现 50 次,当我进行这个分组时我会得到 5 个结果(5 组,每组 10 个)。我还希望此分组在密钥内随机发生。

我不知道这样做的直接方法,而且我想出的迂回方法并没有像我认为的那样工作。我想出的迂回解决方案是为每个键创建一个新列,该列将是一个整数,以便值i表示该ith键的出现(但以随机顺序)。然后我可以进行整数除法,以便键中的每 n(比如 10)行具有相同的值,并且我可以GROUP BY对该值执行 a 。

有没有更直接的方法来完成我刚刚描述的事情?这很尴尬,我在创建新索引列时遇到了问题(正如我在这个问题中所描述的)。

编辑:首先请注意,这是针对 MySQL 的。如果我的目标不明确,我将添加一个示例。MySQL 文档显示了一种几乎可以到达的方法:

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL,
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name CHAR(30) NOT NULL,
    PRIMARY KEY (grp,id)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
    ('mammal','dog'),('mammal','cat'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('bird','ostrich');

SELECT * FROM animals ORDER BY grp,id;
Run Code Online (Sandbox Code Playgroud)

这将创建一个表,虽然不是我想要的,但它很接近:

+--------+----+---------+
| grp    | id | name …
Run Code Online (Sandbox Code Playgroud)

mysql order-by random

8
推荐指数
2
解决办法
7081
查看次数

随机化Mysql中的自动增量

我们有一个数据库,每当我们从我们的服务收到订单时,我们就会将数据插入表中。

我们auto_increment用来生成 ID 并分配相同的订单。这通常在任何地方都是一样的。

但问题是,由于这些信息被传递给第三方供应商,他们能够追踪我们每天收到的订单数量。通过在清晨发送一个请求并在午夜发送另一个请求并计算ID.

这是提供有关我们服务的洞察信息。由于它是一个有点复杂的系统,我们不能做可以随机化它的复杂操作。

我最初的想法是以auto_increment位随机方式生成数字。

1,2,3,4,5,67,68,69,70,71,133,134,135,136,137,189,190,191,192,193,194
Run Code Online (Sandbox Code Playgroud)

我想这应该很简单,因为 Mysql 用完了缓存,通过附加一些随机数来生成下一个序列。

如何在不影响性能的情况下实现这一目标?

mysql auto-increment random

8
推荐指数
1
解决办法
1万
查看次数

PostgreSQL 随机组合与 LATERAL

在下面的示例中,我有一个表foo,我想从中随机选择每组的一行。

CREATE TABLE foo (
  line INT
);
INSERT INTO foo (line)
SELECT generate_series(0, 999, 1);
Run Code Online (Sandbox Code Playgroud)

假设我想按 分组line % 10。我可以这样做:

SELECT DISTINCT ON (bin) bin, line
FROM (
    SELECT line, line % 10 AS bin, random() x
    FROM foo
    ORDER BY x
) X
Run Code Online (Sandbox Code Playgroud)

我想做的是多次从每个垃圾箱中随机选择。我原以为我能和做到这一点generate_series(),并LATERAL

SELECT i, line, bin
FROM
(
 SELECT generate_series(1,3) i
) m,
LATERAL
(SELECT DISTINCT ON (bin) bin, line
FROM (
    SELECT line, line % 10 bin, random() x …
Run Code Online (Sandbox Code Playgroud)

postgresql random subquery

7
推荐指数
1
解决办法
492
查看次数

在 PostgreSQL 中使用 WHERE 子句执行 TABLESAMPLE

我想使用 TABLESAMPLE 从 PostgreSQL 满足特定条件的行中随机采样。

这运行良好:

select * from customers tablesample bernoulli (1);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将条件嵌入脚本中。例如这个

select * from customers where last_name = 'powell' tablesample bernoulli (1);
Run Code Online (Sandbox Code Playgroud)

抛出这个错误:

SQL 错误 [42601]:错误:“tablesample”位置或附近的语法错误
:71

postgresql query random table where

7
推荐指数
1
解决办法
5779
查看次数

如何随机选择日期?

我在 Bash Shell 脚本中使用此代码来检索随机日期

有没有办法在 Microsoft SQL Server 中做到这一点?

我可以想象,通过单个 SELECT 查询并可能通过调用一些可以轻松执行的函数,不知何故。

sql-server random

5
推荐指数
1
解决办法
1856
查看次数

当我们更改计算机日期/时间时,postgresql 的 uuid_generate_v1() 可能会发生冲突吗?

根据postgresql uuid-ossp文档uuid_generate_v1()是基于Mac地址+时间戳:

https://www.postgresql.org/docs/9.4/static/uuid-ossp.html

在分布式数据库场景中,我们有数百个数据库使用 UUID 键生成记录并同步回中央数据库。

假设我们检测到一台机器将来的日期/时间错误,我们将其改回正确的日期/时间。它可能会在此特定计算机上生成冲突的 UUID 密钥吗?

一种情况是夏令时/夏令时。

postgresql random time uuid

5
推荐指数
1
解决办法
1604
查看次数