mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-10-17 01:12:27 +00:00
* feat: add per-column COMPRESSION option for SST columns CREATE TABLE accepts COMPRESSION WITH (type = 'zstd', level = N, page_size = '<size>') on a column. The options are stored in the column metadata, carried through gRPC column options, shown by SHOW CREATE TABLE, and applied by the mito SST writer and bulk part encoder as parquet column properties. Unset fields keep the SST defaults. Nested types are rejected. A page size below the dictionary page limit also lowers the column's dictionary page limit: parquet sizes write batches by the dictionary budget and keeps that size after falling back to plain encoding, which would otherwise ignore the smaller data page limit. Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * fix: validate column compression options before persistence Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * fix: reject compression overrides on metric logical tables Signed-off-by: Dennis Zhuang <killme2008@gmail.com> --------- Signed-off-by: Dennis Zhuang <killme2008@gmail.com>
64 lines
2.8 KiB
Plaintext
64 lines
2.8 KiB
Plaintext
SELECT * FROM legacy_payload ORDER BY ts;
|
|
|
|
+-------------------------+----------------+
|
|
| ts | payload |
|
|
+-------------------------+----------------+
|
|
| 1970-01-01T00:00:00.001 | before upgrade |
|
|
+-------------------------+----------------+
|
|
|
|
CREATE TABLE compressed_payload (
|
|
ts TIMESTAMP TIME INDEX,
|
|
payload STRING COMPRESSION WITH (level = 3, page_size = '64KiB')
|
|
);
|
|
|
|
Affected Rows: 0
|
|
|
|
INSERT INTO compressed_payload SELECT * FROM legacy_payload;
|
|
|
|
Affected Rows: 1
|
|
|
|
ADMIN FLUSH_TABLE('compressed_payload');
|
|
|
|
+-----------------------------------------+
|
|
| ADMIN FLUSH_TABLE('compressed_payload') |
|
|
+-----------------------------------------+
|
|
| 0 |
|
|
+-----------------------------------------+
|
|
|
|
-- SQLNESS ARG restart=true
|
|
SHOW CREATE TABLE compressed_payload;
|
|
|
|
+--------------------+--------------------------------------------------------------------------------------------+
|
|
| Table | Create Table |
|
|
+--------------------+--------------------------------------------------------------------------------------------+
|
|
| compressed_payload | CREATE TABLE IF NOT EXISTS "compressed_payload" ( |
|
|
| | "ts" TIMESTAMP(3) NOT NULL, |
|
|
| | "payload" STRING NULL COMPRESSION WITH(level = '3', page_size = '64KiB', type = 'zstd'), |
|
|
| | TIME INDEX ("ts") |
|
|
| | ) |
|
|
| | |
|
|
| | ENGINE=mito |
|
|
| | |
|
|
+--------------------+--------------------------------------------------------------------------------------------+
|
|
|
|
INSERT INTO compressed_payload VALUES (2, 'after restart');
|
|
|
|
Affected Rows: 1
|
|
|
|
ADMIN FLUSH_TABLE('compressed_payload');
|
|
|
|
+-----------------------------------------+
|
|
| ADMIN FLUSH_TABLE('compressed_payload') |
|
|
+-----------------------------------------+
|
|
| 0 |
|
|
+-----------------------------------------+
|
|
|
|
SELECT * FROM compressed_payload ORDER BY ts;
|
|
|
|
+-------------------------+----------------+
|
|
| ts | payload |
|
|
+-------------------------+----------------+
|
|
| 1970-01-01T00:00:00.001 | before upgrade |
|
|
| 1970-01-01T00:00:00.002 | after restart |
|
|
+-------------------------+----------------+
|