JSON、Dynamic、Variant、BFloat16、Time 和 Time64。
不支持 AggregateFunction、Interval、Nothing 和 QBit 类型。
语法
generateRandom(['name TypeName[, name TypeName]...', [, 'random_seed'[, 'max_string_length'[, 'max_array_length']]]][, SETTINGS setting = value[, ...]])
参数
| 参数 | 说明 |
|---|---|
name | 对应列的名称。 |
TypeName | 对应列的类型。 |
random_seed | 手动指定随机种子,以生成稳定的结果。如果为 NULL,则会随机生成种子。 |
max_string_length | 所有生成字符串的最大长度。默认为 10。 |
max_array_length | 所有生成数组或 Map 的最大元素个数。默认为 10。 |
设置
SETTINGS 是调用时的最后一个参数,用于控制 Nullable、Variant、Dynamic 和 JSON 值的生成方式。
| 设置 | 类型 | 默认值 | 描述 |
|---|---|---|---|
null_ratio | Float | 0.0625 | Nullable、Variant 或 Dynamic 值为 NULL 的概率,也是某行中缺少某个 JSON 键的基础概率;少数稀疏键的缺失概率会高出数倍。必须在 [0, 1] 范围内。 |
max_json_depth | UInt64 | 3 | 生成的 JSON 对象的最大嵌套深度:1 表示无嵌套的对象,数组中的对象也算一层。必须在 [1, 32] 范围内。 |
max_json_keys_per_object | UInt64 | 8 | 生成的 JSON 对象每一层最多包含的键数;根对象的键数至少为该值的一半。0 表示仅生成类型化路径。不得超过 1000。 |
SELECT * FROM generateRandom('x JSON', 3, 4, 2, SETTINGS max_json_depth = 1, max_json_keys_per_object = 3) LIMIT 3 FORMAT JSONEachRow;
{"x":{"cursor":"","id":[],"parent":-3723905664592977020}}
{"x":{"cursor":"","id":[7037090064212902336]}}
{"x":{"id":[287913403506346525],"parent":-4417942528676528098}}
SETTINGS 也可以是唯一的参数,此时会沿用目标表的结构:
INSERT INTO test_table SELECT * FROM generateRandom(SETTINGS null_ratio = 0.5) LIMIT 10;
返回值
具有所请求 schema 的表对象。使用示例
SELECT * FROM generateRandom('a Array(Int8), d Decimal32(4), c Tuple(DateTime64(3), UUID)', 1, 10, 2) LIMIT 3;
┌─a────────┬────────────d─┬─c──────────────────────────────────────────────────────────────────┐
│ [77] │ -124167.6723 │ ('2061-04-17 21:59:44.573','3f72f405-ec3e-13c8-44ca-66ef335f7835') │
│ [32,110] │ -141397.7312 │ ('1979-02-09 03:43:48.526','982486d1-5a5d-a308-e525-7bd8b80ffa73') │
│ [68] │ -67417.0770 │ ('2080-03-12 14:17:31.269','110425e5-413f-10a6-05ba-fa6b3e929f15') │
└──────────┴──────────────┴────────────────────────────────────────────────────────────────────┘
CREATE TABLE random (a Array(Int8), d Decimal32(4), c Tuple(DateTime64(3), UUID)) ENGINE=Memory;
INSERT INTO random SELECT * FROM generateRandom() LIMIT 2;
SELECT * FROM random;
┌─a────────────────────────────┬────────────d─┬─c──────────────────────────────────────────────────────────────────┐
│ [] │ 68091.8197 │ ('2037-10-02 12:44:23.368','039ecab7-81c2-45ee-208c-844e5c6c5652') │
│ [8,-83,0,-22,65,9,-30,28,64] │ -186233.4909 │ ('2062-01-11 00:06:04.124','69563ea1-5ad1-f870-16d8-67061da0df25') │
└──────────────────────────────┴──────────────┴────────────────────────────────────────────────────────────────────┘
SELECT * FROM generateRandom(generateRandomStructure(4, 101), 101) LIMIT 3;
┌──────────────────c1─┬──────────────────c2─┬─c3─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─c4──────────────────────────────────────┐
│ 1996-04-15 06:40:05 │ 33954608387.2844801 │ ['232.78.216.176','9.244.59.211','211.21.80.152','44.49.94.109','165.77.195.182','68.167.134.239','212.13.24.185','1.197.255.35','192.55.131.232'] │ 45d9:2b52:ab6:1c59:185b:515:c5b6:b781 │
│ 2063-01-13 01:22:27 │ 36155064970.9514454 │ ['176.140.188.101'] │ c65a:2626:41df:8dee:ec99:f68d:c6dd:6b30 │
│ 2090-02-28 14:50:56 │ 3864327452.3901373 │ ['155.114.30.32'] │ 57e9:5229:93ab:fbf3:aae7:e0e4:d1eb:86b │
└─────────────────────┴─────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────────┘
structure 参数时 (在这种情况下,结构是随机的) :
SELECT * FROM generateRandom() LIMIT 3;
┌───c1─┬─────────c2─┬─────────────────────c3─┬──────────────────────c4─┬─c5───────┐
│ -128 │ 317300854 │ 2030-08-16 08:22:20.65 │ 1994-08-16 12:08:56.745 │ R0qgiC46 │
│ 40 │ -744906827 │ 2059-04-16 06:31:36.98 │ 1975-07-16 16:28:43.893 │ PuH4M*MZ │
│ -55 │ 698652232 │ 2052-08-04 20:13:39.68 │ 1998-09-20 03:48:29.279 │ │
└──────┴────────────┴────────────────────────┴─────────────────────────┴──────────┘
SELECT * FROM generateRandom(11) LIMIT 3;
┌───────────────────────────────────────c1─┬─────────────────────────────────────────────────────────────────────────────c2─┬─────────────────────────────────────────────────────────────────────────────c3─┬─────────c4─┬─────────────────────────────────────────────────────────────────────────────c5─┬──────────────────────c6─┬─c7──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─c8──────────────────────────────────────┬─────────c9─┐
│ -77422512305044606600216318673365695785 │ 636812099959807642229.503817849012019401335326013846687285151335352272727523 │ -34944452809785978175157829109276115789694605299387223845886143311647505037529 │ 544473976 │ 111220388331710079615337037674887514156741572807049614590010583571763691328563 │ 22016.22623506465 │ {'2052-01-31 20:25:33':4306400876908509081044405485378623663,'1993-04-16 15:58:49':164367354809499452887861212674772770279,'2101-08-19 03:07:18':-60676948945963385477105077735447194811,'2039-12-22 22:31:39':-59227773536703059515222628111999932330} │ a7b2:8f58:4d07:6707:4189:80cf:92f5:902d │ 1950-07-14 │
│ -159940486888657488786004075627859832441 │ 629206527868163085099.8195700356331771569105231840157308480121506729741348442 │ -53203761250367440823323469081755775164053964440214841464405368882783634063735 │ 2187136525 │ 94881662451116595672491944222189810087991610568040618106057495823910493624275 │ 1.3095786748458954e-104 │ {} │ a051:e3da:2e0a:c69:7835:aed6:e8b:3817 │ 1943-03-25 │
│ -5239084224358020595591895205940528518 │ -529937657954363597180.1709207212648004850138812370209091520162977548101577846 │ 47490343304582536176125359129223180987770215457970451211489086575421345731671 │ 1637451978 │ 101899445785010192893461828129714741298630410942962837910400961787305271699002 │ 2.4344456058391296e223 │ {'2013-12-22 17:42:43':80271108282641375975566414544777036006,'2041-03-08 10:28:17':169706054082247533128707458270535852845,'1986-08-31 23:07:38':-54371542820364299444195390357730624136,'2094-04-23 21:26:50':7944954483303909347454597499139023465} │ 1293:a726:e899:9bfc:8c6f:2aa1:22c9:b635 │ 1924-11-20 │
└──────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────┴────────────┴────────────────────────────────────────────────────────────────────────────────┴─────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────────┴────────────┘
如果
max_array_length 设置得足够大,generateRandom(generateRandomStructure(), [random seed], max_string_length, max_array_length) 可能会生成极其庞大的输出,因为复杂类型 (Array、Tuple、Map、Nested) 的嵌套深度可能很大 (最高可达 16) 。生成 JSON
生成的JSON 列读起来就像一串遵循同一 schema 的文档:键的集合以及每个键的类型均由随机种子决定,并在整列中保持不变;而值、缺失的键以及数组长度则逐行变化。对象的深度受 max_json_depth 限制,单层中的键数量受 max_json_keys_per_object 限制,某个键在一行中缺失的概率为 null_ratio。叶子节点的类型与 JSON 解析器对真实文档推断出的类型一致:Int64、UInt64、Float64、Bool、String、Date、DateTime、上述类型的数组、对象数组以及混合数组;与从应用程序中采集的数据类似,少数键会在一小部分行中呈现不同的类型。
类型声明决定了所生成 schema 的形态:类型化路径始终存在,且采用其声明的类型;被 SKIP 和 SKIP REGEXP 排除的路径永远不会生成;同时 max_dynamic_paths 和 max_dynamic_types 的限制均会得到遵守,因此超出 max_dynamic_paths 的路径最终会存入该列的共享数据中。
SELECT * FROM generateRandom('x JSON', 1) LIMIT 3 FORMAT JSONEachRow;
{"x":{"product_id":"2050-12-17 01:46:35","stage":"g|(&Ql","started":{"group":-80611897324989285}}}
{"x":{"product_id":"2013-10-17 22:35:26","stage":"^ipx|,=a5N","started":{"group":-1326235429680389454}}}
{"x":{"product_id":"1974-11-17 22:22:46","stage":"(U]p'l`","started":{"group":-344141642787805595}}}
JSON、Dynamic 或 Variant 列的表中
填充数据会更方便:
CREATE TABLE t (x JSON) ENGINE = MergeTree ORDER BY tuple();
INSERT INTO t SELECT * FROM generateRandom() LIMIT 10;