2019-06-13 14:04:38 +00:00
|
|
|
DROP TABLE IF EXISTS codecTest;
|
|
|
|
|
|
|
|
CREATE TABLE codecTest (
|
|
|
|
key UInt64,
|
|
|
|
ref_valueU64 UInt64,
|
|
|
|
ref_valueU32 UInt32,
|
|
|
|
ref_valueU16 UInt16,
|
|
|
|
ref_valueU8 UInt8,
|
|
|
|
ref_valueI64 Int64,
|
|
|
|
ref_valueI32 Int32,
|
|
|
|
ref_valueI16 Int16,
|
|
|
|
ref_valueI8 Int8,
|
|
|
|
ref_valueDT DateTime,
|
|
|
|
ref_valueD Date,
|
|
|
|
valueU64 UInt64 CODEC(DoubleDelta),
|
|
|
|
valueU32 UInt32 CODEC(DoubleDelta),
|
|
|
|
valueU16 UInt16 CODEC(DoubleDelta),
|
|
|
|
valueU8 UInt8 CODEC(DoubleDelta),
|
|
|
|
valueI64 Int64 CODEC(DoubleDelta),
|
|
|
|
valueI32 Int32 CODEC(DoubleDelta),
|
|
|
|
valueI16 Int16 CODEC(DoubleDelta),
|
|
|
|
valueI8 Int8 CODEC(DoubleDelta),
|
|
|
|
valueDT DateTime CODEC(DoubleDelta),
|
|
|
|
valueD Date CODEC(DoubleDelta)
|
|
|
|
) Engine = MergeTree ORDER BY key;
|
|
|
|
|
|
|
|
|
|
|
|
-- checking for overflow
|
|
|
|
INSERT INTO codecTest (key, ref_valueU64, valueU64, ref_valueI64, valueI64)
|
2019-07-01 14:11:24 +00:00
|
|
|
VALUES (1, 18446744073709551615, 18446744073709551615, 9223372036854775807, 9223372036854775807), (2, 0, 0, -9223372036854775808, -9223372036854775808), (3, 18446744073709551615, 18446744073709551615, 9223372036854775807, 9223372036854775807);
|
2019-06-13 14:04:38 +00:00
|
|
|
|
|
|
|
-- n^3 covers all double delta storage cases, from small difference between neighbouref_values (stride) to big.
|
|
|
|
INSERT INTO codecTest (key, ref_valueU64, valueU64, ref_valueU32, valueU32, ref_valueU16, valueU16, ref_valueU8, valueU8, ref_valueI64, valueI64, ref_valueI32, valueI32, ref_valueI16, valueI16, ref_valueI8, valueI8, ref_valueDT, valueDT, ref_valueD, valueD)
|
|
|
|
SELECT number as n, n * n * n as v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, toDateTime(v), toDateTime(v), toDate(v), toDate(v)
|
2019-07-01 14:11:24 +00:00
|
|
|
FROM system.numbers LIMIT 101, 1000;
|
2019-06-13 14:04:38 +00:00
|
|
|
|
|
|
|
-- best case - constant stride
|
|
|
|
INSERT INTO codecTest (key, ref_valueU64, valueU64, ref_valueU32, valueU32, ref_valueU16, valueU16, ref_valueU8, valueU8, ref_valueI64, valueI64, ref_valueI32, valueI32, ref_valueI16, valueI16, ref_valueI8, valueI8, ref_valueDT, valueDT, ref_valueD, valueD)
|
|
|
|
SELECT number as n, n as v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, toDateTime(v), toDateTime(v), toDate(v), toDate(v)
|
2019-07-01 14:11:24 +00:00
|
|
|
FROM system.numbers LIMIT 2001, 1000;
|
2019-06-13 14:04:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
-- worst case - random stride
|
|
|
|
INSERT INTO codecTest (key, ref_valueU64, valueU64, ref_valueU32, valueU32, ref_valueU16, valueU16, ref_valueU8, valueU8, ref_valueI64, valueI64, ref_valueI32, valueI32, ref_valueI16, valueI16, ref_valueI8, valueI8, ref_valueDT, valueDT, ref_valueD, valueD)
|
|
|
|
SELECT number as n, n + (rand64() - 9223372036854775807)/1000 as v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, v, toDateTime(v), toDateTime(v), toDate(v), toDate(v)
|
2019-07-01 14:11:24 +00:00
|
|
|
FROM system.numbers LIMIT 3001, 1000;
|
2019-06-13 14:04:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
SELECT 'U64';
|
|
|
|
SELECT
|
|
|
|
key,
|
|
|
|
ref_valueU64, valueU64, ref_valueU64 - valueU64 as dU64
|
|
|
|
FROM codecTest
|
|
|
|
WHERE
|
|
|
|
dU64 != 0
|
|
|
|
LIMIT 10;
|
|
|
|
|
|
|
|
|
|
|
|
SELECT 'U32';
|
|
|
|
SELECT
|
|
|
|
key,
|
|
|
|
ref_valueU32, valueU32, ref_valueU32 - valueU32 as dU32
|
|
|
|
FROM codecTest
|
|
|
|
WHERE
|
|
|
|
dU32 != 0
|
|
|
|
LIMIT 10;
|
|
|
|
|
|
|
|
|
|
|
|
SELECT 'U16';
|
|
|
|
SELECT
|
|
|
|
key,
|
|
|
|
ref_valueU16, valueU16, ref_valueU16 - valueU16 as dU16
|
|
|
|
FROM codecTest
|
|
|
|
WHERE
|
|
|
|
dU16 != 0
|
|
|
|
LIMIT 10;
|
|
|
|
|
|
|
|
|
|
|
|
SELECT 'U8';
|
|
|
|
SELECT
|
|
|
|
key,
|
|
|
|
ref_valueU8, valueU8, ref_valueU8 - valueU8 as dU8
|
|
|
|
FROM codecTest
|
|
|
|
WHERE
|
|
|
|
dU8 != 0
|
|
|
|
LIMIT 10;
|
|
|
|
|
|
|
|
|
|
|
|
SELECT 'I64';
|
|
|
|
SELECT
|
|
|
|
key,
|
|
|
|
ref_valueI64, valueI64, ref_valueI64 - valueI64 as dI64
|
|
|
|
FROM codecTest
|
|
|
|
WHERE
|
|
|
|
dI64 != 0
|
|
|
|
LIMIT 10;
|
|
|
|
|
|
|
|
|
|
|
|
SELECT 'I32';
|
|
|
|
SELECT
|
|
|
|
key,
|
|
|
|
ref_valueI32, valueI32, ref_valueI32 - valueI32 as dI32
|
|
|
|
FROM codecTest
|
|
|
|
WHERE
|
|
|
|
dI32 != 0
|
|
|
|
LIMIT 10;
|
|
|
|
|
|
|
|
|
|
|
|
SELECT 'I16';
|
|
|
|
SELECT
|
|
|
|
key,
|
|
|
|
ref_valueI16, valueI16, ref_valueI16 - valueI16 as dI16
|
|
|
|
FROM codecTest
|
|
|
|
WHERE
|
|
|
|
dI16 != 0
|
|
|
|
LIMIT 10;
|
|
|
|
|
|
|
|
|
|
|
|
SELECT 'I8';
|
|
|
|
SELECT
|
|
|
|
key,
|
|
|
|
ref_valueI8, valueI8, ref_valueI8 - valueI8 as dI8
|
|
|
|
FROM codecTest
|
|
|
|
WHERE
|
|
|
|
dI8 != 0
|
|
|
|
LIMIT 10;
|
|
|
|
|
|
|
|
|
|
|
|
SELECT 'DT';
|
|
|
|
SELECT
|
|
|
|
key,
|
|
|
|
ref_valueDT, valueDT, ref_valueDT - valueDT as dDT
|
|
|
|
FROM codecTest
|
|
|
|
WHERE
|
|
|
|
dDT != 0
|
|
|
|
LIMIT 10;
|
|
|
|
|
|
|
|
|
|
|
|
SELECT 'D';
|
|
|
|
SELECT
|
|
|
|
key,
|
|
|
|
ref_valueD, valueD, ref_valueD - valueD as dD
|
|
|
|
FROM codecTest
|
|
|
|
WHERE
|
|
|
|
dD != 0
|
|
|
|
LIMIT 10;
|
|
|
|
|
2019-07-01 14:11:24 +00:00
|
|
|
SELECT 'Compression:';
|
|
|
|
SELECT
|
|
|
|
table, name, type,
|
|
|
|
compression_codec,
|
|
|
|
data_uncompressed_bytes u,
|
|
|
|
data_compressed_bytes c,
|
|
|
|
round(u/c,3) ratio
|
|
|
|
FROM system.columns
|
|
|
|
WHERE
|
|
|
|
table == 'codecTest'
|
|
|
|
AND
|
|
|
|
compression_codec != ''
|
|
|
|
AND
|
|
|
|
ratio <= 1
|
|
|
|
ORDER BY
|
|
|
|
table, name, type;
|
2019-06-13 14:04:38 +00:00
|
|
|
|
2020-02-11 18:05:08 +00:00
|
|
|
DROP TABLE IF EXISTS codecTest;
|