from_tables = nil
}
+--[[
+Clickhouse schema:
+
+CREATE TABLE rspamd
+(
+ Date Date,
+ TS DateTime,
+ From String,
+ MimeFrom String,
+ IP String,
+ Score Float64,
+ NRcpt UInt8,
+ Size UInt32,
+ IsWhitelist Enum8('blacklist' = 0, 'whitelist' = 1, 'unknown' = 2) DEFAULT CAST('unknown' AS Enum8('blacklist' = 0, 'whitelist' = 1, 'unknown' = 2)),
+ IsBayes Enum8('ham' = 0, 'spam' = 1, 'unknown' = 2) DEFAULT CAST('unknown' AS Enum8('ham' = 0, 'spam' = 1, 'unknown' = 2)),
+ IsFuzzy Enum8('whitelist' = 0, 'deny' = 1, 'unknown' = 2) DEFAULT CAST('unknown' AS Enum8('whitelist' = 0, 'deny' = 1, 'unknown' = 2)),
+ IsFann Enum8('ham' = 0, 'spam' = 1, 'unknown' = 2) DEFAULT CAST('unknown' AS Enum8('ham' = 0, 'spam' = 1, 'unknown' = 2)),
+ IsDkim Enum8('reject' = 0, 'allow' = 1, 'unknown' = 2) DEFAULT CAST('unknown' AS Enum8('reject' = 0, 'allow' = 1, 'unknown' = 2)),
+ IsDmarc Enum8('reject' = 0, 'allow' = 1, 'unknown' = 2) DEFAULT CAST('unknown' AS Enum8('reject' = 0, 'allow' = 1, 'unknown' = 2)),
+ NUrls Int32,
+ Action Enum8('reject' = 0, 'rewrite subject' = 1, 'add header' = 2, 'greylist' = 3, 'no action' = 4) DEFAULT CAST('no action' AS Enum8('reject' = 0, 'rewrite subject' = 1, 'add header' = 2, 'greylist' = 3, 'no action' = 4)),
+ FromUser String,
+ MimeUser String,
+ RcptUser String,
+ RcptDomain String,
+ ListId String,
+ Digest FixedString(32)
+) ENGINE = MergeTree(Date, (TS, From), 8192)
+
+CREATE TABLE rspamd_attachments (
+ Date Date,
+ Digest FixedString(32),
+ `Attachments.FileName` Array(String),
+ `Attachments.ContentType` Array(String),
+ `Attachments.Length` Array(UInt32),
+ `Attachments.Digest` Array(FixedString(16))
+) ENGINE = MergeTree(Date, Digest, 8192)
+
+CREATE TABLE rspamd_urls (
+ Date Date,
+ Digest FixedString(32),
+ `Urls.Tld` Array(String),
+ `Urls.Url` Array(String)
+) ENGINE = MergeTree(Date, Digest, 8192)
+]]
+
local function clickhouse_main_row(tname)
local fields = {
'Date',