feat(1c): ingest company registry workbook

This commit is contained in:
igor04091968
2026-05-22 11:14:31 +03:00
parent 5c4966f1ff
commit 2e682ec0c3
15 changed files with 290 additions and 3 deletions
@@ -25,6 +25,16 @@ CREATE TABLE IF NOT EXISTS analytics_1c.raw_1c_companies
ENGINE = MergeTree
ORDER BY (ingested_at, source_file);
CREATE TABLE IF NOT EXISTS analytics_1c.raw_1c_company_registry
(
ingested_at DateTime DEFAULT now(),
source_file String,
source_sheet String,
payload String
)
ENGINE = MergeTree
ORDER BY (ingested_at, source_file, source_sheet);
CREATE TABLE IF NOT EXISTS analytics_1c.raw_reglog
(
ingested_at DateTime DEFAULT now(),
@@ -53,6 +53,23 @@ CREATE TABLE IF NOT EXISTS analytics_1c.companies
ENGINE = MergeTree
ORDER BY (infobase, ts);
CREATE TABLE IF NOT EXISTS analytics_1c.company_registry
(
ts DateTime,
source_file String,
source_sheet LowCardinality(String),
company_name String,
company_key String,
assignee_name String,
registry_status LowCardinality(String),
share_text String,
key_contour UInt8,
inn String,
kpp String
)
ENGINE = MergeTree
ORDER BY (company_key, ts, source_sheet);
CREATE TABLE IF NOT EXISTS analytics_1c.reglog_events
(
ts DateTime,
@@ -101,6 +101,20 @@ SELECT
FROM analytics_1c.companies
GROUP BY infobase;
CREATE OR REPLACE VIEW analytics_1c.v_company_registry_current AS
SELECT
company_key,
argMax(company_name, ts) AS company_name,
argMax(assignee_name, ts) AS assignee_name,
argMax(registry_status, ts) AS registry_status,
argMax(share_text, ts) AS share_text,
argMax(key_contour, ts) AS key_contour,
argMax(inn, ts) AS inn,
argMax(kpp, ts) AS kpp,
max(ts) AS last_registry_snapshot_at
FROM analytics_1c.company_registry
GROUP BY company_key;
CREATE OR REPLACE VIEW analytics_1c.v_company_portfolio_overview AS
WITH
base AS
@@ -137,6 +151,11 @@ company_state AS
SELECT *
FROM analytics_1c.v_companies_current
),
registry_state AS
(
SELECT *
FROM analytics_1c.v_company_registry_current
),
signals AS
(
SELECT
@@ -196,6 +215,12 @@ SELECT
if(company_state.organization != '', company_state.organization, base.organization) AS organization,
base.counterparty AS counterparty,
if(company_state.company_name != '', company_state.company_name, base.counterparty) AS company_name,
ifNull(registry_state.assignee_name, '') AS registry_assignee_name,
ifNull(registry_state.registry_status, '') AS registry_status,
ifNull(registry_state.share_text, '') AS registry_share_text,
ifNull(registry_state.key_contour, 0) AS registry_key_contour,
ifNull(registry_state.inn, '') AS registry_inn,
ifNull(registry_state.kpp, '') AS registry_kpp,
ifNull(company_state.owner_user, '') AS owner_user,
ifNull(company_state.base_id, '') AS base_id,
ifNull(company_state.base_path, '') AS base_path,
@@ -229,6 +254,7 @@ SELECT
ifNull(signals.top_signal, '') AS top_signal
FROM base
LEFT JOIN company_state ON company_state.infobase = base.infobase
LEFT JOIN registry_state ON registry_state.company_key = trimBoth(replaceRegexpAll(replaceRegexpAll(replaceRegexpAll(upperUTF8(base.counterparty), '(^|\\s)20[0-9]{2}($|\\s)', ' '), '[^0-9A-ZА-ЯЁ]+', ' '), '\\s+', ' '))
LEFT JOIN d7 ON d7.infobase = base.infobase AND d7.counterparty = base.counterparty
LEFT JOIN d30 ON d30.infobase = base.infobase AND d30.counterparty = base.counterparty
LEFT JOIN signals ON signals.infobase = base.infobase AND signals.counterparty = base.counterparty