diff --git a/drivers/clickhouse/clickhouse.go b/drivers/clickhouse/clickhouse.go index 9cfc444f..64325d47 100644 --- a/drivers/clickhouse/clickhouse.go +++ b/drivers/clickhouse/clickhouse.go @@ -3,12 +3,17 @@ package clickhouse import ( "database/sql" "fmt" + "regexp" + _ "github.com/ClickHouse/clickhouse-go/v2" "github.com/k1LoW/tbls/dict" "github.com/k1LoW/tbls/schema" "github.com/pkg/errors" + "github.com/samber/lo" ) +var shadowTableRe = regexp.MustCompile(`^\.inner_id\.`) + // ClickHouse struct type ClickHouse struct { db *sql.DB @@ -35,6 +40,7 @@ func (ch *ClickHouse) Analyze(s *schema.Schema) error { tableSortingKeys := make(map[string]*schema.Constraint) tablePrimaryKeys := make(map[string]*schema.Constraint) tableSamplingKeys := make(map[string]*schema.Constraint) + var filtered []string tableRows, err := ch.db.Query(` SELECT @@ -83,6 +89,11 @@ WHERE database = ? Comment: tableComment, } + if shadowTableRe.MatchString(tableName) { + filtered = append(filtered, tableName) + continue + } + s.Tables = append(s.Tables, table) if tablePartitionKey != "" { @@ -191,6 +202,10 @@ ORDER BY table Nullable: false, } + if lo.Contains(filtered, colTable) { + continue + } + table, err := s.FindTableByName(colTable) if err != nil { return errors.WithStack(err) @@ -276,6 +291,10 @@ ORDER BY table return errors.WithStack(err) } + if lo.Contains(filtered, idxTable) { + continue + } + table, err := s.FindTableByName(idxTable) if err != nil { return errors.WithStack(err) diff --git a/sample/clickhouse/.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67.md b/sample/clickhouse/.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67.md deleted file mode 100644 index 4072e379..00000000 --- a/sample/clickhouse/.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67.md +++ /dev/null @@ -1,27 +0,0 @@ -# .inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67 - -## Description - -
-Table Definition - -```sql -CREATE TABLE testdb.`.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67` (`name1` UInt64, `name2` Nullable(String)) ENGINE = Memory -``` - -
- -## Columns - -| Name | Type | Default | Nullable | Children | Parents | Comment | -| ---- | ---- | ------- | -------- | -------- | ------- | ------- | -| name1 | UInt64 | | false | | | | -| name2 | Nullable(String) | | false | | | | - -## Relations - -![er](.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67.svg) - ---- - -> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/sample/clickhouse/.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67.svg b/sample/clickhouse/.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67.svg deleted file mode 100644 index 4305d67a..00000000 --- a/sample/clickhouse/.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - -.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67 - - - -.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67 - - -.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67 -     -[Memory] - -name1 -[UInt64] - -name2 -[Nullable(String)] - - - - diff --git a/sample/clickhouse/README.md b/sample/clickhouse/README.md index d27c63c5..980bf52c 100644 --- a/sample/clickhouse/README.md +++ b/sample/clickhouse/README.md @@ -4,7 +4,6 @@ | Name | Columns | Comment | Type | | ---- | ------- | ------- | ---- | -| [.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67](.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67.md) | 2 | | Memory | | [id_value_dictionary](id_value_dictionary.md) | 2 | | Dictionary | | [materialized_view](materialized_view.md) | 2 | | MaterializedView | | [numbers_table](numbers_table.md) | 1 | | SystemNumbers | diff --git a/sample/clickhouse/schema.json b/sample/clickhouse/schema.json index 4b8a0da4..3f9307a2 100644 --- a/sample/clickhouse/schema.json +++ b/sample/clickhouse/schema.json @@ -1 +1 @@ -{"name":"testdb","desc":"","tables":[{"name":".inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67","type":"Memory","comment":"","columns":[{"name":"name1","type":"UInt64","nullable":false,"default":null,"comment":""},{"name":"name2","type":"Nullable(String)","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE TABLE testdb.`.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67` (`name1` UInt64, `name2` Nullable(String)) ENGINE = Memory"},{"name":"id_value_dictionary","type":"Dictionary","comment":"","columns":[{"name":"id","type":"UInt64","nullable":false,"default":null,"comment":""},{"name":"value","type":"String","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE DICTIONARY testdb.id_value_dictionary (`id` UInt64, `value` String) PRIMARY KEY id SOURCE(CLICKHOUSE(TABLE 'source_table')) LIFETIME(MIN 0 MAX 1000) LAYOUT(FLAT())"},{"name":"materialized_view","type":"MaterializedView","comment":"","columns":[{"name":"name1","type":"UInt64","nullable":false,"default":null,"comment":""},{"name":"name2","type":"Nullable(String)","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE MATERIALIZED VIEW testdb.materialized_view (`name1` UInt64, `name2` Nullable(String)) ENGINE = Memory AS SELECT name1, name2 FROM testdb.table_name ORDER BY name1 DESC","referenced_tables":["table_name"]},{"name":"numbers_table","type":"SystemNumbers","comment":"","columns":[{"name":"number","type":"UInt64","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE TABLE testdb.numbers_table (`number` UInt64) AS numbers(100)"},{"name":"source_table","type":"MergeTree","comment":"","columns":[{"name":"id","type":"UInt64","nullable":false,"default":null,"comment":""},{"name":"value","type":"String","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[{"name":"sorting key","type":"SORTING KEY","def":"ORDER BY (id)","table":"source_table","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""},{"name":"primary key","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"source_table","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE testdb.source_table (`id` UInt64, `value` String) ENGINE = MergeTree PRIMARY KEY id ORDER BY id SETTINGS index_granularity = 8192"},{"name":"t1","type":"Memory","comment":"","columns":[{"name":"x","type":"String","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE TABLE testdb.t1 (`x` String) ENGINE = Memory"},{"name":"table_name","type":"MergeTree","comment":"comment for table","columns":[{"name":"name1","type":"UInt64","nullable":false,"default":null,"comment":"comment for column 1"},{"name":"name2","type":"Nullable(String)","nullable":false,"default":"DEFAULT 'column 2'","comment":"comment for column 2"},{"name":"name3","type":"LowCardinality(String)","nullable":false,"default":"MATERIALIZED upper(name2)","comment":"comment for column 3"},{"name":"name4","type":"SimpleAggregateFunction(sum, Float64)","nullable":false,"default":null,"comment":""},{"name":"name5","type":"DateTime","nullable":false,"default":"DEFAULT now()","comment":""},{"name":"name6","type":"String","nullable":false,"default":"ALIAS formatReadableSize(name1)","comment":""},{"name":"name7","type":"String","nullable":false,"default":"MATERIALIZED hex(name1)","comment":""},{"name":"name8","type":"FixedString(4)","nullable":false,"default":"DEFAULT unhex(name7)","comment":""}],"indexes":[{"name":"idx1","def":"bloom_filter(0.01)","table":"table_name","columns":["name1"],"comment":""},{"name":"idx2","def":"minmax","table":"table_name","columns":["name1 * 2"],"comment":""},{"name":"idx3","def":"set(1000)","table":"table_name","columns":["name1 * length(name2)"],"comment":""}],"constraints":[{"name":"partition key","type":"PARTITION KEY","def":"PARTITION BY ((name1, name3, name5))","table":"table_name","referenced_table":null,"columns":["name1","name3","name5"],"referenced_columns":null,"comment":""},{"name":"sorting key","type":"SORTING KEY","def":"ORDER BY (name1, name5)","table":"table_name","referenced_table":null,"columns":["name1","name5"],"referenced_columns":null,"comment":""},{"name":"primary key","type":"PRIMARY KEY","def":"PRIMARY KEY (name1, name5)","table":"table_name","referenced_table":null,"columns":["name1","name5"],"referenced_columns":null,"comment":""},{"name":"sampling key","type":"SAMPLING KEY","def":"SAMPLE BY (name1)","table":"table_name","referenced_table":null,"columns":["name1"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE testdb.table_name (`name1` UInt64 COMMENT 'comment for column 1', `name2` Nullable(String) DEFAULT 'column 2' COMMENT 'comment for column 2' CODEC(ZSTD(1)), `name3` LowCardinality(String) MATERIALIZED upper(name2) COMMENT 'comment for column 3', `name4` SimpleAggregateFunction(sum, Float64) TTL name5 + toIntervalDay(1), `name5` DateTime DEFAULT now(), `name6` String ALIAS formatReadableSize(name1), `name7` String MATERIALIZED hex(name1), `name8` FixedString(4) DEFAULT unhex(name7), INDEX idx1 name1 TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx2 name1 * 2 TYPE minmax GRANULARITY 3, INDEX idx3 name1 * length(name2) TYPE set(1000) GRANULARITY 4, PROJECTION projection_name_1 (SELECT name1, name2, name3 ORDER BY name1)) ENGINE = MergeTree PARTITION BY (name1, name3, name5) PRIMARY KEY (name1, name5) ORDER BY (name1, name5) SAMPLE BY name1 SETTINGS index_granularity = 8192 COMMENT 'comment for table'"},{"name":"view","type":"View","comment":"","columns":[{"name":"name1","type":"UInt64","nullable":false,"default":null,"comment":""},{"name":"name2","type":"Nullable(String)","nullable":false,"default":null,"comment":""},{"name":"name4","type":"SimpleAggregateFunction(sum, Float64)","nullable":false,"default":null,"comment":""},{"name":"name5","type":"DateTime","nullable":false,"default":null,"comment":""},{"name":"name8","type":"FixedString(4)","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW testdb.view (`name1` UInt64, `name2` Nullable(String), `name4` SimpleAggregateFunction(sum, Float64), `name5` DateTime, `name8` FixedString(4)) AS SELECT * FROM testdb.table_name"}],"relations":[],"functions":[{"name":"linear_equation","return_type":"","arguments":"","type":""}],"driver":{"name":"clickhouse","database_version":"24.4.4.85","meta":{"dict":{"Functions":"Stored procedures and functions"}}}} +{"name":"testdb","desc":"","tables":[{"name":"id_value_dictionary","type":"Dictionary","comment":"","columns":[{"name":"id","type":"UInt64","nullable":false,"default":null,"comment":""},{"name":"value","type":"String","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE DICTIONARY testdb.id_value_dictionary (`id` UInt64, `value` String) PRIMARY KEY id SOURCE(CLICKHOUSE(TABLE 'source_table')) LIFETIME(MIN 0 MAX 1000) LAYOUT(FLAT())"},{"name":"materialized_view","type":"MaterializedView","comment":"","columns":[{"name":"name1","type":"UInt64","nullable":false,"default":null,"comment":""},{"name":"name2","type":"Nullable(String)","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE MATERIALIZED VIEW testdb.materialized_view (`name1` UInt64, `name2` Nullable(String)) ENGINE = Memory AS SELECT name1, name2 FROM testdb.table_name ORDER BY name1 DESC","referenced_tables":["table_name"]},{"name":"numbers_table","type":"SystemNumbers","comment":"","columns":[{"name":"number","type":"UInt64","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE TABLE testdb.numbers_table (`number` UInt64) AS numbers(100)"},{"name":"source_table","type":"MergeTree","comment":"","columns":[{"name":"id","type":"UInt64","nullable":false,"default":null,"comment":""},{"name":"value","type":"String","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[{"name":"sorting key","type":"SORTING KEY","def":"ORDER BY (id)","table":"source_table","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""},{"name":"primary key","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"source_table","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE testdb.source_table (`id` UInt64, `value` String) ENGINE = MergeTree PRIMARY KEY id ORDER BY id SETTINGS index_granularity = 8192"},{"name":"t1","type":"Memory","comment":"","columns":[{"name":"x","type":"String","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE TABLE testdb.t1 (`x` String) ENGINE = Memory"},{"name":"table_name","type":"MergeTree","comment":"comment for table","columns":[{"name":"name1","type":"UInt64","nullable":false,"default":null,"comment":"comment for column 1"},{"name":"name2","type":"Nullable(String)","nullable":false,"default":"DEFAULT 'column 2'","comment":"comment for column 2"},{"name":"name3","type":"LowCardinality(String)","nullable":false,"default":"MATERIALIZED upper(name2)","comment":"comment for column 3"},{"name":"name4","type":"SimpleAggregateFunction(sum, Float64)","nullable":false,"default":null,"comment":""},{"name":"name5","type":"DateTime","nullable":false,"default":"DEFAULT now()","comment":""},{"name":"name6","type":"String","nullable":false,"default":"ALIAS formatReadableSize(name1)","comment":""},{"name":"name7","type":"String","nullable":false,"default":"MATERIALIZED hex(name1)","comment":""},{"name":"name8","type":"FixedString(4)","nullable":false,"default":"DEFAULT unhex(name7)","comment":""}],"indexes":[{"name":"idx1","def":"bloom_filter(0.01)","table":"table_name","columns":["name1"],"comment":""},{"name":"idx2","def":"minmax","table":"table_name","columns":["name1 * 2"],"comment":""},{"name":"idx3","def":"set(1000)","table":"table_name","columns":["name1 * length(name2)"],"comment":""}],"constraints":[{"name":"partition key","type":"PARTITION KEY","def":"PARTITION BY ((name1, name3, name5))","table":"table_name","referenced_table":null,"columns":["name1","name3","name5"],"referenced_columns":null,"comment":""},{"name":"sorting key","type":"SORTING KEY","def":"ORDER BY (name1, name5)","table":"table_name","referenced_table":null,"columns":["name1","name5"],"referenced_columns":null,"comment":""},{"name":"primary key","type":"PRIMARY KEY","def":"PRIMARY KEY (name1, name5)","table":"table_name","referenced_table":null,"columns":["name1","name5"],"referenced_columns":null,"comment":""},{"name":"sampling key","type":"SAMPLING KEY","def":"SAMPLE BY (name1)","table":"table_name","referenced_table":null,"columns":["name1"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE testdb.table_name (`name1` UInt64 COMMENT 'comment for column 1', `name2` Nullable(String) DEFAULT 'column 2' COMMENT 'comment for column 2' CODEC(ZSTD(1)), `name3` LowCardinality(String) MATERIALIZED upper(name2) COMMENT 'comment for column 3', `name4` SimpleAggregateFunction(sum, Float64) TTL name5 + toIntervalDay(1), `name5` DateTime DEFAULT now(), `name6` String ALIAS formatReadableSize(name1), `name7` String MATERIALIZED hex(name1), `name8` FixedString(4) DEFAULT unhex(name7), INDEX idx1 name1 TYPE bloom_filter(0.01) GRANULARITY 1, INDEX idx2 name1 * 2 TYPE minmax GRANULARITY 3, INDEX idx3 name1 * length(name2) TYPE set(1000) GRANULARITY 4, PROJECTION projection_name_1 (SELECT name1, name2, name3 ORDER BY name1)) ENGINE = MergeTree PARTITION BY (name1, name3, name5) PRIMARY KEY (name1, name5) ORDER BY (name1, name5) SAMPLE BY name1 SETTINGS index_granularity = 8192 COMMENT 'comment for table'"},{"name":"view","type":"View","comment":"","columns":[{"name":"name1","type":"UInt64","nullable":false,"default":null,"comment":""},{"name":"name2","type":"Nullable(String)","nullable":false,"default":null,"comment":""},{"name":"name4","type":"SimpleAggregateFunction(sum, Float64)","nullable":false,"default":null,"comment":""},{"name":"name5","type":"DateTime","nullable":false,"default":null,"comment":""},{"name":"name8","type":"FixedString(4)","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW testdb.view (`name1` UInt64, `name2` Nullable(String), `name4` SimpleAggregateFunction(sum, Float64), `name5` DateTime, `name8` FixedString(4)) AS SELECT * FROM testdb.table_name"}],"relations":[],"functions":[{"name":"linear_equation","return_type":"","arguments":"","type":""}],"driver":{"name":"clickhouse","database_version":"24.4.4.85","meta":{"dict":{"Functions":"Stored procedures and functions"}}}} diff --git a/sample/clickhouse/schema.svg b/sample/clickhouse/schema.svg index 8eacfab2..0d3d6a7e 100644 --- a/sample/clickhouse/schema.svg +++ b/sample/clickhouse/schema.svg @@ -4,151 +4,136 @@ - + testdb - - - -.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67 - - -.inner_id.b9cd26f9-5548-4c71-b1f8-b62716652d67 -     -[Memory] - -name1     -[UInt64] - -name2     -[Nullable(String)] - + - + id_value_dictionary - - -id_value_dictionary -     -[Dictionary] - -id     -[UInt64] - -value     -[String] + + +id_value_dictionary +     +[Dictionary] + +id     +[UInt64] + +value     +[String] - + materialized_view - - -materialized_view -     -[MaterializedView] - -name1     -[UInt64] - -name2     -[Nullable(String)] + + +materialized_view +     +[MaterializedView] + +name1     +[UInt64] + +name2     +[Nullable(String)] - + numbers_table - - -numbers_table -     -[SystemNumbers] - -number     -[UInt64] + + +numbers_table +     +[SystemNumbers] + +number     +[UInt64] - + source_table - - -source_table -     -[MergeTree] - -id     -[UInt64] - -value     -[String] + + +source_table +     +[MergeTree] + +id     +[UInt64] + +value     +[String] - + t1 - - -t1 -     -[Memory] - -x     -[String] + + +t1 +     +[Memory] + +x     +[String] - + table_name - - -table_name -     -[MergeTree] - -name1     -[UInt64] - -name2     -[Nullable(String)] - -name3     -[LowCardinality(String)] - -name4     -[SimpleAggregateFunction(sum, Float64)] - -name5     -[DateTime] - -name6     -[String] - -name7     -[String] - -name8     -[FixedString(4)] + + +table_name +     +[MergeTree] + +name1     +[UInt64] + +name2     +[Nullable(String)] + +name3     +[LowCardinality(String)] + +name4     +[SimpleAggregateFunction(sum, Float64)] + +name5     +[DateTime] + +name6     +[String] + +name7     +[String] + +name8     +[FixedString(4)] - + view - - -view -     -[View] - -name1     -[UInt64] - -name2     -[Nullable(String)] - -name4     -[SimpleAggregateFunction(sum, Float64)] - -name5     -[DateTime] - -name8     -[FixedString(4)] + + +view +     +[View] + +name1     +[UInt64] + +name2     +[Nullable(String)] + +name4     +[SimpleAggregateFunction(sum, Float64)] + +name5     +[DateTime] + +name8     +[FixedString(4)]