mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 00:30:49 +00:00
implement nested renames
This commit is contained in:
parent
e7054029c4
commit
25db7623fb
@ -102,4 +102,19 @@ For an INSERT query, you should pass all the component column arrays of a nested
|
|||||||
|
|
||||||
For a DESCRIBE query, the columns in a nested data structure are listed separately in the same way.
|
For a DESCRIBE query, the columns in a nested data structure are listed separately in the same way.
|
||||||
|
|
||||||
The ALTER query for elements in a nested data structure has limitations.
|
The ALTER query for elements in a nested data structure has limitations:
|
||||||
|
|
||||||
|
- Rename for the whole nested structure is not supported, example:
|
||||||
|
``` sql
|
||||||
|
|
||||||
|
ALTER TABLE test.visits RENAME COLUMN Goals to GoalsRenamed;
|
||||||
|
|
||||||
|
```
|
||||||
|
- Rename one nested field to another nested field are only supported if they have the same prefix before the first dot (`.`):
|
||||||
|
``` sql
|
||||||
|
ALTER TABLE nested_table RENAME COLUMN type1.x to type1.x_renamed; # supported
|
||||||
|
ALTER TABLE nested_table RENAME COLUMN type1.x to type1_renamed.x; # not supported
|
||||||
|
ALTER TABLE nested_table RENAME COLUMN type1.x.y to type1.y.x; # supported
|
||||||
|
```
|
||||||
|
|
||||||
|
- Rename nested columns to not nested and vice versa is supported
|
||||||
|
@ -1519,7 +1519,7 @@ void AlterCommands::validate(const StoragePtr & table, ContextPtr context) const
|
|||||||
if (next_command.type == AlterCommand::RENAME_COLUMN)
|
if (next_command.type == AlterCommand::RENAME_COLUMN)
|
||||||
{
|
{
|
||||||
if (next_command.column_name == command.rename_to)
|
if (next_command.column_name == command.rename_to)
|
||||||
throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Transitive renames in a single ALTER query are not allowed (don't make sense)");
|
throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Transitive renames in a single ALTER query are not allowed (doesn't make sense)");
|
||||||
else if (next_command.column_name == command.column_name)
|
else if (next_command.column_name == command.column_name)
|
||||||
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Cannot rename column '{}' to two different names in a single ALTER query",
|
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Cannot rename column '{}' to two different names in a single ALTER query",
|
||||||
backQuote(command.column_name));
|
backQuote(command.column_name));
|
||||||
@ -1567,17 +1567,11 @@ void AlterCommands::validate(const StoragePtr & table, ContextPtr context) const
|
|||||||
if (from_nested_table_name != to_nested_table_name)
|
if (from_nested_table_name != to_nested_table_name)
|
||||||
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Cannot rename column from one nested name to another");
|
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Cannot rename column from one nested name to another");
|
||||||
}
|
}
|
||||||
else if (!from_nested && !to_nested)
|
|
||||||
{
|
|
||||||
all_columns.rename(command.column_name, command.rename_to);
|
all_columns.rename(command.column_name, command.rename_to);
|
||||||
renamed_columns.emplace(command.column_name);
|
renamed_columns.emplace(command.column_name);
|
||||||
renamed_columns.emplace(command.rename_to);
|
renamed_columns.emplace(command.rename_to);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Cannot rename column from nested struct to normal column and vice versa");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (command.type == AlterCommand::REMOVE_TTL && !metadata.hasAnyTableTTL())
|
else if (command.type == AlterCommand::REMOVE_TTL && !metadata.hasAnyTableTTL())
|
||||||
{
|
{
|
||||||
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Table doesn't have any table TTL expression, cannot remove");
|
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Table doesn't have any table TTL expression, cannot remove");
|
||||||
|
@ -4,7 +4,9 @@ CREATE TABLE default.table_for_rename_nested\n(\n `date` Date,\n `key` UIn
|
|||||||
CREATE TABLE default.table_for_rename_nested\n(\n `date` Date,\n `key` UInt64,\n `n.renamed_x` Array(UInt32),\n `n.renamed_y` Array(String),\n `value1` Array(Array(LowCardinality(String)))\n)\nENGINE = MergeTree\nPARTITION BY date\nORDER BY key\nSETTINGS index_granularity = 8192
|
CREATE TABLE default.table_for_rename_nested\n(\n `date` Date,\n `key` UInt64,\n `n.renamed_x` Array(UInt32),\n `n.renamed_y` Array(String),\n `value1` Array(Array(LowCardinality(String)))\n)\nENGINE = MergeTree\nPARTITION BY date\nORDER BY key\nSETTINGS index_granularity = 8192
|
||||||
7 [8,9,10]
|
7 [8,9,10]
|
||||||
7 ['a','b','c']
|
7 ['a','b','c']
|
||||||
|
CREATE TABLE default.table_for_rename_nested\n(\n `date` Date,\n `key` UInt64,\n `not_nested_x` Array(UInt32),\n `n.renamed_y` Array(String),\n `value1` Array(Array(LowCardinality(String)))\n)\nENGINE = MergeTree\nPARTITION BY date\nORDER BY key\nSETTINGS index_granularity = 8192
|
||||||
|
7 [8,9,10]
|
||||||
[['7']]
|
[['7']]
|
||||||
CREATE TABLE default.table_for_rename_nested\n(\n `date` Date,\n `key` UInt64,\n `n.renamed_x` Array(UInt32),\n `n.renamed_y` Array(String),\n `renamed_value1` Array(Array(LowCardinality(String)))\n)\nENGINE = MergeTree\nPARTITION BY date\nORDER BY key\nSETTINGS index_granularity = 8192
|
CREATE TABLE default.table_for_rename_nested\n(\n `date` Date,\n `key` UInt64,\n `not_nested_x` Array(UInt32),\n `n.renamed_y` Array(String),\n `renamed_value1` Array(Array(LowCardinality(String)))\n)\nENGINE = MergeTree\nPARTITION BY date\nORDER BY key\nSETTINGS index_granularity = 8192
|
||||||
date key n.renamed_x n.renamed_y renamed_value1
|
date key not_nested_x n.renamed_y renamed_value1
|
||||||
2019-10-01 7 [8,9,10] ['a','b','c'] [['7']]
|
2019-10-01 7 [8,9,10] ['a','b','c'] [['7']]
|
||||||
|
@ -25,7 +25,10 @@ SHOW CREATE TABLE table_for_rename_nested;
|
|||||||
SELECT key, n.renamed_x FROM table_for_rename_nested WHERE key = 7;
|
SELECT key, n.renamed_x FROM table_for_rename_nested WHERE key = 7;
|
||||||
SELECT key, n.renamed_y FROM table_for_rename_nested WHERE key = 7;
|
SELECT key, n.renamed_y FROM table_for_rename_nested WHERE key = 7;
|
||||||
|
|
||||||
ALTER TABLE table_for_rename_nested RENAME COLUMN n.renamed_x TO not_nested_x; --{serverError BAD_ARGUMENTS}
|
ALTER TABLE table_for_rename_nested RENAME COLUMN n.renamed_x TO not_nested_x;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE table_for_rename_nested;
|
||||||
|
SELECT key, not_nested_x FROM table_for_rename_nested WHERE key = 7;
|
||||||
|
|
||||||
-- Currently not implemented
|
-- Currently not implemented
|
||||||
ALTER TABLE table_for_rename_nested RENAME COLUMN n TO renamed_n; --{serverError NOT_IMPLEMENTED}
|
ALTER TABLE table_for_rename_nested RENAME COLUMN n TO renamed_n; --{serverError NOT_IMPLEMENTED}
|
||||||
|
@ -4,3 +4,7 @@ CREATE TABLE default.table_for_rename_nested\n(\n `date` Date,\n `key` UIn
|
|||||||
CREATE TABLE default.table_for_rename_nested\n(\n `date` Date,\n `key` UInt64,\n `n.renamed_x` Array(UInt32),\n `n.renamed_y` Array(String),\n `value1` String\n)\nENGINE = MergeTree\nPARTITION BY date\nORDER BY key\nSETTINGS index_granularity = 8192
|
CREATE TABLE default.table_for_rename_nested\n(\n `date` Date,\n `key` UInt64,\n `n.renamed_x` Array(UInt32),\n `n.renamed_y` Array(String),\n `value1` String\n)\nENGINE = MergeTree\nPARTITION BY date\nORDER BY key\nSETTINGS index_granularity = 8192
|
||||||
7 [8,9,10]
|
7 [8,9,10]
|
||||||
7 ['a','b','c']
|
7 ['a','b','c']
|
||||||
|
CREATE TABLE default.table_for_rename_nested\n(\n `date` Date,\n `key` UInt64,\n `not_nested_x` Array(UInt32),\n `n.renamed_y` Array(String),\n `value1` String\n)\nENGINE = MergeTree\nPARTITION BY date\nORDER BY key\nSETTINGS index_granularity = 8192
|
||||||
|
CREATE TABLE default.table_for_rename_nested\n(\n `date` Date,\n `key` UInt64,\n `not_nested_x` Array(UInt32),\n `n.renamed_y` Array(String),\n `value.one` String\n)\nENGINE = MergeTree\nPARTITION BY date\nORDER BY key\nSETTINGS index_granularity = 8192
|
||||||
|
date key not_nested_x n.renamed_y value.one
|
||||||
|
2019-10-01 7 [8,9,10] ['a','b','c'] 7
|
||||||
|
@ -25,14 +25,20 @@ SHOW CREATE TABLE table_for_rename_nested;
|
|||||||
SELECT key, n.renamed_x FROM table_for_rename_nested WHERE key = 7;
|
SELECT key, n.renamed_x FROM table_for_rename_nested WHERE key = 7;
|
||||||
SELECT key, n.renamed_y FROM table_for_rename_nested WHERE key = 7;
|
SELECT key, n.renamed_y FROM table_for_rename_nested WHERE key = 7;
|
||||||
|
|
||||||
ALTER TABLE table_for_rename_nested RENAME COLUMN n.renamed_x TO not_nested_x; --{serverError BAD_ARGUMENTS}
|
|
||||||
|
|
||||||
ALTER TABLE table_for_rename_nested RENAME COLUMN n.renamed_x TO q.renamed_x; --{serverError BAD_ARGUMENTS}
|
|
||||||
|
|
||||||
ALTER TABLE table_for_rename_nested RENAME COLUMN value1 TO q.renamed_x; --{serverError BAD_ARGUMENTS}
|
|
||||||
|
|
||||||
-- Currently not implemented
|
-- Currently not implemented
|
||||||
ALTER TABLE table_for_rename_nested RENAME COLUMN n TO renamed_n; --{serverError NOT_IMPLEMENTED}
|
ALTER TABLE table_for_rename_nested RENAME COLUMN n TO renamed_n; --{serverError NOT_IMPLEMENTED}
|
||||||
|
|
||||||
|
ALTER TABLE table_for_rename_nested RENAME COLUMN n.renamed_x TO not_nested_x;
|
||||||
|
SHOW CREATE TABLE table_for_rename_nested;
|
||||||
|
|
||||||
|
ALTER TABLE table_for_rename_nested RENAME COLUMN n.renamed_y TO q.renamed_y; --{serverError BAD_ARGUMENTS}
|
||||||
|
ALTER TABLE table_for_rename_nested RENAME COLUMN value1 TO n.renamed_y; --{serverError DUPLICATE_COLUMN}
|
||||||
|
|
||||||
|
ALTER TABLE table_for_rename_nested RENAME COLUMN value1 TO value.one;
|
||||||
|
SHOW CREATE TABLE table_for_rename_nested;
|
||||||
|
|
||||||
|
|
||||||
|
SELECT * FROM table_for_rename_nested WHERE key = 7 FORMAT TSVWithNames;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS table_for_rename_nested;
|
DROP TABLE IF EXISTS table_for_rename_nested;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user