Merge branch 'master' into shellcheck1

This commit is contained in:
Alexey Milovidov 2020-08-02 17:14:58 +03:00
commit ad675c10cc
152 changed files with 3734 additions and 23493 deletions

View File

@ -16,4 +16,4 @@ ClickHouse is an open-source column-oriented database management system that all
## Upcoming Events
* [ClickHouse at ByteDance (in Chinese)](https://mp.weixin.qq.com/s/Em-HjPylO8D7WPui4RREAQ) on July 31, 2020.
* [ClickHouse at ByteDance (in Chinese)](https://mp.weixin.qq.com/s/Em-HjPylO8D7WPui4RREAQ) on August 14, 2020.

View File

@ -54,7 +54,7 @@ endif ()
# Example: DwarfInstructions.hpp: register unsigned long long x16 __asm("x16") = cfa;
check_cxx_compiler_flag(-Wregister HAVE_WARNING_REGISTER)
if (HAVE_WARNING_REGISTER)
target_compile_options(unwind PRIVATE -Wno-register)
target_compile_options(unwind PRIVATE "$<$<STREQUAL:$<TARGET_PROPERTY:LANGUAGE>,CXX>:-Wno-register>")
endif ()
install(

View File

@ -67,6 +67,7 @@ ln -s /usr/share/clickhouse-test/config/part_log.xml /etc/clickhouse-server/conf
ln -s /usr/share/clickhouse-test/config/text_log.xml /etc/clickhouse-server/config.d/
ln -s /usr/share/clickhouse-test/config/metric_log.xml /etc/clickhouse-server/config.d/
ln -s /usr/share/clickhouse-test/config/query_masking_rules.xml /etc/clickhouse-server/config.d/
ln -s /usr/share/clickhouse-test/config/custom_settings_prefixes.xml /etc/clickhouse-server/config.d/
ln -s /usr/share/clickhouse-test/config/log_queries.xml /etc/clickhouse-server/users.d/
ln -s /usr/share/clickhouse-test/config/readonly.xml /etc/clickhouse-server/users.d/
ln -s /usr/share/clickhouse-test/config/access_management.xml /etc/clickhouse-server/users.d/

View File

@ -17,6 +17,7 @@ ln -s /usr/share/clickhouse-test/config/listen.xml /etc/clickhouse-server/config
ln -s /usr/share/clickhouse-test/config/part_log.xml /etc/clickhouse-server/config.d/
ln -s /usr/share/clickhouse-test/config/text_log.xml /etc/clickhouse-server/config.d/
ln -s /usr/share/clickhouse-test/config/metric_log.xml /etc/clickhouse-server/config.d/
ln -s /usr/share/clickhouse-test/config/custom_settings_prefixes.xml /etc/clickhouse-server/config.d/
ln -s /usr/share/clickhouse-test/config/log_queries.xml /etc/clickhouse-server/users.d/
ln -s /usr/share/clickhouse-test/config/readonly.xml /etc/clickhouse-server/users.d/
ln -s /usr/share/clickhouse-test/config/access_management.xml /etc/clickhouse-server/users.d/

View File

@ -72,7 +72,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
2014-03-22 1031592
2014-03-23 1046491
0000-00-00 8873898
1970-01-01 8873898
2014-03-17 1031592
2014-03-23 1406958
@ -708,7 +708,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
Totals:
┌──EventDate─┬───────c─┐
0000-00-00 │ 8873898 │
1970-01-01 │ 8873898 │
└────────────┴─────────┘
Extremes:

View File

@ -121,12 +121,12 @@ data_compressed_bytes: 157
data_uncompressed_bytes: 91
marks_bytes: 144
modification_time: 2020-06-18 13:01:49
remove_time: 0000-00-00 00:00:00
remove_time: 1970-01-01 00:00:00
refcount: 1
min_date: 0000-00-00
max_date: 0000-00-00
min_time: 0000-00-00 00:00:00
max_time: 0000-00-00 00:00:00
min_date: 1970-01-01
max_date: 1970-01-01
min_time: 1970-01-01 00:00:00
max_time: 1970-01-01 00:00:00
partition_id: all
min_block_number: 1
max_block_number: 4
@ -143,8 +143,8 @@ path: /var/lib/clickhouse/data/default/months/a
hash_of_all_files: 2d0657a16d9430824d35e327fcbd87bf
hash_of_uncompressed_files: 84950cc30ba867c77a408ae21332ba29
uncompressed_hash_of_compressed_files: 1ad78f1c6843bbfb99a2c931abe7df7d
delete_ttl_info_min: 0000-00-00 00:00:00
delete_ttl_info_max: 0000-00-00 00:00:00
delete_ttl_info_min: 1970-01-01 00:00:00
delete_ttl_info_max: 1970-01-01 00:00:00
move_ttl_info.expression: []
move_ttl_info.min: []
move_ttl_info.max: []

View File

@ -33,9 +33,9 @@ inserts_in_queue: 0
merges_in_queue: 1
part_mutations_in_queue: 0
queue_oldest_time: 2020-02-20 08:34:30
inserts_oldest_time: 0000-00-00 00:00:00
inserts_oldest_time: 1970-01-01 00:00:00
merges_oldest_time: 2020-02-20 08:34:30
part_mutations_oldest_time: 0000-00-00 00:00:00
part_mutations_oldest_time: 1970-01-01 00:00:00
oldest_part_to_get:
oldest_part_to_merge_to: 20200220_20284_20840_7
oldest_part_to_mutate_to:

View File

@ -6,7 +6,6 @@ toc_title: Date
# Date {#date}
A date. Stored in two bytes as the number of days since 1970-01-01 (unsigned). Allows storing values from just after the beginning of the Unix Epoch to the upper threshold defined by a constant at the compilation stage (currently, this is until the year 2106, but the final fully-supported year is 2105).
The minimum value is output as 0000-00-00.
The date value is stored without the time zone.

View File

@ -61,7 +61,7 @@ The column description can specify an expression for a default value, in one of
Example: `URLDomain String DEFAULT domain(URL)`.
If an expression for the default value is not defined, the default values will be set to zeros for numbers, empty strings for strings, empty arrays for arrays, and `0000-00-00` for dates or `0000-00-00 00:00:00` for dates with time. NULLs are not supported.
If an expression for the default value is not defined, the default values will be set to zeros for numbers, empty strings for strings, empty arrays for arrays, and `1970-01-01` for dates or zero unix timestamp for DateTime, NULL for Nullable.
If the default expression is defined, the column type is optional. If there isnt an explicitly defined type, the default expression type is used. Example: `EventDate DEFAULT toDate(EventTime)` the Date type will be used for the EventDate column.

View File

@ -158,11 +158,11 @@ returns
``` text
┌───d1───────┬───d2───────┬─source───┐
│ 1970-01-11 │ 1970-01-02 │ original │
0000-00-00 │ 1970-01-03 │ │
0000-00-00 │ 1970-01-04 │ │
1970-01-01 │ 1970-01-03 │ │
1970-01-01 │ 1970-01-04 │ │
│ 1970-02-10 │ 1970-01-05 │ original │
0000-00-00 │ 1970-01-06 │ │
0000-00-00 │ 1970-01-07 │ │
1970-01-01 │ 1970-01-06 │ │
1970-01-01 │ 1970-01-07 │ │
│ 1970-03-12 │ 1970-01-08 │ original │
└────────────┴────────────┴──────────┘
```
@ -188,17 +188,17 @@ returns
``` text
┌───d1───────┬───d2───────┬─source───┐
│ 1970-01-11 │ 1970-01-02 │ original │
│ 1970-01-16 │ 0000-00-00 │ │
│ 1970-01-21 │ 0000-00-00 │ │
│ 1970-01-26 │ 0000-00-00 │ │
│ 1970-01-31 │ 0000-00-00 │ │
│ 1970-02-05 │ 0000-00-00 │ │
│ 1970-01-16 │ 1970-01-01 │ │
│ 1970-01-21 │ 1970-01-01 │ │
│ 1970-01-26 │ 1970-01-01 │ │
│ 1970-01-31 │ 1970-01-01 │ │
│ 1970-02-05 │ 1970-01-01 │ │
│ 1970-02-10 │ 1970-01-05 │ original │
│ 1970-02-15 │ 0000-00-00 │ │
│ 1970-02-20 │ 0000-00-00 │ │
│ 1970-02-25 │ 0000-00-00 │ │
│ 1970-03-02 │ 0000-00-00 │ │
│ 1970-03-07 │ 0000-00-00 │ │
│ 1970-02-15 │ 1970-01-01 │ │
│ 1970-02-20 │ 1970-01-01 │ │
│ 1970-02-25 │ 1970-01-01 │ │
│ 1970-03-02 │ 1970-01-01 │ │
│ 1970-03-07 │ 1970-01-01 │ │
│ 1970-03-12 │ 1970-01-08 │ original │
└────────────┴────────────┴──────────┘
```

View File

@ -72,7 +72,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
2014-03-22 1031592
2014-03-23 1046491
0000-00-00 8873898
1970-01-01 8873898
2014-03-17 1031592
2014-03-23 1406958
@ -708,7 +708,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
Totals:
┌──EventDate─┬───────c─┐
0000-00-00 │ 8873898 │
1970-01-01 │ 8873898 │
└────────────┴─────────┘
Extremes:

View File

@ -794,9 +794,9 @@ inserts_in_queue: 0
merges_in_queue: 1
part_mutations_in_queue: 0
queue_oldest_time: 2020-02-20 08:34:30
inserts_oldest_time: 0000-00-00 00:00:00
inserts_oldest_time: 1970-01-01 00:00:00
merges_oldest_time: 2020-02-20 08:34:30
part_mutations_oldest_time: 0000-00-00 00:00:00
part_mutations_oldest_time: 1970-01-01 00:00:00
oldest_part_to_get:
oldest_part_to_merge_to: 20200220_20284_20840_7
oldest_part_to_mutate_to:

View File

@ -8,7 +8,6 @@ toc_title: Fecha
# Fecha {#date}
Fecha. Almacenado en dos bytes como el número de días desde 1970-01-01 (sin signo). Permite almacenar valores desde justo después del comienzo de la Época Unix hasta el umbral superior definido por una constante en la etapa de compilación (actualmente, esto es hasta el año 2106, pero el último año totalmente soportado es 2105).
El valor mínimo se emite como 0000-00-00.
El valor de fecha se almacena sin la zona horaria.

View File

@ -78,7 +78,7 @@ Puede haber otras cláusulas después del `ENGINE` cláusula en la consulta. Con
La descripción de la columna puede especificar una expresión para un valor predeterminado, de una de las siguientes maneras:`DEFAULT expr`, `MATERIALIZED expr`, `ALIAS expr`.
Ejemplo: `URLDomain String DEFAULT domain(URL)`.
Si no se define una expresión para el valor predeterminado, los valores predeterminados se establecerán en ceros para números, cadenas vacías para cadenas, matrices vacías para matrices y `0000-00-00` para fechas o `0000-00-00 00:00:00` para las fechas con el tiempo. Los NULL no son compatibles.
Si no se define una expresión para el valor predeterminado, los valores predeterminados se establecerán en ceros para números, cadenas vacías para cadenas, matrices vacías para matrices y `1970-01-01` para fechas o zero unix timestamp para las fechas con el tiempo. Los NULL no son compatibles.
Si se define la expresión predeterminada, el tipo de columna es opcional. Si no hay un tipo definido explícitamente, se utiliza el tipo de expresión predeterminado. Ejemplo: `EventDate DEFAULT toDate(EventTime)` the Date tipo será utilizado para el EventDate columna.

View File

@ -1,268 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_priority: 79
toc_title: '2017'
---
### Somos una empresa especializada en el desarrollo de soluciones tecnológicas {#clickhouse-release-1-1-54327-2017-12-21}
Esta versión contiene correcciones de errores para la versión anterior 1.1.54318:
- Se corrigió un error con una posible condición de carrera en la replicación que podría conducir a la pérdida de datos. Este problema afecta a las versiones 1.1.54310 y 1.1.54318. Si utiliza una de estas versiones con tablas replicadas, se recomienda encarecidamente la actualización. Este problema se muestra en los registros en mensajes de advertencia como `Part ... from own log doesn't exist.` El problema es relevante incluso si no ve estos mensajes en los registros.
### Somos una empresa especializada en el desarrollo de soluciones tecnológicas {#clickhouse-release-1-1-54318-2017-11-30}
Esta versión contiene correcciones de errores para la versión anterior 1.1.54310:
- Se corrigieron las eliminaciones de filas incorrectas durante las fusiones en el motor SummingMergeTree
- Se corrigió una pérdida de memoria en los motores MergeTree no duplicados
- Se corrigió la degradación del rendimiento con inserciones frecuentes en los motores MergeTree
- Se corrigió un problema que provocaba que la cola de replicación dejara de ejecutarse
- Rotación y archivado fijos de los registros del servidor
### Somos una empresa especializada en el desarrollo de soluciones tecnológicas {#clickhouse-release-1-1-54310-2017-11-01}
#### Novedad: {#new-features}
- Clave de partición personalizada para la familia MergeTree de motores de tabla.
- [Kafka](https://clickhouse.tech/docs/en/operations/table_engines/kafka/) motor de mesa.
- Se agregó soporte para cargar [CatBoost](https://catboost.yandex/) modelos y aplicarlos a los datos almacenados en ClickHouse.
- Se agregó soporte para zonas horarias con desplazamientos no enteros de UTC.
- Se agregó soporte para operaciones aritméticas con intervalos de tiempo.
- El intervalo de valores para los tipos Date y DateTime se extiende hasta el año 2105.
- Se agregó el `CREATE MATERIALIZED VIEW x TO y` consulta (especifica una tabla existente para almacenar los datos de una vista materializada).
- Se agregó el `ATTACH TABLE` consulta sin argumentos.
- La lógica de procesamiento para columnas anidadas con nombres que terminan en -Map en una tabla SummingMergeTree se extrajo a la función de agregado sumMap. Ahora puede especificar dichas columnas explícitamente.
- El tamaño máximo del diccionario IP trie se incrementa a 128M entradas.
- Se agregó la función getSizeOfEnumType.
- Se agregó la función agregada sumWithOverflow.
- Se agregó soporte para el formato de entrada Cap'n Proto.
- Ahora puede personalizar el nivel de compresión al usar el algoritmo zstd.
#### Cambios incompatibles hacia atrás: {#backward-incompatible-changes}
- No se permite la creación de tablas temporales con un motor que no sea Memoria.
- No se permite la creación explícita de tablas con el motor View o MaterializedView.
- Durante la creación de la tabla, una nueva comprobación comprueba que la expresión de clave de muestreo está incluida en la clave principal.
#### Corrección de errores: {#bug-fixes}
- Se corrigieron bloqueos al insertar sincrónicamente en una tabla distribuida.
- Se corrigió la adición y eliminación no atómica de partes en tablas replicadas.
- Los datos insertados en una vista materializada no están sujetos a una deduplicación innecesaria.
- La ejecución de una consulta en una tabla distribuida para la que la réplica local está rezagada y las réplicas remotas no están disponibles ya no genera ningún error.
- Los usuarios no necesitan permisos de acceso `default` base de datos para crear tablas temporales más.
- Se corrigió el bloqueo al especificar el tipo de matriz sin argumentos.
- Se corrigieron bloqueos cuando el volumen del disco que contiene los registros del servidor está lleno.
- Se corrigió un desbordamiento en la función toRelativeWeekNum para la primera semana de la época de Unix.
#### Mejoras de construcción: {#build-improvements}
- Varias bibliotecas de terceros (especialmente Poco) se actualizaron y convirtieron a submódulos de git.
### Somos una empresa especializada en el desarrollo de soluciones tecnológicas {#clickhouse-release-1-1-54304-2017-10-19}
#### Novedad: {#new-features-1}
- Soporte TLS en el protocolo nativo (para habilitar, establecer `tcp_ssl_port` en `config.xml` ).
#### Corrección de errores: {#bug-fixes-1}
- `ALTER` para tablas replicadas ahora intenta comenzar a ejecutarse tan pronto como sea posible.
- Se corrigió el bloqueo al leer datos con la configuración `preferred_block_size_bytes=0.`
- Se corrigieron los bloqueos de `clickhouse-client` al presionar `Page Down`
- Interpretación correcta de ciertas consultas complejas con `GLOBAL IN` y `UNION ALL`
- `FREEZE PARTITION` siempre funciona atómicamente ahora.
- Las solicitudes POST vacías ahora devuelven una respuesta con el código 411.
- Se corrigieron errores de interpretación para expresiones como `CAST(1 AS Nullable(UInt8)).`
- Se ha corregido un error al leer `Array(Nullable(String))` las columnas de `MergeTree` tabla.
- Se corrigió el bloqueo al analizar consultas como `SELECT dummy AS dummy, dummy AS b`
- Los usuarios se actualizan correctamente `users.xml`
- Control correcto cuando un diccionario ejecutable devuelve un código de respuesta distinto de cero.
### Somos una empresa especializada en el desarrollo de soluciones tecnológicas {#clickhouse-release-1-1-54292-2017-09-20}
#### Novedad: {#new-features-2}
- Se agregó el `pointInPolygon` función para trabajar con coordenadas en un plano de coordenadas.
- Se agregó el `sumMap` función de agregado para calcular la suma de matrices, similar a `SummingMergeTree`.
- Se agregó el `trunc` función. Rendimiento mejorado de las funciones de redondeo (`round`, `floor`, `ceil`, `roundToExp2`) y corrigió la lógica de cómo funcionan. Cambió la lógica del `roundToExp2` función para fracciones y números negativos.
- El archivo ejecutable ClickHouse ahora depende menos de la versión de libc. El mismo archivo ejecutable ClickHouse se puede ejecutar en una amplia variedad de sistemas Linux. Todavía hay una dependencia al usar consultas compiladas (con la configuración `compile = 1` , que no se usa por defecto).
- Se ha reducido el tiempo necesario para la compilación dinámica de consultas.
#### Corrección de errores: {#bug-fixes-2}
- Se corrigió un error que a veces producía `part ... intersects previous part` mensajes y la coherencia de réplica debilitada.
- Se corrigió un error que causaba que el servidor se bloqueara si ZooKeeper no estaba disponible durante el apagado.
- Se eliminó el registro excesivo al restaurar réplicas.
- Se corrigió un error en la implementación de UNION ALL.
- Se ha corregido un error en la función concat que se producía si la primera columna de un bloque tiene el tipo Array.
- El progreso ahora se muestra correctamente en el sistema.fusiones tabla.
### Somos una empresa especializada en el desarrollo de soluciones tecnológicas {#clickhouse-release-1-1-54289-2017-09-13}
#### Novedad: {#new-features-3}
- `SYSTEM` consultas para la administración del servidor: `SYSTEM RELOAD DICTIONARY`, `SYSTEM RELOAD DICTIONARIES`, `SYSTEM DROP DNS CACHE`, `SYSTEM SHUTDOWN`, `SYSTEM KILL`.
- Funciones añadidas para trabajar con matrices: `concat`, `arraySlice`, `arrayPushBack`, `arrayPushFront`, `arrayPopBack`, `arrayPopFront`.
- Añadir `root` y `identity` parámetros para la configuración de ZooKeeper. Esto le permite aislar usuarios individuales en el mismo clúster de ZooKeeper.
- Funciones agregadas añadidas `groupBitAnd`, `groupBitOr`, y `groupBitXor` (por compatibilidad, también están disponibles bajo los nombres `BIT_AND`, `BIT_OR`, y `BIT_XOR`).
- Los diccionarios externos se pueden cargar desde MySQL especificando un socket en el sistema de archivos.
- Los diccionarios externos se pueden cargar desde MySQL a través de SSL (`ssl_cert`, `ssl_key`, `ssl_ca` parámetros).
- Se agregó el `max_network_bandwidth_for_user` para restringir el uso general del ancho de banda para consultas por usuario.
- Soporte para `DROP TABLE` para tablas temporales.
- Soporte para lectura `DateTime` valores en formato de marca de tiempo Unix desde el `CSV` y `JSONEachRow` formato.
- Las réplicas rezagadas en las consultas distribuidas ahora se excluyen de forma predeterminada (el umbral predeterminado es de 5 minutos).
- El bloqueo FIFO se usa durante ALTER: una consulta ALTER no se bloquea indefinidamente para consultas que se ejecutan continuamente.
- Opción para establecer `umask` en el archivo de configuración.
- Rendimiento mejorado para consultas con `DISTINCT` .
#### Corrección de errores: {#bug-fixes-3}
- Se ha mejorado el proceso de eliminación de nodos antiguos en ZooKeeper. Anteriormente, los nodos antiguos a veces no se eliminaban si había inserciones muy frecuentes, lo que hacía que el servidor tardara en apagarse, entre otras cosas.
- Se corrigió la aleatorización al elegir hosts para la conexión a ZooKeeper.
- Se corrigió la exclusión de réplicas rezagadas en consultas distribuidas si la réplica es localhost.
- Se corrigió un error por el que una parte de datos en un `ReplicatedMergeTree` la tabla podría estar rota después de correr `ALTER MODIFY` en un elemento en un `Nested` estructura.
- Se corrigió un error que podía causar que las consultas SELECT “hang”.
- Mejoras en las consultas DDL distribuidas.
- Se corrigió la consulta `CREATE TABLE ... AS <materialized view>`.
- Se resolvió el punto muerto en el `ALTER ... CLEAR COLUMN IN PARTITION` consulta para `Buffer` tabla.
- Se corrigió el valor predeterminado no válido para `Enum` s (0 en lugar del mínimo) cuando se utiliza el `JSONEachRow` y `TSKV` formato.
- Se resolvió la aparición de procesos zombis al usar un diccionario con un `executable` fuente.
- Se corrigió el segfault para la consulta HEAD.
#### Flujo de trabajo mejorado para desarrollar y ensamblar ClickHouse: {#improved-workflow-for-developing-and-assembling-clickhouse}
- Usted puede utilizar `pbuilder` para construir ClickHouse.
- Usted puede utilizar `libc++` en lugar de `libstdc++` para construir en Linux.
- Se agregaron instrucciones para usar herramientas de análisis de código estático: `Coverage`, `clang-tidy`, `cppcheck`.
#### Tenga en cuenta al actualizar: {#please-note-when-upgrading}
- Ahora hay un valor predeterminado más alto para la configuración MergeTree `max_bytes_to_merge_at_max_space_in_pool` (el tamaño total máximo de las partes de datos a fusionar, en bytes): ha aumentado de 100 GiB a 150 GiB. Esto podría dar lugar a grandes fusiones que se ejecutan después de la actualización del servidor, lo que podría provocar una mayor carga en el subsistema de disco. Si el espacio libre disponible en el servidor es inferior al doble de la cantidad total de las fusiones que se están ejecutando, esto hará que todas las demás fusiones dejen de ejecutarse, incluidas las fusiones de pequeñas partes de datos. Como resultado, las consultas INSERT fallarán con el mensaje “Merges are processing significantly slower than inserts.” Utilice el `SELECT * FROM system.merges` consulta para supervisar la situación. También puede comprobar el `DiskSpaceReservedForMerge` métrica en el `system.metrics` mesa, o en Grafito. No necesita hacer nada para solucionar esto, ya que el problema se resolverá solo una vez que finalicen las fusiones grandes. Si encuentra esto inaceptable, puede restaurar el valor anterior para el `max_bytes_to_merge_at_max_space_in_pool` configuración. Para hacer esto, vaya al `<merge_tree>` sección en config.xml, establecer ``` <merge_tree>``<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool> ``` y reinicie el servidor.
### Somos una empresa especializada en el desarrollo de soluciones tecnológicas {#clickhouse-release-1-1-54284-2017-08-29}
- Esta es una versión de corrección de errores para la versión anterior 1.1.54282. Corrige fugas en el directorio de piezas en ZooKeeper.
### Somos una empresa especializada en el desarrollo de soluciones tecnológicas {#clickhouse-release-1-1-54282-2017-08-23}
Esta versión contiene correcciones de errores para la versión anterior 1.1.54276:
- Fijo `DB::Exception: Assertion violation: !_path.empty()` cuando se inserta en una tabla distribuida.
- Se corrigió el análisis al insertar en formato RowBinary si los datos de entrada comienzan con';'.
- Errors during runtime compilation of certain aggregate functions (e.g. `groupArray()`).
### Somos una empresa especializada en el desarrollo de soluciones tecnológicas {#clickhouse-release-1-1-54276-2017-08-16}
#### Novedad: {#new-features-4}
- Se agregó una sección WITH opcional para una consulta SELECT. Consulta de ejemplo: `WITH 1+1 AS a SELECT a, a*a`
- INSERT se puede realizar de forma sincrónica en una tabla distribuida: se devuelve OK solo después de guardar todos los datos en todos los fragmentos. Esto se activa mediante la configuración insert\_distributed\_sync=1.
- Se agregó el tipo de datos UUID para trabajar con identificadores de 16 bytes.
- Se agregaron alias de CHAR, FLOAT y otros tipos para compatibilidad con Tableau.
- Se agregaron las funciones aYYYYMM, aYYYYMMDD y aYYYYMMDDhhmmss para convertir el tiempo en números.
- Puede utilizar direcciones IP (junto con el nombre de host) para identificar servidores para consultas DDL en clúster.
- Se agregó soporte para argumentos no constantes y compensaciones negativas en la función `substring(str, pos, len).`
- Se agregó el parámetro max\_size para el `groupArray(max_size)(column)` función agregada, y optimizó su funcionamiento.
#### Principales cambios: {#main-changes}
- Mejoras de seguridad: todos los archivos del servidor se crean con permisos 0640 (se pueden cambiar a través de `<umask>` parámetro de configuración).
- Mensajes de error mejorados para consultas con sintaxis no válida.
- Se ha reducido significativamente el consumo de memoria y se ha mejorado el rendimiento al combinar grandes secciones de datos de MergeTree.
- Aumentó significativamente el rendimiento de las fusiones de datos para el motor ReplacingMergeTree.
- Mejora del rendimiento de las inserciones asincrónicas de una tabla distribuida mediante la combinación de varias inserciones de origen. Para habilitar esta funcionalidad, utilice la configuración de directorio\_distribuido\_monitor\_batch\_inserts=1.
#### Cambios incompatibles hacia atrás: {#backward-incompatible-changes-1}
- Se ha cambiado el formato binario de los estados agregados de `groupArray(array_column)` funciones para matrices.
#### Lista completa de cambios: {#complete-list-of-changes}
- Se agregó el `output_format_json_quote_denormals` configuración, que permite generar valores nan e inf en formato JSON.
- Asignación de secuencias optimizada al leer desde una tabla distribuida.
- Los ajustes se pueden configurar en modo de solo lectura si el valor no cambia.
- Se agregó la capacidad de recuperar gránulos no enteros del motor MergeTree para cumplir con las restricciones en el tamaño de bloque especificado en la configuración preferred\_block\_size\_bytes. El propósito es reducir el consumo de RAM y aumentar la localidad de caché al procesar consultas desde tablas con columnas grandes.
- Uso eficiente de índices que contienen expresiones como `toStartOfHour(x)` para condiciones como `toStartOfHour(x) op сonstexpr.`
- Se agregaron nuevas configuraciones para los motores MergeTree (la sección merge\_tree en config.XML):
- replicated\_deduplication\_window\_seconds establece el número de segundos permitidos para la deduplicación de inserciones en tablas replicadas.
- cleanup\_delay\_period establece con qué frecuencia iniciar la limpieza para eliminar datos obsoletos.
- replicated\_can\_become\_leader puede evitar que una réplica se convierta en el líder (y asigne fusiones).
- Limpieza acelerada para eliminar datos obsoletos de ZooKeeper.
- Múltiples mejoras y correcciones para consultas DDL en clúster. De particular interés es la nueva configuración distribut\_ddl\_task\_timeout, que limita el tiempo de espera para una respuesta de los servidores en el clúster. Si no se ha realizado una solicitud ddl en todos los hosts, una respuesta contendrá un error de tiempo de espera y una solicitud se ejecutará en modo asíncrono.
- Mejora de la visualización de los rastros de pila en los registros del servidor.
- Se agregó el “none” valor para el método de compresión.
- Puede usar varias secciones dictionaries\_config en config.XML.
- Es posible conectarse a MySQL a través de un socket en el sistema de archivos.
- Sistema.partes tiene una nueva columna con información sobre el tamaño de las marcas, en bytes.
#### Corrección de errores: {#bug-fixes-4}
- Las tablas distribuidas que utilizan una tabla Merge ahora funcionan correctamente para una consulta SELECT con una condición `_table` campo.
- Se corrigió una rara condición de carrera en ReplicatedMergeTree al verificar partes de datos.
- Se corrigió la posible congelación en “leader election” al iniciar un servidor.
- El valor max\_replica\_delay\_for\_distributed\_queries se omitió al usar una réplica local del origen de datos. Esto ha sido solucionado.
- Comportamiento incorrecto fijo de `ALTER TABLE CLEAR COLUMN IN PARTITION` al intentar limpiar una columna no existente.
- Se ha corregido una excepción en la función multiIf al usar matrices o cadenas vacías.
- Se corrigieron asignaciones de memoria excesivas al deserializar el formato nativo.
- Se corrigió la actualización automática incorrecta de los diccionarios Trie.
- Se ha corregido una excepción al ejecutar consultas con una cláusula GROUP BY desde una tabla Merge cuando se usa SAMPLE.
- Se corrigió un bloqueo de GROUP BY cuando se usabaributed\_aggregation\_memory\_efficient = 1.
- Ahora puede especificar la base de datos.en el lado derecho de IN y JOIN.
- Se usaron demasiados subprocesos para la agregación paralela. Esto ha sido solucionado.
- Corregido cómo el “if” funciona con argumentos FixedString.
- SELECT funcionó incorrectamente desde una tabla distribuida para fragmentos con un peso de 0. Esto ha sido solucionado.
- Ejecutar `CREATE VIEW IF EXISTS no longer causes crashes.`
- Se corrigió el comportamiento incorrecto cuando input\_format\_skip\_unknown\_fields = 1 se establece y hay números negativos.
- Se corrigió un bucle infinito en el `dictGetHierarchy()` función si hay algunos datos no válidos en el diccionario.
- Fijo `Syntax error: unexpected (...)` errores al ejecutar consultas distribuidas con subconsultas en una cláusula IN o JOIN y tablas Merge.
- Se corrigió una interpretación incorrecta de una consulta SELECT de tablas de diccionario.
- Se corrigió el “Cannot mremap” error al usar matrices en las cláusulas IN y JOIN con más de 2 mil millones de elementos.
- Se corrigió la conmutación por error para los diccionarios con MySQL como fuente.
#### Flujo de trabajo mejorado para desarrollar y ensamblar ClickHouse: {#improved-workflow-for-developing-and-assembling-clickhouse-1}
- Las construcciones se pueden ensamblar en Arcadia.
- Puedes usar gcc 7 para compilar ClickHouse.
- Las compilaciones paralelas que usan ccache + distcc son más rápidas ahora.
### Somos una empresa especializada en el desarrollo de soluciones tecnológicas {#clickhouse-release-1-1-54245-2017-07-04}
#### Novedad: {#new-features-5}
- DDL distribuido (por ejemplo, `CREATE TABLE ON CLUSTER`)
- La consulta replicada `ALTER TABLE CLEAR COLUMN IN PARTITION.`
- El motor para las tablas del diccionario (acceso a los datos del diccionario en forma de tabla).
- Motor de base de datos de diccionario (este tipo de base de datos tiene automáticamente tablas de diccionario disponibles para todos los diccionarios externos conectados).
- Puede comprobar si hay actualizaciones en el diccionario enviando una solicitud al origen.
- Nombres de columna cualificados
- Citando identificadores usando comillas dobles.
- Sesiones en la interfaz HTTP.
- La consulta OPTIMIZE para una tabla replicada puede ejecutarse no solo en el líder.
#### Cambios incompatibles hacia atrás: {#backward-incompatible-changes-2}
- Eliminado SET GLOBAL.
#### Cambios menores: {#minor-changes}
- Ahora, después de activar una alerta, el registro imprime el seguimiento completo de la pila.
- Se relajó la verificación del número de partes de datos dañadas / adicionales al inicio (hubo demasiados falsos positivos).
#### Corrección de errores: {#bug-fixes-5}
- Se corrigió una mala conexión “sticking” cuando se inserta en una tabla distribuida.
- GLOBAL IN ahora funciona para una consulta de una tabla de combinación que mira a una tabla distribuida.
- Se detectó el número incorrecto de núcleos en una máquina virtual de Google Compute Engine. Esto ha sido solucionado.
- Cambios en el funcionamiento de una fuente ejecutable de diccionarios externos en caché.
- Se corrigió la comparación de cadenas que contenían caracteres nulos.
- Se corrigió la comparación de los campos de clave primaria Float32 con constantes.
- Anteriormente, una estimación incorrecta del tamaño de un campo podía conducir a asignaciones demasiado grandes.
- Se corrigió un bloqueo al consultar una columna Nullable agregada a una tabla usando ALTER.
- Se corrigió un bloqueo al ordenar por una columna Nullable, si el número de filas es menor que LIMIT.
- Se corrigió una subconsulta ORDER BY que consistía solo en valores constantes.
- Anteriormente, una tabla replicada podía permanecer en el estado no válido después de un error DROP TABLE.
- Los alias para subconsultas escalares con resultados vacíos ya no se pierden.
- Ahora una consulta que usó compilación no falla con un error si el archivo .so se daña.

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2017.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2018.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2019.md

View File

@ -1,9 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_folder_title: Changelog
toc_priority: 74
toc_title: '2020'
---
{% include "content/changelog.md" %}

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/index.md

View File

@ -73,7 +73,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
2014-03-22 1031592
2014-03-23 1046491
0000-00-00 8873898
1970-01-01 8873898
2014-03-17 1031592
2014-03-23 1406958
@ -709,7 +709,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
Totals:
┌──EventDate─┬───────c─┐
0000-00-00 │ 8873898 │
1970-01-01 │ 8873898 │
└────────────┴─────────┘
Extremes:

View File

@ -794,9 +794,9 @@ inserts_in_queue: 0
merges_in_queue: 1
part_mutations_in_queue: 0
queue_oldest_time: 2020-02-20 08:34:30
inserts_oldest_time: 0000-00-00 00:00:00
inserts_oldest_time: 1970-01-01 00:00:00
merges_oldest_time: 2020-02-20 08:34:30
part_mutations_oldest_time: 0000-00-00 00:00:00
part_mutations_oldest_time: 1970-01-01 00:00:00
oldest_part_to_get:
oldest_part_to_merge_to: 20200220_20284_20840_7
oldest_part_to_mutate_to:

View File

@ -8,7 +8,7 @@ toc_title: "\u062A\u0627\u0631\u06CC\u062E"
# تاریخ {#date}
قرار ذخیره شده در دو بایت به عنوان تعداد روز از 1970-01-01 (بدون علامت). اجازه می دهد تا ذخیره سازی مقادیر از درست بعد از شروع عصر یونیکس به حد بالایی تعریف شده توسط ثابت در مرحله تدوین (در حال حاضر, این است تا سال 2106, اما نهایی سال به طور کامل پشتیبانی شده است 2105).
حداقل مقدار خروجی به عنوان 0000-00-00.
حداقل مقدار خروجی به عنوان 1970-01-01.
ارزش تاریخ بدون منطقه زمانی ذخیره می شود.

View File

@ -78,7 +78,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...
شرح ستون می تواند یک عبارت برای یک مقدار پیش فرض مشخص, در یکی از روش های زیر:`DEFAULT expr`, `MATERIALIZED expr`, `ALIAS expr`.
مثال: `URLDomain String DEFAULT domain(URL)`.
اگر یک عبارت برای مقدار پیش فرض تعریف نشده است, مقادیر پیش فرض خواهد شد به صفر برای اعداد تنظیم, رشته های خالی برای رشته, طعمه خالی برای ارریس, و `0000-00-00` برای تاریخ و یا `0000-00-00 00:00:00` برای تاریخ با زمان. نقاط صفر پشتیبانی نمی شوند.
اگر یک عبارت برای مقدار پیش فرض تعریف نشده است, مقادیر پیش فرض خواهد شد به صفر برای اعداد تنظیم, رشته های خالی برای رشته, طعمه خالی برای ارریس, و `1970-01-01` برای تاریخ و یا `1970-01-01 00:00:00` برای تاریخ با زمان. نقاط صفر پشتیبانی نمی شوند.
اگر عبارت پیش فرض تعریف شده است, نوع ستون اختیاری است. در صورتی که یک نوع به صراحت تعریف شده وجود ندارد, نوع بیان پیش فرض استفاده شده است. مثال: `EventDate DEFAULT toDate(EventTime)` the Date نوع خواهد شد برای استفاده EventDate ستون.

View File

@ -1,268 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_priority: 79
toc_title: '2017'
---
### ClickHouse انتشار 1.1.54327, 2017-12-21 {#clickhouse-release-1-1-54327-2017-12-21}
این نسخه شامل رفع اشکال برای نسخه قبلی 1.1.54318:
- اشکال ثابت با شرایط مسابقه ممکن است در تکرار است که می تواند به از دست دادن داده ها منجر شود. این مسئله تاثیر می گذارد نسخه 1.1.54310 و 1.1.54318. اگر شما استفاده از یکی از این نسخه ها با جداول تکرار, به روز رسانی است که به شدت توصیه می شود. این موضوع نشان می دهد در سیاهههای مربوط در پیام های هشدار دهنده مانند `Part ... from own log doesn't exist.` موضوع مربوط است حتی اگر شما این پیام ها در سیاهههای مربوط را نمی بینم.
### ClickHouse انتشار 1.1.54318, 2017-11-30 {#clickhouse-release-1-1-54318-2017-11-30}
این نسخه شامل رفع اشکال برای نسخه های قبلی 1.1.54310:
- حذف ردیف نادرست ثابت در هنگام ادغام در موتور جمعبندی
- رفع نشت حافظه در موتورهای ادغام سه گانه
- تخریب عملکرد ثابت با درج مکرر در موتورهای ادغام
- ثابت است که شماره بود که باعث صف تکرار برای جلوگیری از در حال اجرا
- چرخش ثابت و بایگانی سیاهههای مربوط به سرور
### ClickHouse انتشار 1.1.54310, 2017-11-01 {#clickhouse-release-1-1-54310-2017-11-01}
#### ویژگی های جدید: {#new-features}
- کلید پارتیشن بندی سفارشی برای خانواده ادغام موتورهای جدول.
- [کافکا](https://clickhouse.tech/docs/en/operations/table_engines/kafka/) موتور جدول.
- اضافه شدن پشتیبانی برای بارگذاری [مانتو](https://catboost.yandex/) مدل ها و استفاده از داده های ذخیره شده در کلیک.
- اضافه شدن پشتیبانی برای مناطق زمانی با شیپور خاموشی غیر عدد صحیح از مجموعه مقالات.
- اضافه شدن پشتیبانی برای عملیات ریاضی با فواصل زمانی.
- طیف وسیعی از ارزش ها برای انواع تاریخ و تاریخ ساعت به سال گسترش 2105.
- اضافه شدن `CREATE MATERIALIZED VIEW x TO y` پرس و جو (مشخص یک جدول موجود برای ذخیره سازی داده ها از یک نمایش محقق).
- اضافه شدن `ATTACH TABLE` پرس و جو بدون استدلال.
- پردازش منطق به صورت تو در تو ستون با نام پایان در نقشه در یک SummingMergeTree جدول استخراج شد به sumMap مجموع عملکرد. شما هم اکنون می توانید این ستون ها به صراحت مشخص کنید.
- حداکثر اندازه فرهنگ لغت ایپ تری به ورودی های 128 متری افزایش می یابد.
- اضافه شدن تابع نوع گیرنده.
- اضافه شده تابع جمع مجموع ورود.
- اضافه شدن پشتیبانی از فرمت ورودی ورودی سروان پروتو.
- شما هم اکنون می توانید سطح فشرده سازی سفارشی در هنگام استفاده از الگوریتم زد.
#### تغییرات ناسازگار به عقب: {#backward-incompatible-changes}
- ایجاد جداول موقت با موتور غیر از حافظه مجاز نیست.
- ایجاد صریح جداول با مشاهده و یا موتور نمای مادی مجاز نیست.
- در طول ایجاد جدول, یک بررسی جدید تایید می کند که عبارت کلیدی نمونه برداری در کلید اصلی شامل.
#### رفع اشکال: {#bug-fixes}
- قطع ثابت زمانی که همزمان به یک جدول توزیع قرار دادن.
- ثابت غیر اتمی اضافه کردن و از بین بردن قطعات در جداول تکرار.
- داده های وارد شده به یک دیدگاه محقق شده در معرض تقسیم غیر ضروری نیست.
- اجرای یک پرس و جو به یک جدول توزیع که ماکت محلی است عقب مانده و کپی از راه دور در دسترس نیست در یک خطا منجر نمی شود.
- کاربران به مجوزهای دسترسی نیاز ندارند `default` پایگاه داده برای ایجاد جداول موقت دیگر.
- ثابت توفنده در هنگام تعیین نوع مجموعه بدون استدلال.
- قطع ثابت زمانی که حجم دیسک حاوی سیاهههای مربوط به سرور کامل است.
- سرریز در تابع تورلتیواکنام برای هفته اول عصر یونیکس ثابت شده است.
#### بهبود ساخت: {#build-improvements}
- چندین کتابخانه شخص ثالث (به ویژه کم) به روز شد و تبدیل به دستی دستگاه گوارش.
### ClickHouse انتشار 1.1.54304, 2017-10-19 {#clickhouse-release-1-1-54304-2017-10-19}
#### ویژگی های جدید: {#new-features-1}
- پردازشگر پشتیبانی شده: `tcp_ssl_port` داخل `config.xml` ).
#### رفع اشکال: {#bug-fixes-1}
- `ALTER` برای جداول تکرار در حال حاضر تلاش می کند تا شروع به در حال اجرا در اسرع وقت.
- ثابت توفنده در هنگام خواندن داده ها با تنظیم `preferred_block_size_bytes=0.`
- سقوط ثابت از `clickhouse-client` هنگام فشار دادن `Page Down`
- تفسیر صحیح از برخی نمایش داده شد پیچیده با `GLOBAL IN` و `UNION ALL`
- `FREEZE PARTITION` همیشه از نظر عام کار می کند در حال حاضر.
- درخواست پست خالی در حال حاضر پاسخ با کد بازگشت 411.
- خطاهای تفسیر ثابت برای عبارات مانند `CAST(1 AS Nullable(UInt8)).`
- ثابت خطا در هنگام خواندن `Array(Nullable(String))` ستونها از `MergeTree` میز
- ثابت توفنده زمانی که نمایش داده شد تجزیه مانند `SELECT dummy AS dummy, dummy AS b`
- کاربران به درستی با نامعتبر به روز شد `users.xml`
- دست زدن درست زمانی که یک فرهنگ لغت اجرایی یک کد پاسخ غیر صفر می گرداند.
### ClickHouse انتشار 1.1.54292, 2017-09-20 {#clickhouse-release-1-1-54292-2017-09-20}
#### ویژگی های جدید: {#new-features-2}
- اضافه شدن `pointInPolygon` تابع برای کار با مختصات در یک هواپیما مختصات.
- اضافه شدن `sumMap` تابع جمع برای محاسبه مجموع ارریس, شبیه به `SummingMergeTree`.
- اضافه شدن `trunc` تابع. بهبود عملکرد توابع گرد کردن (`round`, `floor`, `ceil`, `roundToExp2`) و اصلاح منطق چگونه کار می کنند. منطق را تغییر داد `roundToExp2` تابع برای کسر و اعداد منفی.
- این ClickHouse فایل اجرایی است که در حال حاضر کمتر وابسته به libc نسخه. همان فایل اجرایی کلیک می تواند بر روی طیف گسترده ای از سیستم های لینوکس اجرا شود. هنوز وابستگی وجود دارد که با استفاده از نمایش داده شد وارد (با تنظیم `compile = 1` , است که به طور پیش فرض استفاده نمی شود).
- کاهش زمان مورد نیاز برای تدوین پویا از نمایش داده شد.
#### رفع اشکال: {#bug-fixes-2}
- ثابت خطا که گاهی اوقات تولید `part ... intersects previous part` پیام ها و قوام ماکت ضعیف.
- رفع خطا که باعث سرور به قفل کردن اگر باغ وحش در طول خاموش کردن در دسترس نیست.
- حذف ورود به سیستم بیش از حد در هنگام بازگرداندن کپی.
- ثابت خطا در اتحادیه تمام اجرای.
- ثابت خطا در تابع الحاق که در صورتی که ستون اول در یک بلوک رخ داده است نوع مجموعه ای.
- پیشرفت در حال حاضر به درستی در سیستم نمایش داده می شود.ادغام جدول.
### ClickHouse انتشار 1.1.54289, 2017-09-13 {#clickhouse-release-1-1-54289-2017-09-13}
#### ویژگی های جدید: {#new-features-3}
- `SYSTEM` نمایش داده شد برای مدیریت سرور: `SYSTEM RELOAD DICTIONARY`, `SYSTEM RELOAD DICTIONARIES`, `SYSTEM DROP DNS CACHE`, `SYSTEM SHUTDOWN`, `SYSTEM KILL`.
- اضافه شدن توابع برای کار با ارریس: `concat`, `arraySlice`, `arrayPushBack`, `arrayPushFront`, `arrayPopBack`, `arrayPopFront`.
- اضافه شده `root` و `identity` پارامترهای پیکربندی باغ وحش. این اجازه می دهد تا شما را به منزوی کردن کاربران فردی در خوشه باغ وحش است.
- اضافه شده توابع مجموع `groupBitAnd`, `groupBitOr` و `groupBitXor` (برای سازگاری, همچنین تحت نام در دسترس هستند `BIT_AND`, `BIT_OR` و `BIT_XOR`).
- لغت نامه های خارجی را می توان از خروجی زیر با مشخص کردن یک سوکت در سیستم فایل لود می شود.
- واژهنامهها خارجی را می توان از خروجی زیر بر اس اس ال لود می شود (`ssl_cert`, `ssl_key`, `ssl_ca` پارامترهای).
- اضافه شدن `max_network_bandwidth_for_user` تنظیم برای محدود کردن استفاده از پهنای باند کلی برای نمایش داده شد در هر کاربر.
- پشتیبانی از `DROP TABLE` برای جداول موقت.
- پشتیبانی از خواندن `DateTime` مقادیر در قالب برچسب زمان یونیکس از `CSV` و `JSONEachRow` فرمتها.
- تاخیر کپی در نمایش داده شد توزیع در حال حاضر به طور پیش فرض حذف شدند (حد پیش فرض است 5 دقیقه).
- قفل فیفو در طول تغییر استفاده می شود: پرس و جو را تغییر دهید به طور نامحدود برای نمایش داده شد به طور مداوم در حال اجرا مسدود شده است.
- گزینه ای برای تنظیم `umask` در فایل پیکربندی.
- بهبود عملکرد برای نمایش داده شد با `DISTINCT` .
#### رفع اشکال: {#bug-fixes-3}
- روند برای حذف گره های قدیمی در باغ وحش بهبود یافته است. قبلا, گره های قدیمی گاهی اوقات نمی حذف اگر درج بسیار مکرر وجود دارد, که باعث سرور به کند به تعطیل, در میان چیزهای دیگر.
- تصادفی ثابت در هنگام انتخاب میزبان برای اتصال به باغ وحش.
- رفع محرومیت از عقب انداختن کپی در نمایش داده شد توزیع اگر ماکت جایل هاست است.
- خطایی را که یک بخش داده در یک `ReplicatedMergeTree` جدول را می توان پس از در حال اجرا شکسته `ALTER MODIFY` بر روی یک عنصر در یک `Nested` ساختار.
- رفع خطا که می تواند پرس و جو را انتخاب کنید به باعث “hang”.
- بهبود نمایش داده شد توزیع شده است.
- پرس و جو را ثابت کرد `CREATE TABLE ... AS <materialized view>`.
- حل و فصل بن بست در `ALTER ... CLEAR COLUMN IN PARTITION` پرسوجو برای `Buffer` میز
- مقدار پیشفرض نامعتبر را ثابت کرد `Enum` بازدید کنندگان (0 به جای حداقل) در هنگام استفاده از `JSONEachRow` و `TSKV` فرمتها.
- حل و فصل ظاهر فرایندهای زامبی در هنگام استفاده از یک فرهنگ لغت با `executable` منبع.
- ثابت segfault برای سر پرس و جو.
#### گردش کار بهبود یافته برای توسعه و مونتاژ تاتر: {#improved-workflow-for-developing-and-assembling-clickhouse}
- شما می توانید استفاده کنید `pbuilder` برای ساخت فاحشه خانه.
- شما می توانید استفاده کنید `libc++` به جای `libstdc++` برای ایجاد بر روی لینوکس.
- دستورالعمل های اضافه شده برای استفاده از ابزار تجزیه و تحلیل کد استاتیک: `Coverage`, `clang-tidy`, `cppcheck`.
#### لطفا توجه داشته باشید در هنگام به روز رسانی: {#please-note-when-upgrading}
- در حال حاضر یک مقدار پیش فرض بالاتر برای تنظیم ادغام وجود دارد `max_bytes_to_merge_at_max_space_in_pool` (حداکثر اندازه کل قطعات داده به ادغام در بایت): از 100 دستگاه گوارش به 150 دستگاه گوارش افزایش یافته است. این ممکن است در ادغام بزرگ در حال اجرا پس از ارتقا سرور منجر, که می تواند افزایش بار بر روی زیر سیستم دیسک باعث. اگر فضای رایگان موجود بر روی سرور کمتر از دو برابر مقدار کل ادغام که در حال اجرا هستند, این باعث می شود همه ادغام دیگر برای جلوگیری از در حال اجرا, از جمله ادغام قطعات داده های کوچک. در نتیجه, قرار دادن نمایش داده شد با پیام شکست مواجه خواهد شد “Merges are processing significantly slower than inserts.” استفاده از `SELECT * FROM system.merges` پرس و جو برای نظارت بر وضعیت. شما همچنین می توانید بررسی کنید `DiskSpaceReservedForMerge` متریک در `system.metrics` جدول, و یا در گرافیت. شما لازم نیست برای انجام هر کاری برای رفع این مشکل خود را هنگامی که ادغام بزرگ پایان حل و فصل خواهد شد. اگر شما این غیر قابل قبول, شما می توانید مقدار قبلی برای بازگرداندن `max_bytes_to_merge_at_max_space_in_pool` تنظیمات. برای انجام این کار به `<merge_tree>` بخش در پیکربندی.تنظیم ``` <merge_tree>``<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool> ``` و راه اندازی مجدد سرور.
### ClickHouse انتشار 1.1.54284, 2017-08-29 {#clickhouse-release-1-1-54284-2017-08-29}
- این یک نسخه رفع اشکال برای نسخه 1.1.54282 قبلی است. این رفع نشت در دایرکتوری قطعات در باغ وحش.
### ClickHouse انتشار 1.1.54282, 2017-08-23 {#clickhouse-release-1-1-54282-2017-08-23}
این نسخه شامل رفع اشکال برای نسخه قبلی 1.1.54276:
- ثابت `DB::Exception: Assertion violation: !_path.empty()` هنگام قرار دادن به یک جدول توزیع شده.
- تجزیه ثابت در هنگام قرار دادن در فرمت مربوط به حوزه علمیه اگر داده های ورودی با شروع می شود.
- Errors during runtime compilation of certain aggregate functions (e.g. `groupArray()`).
### ClickHouse انتشار 1.1.54276, 2017-08-16 {#clickhouse-release-1-1-54276-2017-08-16}
#### ویژگی های جدید: {#new-features-4}
- اضافه شده اختیاری با بخش برای پرس و جو را انتخاب کنید. به عنوان مثال پرس و جو: `WITH 1+1 AS a SELECT a, a*a`
- درج را می توان همزمان در یک جدول توزیع انجام: خوب است تنها پس از بازگشت تمام داده ها بر روی تمام خرده ریز را نجات داد. این است که با تنظیم فعال می شود
- اضافه شده نوع داده شناسه برای کار با شناسه 16 بایت.
- نام مستعار اضافه شده از کاراکتر, شناور و انواع دیگر برای سازگاری با تابلو فرش.
- اضافه شده توابع toYYYYMM, toYYYYMMDD و toYYYYMMDDhhmmss برای تبدیل زمان به اعداد.
- شما می توانید از نشانی های اینترنتی (همراه با نام میزبان) برای شناسایی سرورها برای نمایش داده شد های هوشمند خوشه ای استفاده کنید.
- اضافه شدن پشتیبانی برای استدلال غیر ثابت و شیپور خاموشی منفی در تابع `substring(str, pos, len).`
- اضافه شدن پارامتر حداکثر `groupArray(max_size)(column)` عملکرد کلی و عملکرد خود را بهینه سازی کرد.
#### تغییرات اصلی: {#main-changes}
- بهبود امنیت: تمام فایل های سرور با مجوز 0640 ایجاد می شوند (می توانند از طریق تغییر کنند `<umask>` پارامتر پیکربندی).
- پیام های خطا بهبود یافته برای نمایش داده شد با نحو نامعتبر است.
- به طور قابل توجهی کاهش مصرف حافظه و بهبود عملکرد در هنگام ادغام بخش های زیادی از داده های ادغام.
- به طور قابل توجهی افزایش عملکرد ادغام داده ها برای موتور جایگزین.
- عملکرد بهبود یافته برای درج ناهمزمان از یک جدول توزیع شده با ترکیب درج منبع های متعدد. برای فعال کردن این قابلیت از تنظیمات پخش شده \_ تنظیم کننده \_منیتور\_برش\_برنده=1 استفاده کنید.
#### تغییرات ناسازگار به عقب: {#backward-incompatible-changes-1}
- تغییر فرمت باینری از کشورهای جمع `groupArray(array_column)` توابع برای ارریس.
#### لیست کامل تغییرات: {#complete-list-of-changes}
- اضافه شدن `output_format_json_quote_denormals` تنظیمات, را قادر می سازد خروجی نان و ارزشهای جبهه ملی در فرمت جانسون.
- تخصیص جریان بهینه شده در هنگام خواندن از یک جدول توزیع شده است.
- تنظیمات را می توان در حالت فقط خواندنی پیکربندی در صورتی که ارزش تغییر نمی کند.
- اضافه شده توانایی برای بازیابی غیر صحیح گرانول از MergeTree موتور به منظور دیدار با محدودیت در اندازه بلوک مشخص شده در preferred\_block\_size\_bytes تنظیم. هدف این است که برای کاهش مصرف رم و افزایش محل کش در هنگام پردازش نمایش داده شد از جداول با ستون های بزرگ.
- استفاده موثر از شاخص هایی که حاوی عبارات هستند `toStartOfHour(x)` برای شرایطی مانند `toStartOfHour(x) op сonstexpr.`
- اضافه شدن تنظیمات جدید برای MergeTree موتورهای (به merge\_tree بخش در config.شمع):
- replicated\_deduplication\_window\_seconds مجموعه تعدادی از ثانیه های مجاز برای deduplicating درج در تکرار جداول.
- پاک کردن \_خروج \_پیروید تنظیم میکند که چگونه اغلب شروع به پاکسازی برای حذف اطلاعات منسوخ شده میکند.
- از تبدیل شدن به رهبر (و اختصاص ادغام) می توانید یک کپی از تبدیل شدن به رهبر جلوگیری کنید.
- پاکسازی شتاب به حذف اطلاعات منسوخ شده از باغ وحش.
- بهبود و رفع چندگانه برای نمایش داده شد دسته ای دی ال. از علاقه خاص است که تنظیم جدید distributed\_ddl\_task\_timeout که محدودیت زمان انتظار برای پاسخ از سرور در خوشه. اگر یک درخواست دی ال شده است در تمام میزبان انجام نشده است, پاسخ حاوی یک خطا ایست و یک درخواست خواهد شد در حالت کالاهای کابل اجرا.
- صفحه نمایش بهبود یافته از ردیابی پشته در سیاهههای مربوط به سرور.
- اضافه شدن “none” ارزش روش فشرده سازی.
- شما می توانید بخش های مختلف \_تنفورد کامل در پیکربندی استفاده کنید..
- ممکن است که به اتصال به خروجی زیر را از طریق یک سوکت در سیستم فایل.
- سیستمجدول قطعات دارای یک ستون جدید با اطلاعات در مورد اندازه علامت, در بایت.
#### رفع اشکال: {#bug-fixes-4}
- جداول توزیع با استفاده از یک جدول ادغام در حال حاضر به درستی برای پرس و جو را انتخاب کنید با یک شرط در کار `_table` رشته.
- در هنگام چک کردن قطعات داده ها یک وضعیت مسابقه نادر در تکرار می شود.
- انجماد ممکن ثابت در “leader election” هنگام شروع یک سرور.
- این max\_replica\_delay\_for\_distributed\_queries تنظیم نادیده گرفته شد که با استفاده از یک محلی ماکت از منبع داده. این ثابت شده است.
- رفتار نادرست ثابت `ALTER TABLE CLEAR COLUMN IN PARTITION` هنگامی که تلاش برای تمیز کردن یک ستون غیر موجود.
- ثابت یک استثنا در تابع چندف در هنگام استفاده از مجموعه های خالی و یا رشته.
- تخصیص حافظه بیش از حد ثابت هنگام فراخوانی فرمت بومی.
- ثابت نادرست خودکار به روز رسانی از لغت نامه سه.
- ثابت یک استثنا زمانی که در حال اجرا نمایش داده شد با یک گروه بند از یک جدول ادغام در هنگام استفاده از نمونه.
- تصادف گروهی با استفاده از توزیع شده \_اگزا\_موری\_افلیتی کمبود=1 را ثابت کرد.
- حالا شما می توانید پایگاه داده را مشخص کنید.جدول در سمت راست در و پیوستن.
- بیش از حد بسیاری از موضوعات برای تجمع موازی مورد استفاده قرار گرفت. این ثابت شده است.
- ثابت چگونه “if” تابع با استدلال رشته کار می کند.
- انتخاب به اشتباه از یک جدول توزیع برای خرده ریز با وزن کار 0. این ثابت شده است.
- در حال اجرا `CREATE VIEW IF EXISTS no longer causes crashes.`
- رفتار نادرست ثابت در هنگام وارد کردن \_فصل\_سک\_کنون\_فیلدهای ورودی = 1 تنظیم شده است و اعداد منفی وجود دارد.
- ثابت یک حلقه بی نهایت در `dictGetHierarchy()` تابع در صورتی که برخی از داده های نامعتبر در فرهنگ لغت وجود دارد.
- ثابت `Syntax error: unexpected (...)` خطاها هنگامی که در حال اجرا نمایش داده شد توزیع شده با کارخانه های فرعی در یک در و یا پیوستن بند و ادغام جداول.
- ثابت تفسیر نادرست از پرس و جو را انتخاب کنید از جداول فرهنگ لغت.
- ثابت “Cannot mremap” خطا در هنگام استفاده از بند در و پیوستن به بند با بیش از 2 میلیارد عنصر.
- عدم موفقیت برای لغت نامه با خروجی زیر به عنوان منبع ثابت شده است.
#### گردش کار بهبود یافته برای توسعه و مونتاژ تاتر: {#improved-workflow-for-developing-and-assembling-clickhouse-1}
- ساخت را می توان در ارکادیا مونتاژ.
- شما می توانید شورای همکاری خلیج فارس 7 به کامپایل خانه عروسکی استفاده کنید.
- موازی ایجاد شده با استفاده از ccache+distcc سریع تر در حال حاضر.
### ClickHouse انتشار 1.1.54245, 2017-07-04 {#clickhouse-release-1-1-54245-2017-07-04}
#### ویژگی های جدید: {#new-features-5}
- توزیع دی ال (به عنوان مثال, `CREATE TABLE ON CLUSTER`)
- پرسوجوی تکرار شده `ALTER TABLE CLEAR COLUMN IN PARTITION.`
- موتور برای جداول فرهنگ لغت (دسترسی به داده های فرهنگ لغت در قالب یک جدول).
- موتور پایگاه داده فرهنگ لغت (این نوع از پایگاه داده به طور خودکار دارای جداول فرهنگ لغت در دسترس برای تمام لغت نامه های خارجی متصل).
- شما می توانید برای به روز رسانی به فرهنگ لغت با ارسال یک درخواست به منبع را بررسی کنید.
- نام ستون واجد شرایط
- به نقل از شناسه با استفاده از علامت نقل قول دو.
- در حال بارگذاری
- پرس و جو بهینه سازی برای یک جدول تکرار می تواند نه تنها در رهبر را اجرا کنید.
#### تغییرات ناسازگار به عقب: {#backward-incompatible-changes-2}
- حذف مجموعه جهانی است.
#### تغییرات جزیی: {#minor-changes}
- در حال حاضر پس از یک هشدار باعث شده است, ورود به سیستم چاپ ردیابی پشته کامل.
- تایید تعداد قطعات صدمه دیده/اضافی داده در هنگام راه اندازی (بیش از حد بسیاری مثبت کاذب وجود دارد).
#### رفع اشکال: {#bug-fixes-5}
- ثابت اتصال بد “sticking” هنگام قرار دادن به یک جدول توزیع شده.
- جهانی در حال حاضر برای پرس و جو از یک جدول ادغام که به نظر می رسد در یک جدول توزیع کار می کند.
- تعداد نادرست هسته بر روی یک ماشین مجازی موتور محاسبه گوگل تشخیص داده شد. این ثابت شده است.
- تغییرات در چگونه یک منبع اجرایی لغت نامه های خارجی ذخیره شده کار می کند.
- ثابت مقایسه رشته های حاوی شخصیت های پوچ.
- مقایسه زمینه های کلیدی اصلی شناور32 با ثابت ها را ثابت کرد.
- قبلا تخمین نادرست از اندازه یک میدان می تواند منجر به بیش از حد بزرگ تخصیص.
- ثابت تصادف در هنگام پرس و جو یک ستون باطل به یک جدول با استفاده از تغییر اضافه شده است.
- ثابت تصادف در هنگام مرتب سازی توسط یک ستون قابل ابطال, اگر تعداد ردیف کمتر از حد است.
- ثابت سفارش های خرده فروشی متشکل از ارزش تنها ثابت است.
- قبلا, یک جدول تکرار می تواند در حالت نامعتبر پس از یک جدول افت شکست خورده باقی می ماند.
- نام مستعار برای زیرکار اسکالر با نتایج خالی دیگر از دست داده.
- در حال حاضر پرس و جو که تلفیقی استفاده می شود با یک خطا شکست نیست در صورتی که .

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2017.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2018.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2019.md

View File

@ -1,9 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_folder_title: "\u062A\u063A\u06CC\u06CC\u0631\u0627\u062A"
toc_priority: 74
toc_title: '2020'
---
{% include "content/changelog.md" %}

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/index.md

View File

@ -72,7 +72,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
2014-03-22 1031592
2014-03-23 1046491
0000-00-00 8873898
1970-01-01 8873898
2014-03-17 1031592
2014-03-23 1406958
@ -708,7 +708,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
Totals:
┌──EventDate─┬───────c─┐
0000-00-00 │ 8873898 │
1970-01-01 │ 8873898 │
└────────────┴─────────┘
Extremes:

View File

@ -794,9 +794,9 @@ inserts_in_queue: 0
merges_in_queue: 1
part_mutations_in_queue: 0
queue_oldest_time: 2020-02-20 08:34:30
inserts_oldest_time: 0000-00-00 00:00:00
inserts_oldest_time: 1970-01-01 00:00:00
merges_oldest_time: 2020-02-20 08:34:30
part_mutations_oldest_time: 0000-00-00 00:00:00
part_mutations_oldest_time: 1970-01-01 00:00:00
oldest_part_to_get:
oldest_part_to_merge_to: 20200220_20284_20840_7
oldest_part_to_mutate_to:

View File

@ -8,7 +8,6 @@ toc_title: Date
# Date {#date}
Date. Stocké en deux octets comme le nombre de jours depuis 1970-01-01 (non signé). Permet de stocker des valeurs juste après le début de L'époque Unix jusqu'au seuil supérieur défini par une constante au stade de la compilation (actuellement, c'est jusqu'à l'année 2106, mais l'année finale entièrement prise en charge est 2105).
La valeur minimale est sortie comme 0000-00-00.
La valeur de date est stockée sans le fuseau horaire.

View File

@ -78,7 +78,7 @@ Il peut y avoir d'autres clauses après le `ENGINE` la clause dans la requête.
La description de colonne peut spécifier une expression pour une valeur par défaut, de l'une des manières suivantes:`DEFAULT expr`, `MATERIALIZED expr`, `ALIAS expr`.
Exemple: `URLDomain String DEFAULT domain(URL)`.
Si une expression pour la valeur par défaut n'est pas définie, les valeurs par défaut seront définies sur zéros pour les nombres, chaînes vides pour les chaînes, tableaux vides pour les tableaux et `0000-00-00` pour les dates ou `0000-00-00 00:00:00` pour les dates avec le temps. Les valeurs NULL ne sont pas prises en charge.
Si une expression pour la valeur par défaut n'est pas définie, les valeurs par défaut seront définies sur zéros pour les nombres, chaînes vides pour les chaînes, tableaux vides pour les tableaux et `1970-01-01` pour les dates ou zero unix timestamp pour les dates avec le temps. Les valeurs NULL ne sont pas prises en charge.
Si l'expression par défaut est définie, le type de colonne est facultatif. S'il n'y a pas de type explicitement défini, le type d'expression par défaut est utilisé. Exemple: `EventDate DEFAULT toDate(EventTime)` the Date type sera utilisé pour la EventDate colonne.

View File

@ -1,268 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_priority: 79
toc_title: '2017'
---
### Clickhouse Version 1.1.54327, 2017-12-21 {#clickhouse-release-1-1-54327-2017-12-21}
Cette version contient des corrections de bugs pour la version précédente 1.1.54318:
- Correction d'un bug avec condition de concurrence possible dans la réplication qui pourrait conduire à la perte de données. Ce problème affecte les versions 1.1.54310 et 1.1.54318. Si vous utilisez l'une de ces versions avec des tables répliquées, la mise à jour est fortement recommandée. Ce problème apparaît dans les journaux dans les messages d'avertissement comme `Part ... from own log doesn't exist.` Le problème est pertinent même si vous ne voyez pas ces messages dans les journaux.
### Clickhouse Version 1.1.54318, 2017-11-30 {#clickhouse-release-1-1-54318-2017-11-30}
Cette version contient des corrections de bugs pour la version précédente 1.1.54310:
- Correction de suppressions de ligne incorrectes lors des fusions dans le moteur SummingMergeTree
- Correction d'une fuite de mémoire dans les moteurs mergetree non compliqués
- Correction de la dégradation des performances avec des inserts fréquents dans les moteurs MergeTree
- Correction d'un problème qui causait la file d'attente de réplication pour arrêter l'exécution
- Rotation fixe et archivage des journaux du serveur
### Clickhouse Version 1.1.54310, 2017-11-01 {#clickhouse-release-1-1-54310-2017-11-01}
#### Nouveauté: {#new-features}
- Clé de partitionnement personnalisée pour la famille MergeTree des moteurs de table.
- [Kafka](https://clickhouse.tech/docs/en/operations/table_engines/kafka/) tableau moteur.
- Ajout du support pour le chargement [CatBoost](https://catboost.yandex/) modèles et les appliquer aux données stockées dans ClickHouse.
- Ajout du support pour les fuseaux horaires avec des décalages non entiers de UTC.
- Ajout du support pour les opérations arithmétiques avec des intervalles de temps.
- La plage de valeurs pour les types Date et DateTime est étendue à l'année 2105.
- Ajouté le `CREATE MATERIALIZED VIEW x TO y` requête (spécifie une table pour stocker les données d'une vue matérialisée).
- Ajouté le `ATTACH TABLE` requête sans arguments.
- La logique de traitement des colonnes imbriquées avec des noms se terminant par-Map dans une table SummingMergeTree a été extraite dans la fonction d'agrégat sumMap. Vous pouvez maintenant spécifier ces colonnes explicitement.
- La taille maximale du dictionnaire IP trie est augmentée à 128M entrées.
- Ajout de la fonction getSizeOfEnumType.
- Ajout de la fonction d'agrégat sumWithOverflow.
- Ajout du support pour le format D'entrée Cap'n Proto.
- Vous pouvez maintenant personnaliser le niveau de compression lors de l'utilisation de l'algorithme zstd.
#### Modifications Incompatibles En Arrière: {#backward-incompatible-changes}
- Création de tables temporaires avec un moteur autre que la Mémoire n'est pas autorisé.
- La création explicite de tables avec le moteur View ou MaterializedView n'est pas autorisée.
- Lors de la création de la table, une nouvelle vérification vérifie que l'expression de clé d'échantillonnage est incluse dans la clé primaire.
#### Corrections De Bugs: {#bug-fixes}
- Correction des accrochages lors de l'insertion synchrone dans une table distribuée.
- Ajout et retrait non atomiques fixes de pièces dans des tables répliquées.
- Les données insérées dans une vue matérialisée ne sont pas soumises à une déduplication inutile.
- L'exécution d'une requête vers une table distribuée pour laquelle le réplica local est en retard et les réplicas distants ne sont pas disponibles n'entraîne plus d'erreur.
- Les utilisateurs n'ont pas besoin d'autorisations d'accès au `default` base de données pour créer des tables temporaires plus.
- Correction d'un plantage lors de la spécification du type de tableau sans arguments.
- Correction des interruptions lorsque le volume du disque contenant les journaux du serveur est plein.
- Correction d'un débordement dans la fonction toRelativeWeekNum pour la première semaine de L'époque Unix.
#### Construire Des Améliorations: {#build-improvements}
- Plusieurs bibliothèques tierces (notamment Poco) ont été mises à jour et converties en sous-modules git.
### Clickhouse Version 1.1.54304, 2017-10-19 {#clickhouse-release-1-1-54304-2017-10-19}
#### Nouveauté: {#new-features-1}
- Prise en charge TLS dans le protocole natif (pour activer, définir `tcp_ssl_port` dans `config.xml` ).
#### Corrections De Bugs: {#bug-fixes-1}
- `ALTER` pour les tables répliquées essaie maintenant de commencer à s'exécuter dès que possible.
- Fixe plante lors de la lecture des données avec le paramètre `preferred_block_size_bytes=0.`
- Plantages fixes de `clickhouse-client` lorsque vous appuyez sur `Page Down`
- L'interprétation correcte de certaines requêtes complexes avec `GLOBAL IN` et `UNION ALL`
- `FREEZE PARTITION` fonctionne toujours atomiquement maintenant.
- Les requêtes POST vides renvoient maintenant une réponse avec le code 411.
- Correction d'erreurs d'interprétation pour des expressions comme `CAST(1 AS Nullable(UInt8)).`
- Correction d'une erreur lors de la lecture `Array(Nullable(String))` les colonnes de `MergeTree` table.
- Fixe s'écraser lors de l'analyse des requêtes comme `SELECT dummy AS dummy, dummy AS b`
- Les utilisateurs sont mis à jour correctement avec invalide `users.xml`
- Manipulation correcte lorsqu'un dictionnaire exécutable renvoie un code de réponse différent de zéro.
### Clickhouse Version 1.1.54292, 2017-09-20 {#clickhouse-release-1-1-54292-2017-09-20}
#### Nouveauté: {#new-features-2}
- Ajouté le `pointInPolygon` fonction pour travailler avec des coordonnées sur un plan de coordonnées.
- Ajouté le `sumMap` fonction d'agrégation pour calculer la somme des tableaux, similaire à `SummingMergeTree`.
- Ajouté le `trunc` fonction. Amélioration des performances des fonctions d'arrondi (`round`, `floor`, `ceil`, `roundToExp2`) et corrigé la logique de la façon dont ils fonctionnent. Changé la logique de la `roundToExp2` fonction pour les fractions et les nombres négatifs.
- Le fichier exécutable ClickHouse dépend maintenant moins de la version libc. Le même fichier exécutable ClickHouse peut fonctionner sur une grande variété de systèmes Linux. Il existe toujours une dépendance lors de l'utilisation de requêtes compilées (avec le paramètre `compile = 1` qui n'est pas utilisé par défaut).
- Réduit le temps nécessaire à la compilation dynamique des requêtes.
#### Corrections De Bugs: {#bug-fixes-2}
- Correction d'une erreur qui produisait parfois `part ... intersects previous part` messages et cohérence des répliques affaiblies.
- Correction d'une erreur qui a provoqué le verrouillage du serveur si ZooKeeper n'était pas disponible pendant l'arrêt.
- Suppression de la journalisation excessive lors de la restauration des répliques.
- Correction d'une erreur dans L'Union toute la mise en œuvre.
- Correction d'une erreur dans la fonction concat qui s'est produite si la première colonne d'un bloc a le type de tableau.
- La progression est maintenant affichée correctement dans le système.fusionne table.
### Clickhouse Version 1.1.54289, 2017-09-13 {#clickhouse-release-1-1-54289-2017-09-13}
#### Nouveauté: {#new-features-3}
- `SYSTEM` les requêtes pour l'administration du serveur: `SYSTEM RELOAD DICTIONARY`, `SYSTEM RELOAD DICTIONARIES`, `SYSTEM DROP DNS CACHE`, `SYSTEM SHUTDOWN`, `SYSTEM KILL`.
- Ajout de fonctions pour travailler avec des tableaux: `concat`, `arraySlice`, `arrayPushBack`, `arrayPushFront`, `arrayPopBack`, `arrayPopFront`.
- Ajouter `root` et `identity` paramètres pour la configuration de ZooKeeper. Cela vous permet d'isoler des utilisateurs individuels sur le même cluster ZooKeeper.
- Fonctions d'agrégation ajoutées `groupBitAnd`, `groupBitOr`, et `groupBitXor` (pour la compatibilité, ils sont également disponibles sous les noms de `BIT_AND`, `BIT_OR`, et `BIT_XOR`).
- Les dictionnaires externes peuvent être chargés à partir de MySQL en spécifiant un socket dans le système de fichiers.
- Les dictionnaires externes peuvent être chargés à partir de MySQL sur SSL (`ssl_cert`, `ssl_key`, `ssl_ca` paramètre).
- Ajouté le `max_network_bandwidth_for_user` paramètre pour limiter l'utilisation globale de la bande passante pour les requêtes par utilisateur.
- Soutien pour `DROP TABLE` pour les tables temporaires.
- Support pour la lecture `DateTime` valeurs au format d'horodatage Unix de `CSV` et `JSONEachRow` format.
- Les répliques en retard dans les requêtes distribuées sont maintenant exclues par défaut (le seuil par défaut est de 5 minutes).
- Le verrouillage FIFO est utilisé pendant ALTER: une requête ALTER n'est pas bloquée indéfiniment pour les requêtes en cours d'exécution en continu.
- Option à définir `umask` dans le fichier de configuration.
- Amélioration des performances pour les requêtes avec `DISTINCT` .
#### Corrections De Bugs: {#bug-fixes-3}
- Amélioration du processus de suppression des anciens nœuds dans ZooKeeper. Auparavant, les anciens nœuds n'étaient parfois pas supprimés s'il y avait des insertions très fréquentes, ce qui faisait que le serveur était lent à s'arrêter, entre autres choses.
- Correction de la randomisation lors du choix des hôtes pour la connexion à ZooKeeper.
- Correction de l'exclusion des répliques en retard dans les requêtes distribuées si la réplique est localhost.
- Correction d'une erreur où une partie des données dans un `ReplicatedMergeTree` table pourrait être cassé après l'exécution `ALTER MODIFY` sur un élément dans un `Nested` structure.
- Correction d'une erreur qui pourrait provoquer des requêtes SELECT “hang”.
- Améliorations apportées aux requêtes DDL distribuées.
- Correction de la requête `CREATE TABLE ... AS <materialized view>`.
- Résolu à l'impasse dans l' `ALTER ... CLEAR COLUMN IN PARTITION` requête pour `Buffer` table.
- Correction de la valeur par défaut invalide pour `Enum` s (0 au lieu du minimum) lors de l'utilisation du `JSONEachRow` et `TSKV` format.
- Résolu l'apparition de processus zombies lors de l'utilisation d'un dictionnaire avec un `executable` source.
- Correction de segfault pour la requête HEAD.
#### Workflow amélioré pour développer et assembler ClickHouse: {#improved-workflow-for-developing-and-assembling-clickhouse}
- Vous pouvez utiliser `pbuilder` pour construire ClickHouse.
- Vous pouvez utiliser `libc++` plutôt `libstdc++` pour construit sur Linux.
- Ajout d'instructions pour l'utilisation d'outils d'analyse de code statique: `Coverage`, `clang-tidy`, `cppcheck`.
#### Veuillez Noter Lors De La Mise À Niveau: {#please-note-when-upgrading}
- Il y a maintenant une valeur par défaut plus élevée pour le paramètre MergeTree `max_bytes_to_merge_at_max_space_in_pool` (la taille totale maximale des parties de données à fusionner, en octets): elle est passée de 100 GiB à 150 GiB. Cela peut entraîner de grandes fusions s'exécutant après la mise à niveau du serveur, ce qui pourrait entraîner une charge accrue sur le sous-système de disque. Si l'espace libre disponible sur le serveur est inférieur au double de la quantité totale des fusions en cours d'exécution, toutes les autres fusions s'arrêteront, y compris les fusions de petites parties de données. Par conséquent, les requêtes D'insertion échoueront avec le message “Merges are processing significantly slower than inserts.” L'utilisation de la `SELECT * FROM system.merges` requête pour surveiller la situation. Vous pouvez également vérifier le `DiskSpaceReservedForMerge` métrique dans l' `system.metrics` table, ou en Graphite. Vous n'avez rien à faire pour résoudre ce problème, car le problème se résoudra une fois les grandes fusions terminées. Si vous trouvez cela inacceptable, vous pouvez restaurer la valeur précédente pour le `max_bytes_to_merge_at_max_space_in_pool` paramètre. Pour ce faire, allez à l' `<merge_tree>` section dans config.xml, ensemble ``` <merge_tree>``<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool> ``` et redémarrer le serveur.
### Clickhouse Version 1.1.54284, 2017-08-29 {#clickhouse-release-1-1-54284-2017-08-29}
- C'est une version de correction de la précédente 1.1.54282 libération. Il corrige les fuites dans le répertoire des pièces dans ZooKeeper.
### Clickhouse Version 1.1.54282, 2017-08-23 {#clickhouse-release-1-1-54282-2017-08-23}
Cette version contient des corrections de bugs pour la version précédente 1.1.54276:
- Fixe `DB::Exception: Assertion violation: !_path.empty()` lors de l'insertion dans une table distribuée.
- Correction de l'analyse lors de l'insertion au format RowBinary si les données d'entrée commencent par';'.
- Errors during runtime compilation of certain aggregate functions (e.g. `groupArray()`).
### Clickhouse Version 1.1.54276, 2017-08-16 {#clickhouse-release-1-1-54276-2017-08-16}
#### Nouveauté: {#new-features-4}
- Ajout d'une section facultative avec pour une requête SELECT. Exemple de requête: `WITH 1+1 AS a SELECT a, a*a`
- INSERT peut être effectué de manière synchrone dans une table distribuée: OK n'est retourné qu'une fois toutes les données enregistrées sur tous les fragments. Ceci est activé par le paramètre insert\_distributed\_sync = 1.
- Ajout du type de données UUID pour travailler avec des identifiants de 16 octets.
- Ajout D'alias de CHAR, FLOAT et d'autres types pour la compatibilité avec Tableau.
- Ajout des fonctions toYYYYMM, toYYYYMMDD et toYYYYMMDDhhmmss pour convertir le temps en nombres.
- Vous pouvez utiliser les adresses IP (avec le nom d'hôte) pour identifier les serveurs pour les requêtes DDL en cluster.
- Ajout du support pour les arguments non constants et les décalages négatifs dans la fonction `substring(str, pos, len).`
- Ajout du paramètre max\_size pour `groupArray(max_size)(column)` fonction d'agrégation, et optimisé ses performances.
#### Les Principaux Changements: {#main-changes}
- Améliorations de la sécurité: tous les fichiers du serveur sont créés avec des autorisations 0640 (peuvent être modifiés via `<umask>` paramètre de configuration).
- Amélioration des messages d'erreur pour les requêtes avec une syntaxe invalide.
- Réduction significative de la consommation de mémoire et amélioration des performances lors de la fusion de grandes sections de données MergeTree.
- Augmentation significative des performances des fusions de données pour le Remplacementmergetree engine.
- Amélioration des performances pour les insertions asynchrones à partir d'une table distribuée en combinant plusieurs insertions sources. Pour activer cette fonctionnalité, utilisez le paramètre distributed\_directory\_monitor\_batch\_inserts=1.
#### Modifications Incompatibles En Arrière: {#backward-incompatible-changes-1}
- Modification du format binaire des états agrégés de `groupArray(array_column)` fonctions pour les tableaux.
#### Liste complète des modifications: {#complete-list-of-changes}
- Ajouté le `output_format_json_quote_denormals` paramètre, qui permet la sortie des valeurs NaN et inf au format JSON.
- Allocation de flux optimisée lors de la lecture à partir d'une table distribuée.
- Les paramètres peuvent être configurés en mode Lecture seule si la valeur ne change pas.
- Ajout de la possibilité de récupérer des granules non entiers du moteur MergeTree afin de respecter les restrictions sur la taille de bloc spécifiée dans le paramètre preferred\_block\_size\_bytes. Le but est de réduire la consommation de RAM et d'augmenter la localisation du cache lors du traitement des requêtes à partir de tables avec de grandes colonnes.
- Utilisation efficace des index qui contiennent des expressions comme `toStartOfHour(x)` pour des conditions comme `toStartOfHour(x) op сonstexpr.`
- Ajout de nouveaux paramètres pour les moteurs MergeTree (la section merge\_tree dans config.XML):
- replicated\_deduplication\_window\_seconds définit le nombre de secondes autorisé pour la déduplication des insertions dans les tables répliquées.
- cleanup\_delay\_period définit la fréquence de démarrage du nettoyage pour supprimer les données obsolètes.
- replicated\_can\_become\_leader peut empêcher une réplique de devenir le leader (et d'affecter des fusions).
- Nettoyage accéléré pour supprimer les données obsolètes de ZooKeeper.
- Plusieurs améliorations et corrections pour les requêtes ddl en cluster. Un intérêt particulier est le nouveau paramètre distributed\_ddl\_task\_timeout, qui limite le temps d'attente d'une réponse des serveurs du cluster. Si une requête ddl n'a pas été effectuée sur tous les hôtes, une réponse contiendra une erreur de délai d'attente et une requête sera exécutée en mode asynchrone.
- Amélioration de l'affichage des traces de pile dans les journaux du serveur.
- Ajouté le “none” valeur pour la méthode de compression.
- Vous pouvez utiliser plusieurs sections dictionaries\_config dans config.XML.
- Il est possible de se connecter à MySQL via un socket dans le système de fichiers.
- Système.table de pièces a une nouvelle colonne avec des informations sur la taille des marques, en octets.
#### Corrections De Bugs: {#bug-fixes-4}
- Les tables distribuées utilisant une table de fusion fonctionnent maintenant correctement pour une requête SELECT avec une condition sur le `_table` champ.
- Correction d'une condition de course rare dans ReplicatedMergeTree lors de la vérification des pièces de données.
- Fixe le gel sur “leader election” lors du démarrage d'un serveur.
- Le paramètre max\_replica\_delay\_for\_distributed\_queries a été ignoré lors de l'utilisation d'une réplique locale de la source de données. Ce problème a été corrigé.
- Correction d'un comportement incorrect de `ALTER TABLE CLEAR COLUMN IN PARTITION` lorsque vous tentez de nettoyer une colonne non existante.
- Correction d'une exception dans la fonction multiIf lors de l'utilisation de tableaux ou de chaînes vides.
- Correction d'allocations de mémoire excessives lors de la désérialisation du format natif.
- Correction d'une mise à jour automatique incorrecte des dictionnaires Trie.
- Correction d'une exception lors de l'exécution de requêtes avec une clause GROUP BY à partir d'une table de fusion lors de l'utilisation D'un exemple.
- Correction d'un plantage de GROUP BY lors de l'utilisation de distributed\_aggregation\_memory\_efficient=1.
- Vous pouvez maintenant spécifier la base de données.table dans le côté droit de IN et JOIN.
- Trop de threads ont été utilisés pour l'agrégation parallèle. Ce problème a été corrigé.
- Correction de la façon dont le “if” fonction fonctionne avec des arguments FixedString.
- SELECT a mal fonctionné à partir d'une table distribuée pour les fragments avec un poids de 0. Ce problème a été corrigé.
- Exécuter `CREATE VIEW IF EXISTS no longer causes crashes.`
- Correction d'un comportement incorrect lorsque input\_format\_skip\_unknown\_fields = 1 est défini et qu'il existe des nombres négatifs.
- Correction d'une boucle infinie dans le `dictGetHierarchy()` fonction s'il y a des données non valides dans le dictionnaire.
- Fixe `Syntax error: unexpected (...)` erreurs lors de l'exécution de requêtes distribuées avec des sous-requêtes dans une clause IN ou JOIN et des tables de fusion.
- Correction d'une interprétation incorrecte D'une requête SELECT à partir de tables de dictionnaire.
- Correction de l' “Cannot mremap” erreur lors de l'utilisation de tableaux dans In et JOIN clauses avec plus de 2 milliards d'éléments.
- Correction du basculement pour les dictionnaires avec MySQL comme source.
#### Workflow amélioré pour développer et assembler ClickHouse: {#improved-workflow-for-developing-and-assembling-clickhouse-1}
- Construit peuvent être assemblés en Arcadie.
- Vous pouvez utiliser gcc 7 pour compiler ClickHouse.
- Les builds parallèles utilisant ccache + distcc sont plus rapides maintenant.
### Clickhouse Version 1.1.54245, 2017-07-04 {#clickhouse-release-1-1-54245-2017-07-04}
#### Nouveauté: {#new-features-5}
- DDL distribué (par exemple, `CREATE TABLE ON CLUSTER`)
- La réplication de la requête `ALTER TABLE CLEAR COLUMN IN PARTITION.`
- Le moteur pour les tables de dictionnaire (accès aux données du dictionnaire sous la forme d'une table).
- Moteur de base de données de dictionnaire (ce type de base de données a automatiquement des tables de dictionnaire disponibles pour tous les dictionnaires externes connectés).
- Vous pouvez vérifier les mises à jour du dictionnaire en envoyant une demande à la source.
- Noms de colonnes qualifiés
- Les identificateurs entre des guillemets doubles.
- Sessions dans L'interface HTTP.
- La requête OPTIMIZE pour une table répliquée peut s'exécuter non seulement sur le leader.
#### Modifications Incompatibles En Arrière: {#backward-incompatible-changes-2}
- Supprimé ensemble GLOBAL.
#### Des Modifications Mineures: {#minor-changes}
- Maintenant, après le déclenchement d'une alerte, le journal imprime la trace complète de la pile.
- Détendu la vérification du nombre de pièces de données endommagées/supplémentaires au démarrage (il y avait trop de faux positifs).
#### Corrections De Bugs: {#bug-fixes-5}
- Correction d'une mauvaise connexion “sticking” lors de l'insertion dans une table distribuée.
- GLOBAL in fonctionne maintenant pour une requête à partir d'une table de fusion qui regarde une table distribuée.
- Le nombre incorrect de cœurs a été détecté sur une machine virtuelle Google Compute Engine. Ce problème a été corrigé.
- Changements dans le fonctionnement d'une source exécutable de dictionnaires externes mis en cache.
- Correction de la comparaison des chaînes contenant des caractères nuls.
- Correction de la comparaison des champs de clé primaire Float32 avec des constantes.
- Auparavant, une estimation incorrecte de la taille d'un champ pouvait entraîner des allocations trop importantes.
- Correction d'un plantage lors de l'interrogation d'une colonne Nullable ajoutée à une table en utilisant ALTER.
- Correction d'un plantage lors du tri par une colonne Nullable, si le nombre de lignes est inférieur à la limite.
- Correction d'une commande par sous-requête composée uniquement de valeurs constantes.
- Auparavant, une table répliquée pouvait rester dans l'état non valide après l'échec d'une table de suppression.
- Les alias des sous-requêtes scalaires avec des résultats vides ne sont plus perdus.
- Maintenant, une requête qui a utilisé la compilation n'échoue pas avec une erreur si le fichier. so est endommagé.

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2017.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2018.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2019.md

View File

@ -1,9 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_folder_title: Changelog
toc_priority: 74
toc_title: '2020'
---
{% include "content/changelog.md" %}

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/index.md

View File

@ -73,7 +73,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
2014-03-22 1031592
2014-03-23 1046491
0000-00-00 8873898
1970-01-01 8873898
2014-03-17 1031592
2014-03-23 1406958
@ -709,7 +709,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
Totals:
┌──EventDate─┬───────c─┐
0000-00-00 │ 8873898 │
1970-01-01 │ 8873898 │
└────────────┴─────────┘
Extremes:

View File

@ -794,9 +794,9 @@ inserts_in_queue: 0
merges_in_queue: 1
part_mutations_in_queue: 0
queue_oldest_time: 2020-02-20 08:34:30
inserts_oldest_time: 0000-00-00 00:00:00
inserts_oldest_time: 1970-01-01 00:00:00
merges_oldest_time: 2020-02-20 08:34:30
part_mutations_oldest_time: 0000-00-00 00:00:00
part_mutations_oldest_time: 1970-01-01 00:00:00
oldest_part_to_get:
oldest_part_to_merge_to: 20200220_20284_20840_7
oldest_part_to_mutate_to:

View File

@ -8,7 +8,7 @@ toc_title: "\u65E5\u4ED8"
# 日付 {#date}
デートだ 1970-01-01(符号なし)以降の日数として二バイト単位で格納されます。 Unixエポックの開始直後から、コンパイル段階で定数によって定義される上限しきい値までの値を格納できます現在は2106年までですが、完全にサポート
最小値は0000-00-00として出力されます。
最小値は1970-01-01として出力されます。
日付値は、タイムゾーンなしで格納されます。

View File

@ -78,7 +78,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...
列の説明では、次のいずれかの方法で既定値の式を指定できます:`DEFAULT expr`, `MATERIALIZED expr`, `ALIAS expr`.
例: `URLDomain String DEFAULT domain(URL)`.
既定値の式が定義されていない場合、既定値は数値の場合はゼロ、文字列の場合は空の文字列、配列の場合は空の配列、および `0000-00-00` 日付または `0000-00-00 00:00:00` 時間と日付のために。 Nullはサポートされていません。
既定値の式が定義されていない場合、既定値は数値の場合はゼロ、文字列の場合は空の文字列、配列の場合は空の配列、および `1970-01-01` 日付または zero unix timestamp 時間と日付のために。 Nullはサポートされていません。
既定の式が定義されている場合、列の型は省略可能です。 明示的に定義された型がない場合は、既定の式の型が使用されます。 例: `EventDate DEFAULT toDate(EventTime)` the Date タイプは EventDate 列。

View File

@ -1,268 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_priority: 79
toc_title: '2017'
---
### ClickHouseリリース1.1.54327,2017-12-21 {#clickhouse-release-1-1-54327-2017-12-21}
このリリ:
- 固定バグでレースの条件で接続文字列の構文は以下のようにこのデータが失われます。 この問題は、バージョン1.1.54310および1.1.54318に影響します。 ご利用の場合これらのバージョンとの複製のテーブルを更新することが強く推奨されます。 この問題にログ警告メッセージのように `Part ... from own log doesn't exist.` この問題は、ログにこれらのメッセージが表示されない場合でも関連します。
### ClickHouseリリース1.1.54318,2017-11-30 {#clickhouse-release-1-1-54318-2017-11-30}
このリリ:
- SummingMergeTreeエンジンでのマージ中の不正な行の削除を修正しました
- 複雑でないMergeTreeエンジンのメモリリークを修正しました
- MergeTreeエンジンの頻繁な挿入による性能低下を修正
- レプリケーションキューの実行が停止する問題を修正しました
- サーバーログの固定回転とアーカイブ
### ClickHouseリリース1.1.54310,2017-11-01 {#clickhouse-release-1-1-54310-2017-11-01}
#### 新しい機能: {#new-features}
- カスタムパーティショニングキーのMergeTree家族のテーブルエンジンです。
- [カフカ](https://clickhouse.tech/docs/en/operations/table_engines/kafka/) テーブルエンジン。
- ロードのサポートを追加 [CatBoost](https://catboost.yandex/) モデルとClickHouseに格納されたデータにそれらを適用します。
- サポートが追加された時間帯と非整数オフセットからのUTCです。
- 時間間隔での算術演算のサポートが追加されました。
- Date型とDateTime型の値の範囲は、2105年まで拡張されます。
- 追加された `CREATE MATERIALIZED VIEW x TO y` query(マテリアライズドビューのデータを格納するための既存のテーブルを指定します)。
- 追加された `ATTACH TABLE` 引数なしのクエリ。
- SummingMergeTreeテーブルの-Mapで終わる名前を持つ入れ子になった列の処理ロジックが、sumMap集計関数に抽出されました。 これで、そのような列を明示的に指定できます。
- IP trie辞書の最大サイズは128Mのエントリに増加します。
- GetSizeOfEnumType関数を追加しました。
- SumWithOverflow集計関数を追加しました。
- Cap'n Proto入力フォーマットのサポートが追加されました。
- では、今までのカスタマイズの圧縮レベル使用時のzstdアルゴリズムです。
#### 下位互換性のない変更: {#backward-incompatible-changes}
- メモリ以外のエンジンで一時テーブルを作成することはできません。
- ViewまたはMaterializedViewエンジンでテーブルを明示的に作成することはできません。
- 中表を作成し、新しいチェックを確認し、サンプリングキー表現が含まれ、その有効なタイプを利用します。
#### バグ修正: {#bug-fixes}
- 分散テーブルに同期的に挿入するときのハングを修正しました。
- 固定nonatomicの追加および削除のパーツで再現します。
- マテリアライズドビューに挿入されたデータは、不要な重複排除を受けません。
- ローカルレプリカが遅れており、リモートレプリカが使用できない分散テーブルに対してクエリを実行しても、エラーは発生しません。
- ユーザーにはアクセス権限は必要ありません。 `default` 一時テーブルを作成するデータベース。
- 引数なしで配列型を指定するとクラッシュする問題を修正。
- 固定hangups時のディスク容量を含むサーバのログします。
- Unixエポックの最初の週のtoRelativeWeekNum関数のオーバーフローを修正しました。
#### ビルドの改善: {#build-improvements}
- いくつかのサードパーテ
### ClickHouseリリース1.1.54304,2017-10-19 {#clickhouse-release-1-1-54304-2017-10-19}
#### 新しい機能: {#new-features-1}
- ネイティブプロトコ `tcp_ssl_port``config.xml` ).
#### バグ修正: {#bug-fixes-1}
- `ALTER` のための複製のテーブル現しようと走り出しています。
- 固定波データを読み込むときに設定 `preferred_block_size_bytes=0.`
- の固定クラッシュ `clickhouse-client` 押すとき `Page Down`
- 特定の複雑なクエリの正しい解釈 `GLOBAL IN``UNION ALL`
- `FREEZE PARTITION` いつも原子的に動作します。
- 空のPOST要求は、コード411の応答を返します。
- 次のような式の修正された解釈エラー `CAST(1 AS Nullable(UInt8)).`
- 読み取り時のエラーを修正 `Array(Nullable(String))` からの列 `MergeTree` テーブル
- 固定表の構文解析時にクエリのように `SELECT dummy AS dummy, dummy AS b`
- ユーザーが無効で正しく更新される `users.xml`
- 実行可能ディクショナリがゼロ以外の応答コードを返すときの正しい処理。
### ClickHouseリリース1.1.54292,2017-09-20 {#clickhouse-release-1-1-54292-2017-09-20}
#### 新しい機能: {#new-features-2}
- 追加された `pointInPolygon` 座標平面上の座標を操作するための関数。
- 追加された `sumMap` 配列の合計を計算するための集計関数。 `SummingMergeTree`.
- 追加された `trunc` 機能。 丸め関数のパフォーマンスの向上 (`round`, `floor`, `ceil`, `roundToExp2` を正の論理をどのように。 のロジックを変更しました `roundToExp2` 分数と負の数のための関数。
- ClickHouse実行可能ファイルは、libcのバージョンにあまり依存しません。 同じClickHouse実行可能ファイルは、さまざまなLinuxシステムで実行できます。 コンパイルされたクエリを使用すると、依存関係がまだあります(設定付き `compile = 1` デフォルトでは使用されません)。
- クエリの動的コンパイルに必要な時間を短縮しました。
#### バグ修正: {#bug-fixes-2}
- 時々生成されるエラーを修正しました `part ... intersects previous part` メッセージと弱いレプリカの一貫性。
- シャットダウ
- 除去の過剰伐採が回復レプリカ.
- UNION ALL実装のエラーを修正しました。
- ブロック内の最初の列が配列型である場合に発生したconcat関数のエラーを修正しました。
- 進行状況がシステムに正しく表示されます。マージテーブル。
### ClickHouseリリース1.1.54289,2017-09-13 {#clickhouse-release-1-1-54289-2017-09-13}
#### 新しい機能: {#new-features-3}
- `SYSTEM` サーバー管理のクエリ: `SYSTEM RELOAD DICTIONARY`, `SYSTEM RELOAD DICTIONARIES`, `SYSTEM DROP DNS CACHE`, `SYSTEM SHUTDOWN`, `SYSTEM KILL`.
- 配列を操作するための関数を追加しました: `concat`, `arraySlice`, `arrayPushBack`, `arrayPushFront`, `arrayPopBack`, `arrayPopFront`.
- 追加 `root``identity` ZooKeeper設定のパラメータ。 これにより、同じZooKeeperクラスター上の個々のユーザーを分離できます。
- 集計関数の追加 `groupBitAnd`, `groupBitOr`,and `groupBitXor` (互換性のために、彼らはまた、名前の下で利用可能です `BIT_AND`, `BIT_OR`,and `BIT_XOR`).
- 外部の辞書からロード可能でMySQLを指定するソケットのファイルシステム.
- 外部辞書はMySQLからSSL経由でロードできます (`ssl_cert`, `ssl_key`, `ssl_ca` 変数)。
- 追加された `max_network_bandwidth_for_user` ユーザーごとのクエリの全体的な帯域幅の使用を制限する設定。
- のサポート `DROP TABLE` 一時テーブルの場合。
- 読書のサポート `DateTime` Unixタイムスタンプ形式の値 `CSV``JSONEachRow` フォーマット。
- 分散クエリの遅延レプリカは既定で除外されるようになりました(既定のしきい値は5分です)。
- FIFOロック使用時の変更変更のクエリーなブ無期限に継続的に走ります。
- 設定するオプション `umask` 設定ファイルで。
- クエリのパフォーマンスの向上 `DISTINCT` .
#### バグ修正: {#bug-fixes-3}
- ZooKeeperの古いードを削除するプロセスを改善しました。 以前は、非常に頻繁に挿入された場合に古いノードが削除されなかったことがあり、サーバーのシャットダウンが遅くなりました。
- ZooKeeperへの接続のホストを選択する際のランダム化を修正しました。
- レプリカがlocalhostの場合、分散クエリでの遅延レプリカの除外を修正しました。
- エラーを修正しました。 `ReplicatedMergeTree` テーブルが壊れる恐れがあった後、走行 `ALTER MODIFY` aの要素に対して `Nested` 構造。
- SELECTクエリの原因となるエラーを修正しました “hang”.
- 分散DDLクエリの改善。
- クエリを修正しました `CREATE TABLE ... AS <materialized view>`.
- のデッドロックを解決しました。 `ALTER ... CLEAR COLUMN IN PARTITION` クエリ `Buffer` テーブル
- の無効なデフォルト値を修正しました `Enum` s(最小値の代わりに0)を使用する場合 `JSONEachRow``TSKV` フォーマット。
- ディクショナリを使用するとゾンビプロセスの出現を解決 `executable` 出典
- HEADクエリのsegfaultを修正しました。
#### ClickHouseの開発とアセンブルのワークフローの改善: {#improved-workflow-for-developing-and-assembling-clickhouse}
- 以下を使用できます `pbuilder` ClickHouseを構築する。
- 以下を使用できます `libc++` 代わりに `libstdc++` Linux上のビルドの場合。
- 静的コード分析ツールの使用方法を追加: `Coverage`, `clang-tidy`, `cppcheck`.
#### ご注意ください: {#please-note-when-upgrading}
- MergeTree設定の既定値が高くなりました `max_bytes_to_merge_at_max_space_in_pool` (マージするデータ部分の最大合計サイズ、バイト単位):100GiBから150GiBに増加しました。 この結果、大型の合併-走行後のサーバグの原因になりの増加に負荷をディスクサブシステムです。 サーバー上で使用可能な空き領域が、実行中のマージの合計量の倍未満である場合、これにより、小さなデータ部分のマージを含む、他のすべてのマージの実行が その結果、INSERTクエリはメッセージで失敗します “Merges are processing significantly slower than inserts.” 使用する `SELECT * FROM system.merges` 状況を監視するためのクエリ。 また点検できます `DiskSpaceReservedForMerge` のメトリック `system.metrics` テーブル、またはグラファイト。 大きなマージが終了すると問題が解決するので、これを修正するために何もする必要はありません。 これが受け入れられない場合は、以前の値を復元することができます。 `max_bytes_to_merge_at_max_space_in_pool` 設定。 これを行うには、 `<merge_tree>` configのセクション。xml、セット ``` <merge_tree>``<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool> ``` サーバーを再起動します。
### ClickHouseリリース1.1.54284,2017-08-29 {#clickhouse-release-1-1-54284-2017-08-29}
- これは以前の1.1.54282リリースのバグ修正リリースです。 ZooKeeperのpartsディレクトリのリークを修正します。
### ClickHouseリリース1.1.54282,2017-08-23 {#clickhouse-release-1-1-54282-2017-08-23}
このリリースには以前のリリース1.1.54276のバグ修正が含まれています:
- 固定 `DB::Exception: Assertion violation: !_path.empty()` 分散テーブルに挿入するとき。
- 入力データが';'で始まる場合、RowBinary形式で挿入するときの解析を修正しました。
- Errors during runtime compilation of certain aggregate functions (e.g. `groupArray()`).
### ClickHouseリリース1.1.54276,2017-08-16 {#clickhouse-release-1-1-54276-2017-08-16}
#### 新しい機能: {#new-features-4}
- SELECTクエリのWITHセクションを追加しました。 クエリの例: `WITH 1+1 AS a SELECT a, a*a`
- すべてのデータがすべてのシャードに保存された後にのみOKが返されます。 これは、insert\_distributed\_sync=1の設定によって有効になります。
- 16バイト識別子を操作するためのUUIDデータ型を追加しました。
- Tableauとの互換性のために、CHAR、FLOAT、その他のタイプの別名を追加しました。
- 時間を数値に変換するための関数toYYYYMM、toYYYYMMDD、およびtoYYYYMMDDhhmmssを追加しました。
- IPアドレス(ホスト名と共に)を使用して、クラスタ化されたDDLクエリのサーバーを識別できます。
- 関数内の非定数引数と負のオフセットのサポートが追加されました `substring(str, pos, len).`
- のmax\_sizeパラメータを追加しました。 `groupArray(max_size)(column)` 集計関数、およびその性能を最適化しました。
#### 主な変更点: {#main-changes}
- セキュリティの改善すべてのサーバーファイルは0640の権限で作成されます `<umask>` 設定パラメータ)。
- 無効な構文を持つクエリのエラーメッセージの改善。
- MergeTreeデータの大部分をマージするときのメモリ消費の大幅な削減とパフォーマンスの向上。
- 置換用のデータマージのパフォーマンスが大幅に向上しましたマージツリーエンジン。
- 性能向上のための非同期に挿入しますから分散型のテーブルを組み合わせで複数のソースしました。 この機能を有効にするには、distributed\_directory\_monitor\_batch\_inserts=1の設定を使用します。
#### 下位互換性のない変更: {#backward-incompatible-changes-1}
- の集合状態のバイナリ形式を変更しました `groupArray(array_column)` 配列の関数。
#### 変更の完全なリスト: {#complete-list-of-changes}
- 追加された `output_format_json_quote_denormals` json形式でnanおよびinf値を出力できるようにする設定。
- 最適化したストリーム配置の場合を読み込んで配布します。
- 値が変更されない場合、設定は読み取り専用モードで構成できます。
- Preferred\_block\_size\_bytes設定で指定されたブロックサイズの制限を満たすために、MergeTreeエンジンの整数以外の顆粒を取得する機能を追加しました。 のための消費量を削減RAMを増やキャッシュの地域が処理クエリーテーブルの大きい。
- 次のような式を含むインデックスの効率的な使用 `toStartOfHour(x)` 条件のためのような `toStartOfHour(x) op сonstexpr.`
- MergeTreeエンジンの新しい設定を追加しました設定のmerge\_treeセクション。xml):
- replicated\_deduplication\_window\_secondsレプリケートされたテーブル内の挿入を重複除外するために許可される秒数を設定します。
- cleanup\_delay\_periodクリーンアップを開始して古いデータを削除する頻度を設定します。
- replicated\_can\_become\_leaderは、レプリカがリーダーになるのを防ぐことができます(およびマージの割り当て)。
- 加速の清掃除時代遅れからのデータの飼育係.
- クラスタ化されたDDLクエリの複数の改善と修正。 特に興味深いのは、クラスタ内のサーバーからの応答を待つ時間を制限する新しい設定distributed\_ddl\_task\_timeoutです。 Ddl要求がすべてのホストで実行されていない場合、応答にはタイムアウトエラーが含まれ、要求は非同期モードで実行されます。
- サーバーログにおけるスタックトレースの表示の改善。
- 追加された “none” 圧縮方法の値。
- Configでは、複数のdictionaries\_configセクションを使用できます。xml。
- ファイルシステム内のソケットを介してMySQLに接続することは可能です。
- システム。部品表には、マークのサイズに関する情報をバイト単位で含む新しい列があります。
#### バグ修正: {#bug-fixes-4}
- 布を使ってテーブルは、Mergeテーブル現在は正常に動作するクエリを選択し、条件に `_table` フィールド
- ReplicatedMergeTreeでデータパーツをチェックする際に、まれな競合状態を修正しました。
- 固定可能凍結 “leader election” サーバーを起動するとき。
- データソースのローカルレプリカを使用する場合、max\_replica\_delay\_for\_distributed\_queries設定は無視されました。 これは修正されました。
- 修正された不正な動作 `ALTER TABLE CLEAR COLUMN IN PARTITION` 既存の列以外の列をクリーンアップしようとする場合。
- 空の配列または文字列を使用している場合、関数multifの例外を修正しました。
- 固定の過剰なメモリ割当ての場合deserializingネイティブ形式です。
- トライ辞書の正しくない自動更新を修正しました。
- SAMPLE使用時にMergeテーブルからGROUP BY句を使用してクエリを実行する場合の例外を修正しました。
- Distributed\_aggregation\_memory\_efficient=1を使用すると、GROUP BYのクラッシュを修正しました。
- これで、データベースを指定できます。INとJOINの右側の表。
- 並列集約に使用されたスレッドが多すぎます。 これは修正されました。
- どのように修正 “if” 関数はFixedString引数で動作します。
- 重みが0のシャードに対して、分散テーブルから誤ってworkedを選択します。 これは修正されました。
- 実行中 `CREATE VIEW IF EXISTS no longer causes crashes.`
- Input\_format\_skip\_unknown\_fields=1が設定され、負の数がある場合の不正な動作を修正しました。
- の無限ループを固定しました。 `dictGetHierarchy()` 辞書に無効なデータがある場合に機能します。
- 固定 `Syntax error: unexpected (...)` INまたはJOIN句およびMergeテーブルでサブクエリを使用して分散クエリを実行するときのエラー。
- 辞書テーブルからのSELECTクエリの誤った解釈を修正しました。
- 固定された “Cannot mremap” 2億を超える要素を持つIN句とJOIN句で配列を使用するとエラーが発生します。
- MySQLをソースとする辞書のフェイルオーバーを修正しました。
#### ClickHouseの開発とアセンブルのワークフローの改善: {#improved-workflow-for-developing-and-assembling-clickhouse-1}
- ビルドはArcadiaで組み立てることができます。
- Gcc7を使用してClickHouseをコンパイルできます。
- Ccache+distccを使用した並列ビルドは、より高速になりました。
### ClickHouseリリース1.1.54245,2017-07-04 {#clickhouse-release-1-1-54245-2017-07-04}
#### 新しい機能: {#new-features-5}
- 分散DDL(たとえば, `CREATE TABLE ON CLUSTER`)
- 複製されたクエリ `ALTER TABLE CLEAR COLUMN IN PARTITION.`
- 辞書テーブルのエンジン(テーブル形式の辞書データへのアクセス)。
- 辞書データベースエンジン(タイプのデータベースに自動的に辞書で使用可能なテーブルを接続外部辞書).
- ソースに要求を送信することで、辞書の更新を確認できます。
- 修飾された列名
- 二重引用符を使用した識別子の引用。
- HTTPイ
- 複製されたテーブルのOPTIMIZEクエリは、リーダーだけでなく実行できます。
#### 下位互換性のない変更: {#backward-incompatible-changes-2}
- グローバルセットを削除。
#### マイナーな変更点: {#minor-changes}
- 今後のアラート実行のログを出力フルスタックトレース.
- 起動時に破損した/余分なデータパーツの数の検証を緩和しました(誤検出が多すぎました)。
#### バグ修正: {#bug-fixes-5}
- 接続不良を修正 “sticking” 分散テーブルに挿入するとき。
- GLOBAL INは、分散テーブルを参照するMergeテーブルからのクエリに対して機能します。
- Google Compute Engine仮想マシンで不正なコア数が検出されました。 これは修正されました。
- キャッシュされた外部辞書の実行可能ソースの動作方法の変更。
- Null文字を含む文字列の比較を修正しました。
- Float32主キーフィールドと定数の比較を修正しました。
- 従来、不正確な見積りのサイズの分野が過度に大きな分配すべき。
- ALTERを使用してテーブルに追加されたNull許容列を照会するとクラッシュする問題を修正しました。
- 行数が制限よりも小さい場合、Null許容列でソートするとクラッシュする問題を修正しました。
- 定数値のみで構成されるORDER BYサブクエリを修正しました。
- については、従来、複製テーブルが残る無効な状態にした後、失敗した下表に示す。
- 空の結果を持つスカラーサブクエリのエイリアスは失われなくなりました。
- コンパイルを使用したクエリは、.soファイルが破損してもエラーで失敗しません。

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2017.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2018.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2019.md

View File

@ -1,9 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_folder_title: "\u5909\u66F4\u5C65\u6B74"
toc_priority: 74
toc_title: '2020'
---
{% include "content/changelog.md" %}

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/index.md

View File

@ -61,7 +61,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
2014-03-22 1031592
2014-03-23 1046491
0000-00-00 8873898
1970-01-01 8873898
2014-03-17 1031592
2014-03-23 1406958
@ -672,7 +672,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
Totals:
┌──EventDate─┬───────c─┐
0000-00-00 │ 8873898 │
1970-01-01 │ 8873898 │
└────────────┴─────────┘
Extremes:

View File

@ -621,12 +621,12 @@ data_compressed_bytes: 157
data_uncompressed_bytes: 91
marks_bytes: 144
modification_time: 2020-06-18 13:01:49
remove_time: 0000-00-00 00:00:00
remove_time: 1970-01-01 00:00:00
refcount: 1
min_date: 0000-00-00
max_date: 0000-00-00
min_time: 0000-00-00 00:00:00
max_time: 0000-00-00 00:00:00
min_date: 1970-01-01
max_date: 1970-01-01
min_time: 1970-01-01 00:00:00
max_time: 1970-01-01 00:00:00
partition_id: all
min_block_number: 1
max_block_number: 4
@ -643,8 +643,8 @@ path: /var/lib/clickhouse/data/default/months/a
hash_of_all_files: 2d0657a16d9430824d35e327fcbd87bf
hash_of_uncompressed_files: 84950cc30ba867c77a408ae21332ba29
uncompressed_hash_of_compressed_files: 1ad78f1c6843bbfb99a2c931abe7df7d
delete_ttl_info_min: 0000-00-00 00:00:00
delete_ttl_info_max: 0000-00-00 00:00:00
delete_ttl_info_min: 1970-01-01 00:00:00
delete_ttl_info_max: 1970-01-01 00:00:00
move_ttl_info.expression: []
move_ttl_info.min: []
move_ttl_info.max: []
@ -1153,9 +1153,9 @@ inserts_in_queue: 0
merges_in_queue: 1
part_mutations_in_queue: 0
queue_oldest_time: 2020-02-20 08:34:30
inserts_oldest_time: 0000-00-00 00:00:00
inserts_oldest_time: 1970-01-01 00:00:00
merges_oldest_time: 2020-02-20 08:34:30
part_mutations_oldest_time: 0000-00-00 00:00:00
part_mutations_oldest_time: 1970-01-01 00:00:00
oldest_part_to_get:
oldest_part_to_merge_to: 20200220_20284_20840_7
oldest_part_to_mutate_to:

View File

@ -1,7 +1,6 @@
# Date {#data-type-date}
Дата. Хранится в двух байтах в виде (беззнакового) числа дней, прошедших от 1970-01-01. Позволяет хранить значения от чуть больше, чем начала unix-эпохи до верхнего порога, определяющегося константой на этапе компиляции (сейчас - до 2106 года, последний полностью поддерживаемый год - 2105).
Минимальное значение выводится как 0000-00-00.
Дата хранится без учёта часового пояса.

View File

@ -78,7 +78,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...
`DEFAULT expr`, `MATERIALIZED expr`, `ALIAS expr`.
Пример: `URLDomain String DEFAULT domain(URL)`.
Если выражение для значения по умолчанию не указано, то в качестве значений по умолчанию будут использоваться нули для чисел, пустые строки для строк, пустые массивы для массивов, а также `0000-00-00` для дат и `0000-00-00 00:00:00` для дат с временем. NULL-ы не поддерживаются.
Если выражение для значения по умолчанию не указано, то в качестве значений по умолчанию будут использоваться нули для чисел, пустые строки для строк, пустые массивы для массивов, а также `1970-01-01` для дат и нулевой unix timestamp для дат с временем, NULL-ы для Nullable.
В случае, если указано выражение по умолчанию, то указание типа столбца не обязательно. При отсутствии явно указанного типа, будет использован тип выражения по умолчанию. Пример: `EventDate DEFAULT toDate(EventTime)` - для столбца EventDate будет использован тип Date.

View File

@ -153,11 +153,11 @@ ORDER BY
```text
┌───d1───────┬───d2───────┬─source───┐
│ 1970-01-11 │ 1970-01-02 │ original │
0000-00-00 │ 1970-01-03 │ │
0000-00-00 │ 1970-01-04 │ │
1970-01-01 │ 1970-01-03 │ │
1970-01-01 │ 1970-01-04 │ │
│ 1970-02-10 │ 1970-01-05 │ original │
0000-00-00 │ 1970-01-06 │ │
0000-00-00 │ 1970-01-07 │ │
1970-01-01 │ 1970-01-06 │ │
1970-01-01 │ 1970-01-07 │ │
│ 1970-03-12 │ 1970-01-08 │ original │
└────────────┴────────────┴──────────┘
```
@ -181,17 +181,17 @@ ORDER BY
```text
┌───d1───────┬───d2───────┬─source───┐
│ 1970-01-11 │ 1970-01-02 │ original │
│ 1970-01-16 │ 0000-00-00 │ │
│ 1970-01-21 │ 0000-00-00 │ │
│ 1970-01-26 │ 0000-00-00 │ │
│ 1970-01-31 │ 0000-00-00 │ │
│ 1970-02-05 │ 0000-00-00 │ │
│ 1970-01-16 │ 1970-01-01 │ │
│ 1970-01-21 │ 1970-01-01 │ │
│ 1970-01-26 │ 1970-01-01 │ │
│ 1970-01-31 │ 1970-01-01 │ │
│ 1970-02-05 │ 1970-01-01 │ │
│ 1970-02-10 │ 1970-01-05 │ original │
│ 1970-02-15 │ 0000-00-00 │ │
│ 1970-02-20 │ 0000-00-00 │ │
│ 1970-02-25 │ 0000-00-00 │ │
│ 1970-03-02 │ 0000-00-00 │ │
│ 1970-03-07 │ 0000-00-00 │ │
│ 1970-02-15 │ 1970-01-01 │ │
│ 1970-02-20 │ 1970-01-01 │ │
│ 1970-02-25 │ 1970-01-01 │ │
│ 1970-03-02 │ 1970-01-01 │ │
│ 1970-03-07 │ 1970-01-01 │ │
│ 1970-03-12 │ 1970-01-08 │ original │
└────────────┴────────────┴──────────┘
```

View File

@ -1,7 +0,0 @@
---
toc_folder_title: Changelog
toc_priority: 74
toc_title: '2020'
---
{% include "content/changelog.md" %}

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/index.md

View File

@ -72,7 +72,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
2014-03-22 1031592
2014-03-23 1046491
0000-00-00 8873898
1970-01-01 8873898
2014-03-17 1031592
2014-03-23 1406958
@ -708,7 +708,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
Totals:
┌──EventDate─┬───────c─┐
0000-00-00 │ 8873898 │
1970-01-01 │ 8873898 │
└────────────┴─────────┘
Extremes:

View File

@ -794,9 +794,9 @@ inserts_in_queue: 0
merges_in_queue: 1
part_mutations_in_queue: 0
queue_oldest_time: 2020-02-20 08:34:30
inserts_oldest_time: 0000-00-00 00:00:00
inserts_oldest_time: 1970-01-01 00:00:00
merges_oldest_time: 2020-02-20 08:34:30
part_mutations_oldest_time: 0000-00-00 00:00:00
part_mutations_oldest_time: 1970-01-01 00:00:00
oldest_part_to_get:
oldest_part_to_merge_to: 20200220_20284_20840_7
oldest_part_to_mutate_to:

View File

@ -8,7 +8,6 @@ toc_title: Tarihli
# Tarihli {#date}
Tarihli. 1970-01-01 (imzasız) gün sayısı olarak iki bayt olarak saklanır. Unix döneminin başlangıcından hemen sonra, derleme aşamasında bir sabit tarafından tanımlanan üst eşiğe kadar değerlerin depolanmasına izin verir (şu anda, bu 2106 yılına kadar, ancak tam olarak desteklenen son yıl 2105'tir).
Minimum değer 0000-00-00 olarak çıktıdır.
Tarih değeri saat dilimi olmadan depolanır.

View File

@ -78,7 +78,7 @@ Sonra başka maddeler olabilir `ENGINE` sorguda yan tümcesi. Açıklamalarda ta
Sütun açıklaması, aşağıdaki yollardan biriyle varsayılan değer için bir ifade belirtebilir:`DEFAULT expr`, `MATERIALIZED expr`, `ALIAS expr`.
Örnek: `URLDomain String DEFAULT domain(URL)`.
Varsayılan değer için bir ifade tanımlanmamışsa, varsayılan değerler sayılar için sıfırlar, dizeler için boş dizeler, diziler için boş diziler ve `0000-00-00` tarihler için veya `0000-00-00 00:00:00` zamanla tarihler için. Boş alanlar desteklenmez.
Varsayılan değer için bir ifade tanımlanmamışsa, varsayılan değerler sayılar için sıfırlar, dizeler için boş dizeler, diziler için boş diziler ve `1970-01-01` tarihler için veya zero unix timestamp zamanla tarihler için. Boş alanlar desteklenmez.
Varsayılan ifade tanımlanmışsa, sütun türü isteğe bağlıdır. Açıkça tanımlanmış bir tür yoksa, varsayılan ifade türü kullanılır. Örnek: `EventDate DEFAULT toDate(EventTime)` the Date türü için kullanılacak EventDate sütun.

View File

@ -1,268 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_priority: 79
toc_title: '2017'
---
### ClickHouse Sürüm 1.1.54327, 2017-12-21 {#clickhouse-release-1-1-54327-2017-12-21}
Bu sürüm önceki sürüm 1.1.54318 için hata düzeltmeleri içerir:
- Veri kaybına yol açabilir çoğaltma Olası yarış koşulu ile Sabit hata. Bu sorun sürümleri 1.1.54310 ve 1.1.54318 etkiler. Bu sürümlerden birini çoğaltılmış tablolarla kullanırsanız, güncelleştirme önerilir. Bu sorun, aşağıdaki gibi uyarı iletilerindeki günlüklerde gösterilir `Part ... from own log doesn't exist.` Bu iletileri günlüklerde görmeseniz bile sorun geçerlidir.
### ClickHouse Sürümü 1.1.54318, 2017-11-30 {#clickhouse-release-1-1-54318-2017-11-30}
Bu sürüm önceki sürüm 1.1.54310 için hata düzeltmeleri içerir:
- SummingMergeTree motorunda birleştirmeler sırasında hatalı satır silme işlemleri düzeltildi
- Unreplicated MergeTree motorlarında bir bellek sızıntısı düzeltildi
- MergeTree motorlarında sık sık eklerle sabit performans düşüşü
- Çoğaltma kuyruğunun çalışmayı durdurmasına neden olan bir sorun giderildi
- Sunucu günlüklerinin sabit rotasyonu ve arşivlenmesi
### ClickHouse Sürümü 1.1.54310, 2017-11-01 {#clickhouse-release-1-1-54310-2017-11-01}
#### Yenilik: {#new-features}
- Tablo motorları MergeTree ailesi için özel bölümleme anahtarı.
- [Kafka](https://clickhouse.tech/docs/en/operations/table_engines/kafka/) masa motoru.
- Yükleme için destek eklendi [CatBoost](https://catboost.yandex/) modelleri ve ClickHouse saklanan verilere uygulayarak.
- UTC olmayan tamsayı uzaklıklar ile saat dilimleri için destek eklendi.
- Zaman aralıklarıyla aritmetik işlemler için destek eklendi.
- Tarih ve DateTime türleri için değer aralığı 2105 yılına genişletilir.
- Add theed the `CREATE MATERIALIZED VIEW x TO y` sorgu (materyalleştirilmiş bir görünümün verilerini depolamak için varolan bir tabloyu belirtir).
- Add theed the `ATTACH TABLE` argüman olmadan sorgu.
- Bir SummingMergeTree tablosunda-Map biten adları ile iç içe sütunlar için işleme mantığı için ayıklandı sumMap toplama işlevi. Şimdi bu tür sütunlarııkça belirtebilirsiniz.
- IP trie sözlüğünün maksimum boyutu 128M girişlerine yükseltilir.
- GetSizeOfEnumType işlevi eklendi.
- SumWithOverflow toplama işlevi eklendi.
- Cap'n Proto giriş biçimi için destek eklendi.
- Artık zstd algoritmasını kullanırken sıkıştırma seviyesini özelleştirebilirsiniz.
#### Geriye Dönük Uyumsuz Değişiklikler: {#backward-incompatible-changes}
- Bellek dışında bir motor ile geçici tablolar oluşturulmasına izin verilmez.
- View veya MaterializedView altyapısı ile tabloların açık oluşturulmasına izin verilmez.
- Tablo oluşturma sırasında yeni bir onay örnekleme anahtar ifadesinin birincil anahtara dahil edildiğini doğrular.
#### Hata Düzeltmeleri: {#bug-fixes}
- Sabit hangups zaman eşzamanlı bir dağıtılmış tabloya ekleme.
- Sabit atomik olmayan ekleme ve çoğaltılmış tablolarda parçaların çıkarılması.
- Materialized görünümüne eklenen veriler gereksiz tekilleştirme tabi değildir.
- Yerel yinelemenin geciktiği ve uzak yinelemelerin kullanılamadığı dağıtılmış bir tabloya bir sorgu yürütmek artık bir hataya neden olmaz.
- Kullanıcıların erişim izinlerine ihtiyacı yoktur `default` veritabanı artık geçici tablolar oluşturmak için.
- Bağımsız değişkenler olmadan dizi türünü belirtirken çökmesini düzeltildi.
- Sunucu günlüklerini içeren disk birimi dolu olduğunda sabit hangups.
- Unix döneminin ilk haftası için toRelativeWeekNum işlevinde bir taşma düzeltildi.
#### İyileştirmeler Oluşturun: {#build-improvements}
- Birkaç üçüncü taraf Kütüphanesi (özellikle Poco) güncellendi ve git alt modüllerine dönüştürüldü.
### ClickHouse Sürümü 1.1.54304, 2017-10-19 {#clickhouse-release-1-1-54304-2017-10-19}
#### Yenilik: {#new-features-1}
- Yerel protokolde TLS desteği (etkinleştirmek, ayarlamak için `tcp_ssl_port` içinde `config.xml` ).
#### Hata Düzeltmeleri: {#bug-fixes-1}
- `ALTER` çoğaltılmış tablolar için şimdi en kısa sürede çalışmaya başlamak çalışır.
- Ayarı ile veri okurken çökmesini sabit `preferred_block_size_bytes=0.`
- Sabit çöker `clickhouse-client` bas whenarken `Page Down`
- Bazı karmaşık sorguların doğru yorumlanması `GLOBAL IN` ve `UNION ALL`
- `FREEZE PARTITION` her zaman atomik olarak çalışır.
- Boş posta istekleri şimdi 411 koduyla bir yanıt döndürür.
- Gibi ifadeler için sabit yorumlama hataları `CAST(1 AS Nullable(UInt8)).`
- Okurken bir hata düzeltildi `Array(Nullable(String))` Col fromum fromns from `MergeTree` Tablolar.
- Gibi sorguları ayrıştırırken sabit çökmesini `SELECT dummy AS dummy, dummy AS b`
- Kullanıcılar geçersiz ile doğru güncellenir `users.xml`
- Yürütülebilir bir sözlük sıfır olmayan bir yanıt kodu döndürdüğünde doğru işleme.
### ClickHouse Yayın 1.1.54292, 2017-09-20 {#clickhouse-release-1-1-54292-2017-09-20}
#### Yenilik: {#new-features-2}
- Add theed the `pointInPolygon` koordinat düzleminde koordinatlarla çalışmak için işlev.
- Add theed the `sumMap` benzer dizilerin toplamını hesaplamak için toplama işlevi `SummingMergeTree`.
- Add theed the `trunc` İşlev. Yuvarlama fonksiyonlarının geliştirilmiş performansı (`round`, `floor`, `ceil`, `roundToExp2`) ve nasıl çalıştıklarının mantığını düzeltti. Mantığını değiştirdi `roundToExp2` kesirler ve negatif sayılar için işlev.
- ClickHouse yürütülebilir dosyası artık libc sürümüne daha az bağımlıdır. Aynı ClickHouse yürütülebilir dosya Linux sistemleri çok çeşitli çalıştırabilirsiniz. Derlenmiş sorguları kullanırken hala bir bağımlılık var (ayar ile `compile = 1` , varsayılan olarak kullanılmaz).
- Sorguların dinamik derlenmesi için gereken süreyi azalttı.
#### Hata Düzeltmeleri: {#bug-fixes-2}
- Bazen üretilen bir hata düzeltildi `part ... intersects previous part` mesajlar ve kopya tutarlılığı zayıfladı.
- ZooKeeper kapatma sırasında kullanılamıyorsa sunucunun kilitlenmesine neden olan bir hata düzeltildi.
- Kopyaları geri yüklerken aşırı günlüğü kaldırıldı.
- Birlik tüm uygulamasında bir hata düzeltildi.
- Bir bloktaki ilk sütun dizi türüne sahipse, concat işlevinde bir hata düzeltildi.
- İlerleme şimdi sistemde doğru görüntülenir.tablo birleştirir.
### ClickHouse Yayın 1.1.54289, 2017-09-13 {#clickhouse-release-1-1-54289-2017-09-13}
#### Yenilik: {#new-features-3}
- `SYSTEM` sunucu yönetimi için sorgular: `SYSTEM RELOAD DICTIONARY`, `SYSTEM RELOAD DICTIONARIES`, `SYSTEM DROP DNS CACHE`, `SYSTEM SHUTDOWN`, `SYSTEM KILL`.
- Dizilerle çalışmak için işlevler eklendi: `concat`, `arraySlice`, `arrayPushBack`, `arrayPushFront`, `arrayPopBack`, `arrayPopFront`.
- Katma `root` ve `identity` ZooKeeper yapılandırması için parametreler. Bu, aynı ZooKeeper kümesinde tek tek kullanıcıları izole etmenizi sağlar.
- Toplam fonksiyonları eklendi `groupBitAnd`, `groupBitOr`, ve `groupBitXor` (uyumluluk için, isimler altında da mevcuttur `BIT_AND`, `BIT_OR`, ve `BIT_XOR`).
- Dış sözlükler dosya sisteminde bir soket belirterek Mysql'den yüklenebilir.
- Harici sözlükler SSL üzerinden MySQL yüklenebilir (`ssl_cert`, `ssl_key`, `ssl_ca` parametre).
- Add theed the `max_network_bandwidth_for_user` kullanıcı başına sorgular için genel bant genişliği kullanımını kısıtlamak için ayarlama.
- İçin destek `DROP TABLE` geçici tablolar için.
- Okuma desteği `DateTime` Unix zaman damgası biçimindeki değerler `CSV` ve `JSONEachRow` biçimliler.
- Dağıtılmış sorgularda gecikmeli yinelemeler artık varsayılan olarak dışlanır (varsayılan eşik 5 dakikadır).
- FIFO kilitleme sırasında kullanılır ALTER: bir ALTER sorgusu sürekli çalışan sorgular için süresiz olarak engellenmez.
- Seçeneği ayarlamak için `umask` yapılandırma dosyasında.
- İle sorgular için geliştirilmiş performans `DISTINCT` .
#### Hata Düzeltmeleri: {#bug-fixes-3}
- ZooKeeper eski düğümleri silme işlemi geliştirildi. Daha önce, eski düğümler bazen çok sık ekler varsa silinmedi, bu da sunucunun diğer şeylerin yanı sıra kapanması için yavaş olmasına neden oldu.
- ZooKeeper bağlantı için ana seçerken sabit randomizasyon.
- Çoğaltma localhost ise, dağıtılmış sorgularda gecikmiş kopyaların dışlanması düzeltildi.
- Bir veri parçası bir hata düzeltildi `ReplicatedMergeTree` tablo çalıştırdıktan sonra kırık olabilir `ALTER MODIFY` bir element üzerinde `Nested` yapılı.
- SELECT sorgularına neden olabilecek bir hata düzeltildi “hang”.
- Dağıtılmış DDL sorguları için iyileştirmeler.
- Sorgu düzeltildi `CREATE TABLE ... AS <materialized view>`.
- Çık themaz theı Çöz thedü `ALTER ... CLEAR COLUMN IN PARTITION` sorgu için `Buffer` Tablolar.
- İçin geçersiz varsayılan değer düzeltildi `Enum` kullanırken s (minimum yerine 0) `JSONEachRow` ve `TSKV` biçimliler.
- Bir sözlük ile bir sözlük kullanırken zombi süreçlerinin görünümünü çözdü `executable` kaynaklı.
- Kafa sorgusu için sabit segfault.
#### ClickHouse geliştirmek ve birleştirmek için geliştirilmiş İş Akışı: {#improved-workflow-for-developing-and-assembling-clickhouse}
- Kullanabilirsiniz `pbuilder` ClickHouse inşa etmek.
- Kullanabilirsiniz `libc++` yerine `libstdc++` Linux üzerine inşa edilmiştir.
- Statik kod analiz araçlarını kullanma talimatları eklendi: `Coverage`, `clang-tidy`, `cppcheck`.
#### Yükseltme Yaparken Lütfen Unutmayın: {#please-note-when-upgrading}
- MergeTree ayarı için artık daha yüksek bir varsayılan değer var `max_bytes_to_merge_at_max_space_in_pool` (bayt olarak birleştirilecek veri parçalarının maksimum toplam boyutu): 100 Gib'den 150 Gib'e yükseldi. Bu, disk Alt Sisteminde artan bir yüke neden olabilecek sunucu yükseltmesinden sonra çalışan büyük birleştirmelere neden olabilir. Sunucuda kullanılabilir boş alan, çalışan birleştirmelerin toplam miktarının iki katından azsa, bu, diğer tüm birleştirmelerin, küçük veri parçalarının birleştirmeleri de dahil olmak üzere çalışmayı durdurmasına neden olur. Sonuç olarak, INSERT sorguları iletiyle başarısız olur “Merges are processing significantly slower than inserts.” Kullan... `SELECT * FROM system.merges` durumu izlemek için sorgu. Ayrıca kontrol edebilirsiniz `DiskSpaceReservedForMerge` metr theik `system.metrics` tablo veya Grafit. Bunu düzeltmek için hiçbir şey yapmanıza gerek yoktur, çünkü büyük birleşimler bittikten sonra sorun kendiliğinden çözülür. Bu kabul edilemez bulursanız, önceki değeri geri yükleyebilirsiniz `max_bytes_to_merge_at_max_space_in_pool` ayar. Bunu yapmak için, gidin `<merge_tree>` config bölümünde.xml, set ``` <merge_tree>``<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool> ``` ve sunucuyu yeniden başlatın.
### ClickHouse Sürümü 1.1.54284, 2017-08-29 {#clickhouse-release-1-1-54284-2017-08-29}
- Bu, önceki 1.1.54282 sürümü için bir hata düzeltme sürümüdür. Bu ZooKeeper parçalar dizininde sızıntıları giderir.
### ClickHouse Yayın 1.1.54282, 2017-08-23 {#clickhouse-release-1-1-54282-2017-08-23}
Bu sürüm önceki sürüm 1.1.54276 için hata düzeltmeleri içerir:
- Sabit `DB::Exception: Assertion violation: !_path.empty()` dağıtılmış bir tabloya eklerken.
- Giriş verileri'; ' ile başlarsa RowBinary biçiminde eklerken ayrıştırma düzeltildi.
- Errors during runtime compilation of certain aggregate functions (e.g. `groupArray()`).
### ClickHouse Yayın 1.1.54276, 2017-08-16 {#clickhouse-release-1-1-54276-2017-08-16}
#### Yenilik: {#new-features-4}
- Bir seçme sorgusu için bölüm ile isteğe bağlı eklendi. Örnek sorgu: `WITH 1+1 AS a SELECT a, a*a`
- INSERT, dağıtılmış bir tabloda eşzamanlı olarak gerçekleştirilebilir: Tamam, yalnızca tüm veriler tüm parçalara kaydedildikten sonra döndürülür. Bu ayar tarafından etkinleştirilir ınsert\_distributed\_sync = 1.
- 16 baytlık tanımlayıcılarla çalışmak için UUID veri türü eklendi.
- Tablo ile uyumluluk için CHAR, FLOAT ve diğer türlerin takma adları eklendi.
- Sayılara zaman dönüştürmek için fonksiyonları toYYYYMM, toYYYYMMDD ve toYYYYMMDDhhmmss eklendi.
- Kümelenmiş DDL sorguları için sunucuları tanımlamak için IP adreslerini (ana bilgisayar adı ile birlikte) kullanabilirsiniz.
- İşlevde sabit olmayan argümanlar ve negatif uzaklıklar için destek eklendi `substring(str, pos, len).`
- İçin max\_size parametresi eklendi `groupArray(max_size)(column)` toplama işlevi ve performansını optimize etti.
#### Ana Değişiklikler: {#main-changes}
- Güvenlik iyileştirmeleri: tüm sunucu dosyaları 0640 izinleriyle oluşturulur (üzerinden değiştirilebilir `<umask>` config parametresi).
- Geçersiz sözdizimi ile sorgular için geliştirilmiş hata mesajları.
- MergeTree verilerinin büyük bölümlerini birleştirirken bellek tüketimini önemli ölçüde azalttı ve performansı artırdı.
- ReplacingMergeTree motoru için veri birleştirmelerinin performansını önemli ölçüde artırdı.
- Birden çok kaynak ekler birleştirerek dağıtılmış bir tablodan zaman uyumsuz ekler için geliştirilmiş performans. Bu işlevi etkinleştirmek için distributed\_directory\_monitor\_batch\_ınserts = 1 ayarını kullanın.
#### Geriye Dönük Uyumsuz Değişiklikler: {#backward-incompatible-changes-1}
- Toplam durumların ikili biçimini değiştirdi `groupArray(array_column)` diziler için fonksiyonlar.
#### Değişikliklerin tam listesi: {#complete-list-of-changes}
- Add theed the `output_format_json_quote_denormals` json formatında nan ve ınf değerleri çıktısı sağlayan ayar.
- Dağıtılmış bir tablodan okurken optimize edilmiş akış tahsisi.
- Değer değişmezse ayarlar salt okunur modda yapılandırılabilir.
- Preferred\_block\_size\_bytes ayarında belirtilen blok boyutu üzerindeki kısıtlamaları karşılamak için mergetree motorunun tamsayı olmayan granüllerini alma yeteneği eklendi. Amaç, RAM tüketimini azaltmak ve büyük sütunlu tablolardan gelen sorguları işlerken önbellek konumunu arttırmaktır.
- Gibi ifadeler içeren dizinlerin verimli kullanımı `toStartOfHour(x)` gibi koşullar için `toStartOfHour(x) op сonstexpr.`
- MergeTree motorları için yeni ayarlar eklendi (yapılandırmada merge\_tree bölümü.xml):
- replicated\_deduplication\_window\_seconds yinelenen tablolar ekler tekilleştirme için izin verilen saniye sayısını ayarlar.
- cleanup\_delay\_period, eski verileri kaldırmak için temizleme işleminin ne sıklıkta başlatılacağını ayarlar.
- replicated\_can\_become\_leader, bir kopyanın lider olmasını (ve birleştirme atamasını) engelleyebilir.
- Hızlandırılmış Temizleme ZooKeeper eski verileri kaldırmak için.
- Kümelenmiş DDL sorguları için birden fazla iyileştirme ve düzeltme. Özellikle ilgi çekici olan yeni ayardır distributed\_ddl\_task\_timeout, kümedeki sunuculardan bir yanıt beklemek için zamanı sınırlar. Tüm ana bilgisayarlarda bir ddl isteği gerçekleştirilmediyse, bir yanıt bir zaman aşımı hatası içerir ve bir zaman uyumsuz modunda bir istek yürütülür.
- Sunucu günlüklerinde yığın izlerinin geliştirilmiş gösterimi.
- Add theed the “none” sıkıştırma yöntemi için değer.
- Yapılandırmada birden çok dictionaries\_config bölümünü kullanabilirsiniz.xml.
- Bu dosya sisteminde bir soket üzerinden MySQL bağlanmak mümkündür.
- Sistem.parçalar tablosu, bayt cinsinden işaretlerin boyutu hakkında bilgi içeren yeni bir sütuna sahiptir.
#### Hata Düzeltmeleri: {#bug-fixes-4}
- Bir birleştirme tablosu kullanarak dağıtılmış tablolar artık bir koşulla bir SELECT sorgusu için doğru şekilde çalışır. `_table` alan.
- Veri parçalarını kontrol ederken ReplicatedMergeTree nadir bir yarış durumu düzeltildi.
- Sabit Olası donma “leader election” bir sunucu başlatırken.
- Veri kaynağının yerel bir kopyasını kullanırken max\_replica\_delay\_for\_distributed\_queries ayarı göz ardı edildi. Bu sorun giderildi.
- Sabit yanlış davranış `ALTER TABLE CLEAR COLUMN IN PARTITION` varolan olmayan bir sütunu temizlemeye çalışırken.
- Boş diziler veya dizeleri kullanırken multiİf işlevinde bir istisna düzeltildi.
- Sabit aşırı bellek ayırmaları yerel biçimi serisini kaldırırken.
- Trie sözlüklerin sabit yanlış otomatik güncelleme.
- Örnek kullanırken bir birleştirme tablosundan bir GROUP BY yan tümcesi ile sorguları çalıştırırken bir özel durum düzeltildi.
- Distributed\_aggregation\_memory\_efficient = 1 kullanırken grup çökmesi düzeltildi.
- Şimdi veritabanını belirtebilirsiniz.ın ve JOİN sağ tarafında tablo.
- Paralel toplama için çok fazla iplik kullanıldı. Bu sorun giderildi.
- Sabit nasıl “if” işlev FixedString argümanları ile çalışır.
- 0 ağırlığında kırıkları için dağıtılmış bir tablodan yanlış çalıştı seçin. Bu sorun giderildi.
- Çalışma `CREATE VIEW IF EXISTS no longer causes crashes.`
- Sabit yanlış davranış input\_format\_skip\_unknown\_fields=1 ayarlanır ve negatif sayılar vardır.
- Sabit bir sonsuz döngü içinde `dictGetHierarchy()` sözlükte bazı geçersiz veriler varsa işlev.
- Sabit `Syntax error: unexpected (...)` bir In veya JOIN yan tümcesi ve birleştirme tablolarındaki alt sorgularla dağıtılmış sorguları çalıştırırken hatalar.
- Sözlük tablolarından bir seçme sorgusunun yanlış yorumlanması düzeltildi.
- Sabit “Cannot mremap” 2 milyardan fazla öğe içeren ın ve JOIN yan tümcelerinde diziler kullanılırken hata oluştu.
- Kaynak olarak MySQL ile sözlükler için yük devretme düzeltildi.
#### ClickHouse geliştirmek ve birleştirmek için geliştirilmiş İş Akışı: {#improved-workflow-for-developing-and-assembling-clickhouse-1}
- Yapılar Arcadia'da monte edilebilir.
- Clickhouse'u derlemek için gcc 7'yi kullanabilirsiniz.
- Ccache+distcc kullanarak paralel yapılar artık daha hızlı.
### ClickHouse Yayın 1.1.54245, 2017-07-04 {#clickhouse-release-1-1-54245-2017-07-04}
#### Yenilik: {#new-features-5}
- Dağıtılmış DDL (örneğin, `CREATE TABLE ON CLUSTER`)
- Çoğaltılan sorgu `ALTER TABLE CLEAR COLUMN IN PARTITION.`
- Sözlük tabloları için motor (bir tablo şeklinde sözlük verilerine erişim).
- Sözlük veritabanı motoru (bu tür veritabanı otomatik olarak bağlı tüm dış sözlükler için sözlük tabloları vardır).
- Kaynağa bir istek göndererek sözlükteki güncellemeleri kontrol edebilirsiniz.
- Nitelikli sütun adları
- Çift tırnak işaretleri kullanarak tanımlayıcıları alıntı.
- HTTP arabirimindeki oturumlar.
- Çoğaltılmış bir tablo için en iyi duruma getirme sorgusu yalnızca lider üzerinde çalışabilir.
#### Geriye Dönük Uyumsuz Değişiklikler: {#backward-incompatible-changes-2}
- Kaldırıldı set GLOBAL.
#### Küçük Değişiklikler: {#minor-changes}
- Şimdi bir uyarı tetiklendikten sonra günlük tam yığın izleme yazdırır.
- Başlangıçta hasarlı / ekstra veri parçalarının sayısının doğrulanmasını rahatlattı(çok fazla yanlış pozitif vardı).
#### Hata Düzeltmeleri: {#bug-fixes-5}
- Kötü bir bağlantı düzeltildi “sticking” dağıtılmış bir tabloya eklerken.
- GLOBAL IN şimdi dağıtılmış bir tabloya bakan bir birleştirme tablosundan bir sorgu için çalışır.
- Bir Google Compute Engine sanal makinesinde yanlış sayıda çekirdek tespit edildi. Bu sorun giderildi.
- Önbelleğe alınmış harici sözlüklerin yürütülebilir bir kaynağının nasıl çalıştığındaki değişiklikler.
- Null karakter içeren dizelerin karşılaştırması düzeltildi.
- Float32 birincil anahtar alanlarının sabitler ile karşılaştırılması düzeltildi.
- Önceden, bir alanın boyutunun yanlış bir tahmini, aşırı büyük tahsisatlara neden olabilir.
- Alter kullanarak bir tabloya eklenen null bir sütun sorgularken bir kilitlenme düzeltildi.
- Satır sayısı sınırdan az ise, null bir sütuna göre sıralama yaparken bir kilitlenme düzeltildi.
- Yalnızca sabit değerlerden oluşan alt sorgu ile bir sipariş düzeltildi.
- Daha önce, çoğaltılmış bir tablo başarısız bir bırakma tablosundan sonra geçersiz durumda kalabilir.
- Boş sonuçları olan skaler alt sorgular için takma adlar artık kaybolmaz.
- Şimdi derleme kullanılan bir sorgu .so dosyası zarar görürse bir hata ile başarısız değil.

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2017.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2018.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2019.md

View File

@ -1,9 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_folder_title: Changelog
toc_priority: 74
toc_title: '2020'
---
{% include "content/changelog.md" %}

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/index.md

View File

@ -61,7 +61,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
2014-03-22 1031592
2014-03-23 1046491
0000-00-00 8873898
1970-01-01 8873898
2014-03-17 1031592
2014-03-23 1406958
@ -556,7 +556,7 @@ SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORD
Totals:
┌──EventDate─┬───────c─┐
0000-00-00 │ 8873898 │
1970-01-01 │ 8873898 │
└────────────┴─────────┘
Extremes:

View File

@ -38,9 +38,9 @@ inserts_in_queue: 0
merges_in_queue: 1
part_mutations_in_queue: 0
queue_oldest_time: 2020-02-20 08:34:30
inserts_oldest_time: 0000-00-00 00:00:00
inserts_oldest_time: 1970-01-01 00:00:00
merges_oldest_time: 2020-02-20 08:34:30
part_mutations_oldest_time: 0000-00-00 00:00:00
part_mutations_oldest_time: 1970-01-01 00:00:00
oldest_part_to_get:
oldest_part_to_merge_to: 20200220_20284_20840_7
oldest_part_to_mutate_to:

View File

@ -1,5 +1,5 @@
# 日期 {#date}
日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。允许存储从 Unix 纪元开始到编译阶段定义的上限阈值常量目前上限是2106年但最终完全支持的年份为2105。最小值输出为0000-00-00
日期类型,用两个字节存储,表示从 1970-01-01 (无符号) 到当前的日期值。允许存储从 Unix 纪元开始到编译阶段定义的上限阈值常量目前上限是2106年但最终完全支持的年份为2105。最小值输出为1970-01-01
日期中没有存储时区信息。

View File

@ -1,6 +1,6 @@
# 日期时间 {#data_type-datetime}
时间戳类型。用四个字节(无符号的)存储 Unix 时间戳)。允许存储与日期类型相同的范围内的值。最小值为 0000-00-00 00:00:00。时间戳类型值精确到秒没有闰秒
时间戳类型。用四个字节(无符号的)存储 Unix 时间戳)。允许存储与日期类型相同的范围内的值。最小值为 1970-01-01 00:00:00。时间戳类型值精确到秒没有闰秒
## 时区 {#shi-qu}

View File

@ -49,7 +49,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...
在列描述中你可以通过以下方式之一为列指定默认表达式:`DEFAULT expr``MATERIALIZED expr``ALIAS expr`。
示例:`URLDomain String DEFAULT domain(URL)`。
如果在列描述中未定义任何默认表达式,那么系统将会根据类型设置对应的默认值,如:数值类型为零、字符串类型为空字符串、数组类型为空数组、日期类型为’0000-00-00以及时间类型为0000-00-00 00:00:00。不支持使用NULL作为普通类型的默认值
如果在列描述中未定义任何默认表达式,那么系统将会根据类型设置对应的默认值,如:数值类型为零、字符串类型为空字符串、数组类型为空数组、日期类型为’1970-01-01以及时间类型为 zero unix timestamp
如果定义了默认表达式,则可以不定义列的类型。如果没有明确的定义类的类型,则使用默认表达式的类型。例如:`EventDate DEFAULT toDate(EventTime)` - 最终EventDate将使用Date作为类型。

View File

@ -1,268 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_priority: 79
toc_title: '2017'
---
### ClickHouse释放1.1.54327,2017-12-21 {#clickhouse-release-1-1-54327-2017-12-21}
此版本包含以前版本1.1.54318的错误修复:
- 修复了可能导致数据丢失的复制中可能存在的争用条件的错误。 此问题影响版本1.1.54310和1.1.54318。 如果将其中一个版本用于复制的表,则强烈建议进行更新。 此问题显示在日志中的警告消息,如 `Part ... from own log doesn't exist.` 即使您在日志中没有看到这些消息,问题也是相关的。
### 碌莽禄,拢,010-68520682\<url\> {#clickhouse-release-1-1-54318-2017-11-30}
此版本包含以前版本1.1.54310的错误修复:
- 修复了SummingMergeTree引擎中合并过程中错误的行删除
- 修复了未复制的MergeTree引擎中的内存泄漏
- 修复了MergeTree引擎中频繁插入的性能下降
- 修复了导致复制队列停止运行的问题
- 固定服务器日志的轮换和归档
### ClickHouse释放1.1.54310,2017-11-01 {#clickhouse-release-1-1-54310-2017-11-01}
#### 新功能: {#new-features}
- MergeTree表引擎系列的自定义分区键。
- [卡夫卡](https://clickhouse.tech/docs/en/operations/table_engines/kafka/) 表引擎。
- 增加了对加载的支持 [CatBoost](https://catboost.yandex/) 模型并将其应用到ClickHouse中存储的数据。
- 增加了对UTC非整数偏移的时区的支持。
- 增加了对具有时间间隔的算术运算的支持。
- 日期和日期时间类型的值范围扩展到2105年。
- 添加了 `CREATE MATERIALIZED VIEW x TO y` 查询(指定用于存储实例化视图数据的现有表)。
- 添加了 `ATTACH TABLE` 不带参数的查询。
- 将SummingMergeTree表中名称以-Map结尾的嵌套列的处理逻辑提取到sumMap聚合函数中。 现在,您可以显式指定此类列。
- IP trie字典的最大大小增加到128M条目。
- 添加了getSizeOfEnumType函数。
- 添加了sumWithOverflow聚合函数。
- 增加了对Cap'n Proto输入格式的支持。
- 使用zstd算法时您现在可以自定义压缩级别。
#### 向后不兼容的更改: {#backward-incompatible-changes}
- 不允许使用内存以外的引擎创建临时表。
- 不允许使用View或MaterializedView引擎显式创建表。
- 在创建表期间,新检查将验证采样键表达式是否包含在主键中。
#### 错误修复: {#bug-fixes}
- 修复了同步插入到分布式表中时的挂断问题。
- 修复了复制表中部分的非原子添加和删除。
- 插入到实例化视图中的数据不会遭受不必要的重复数据删除。
- 对本地副本滞后且远程副本不可用的分布式表执行查询不会再导致错误。
- 用户不需要访问权限 `default` 数据库创建临时表了。
- 修复了在指定数组类型时不带参数的崩溃。
- 修复了包含服务器日志的磁盘卷已满时的挂机问题。
- 修复了unix时代的第一周toRelativeWeekNum函数的溢出。
#### 构建改进: {#build-improvements}
- 几个第三方库特别是Poco被更新并转换为git子模块。
### ClickHouse释放1.1.54304,2017-10-19 {#clickhouse-release-1-1-54304-2017-10-19}
#### 新功能: {#new-features-1}
- 本机协议中的TLS支持要启用请设置 `tcp_ssl_port``config.xml` ).
#### 错误修复: {#bug-fixes-1}
- `ALTER` 对于复制的表现在尝试尽快开始运行。
- 使用设置读取数据时修复崩溃 `preferred_block_size_bytes=0.`
- 固定的崩溃 `clickhouse-client` 按下时 `Page Down`
- 正确解释某些复杂的查询 `GLOBAL IN``UNION ALL`
- `FREEZE PARTITION` 现在总是以原子方式工作。
- 空POST请求现在返回代码411的响应。
- 修正了像表达式的解释错误 `CAST(1 AS Nullable(UInt8)).`
- 修正了读取时的错误 `Array(Nullable(String))` 从列 `MergeTree` 桌子
- 修正了解析查询时崩溃,如 `SELECT dummy AS dummy, dummy AS b`
- 用户正确更新无效 `users.xml`
- 可执行字典返回非零响应代码时的正确处理。
### ClickHouse释放1.1.54292,2017-09-20 {#clickhouse-release-1-1-54292-2017-09-20}
#### 新功能: {#new-features-2}
- 添加了 `pointInPolygon` 用于处理坐标平面上的坐标的函数。
- 添加了 `sumMap` 用于计算数组总和的聚合函数,类似于 `SummingMergeTree`.
- 添加了 `trunc` 功能。 改进舍入函数的性能 (`round`, `floor`, `ceil`, `roundToExp2`并corrected正了他们如何工作的逻辑。 改变的逻辑 `roundToExp2` 分数和负数的功能。
- ClickHouse可执行文件现在对libc版本的依赖性较低。 同样的ClickHouse可执行文件可以在各种各样的Linux系统上运行。 使用编译的查询(使用设置)时仍然存在依赖关系 `compile = 1` ,默认情况下不使用)。
- 减少了动态编译查询所需的时间。
#### 错误修复: {#bug-fixes-2}
- 修正了有时产生的错误 `part ... intersects previous part` 消息和副本的一致性减弱。
- 修正了一个错误导致服务器锁定如果ZooKeeper在关闭过程中不可用。
- 恢复副本时删除了过多的日志记录。
- 修复了UNION ALL实现中的错误。
- 修复了在块中的第一列具有数组类型时发生的concat函数中的错误。
- 进度现在在系统中正确显示。合并表。
### ClickHouse释放1.1.54289,2017-09-13 {#clickhouse-release-1-1-54289-2017-09-13}
#### 新功能: {#new-features-3}
- `SYSTEM` 服务器管理查询: `SYSTEM RELOAD DICTIONARY`, `SYSTEM RELOAD DICTIONARIES`, `SYSTEM DROP DNS CACHE`, `SYSTEM SHUTDOWN`, `SYSTEM KILL`.
- 添加了用于处理数组的函数: `concat`, `arraySlice`, `arrayPushBack`, `arrayPushFront`, `arrayPopBack`, `arrayPopFront`.
- 已添加 `root``identity` ZooKeeper配置的参数。 这允许您隔离同一个ZooKeeper集群上的单个用户。
- 添加聚合函数 `groupBitAnd`, `groupBitOr`,和 `groupBitXor` (为了兼容,它们也可以在名称下使用 `BIT_AND`, `BIT_OR`,和 `BIT_XOR`).
- 通过在文件系统中指定套接字可以从MySQL加载外部字典。
- 外部字典可以通过SSL从MySQL加载 (`ssl_cert`, `ssl_key`, `ssl_ca` 参数)。
- 添加了 `max_network_bandwidth_for_user` 设置为限制每个用户查询的总带宽使用。
- 支持 `DROP TABLE` 对于临时表。
- 支持阅读 `DateTime` 从Unix时间戳格式的值 `CSV``JSONEachRow` 格式。
- 分布式查询中的滞后副本现在默认排除默认阈值为5分钟
- 在ALTER期间使用FIFO锁定对于连续运行的查询ALTER查询不会无限期地阻止。
- 选项设置 `umask` 在配置文件中。
- 改进了查询的性能 `DISTINCT` .
#### 错误修复: {#bug-fixes-3}
- 改进了在ZooKeeper中删除旧节点的过程。 以前,如果插入非常频繁,旧节点有时不会被删除,这导致服务器关闭速度缓慢等等。
- 修正了选择主机连接到ZooKeeper时的随机化。
- 修复了在分布式查询中排除滞后副本如果副本是localhost。
- 修正了一个错误,其中在一个数据部分 `ReplicatedMergeTree` 运行后表可能会被打破 `ALTER MODIFY` 在一个元素 `Nested` 结构。
- 修复了可能导致SELECT查询执行以下操作的错误 “hang”.
- 对分布式DDL查询的改进。
- 修正了查询 `CREATE TABLE ... AS <materialized view>`.
- 解决了在僵局 `ALTER ... CLEAR COLUMN IN PARTITION` 查询为 `Buffer` 桌子
- 修正了无效的默认值 `Enum` s0而不是最小使用时 `JSONEachRow``TSKV` 格式。
- 解决了使用字典时僵尸进程的外观 `executable` 资料来源。
- 修正了HEAD查询的段错误。
#### 改进开发和组装ClickHouse的工作流程: {#improved-workflow-for-developing-and-assembling-clickhouse}
- 您可以使用 `pbuilder` 建造克里克豪斯
- 您可以使用 `libc++` 而不是 `libstdc++` 对于构建在Linux上。
- 添加了使用静态代码分析工具的说明: `Coverage`, `clang-tidy`, `cppcheck`.
#### 升级时请注意: {#please-note-when-upgrading}
- MergeTree设置现在有一个更高的默认值 `max_bytes_to_merge_at_max_space_in_pool` 要合并的数据部分的最大总大小以字节为单位它已从100GiB增加到150GiB。 这可能会导致服务器升级后运行大型合并,这可能会导致磁盘子系统的负载增加。 如果服务器上的可用空间小于正在运行的合并总量的两倍,这将导致所有其他合并停止运行,包括小数据部分的合并。 因此,插入查询将失败,并显示消息 “Merges are processing significantly slower than inserts.” 使用 `SELECT * FROM system.merges` 查询监控情况。 您还可以检查 `DiskSpaceReservedForMerge` 度量在 `system.metrics` 表,或石墨。 你不需要做任何事情来解决这个问题,因为一旦大合并完成,问题就会自行解决。 如果您发现这是不可接受的,则可以恢复以前的值 `max_bytes_to_merge_at_max_space_in_pool` 设置。 要做到这一点,请转到 `<merge_tree>` 在配置部分。xml设置 ``` <merge_tree>``<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool> ``` 并重新启动服务器。
### 碌莽禄,拢,010-68520682\<url\> {#clickhouse-release-1-1-54284-2017-08-29}
- 这是一个错误修正版本以前的1.1.54282版本。 它修复了ZooKeeper中部件目录中的泄漏。
### 碌莽禄,拢,010-68520682\<url\> {#clickhouse-release-1-1-54282-2017-08-23}
此版本包含以前版本1.1.54276的错误修复:
- 固定 `DB::Exception: Assertion violation: !_path.empty()` 当插入到分布式表中。
- 如果输入数据以";"开头则以RowBinary格式插入时修复了解析。
- Errors during runtime compilation of certain aggregate functions (e.g. `groupArray()`).
### 碌莽禄,拢,010-68520682\<url\> {#clickhouse-release-1-1-54276-2017-08-16}
#### 新功能: {#new-features-4}
- 为选择查询添加了一个可选的WITH部分。 查询示例: `WITH 1+1 AS a SELECT a, a*a`
- INSERT可以在分布式表中同步执行仅在所有分片上保存所有数据后才返回OK。 这是由设置insert\_distributed\_sync=1激活的。
- 添加了用于处理16字节标识符的UUID数据类型。
- 添加了CHARFLOAT和其他类型的别名以便与Tableau兼容。
- 添加了toyyyymmtoYYYYMMDD和toyyyyymmddhhmmss将时间转换为数字的功能。
- 您可以使用IP地址与主机名一起使用来标识群集DDL查询的服务器。
- 增加了对函数中非常量参数和负偏移的支持 `substring(str, pos, len).`
- 添加了max\_size参数 `groupArray(max_size)(column)` 聚合函数,并优化了其性能。
#### 主要变化: {#main-changes}
- 安全性改进所有服务器文件都使用0640权限创建可以通过更改 `<umask>` 配置参数)。
- 改进了语法无效的查询的错误消息。
- 在合并mergetree大部分数据时显着降低了内存消耗并提高了性能。
- 显着提高了ReplacingMergeTree引擎的数据合并性能。
- 通过组合多个源插入来改进来自分布式表的异步插入的性能。 要启用此功能请使用设置distributed\_directory\_monitor\_batch\_inserts=1。
#### 向后不兼容的更改: {#backward-incompatible-changes-1}
- 改变聚合状态的二进制格式 `groupArray(array_column)` 数组的函数。
#### 更改的完整列表: {#complete-list-of-changes}
- 添加了 `output_format_json_quote_denormals` 设置允许以JSON格式输出nan和inf值。
- 从分布式表读取时优化流分配。
- 如果值没有更改,可以在只读模式下配置设置。
- 添加了检索MergeTree引擎的非整数颗粒的功能以满足preferred\_block\_size\_bytes设置中指定的块大小的限制。 其目的是在处理来自具有大列的表的查询时减少RAM消耗并增加缓存局部性。
- 高效使用包含如下表达式的索引 `toStartOfHour(x)` 对于像条件 `toStartOfHour(x) op сonstexpr.`
- 添加了MergeTree引擎的新设置配置中的merge\_tree部分。xml):
- replicated\_deduplication\_window\_seconds设置复制表中重复数据删除插入所允许的秒数。
- cleanup\_delay\_period设置启动清理以删除过时数据的频率。
- replicated\_can\_become\_leader可以防止副本成为领导者并分配合并
- 加速清理从ZooKeeper中删除过时的数据。
- 针对群集DDL查询的多个改进和修复。 特别令人感兴趣的是新设置distributed\_ddl\_task\_timeout它限制了等待群集中服务器响应的时间。 如果未在所有主机上执行ddl请求则响应将包含超时错误并且请求将以异步模式执行。
- 改进了服务器日志中堆栈跟踪的显示。
- 添加了 “none” 压缩方法的值。
- 您可以在config中使用多个dictionaries\_config部分。xml
- 可以通过文件系统中的套接字连接到MySQL。
- 系统。部件表有一个新的列,其中包含有关标记大小的信息,以字节为单位。
#### 错误修复: {#bug-fixes-4}
- 使用合并表的分布式表现在可以正确地用于具有条件的SELECT查询 `_table` 场。
- 修复了检查数据部分时ReplicatedMergeTree中罕见的争用条件。
- 固定可能冻结 “leader election” 启动服务器时。
- 使用数据源的本地副本时将忽略max\_replica\_delay\_for\_distributed\_queries设置。 这已被修复。
- 修正了不正确的行为 `ALTER TABLE CLEAR COLUMN IN PARTITION` 尝试清除不存在的列时。
- 修复了multif函数中使用空数组或字符串时的异常。
- 修正了反序列化本机格式时过多的内存分配。
- 修正了Trie字典的不正确的自动更新。
- 修复了使用SAMPLE从合并表中使用GROUP BY子句运行查询时的异常。
- 修复了使用distributed\_aggregation\_memory\_efficient=1时组的崩溃。
- 现在您可以指定数据库。表在右侧的IN和JOIN。
- 用于并行聚合的线程太多。 这已被修复。
- 固定如何 “if” 函数与FixedString参数一起使用。
- 为权重为0的分片从分布式表中选择工作不正确。 这已被修复。
- 运行 `CREATE VIEW IF EXISTS no longer causes crashes.`
- 修正了input\_format\_skip\_unknown\_fields=1设置并且有负数时的不正确行为。
- 修正了一个无限循环 `dictGetHierarchy()` 如果字典中有一些无效的数据,则函数。
- 固定 `Syntax error: unexpected (...)` 在IN或JOIN子句和合并表中使用子查询运行分布式查询时出错。
- 修复了从字典表中选择查询的不正确解释。
- 修正了 “Cannot mremap” 在IN和JOIN子句中使用包含超过20亿个元素的数组时出错。
- 修复了以MySQL为源的字典的故障转移。
#### 改进开发和组装ClickHouse的工作流程: {#improved-workflow-for-developing-and-assembling-clickhouse-1}
- 构建可以在阿卡迪亚组装。
- 您可以使用gcc7来编译ClickHouse。
- 现在使用ccache+distcc的并行构建速度更快。
### 碌莽禄,拢,010-68520682\<url\>戮卤篓拢,010-68520682\<url\> {#clickhouse-release-1-1-54245-2017-07-04}
#### 新功能: {#new-features-5}
- 分布式的DDL例如, `CREATE TABLE ON CLUSTER`)
- 复制的查询 `ALTER TABLE CLEAR COLUMN IN PARTITION.`
- 字典表的引擎(以表格形式访问字典数据)。
- 字典数据库引擎(这种类型的数据库会自动为所有连接的外部字典提供字典表)。
- 您可以通过向源发送请求来检查字典的更新。
- 限定列名称
- 使用双引号引用标识符。
- Http接口中的会话。
- 复制表的优化查询不仅可以在leader上运行。
#### 向后不兼容的更改: {#backward-incompatible-changes-2}
- 删除设置全局。
#### 小的变化: {#minor-changes}
- 现在,在触发警报之后,日志将打印完整的堆栈跟踪。
- 在启动时放宽对损坏/额外数据部件数量的验证(有太多误报)。
#### 错误修复: {#bug-fixes-5}
- 修复了连接错误 “sticking” 当插入到分布式表中。
- GLOBAL IN现在适用于查看分布式表的合并表中的查询。
- 在Google Compute Engine虚拟机上检测到不正确的内核数。 这已被修复。
- 缓存外部字典的可执行源如何工作的更改。
- 修复了包含空字符的字符串的比较。
- 修正了Float32主键字段与常量的比较。
- 以前,对字段大小的不正确估计可能导致分配过大。
- 修复了使用ALTER查询添加到表中的可空列时的崩溃。
- 修复了按可空列排序时的崩溃,如果行数小于限制。
- 修复了仅由常量值组成的子查询的顺序。
- 以前,复制的表在丢弃表失败后可能仍处于无效状态。
- 具有空结果的标量子查询的别名不再丢失。
- 现在如果.so文件被损坏使用编译的查询不会失败并出现错误。

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2017.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2018.md

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/2019.md

View File

@ -1,9 +0,0 @@
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
toc_folder_title: "\u66F4\u65B0\u65E5\u5FD7"
toc_priority: 74
toc_title: '2020'
---
{% include "content/changelog.md" %}

View File

@ -0,0 +1 @@
../../../en/whats-new/changelog/index.md

View File

@ -232,10 +232,10 @@ private:
context.setQueryParameters(query_parameters);
/// settings and limits could be specified in config file, but passed settings has higher priority
for (const auto & setting : context.getSettingsRef())
for (auto setting : context.getSettingsRef().allUnchanged())
{
const String & name = setting.getName().toString();
if (config().has(name) && !setting.isChanged())
const auto & name = setting.getName();
if (config().has(name))
context.setSetting(name, config().getString(name));
}
@ -2252,9 +2252,9 @@ public:
/// Copy settings-related program options to config.
/// TODO: Is this code necessary?
for (const auto & setting : context.getSettingsRef())
for (auto setting : context.getSettingsRef().all())
{
const String name = setting.getName().toString();
const auto & name = setting.getName();
if (options.count(name))
config().setString(name, options[name].as<std::string>());
}

View File

@ -20,7 +20,6 @@
#include <Common/ThreadStatus.h>
#include <Common/config_version.h>
#include <Common/quoteString.h>
#include <Common/SettingsChanges.h>
#include <IO/ReadBufferFromString.h>
#include <IO/WriteBufferFromFileDescriptor.h>
#include <IO/UseSSL.h>

View File

@ -223,9 +223,9 @@ void checkForUserSettingsAtTopLevel(const Poco::Util::AbstractConfiguration & co
return;
Settings settings;
for (const auto & setting : settings)
for (auto setting : settings.all())
{
std::string name = setting.getName().toString();
const auto & name = setting.getName();
if (config.has(name))
{
throw Exception(fmt::format("A setting '{}' appeared at top level in config {}."
@ -614,6 +614,9 @@ int Server::main(const std::vector<std::string> & /*args*/)
}
global_context->setUncompressedCache(uncompressed_cache_size);
if (config().has("custom_settings_prefixes"))
global_context->getAccessControlManager().setCustomSettingsPrefixes(config().getString("custom_settings_prefixes"));
/// Load global settings from default_profile and system_profile.
global_context->setDefaultProfiles(config());
const Settings & settings = global_context->getSettingsRef();

View File

@ -262,6 +262,9 @@
<!-- Default profile of settings. -->
<default_profile>default</default_profile>
<!-- Comma-separated list of prefixes for user-defined settings. -->
<custom_settings_prefixes></custom_settings_prefixes>
<!-- System profile of settings. This settings are used by internal processes (Buffer storage, Distibuted DDL worker and so on). -->
<!-- <system_profile>default</system_profile> -->

View File

@ -11,12 +11,19 @@
#include <Access/SettingsProfilesCache.h>
#include <Access/ExternalAuthenticators.h>
#include <Core/Settings.h>
#include <common/find_symbols.h>
#include <Poco/ExpireCache.h>
#include <boost/algorithm/string/join.hpp>
#include <mutex>
namespace DB
{
namespace ErrorCodes
{
extern const int UNKNOWN_SETTING;
}
namespace
{
std::vector<std::unique_ptr<IAccessStorage>> createStorages()
@ -59,6 +66,53 @@ private:
};
class AccessControlManager::CustomSettingsPrefixes
{
public:
void registerPrefixes(const Strings & prefixes_)
{
std::lock_guard lock{mutex};
registered_prefixes = prefixes_;
}
bool isSettingNameAllowed(const std::string_view & setting_name) const
{
if (Settings::hasBuiltin(setting_name))
return true;
std::lock_guard lock{mutex};
for (const auto & prefix : registered_prefixes)
{
if (setting_name.starts_with(prefix))
return true;
}
return false;
}
void checkSettingNameIsAllowed(const std::string_view & setting_name) const
{
if (isSettingNameAllowed(setting_name))
return;
std::lock_guard lock{mutex};
if (!registered_prefixes.empty())
{
throw Exception(
"Setting " + String{setting_name} + " is neither a builtin setting nor started with the prefix '"
+ boost::algorithm::join(registered_prefixes, "' or '") + "' registered for user-defined settings",
ErrorCodes::UNKNOWN_SETTING);
}
else
BaseSettingsHelpers::throwSettingNotFound(setting_name);
}
private:
Strings registered_prefixes;
mutable std::mutex mutex;
};
AccessControlManager::AccessControlManager()
: MultipleAccessStorage(createStorages()),
context_access_cache(std::make_unique<ContextAccessCache>(*this)),
@ -66,7 +120,8 @@ AccessControlManager::AccessControlManager()
row_policy_cache(std::make_unique<RowPolicyCache>(*this)),
quota_cache(std::make_unique<QuotaCache>(*this)),
settings_profiles_cache(std::make_unique<SettingsProfilesCache>(*this)),
external_authenticators(std::make_unique<ExternalAuthenticators>())
external_authenticators(std::make_unique<ExternalAuthenticators>()),
custom_settings_prefixes(std::make_unique<CustomSettingsPrefixes>())
{
}
@ -100,6 +155,29 @@ void AccessControlManager::setDefaultProfileName(const String & default_profile_
}
void AccessControlManager::setCustomSettingsPrefixes(const Strings & prefixes)
{
custom_settings_prefixes->registerPrefixes(prefixes);
}
void AccessControlManager::setCustomSettingsPrefixes(const String & comma_separated_prefixes)
{
Strings prefixes;
splitInto<','>(prefixes, comma_separated_prefixes);
setCustomSettingsPrefixes(prefixes);
}
bool AccessControlManager::isSettingNameAllowed(const std::string_view & setting_name) const
{
return custom_settings_prefixes->isSettingNameAllowed(setting_name);
}
void AccessControlManager::checkSettingNameIsAllowed(const std::string_view & setting_name) const
{
custom_settings_prefixes->checkSettingNameIsAllowed(setting_name);
}
std::shared_ptr<const ContextAccess> AccessControlManager::getContextAccess(
const UUID & user_id,
const boost::container::flat_set<UUID> & current_roles,

View File

@ -1,7 +1,7 @@
#pragma once
#include <Access/MultipleAccessStorage.h>
#include <Poco/AutoPtr.h>
#include <Common/SettingsChanges.h>
#include <boost/container/flat_set.hpp>
#include <memory>
@ -53,6 +53,13 @@ public:
void setUsersConfig(const Poco::Util::AbstractConfiguration & users_config);
void setDefaultProfileName(const String & default_profile_name);
/// Sets prefixes which should be used for custom settings.
/// This function also enables custom prefixes to be used.
void setCustomSettingsPrefixes(const Strings & prefixes);
void setCustomSettingsPrefixes(const String & comma_separated_prefixes);
bool isSettingNameAllowed(const std::string_view & name) const;
void checkSettingNameIsAllowed(const std::string_view & name) const;
std::shared_ptr<const ContextAccess> getContextAccess(
const UUID & user_id,
const boost::container::flat_set<UUID> & current_roles,
@ -89,14 +96,15 @@ public:
const ExternalAuthenticators & getExternalAuthenticators() const;
private:
class ContextAccessCache;
private: class ContextAccessCache;
class CustomSettingsPrefixes;
std::unique_ptr<ContextAccessCache> context_access_cache;
std::unique_ptr<RoleCache> role_cache;
std::unique_ptr<RowPolicyCache> row_policy_cache;
std::unique_ptr<QuotaCache> quota_cache;
std::unique_ptr<SettingsProfilesCache> settings_profiles_cache;
std::unique_ptr<ExternalAuthenticators> external_authenticators;
std::unique_ptr<CustomSettingsPrefixes> custom_settings_prefixes;
};
}

View File

@ -1,4 +1,5 @@
#include <Access/EnabledSettings.h>
#include <Common/SettingsChanges.h>
namespace DB

View File

@ -2,7 +2,6 @@
#include <Core/Types.h>
#include <Core/UUID.h>
#include <Common/SettingsChanges.h>
#include <Access/SettingsConstraints.h>
#include <Access/SettingsProfileElement.h>
#include <boost/container/flat_set.hpp>

View File

@ -1,22 +1,27 @@
#include <Access/SettingsConstraints.h>
#include <Access/AccessControlManager.h>
#include <Core/Settings.h>
#include <Common/FieldVisitors.h>
#include <Common/FieldVisitorsAccurateComparison.h>
#include <IO/WriteHelpers.h>
#include <Poco/Util/AbstractConfiguration.h>
#include <boost/range/algorithm_ext/erase.hpp>
namespace DB
{
namespace ErrorCodes
{
extern const int NOT_IMPLEMENTED;
extern const int READONLY;
extern const int QUERY_IS_PROHIBITED;
extern const int NO_ELEMENTS_IN_CONFIG;
extern const int SETTING_CONSTRAINT_VIOLATION;
}
SettingsConstraints::SettingsConstraints() = default;
SettingsConstraints::SettingsConstraints(const AccessControlManager & manager_) : manager(&manager_)
{
}
SettingsConstraints::SettingsConstraints(const SettingsConstraints & src) = default;
SettingsConstraints & SettingsConstraints::operator=(const SettingsConstraints & src) = default;
SettingsConstraints::SettingsConstraints(SettingsConstraints && src) = default;
@ -26,28 +31,18 @@ SettingsConstraints::~SettingsConstraints() = default;
void SettingsConstraints::clear()
{
constraints_by_index.clear();
constraints.clear();
}
void SettingsConstraints::setMinValue(const StringRef & setting_name, const Field & min_value)
void SettingsConstraints::setMinValue(const std::string_view & setting_name, const Field & min_value)
{
setMinValue(Settings::findIndexStrict(setting_name), min_value);
getConstraintRef(setting_name).min_value = Settings::castValueUtil(setting_name, min_value);
}
void SettingsConstraints::setMinValue(size_t setting_index, const Field & min_value)
Field SettingsConstraints::getMinValue(const std::string_view & setting_name) const
{
getConstraintRef(setting_index).min_value = Settings::valueToCorrespondingType(setting_index, min_value);
}
Field SettingsConstraints::getMinValue(const StringRef & setting_name) const
{
return getMinValue(Settings::findIndexStrict(setting_name));
}
Field SettingsConstraints::getMinValue(size_t setting_index) const
{
const auto * ptr = tryGetConstraint(setting_index);
const auto * ptr = tryGetConstraint(setting_name);
if (ptr)
return ptr->min_value;
else
@ -55,24 +50,14 @@ Field SettingsConstraints::getMinValue(size_t setting_index) const
}
void SettingsConstraints::setMaxValue(const StringRef & name, const Field & max_value)
void SettingsConstraints::setMaxValue(const std::string_view & setting_name, const Field & max_value)
{
setMaxValue(Settings::findIndexStrict(name), max_value);
getConstraintRef(setting_name).max_value = Settings::castValueUtil(setting_name, max_value);
}
void SettingsConstraints::setMaxValue(size_t setting_index, const Field & max_value)
Field SettingsConstraints::getMaxValue(const std::string_view & setting_name) const
{
getConstraintRef(setting_index).max_value = Settings::valueToCorrespondingType(setting_index, max_value);
}
Field SettingsConstraints::getMaxValue(const StringRef & setting_name) const
{
return getMaxValue(Settings::findIndexStrict(setting_name));
}
Field SettingsConstraints::getMaxValue(size_t setting_index) const
{
const auto * ptr = tryGetConstraint(setting_index);
const auto * ptr = tryGetConstraint(setting_name);
if (ptr)
return ptr->max_value;
else
@ -80,51 +65,32 @@ Field SettingsConstraints::getMaxValue(size_t setting_index) const
}
void SettingsConstraints::setReadOnly(const StringRef & setting_name, bool read_only)
void SettingsConstraints::setReadOnly(const std::string_view & setting_name, bool read_only)
{
setReadOnly(Settings::findIndexStrict(setting_name), read_only);
getConstraintRef(setting_name).read_only = read_only;
}
void SettingsConstraints::setReadOnly(size_t setting_index, bool read_only)
bool SettingsConstraints::isReadOnly(const std::string_view & setting_name) const
{
getConstraintRef(setting_index).read_only = read_only;
}
bool SettingsConstraints::isReadOnly(const StringRef & setting_name) const
{
return isReadOnly(Settings::findIndexStrict(setting_name));
}
bool SettingsConstraints::isReadOnly(size_t setting_index) const
{
const auto * ptr = tryGetConstraint(setting_index);
const auto * ptr = tryGetConstraint(setting_name);
if (ptr)
return ptr->read_only;
else
return false;
}
void SettingsConstraints::set(const StringRef & setting_name, const Field & min_value, const Field & max_value, bool read_only)
{
set(Settings::findIndexStrict(setting_name), min_value, max_value, read_only);
}
void SettingsConstraints::set(size_t setting_index, const Field & min_value, const Field & max_value, bool read_only)
void SettingsConstraints::set(const std::string_view & setting_name, const Field & min_value, const Field & max_value, bool read_only)
{
auto & ref = getConstraintRef(setting_index);
ref.min_value = min_value;
ref.max_value = max_value;
auto & ref = getConstraintRef(setting_name);
ref.min_value = Settings::castValueUtil(setting_name, min_value);
ref.max_value = Settings::castValueUtil(setting_name, max_value);
ref.read_only = read_only;
}
void SettingsConstraints::get(const StringRef & setting_name, Field & min_value, Field & max_value, bool & read_only) const
void SettingsConstraints::get(const std::string_view & setting_name, Field & min_value, Field & max_value, bool & read_only) const
{
get(Settings::findIndexStrict(setting_name), min_value, max_value, read_only);
}
void SettingsConstraints::get(size_t setting_index, Field & min_value, Field & max_value, bool & read_only) const
{
const auto * ptr = tryGetConstraint(setting_index);
const auto * ptr = tryGetConstraint(setting_name);
if (ptr)
{
min_value = ptr->min_value;
@ -141,9 +107,9 @@ void SettingsConstraints::get(size_t setting_index, Field & min_value, Field & m
void SettingsConstraints::merge(const SettingsConstraints & other)
{
for (const auto & [setting_index, other_constraint] : other.constraints_by_index)
for (const auto & [other_name, other_constraint] : other.constraints)
{
auto & constraint = constraints_by_index[setting_index];
auto & constraint = getConstraintRef(other_name);
if (!other_constraint.min_value.isNull())
constraint.min_value = other_constraint.min_value;
if (!other_constraint.max_value.isNull())
@ -154,95 +120,111 @@ void SettingsConstraints::merge(const SettingsConstraints & other)
}
SettingsConstraints::Infos SettingsConstraints::getInfo() const
{
Infos result;
result.reserve(constraints_by_index.size());
for (const auto & [setting_index, constraint] : constraints_by_index)
{
result.emplace_back();
Info & info = result.back();
info.name = Settings::getName(setting_index);
info.min = constraint.min_value;
info.max = constraint.max_value;
info.read_only = constraint.read_only;
}
return result;
}
void SettingsConstraints::check(const Settings & current_settings, const SettingChange & change) const
{
const String & name = change.name;
size_t setting_index = Settings::findIndex(name);
if (setting_index == Settings::npos)
return;
Field new_value = Settings::valueToCorrespondingType(setting_index, change.value);
Field current_value = current_settings.get(setting_index);
/// Setting isn't checked if value wasn't changed.
if (current_value == new_value)
return;
if (!current_settings.allow_ddl && name == "allow_ddl")
throw Exception("Cannot modify 'allow_ddl' setting when DDL queries are prohibited for the user", ErrorCodes::QUERY_IS_PROHIBITED);
/** The `readonly` value is understood as follows:
* 0 - everything allowed.
* 1 - only read queries can be made; you can not change the settings.
* 2 - You can only do read queries and you can change the settings, except for the `readonly` setting.
*/
if (current_settings.readonly == 1)
throw Exception("Cannot modify '" + name + "' setting in readonly mode", ErrorCodes::READONLY);
if (current_settings.readonly > 1 && name == "readonly")
throw Exception("Cannot modify 'readonly' setting in readonly mode", ErrorCodes::READONLY);
const Constraint * constraint = tryGetConstraint(setting_index);
if (constraint)
{
if (constraint->read_only)
throw Exception("Setting " + name + " should not be changed", ErrorCodes::SETTING_CONSTRAINT_VIOLATION);
if (!constraint->min_value.isNull() && (new_value < constraint->min_value))
throw Exception(
"Setting " + name + " shouldn't be less than " + applyVisitor(FieldVisitorToString(), constraint->min_value),
ErrorCodes::SETTING_CONSTRAINT_VIOLATION);
if (!constraint->max_value.isNull() && (new_value > constraint->max_value))
throw Exception(
"Setting " + name + " shouldn't be greater than " + applyVisitor(FieldVisitorToString(), constraint->max_value),
ErrorCodes::SETTING_CONSTRAINT_VIOLATION);
}
checkImpl(current_settings, const_cast<SettingChange &>(change), THROW_ON_VIOLATION);
}
void SettingsConstraints::check(const Settings & current_settings, const SettingsChanges & changes) const
{
for (const auto & change : changes)
check(current_settings, change);
}
void SettingsConstraints::clamp(const Settings & current_settings, SettingChange & change) const
void SettingsConstraints::check(const Settings & current_settings, SettingsChanges & changes) const
{
const String & name = change.name;
size_t setting_index = Settings::findIndex(name);
if (setting_index == Settings::npos)
return;
boost::range::remove_erase_if(
changes,
[&](SettingChange & change) -> bool
{
return !checkImpl(current_settings, const_cast<SettingChange &>(change), THROW_ON_VIOLATION);
});
}
Field new_value = Settings::valueToCorrespondingType(setting_index, change.value);
Field current_value = current_settings.get(setting_index);
void SettingsConstraints::clamp(const Settings & current_settings, SettingsChanges & changes) const
{
boost::range::remove_erase_if(
changes,
[&](SettingChange & change) -> bool
{
return !checkImpl(current_settings, change, CLAMP_ON_VIOLATION);
});
}
/// Setting isn't checked if value wasn't changed.
if (current_value == new_value)
return;
if (!current_settings.allow_ddl && name == "allow_ddl")
bool SettingsConstraints::checkImpl(const Settings & current_settings, SettingChange & change, ReactionOnViolation reaction) const
{
const String & setting_name = change.name;
bool cannot_cast;
auto cast_value = [&](const Field & x) -> Field
{
change.value = current_value;
return;
cannot_cast = false;
if (reaction == THROW_ON_VIOLATION)
return Settings::castValueUtil(setting_name, x);
else
{
try
{
return Settings::castValueUtil(setting_name, x);
}
catch (...)
{
cannot_cast = true;
return {};
}
}
};
bool cannot_compare = false;
auto less = [&](const Field & left, const Field & right)
{
cannot_compare = false;
if (reaction == THROW_ON_VIOLATION)
return applyVisitor(FieldVisitorAccurateLess{}, left, right);
else
{
try
{
return applyVisitor(FieldVisitorAccurateLess{}, left, right);
}
catch (...)
{
cannot_compare = true;
return false;
}
}
};
if (reaction == THROW_ON_VIOLATION)
manager->checkSettingNameIsAllowed(setting_name);
else if (!manager->isSettingNameAllowed(setting_name))
return false;
Field current_value, new_value;
if (current_settings.tryGet(setting_name, current_value))
{
/// Setting isn't checked if value has not changed.
if (change.value == current_value)
return false;
new_value = cast_value(change.value);
if ((new_value == current_value) || cannot_cast)
return false;
}
else
{
new_value = cast_value(change.value);
if (cannot_cast)
return false;
}
if (!current_settings.allow_ddl && setting_name == "allow_ddl")
{
if (reaction == THROW_ON_VIOLATION)
throw Exception("Cannot modify 'allow_ddl' setting when DDL queries are prohibited for the user", ErrorCodes::QUERY_IS_PROHIBITED);
else
return false;
}
/** The `readonly` value is understood as follows:
@ -252,125 +234,100 @@ void SettingsConstraints::clamp(const Settings & current_settings, SettingChange
*/
if (current_settings.readonly == 1)
{
change.value = current_value;
return;
if (reaction == THROW_ON_VIOLATION)
throw Exception("Cannot modify '" + setting_name + "' setting in readonly mode", ErrorCodes::READONLY);
else
return false;
}
if (current_settings.readonly > 1 && name == "readonly")
if (current_settings.readonly > 1 && setting_name == "readonly")
{
change.value = current_value;
return;
if (reaction == THROW_ON_VIOLATION)
throw Exception("Cannot modify 'readonly' setting in readonly mode", ErrorCodes::READONLY);
else
return false;
}
const Constraint * constraint = tryGetConstraint(setting_index);
const Constraint * constraint = tryGetConstraint(setting_name);
if (constraint)
{
if (constraint->read_only)
{
change.value = current_value;
return;
}
if (!constraint->min_value.isNull() && (new_value < constraint->min_value))
{
if (!constraint->max_value.isNull() && (constraint->min_value > constraint->max_value))
change.value = current_value;
if (reaction == THROW_ON_VIOLATION)
throw Exception("Setting " + setting_name + " should not be changed", ErrorCodes::SETTING_CONSTRAINT_VIOLATION);
else
change.value = constraint->min_value;
return;
return false;
}
if (!constraint->max_value.isNull() && (new_value > constraint->max_value))
const Field & min_value = constraint->min_value;
const Field & max_value = constraint->max_value;
if (!min_value.isNull() && !max_value.isNull() && (less(max_value, min_value) || cannot_compare))
{
change.value = constraint->max_value;
return;
if (reaction == THROW_ON_VIOLATION)
throw Exception("Setting " + setting_name + " should not be changed", ErrorCodes::SETTING_CONSTRAINT_VIOLATION);
else
return false;
}
if (!min_value.isNull() && (less(new_value, min_value) || cannot_compare))
{
if (reaction == THROW_ON_VIOLATION)
{
throw Exception(
"Setting " + setting_name + " shouldn't be less than " + applyVisitor(FieldVisitorToString(), constraint->min_value),
ErrorCodes::SETTING_CONSTRAINT_VIOLATION);
}
else
change.value = min_value;
}
if (!max_value.isNull() && (less(max_value, new_value) || cannot_compare))
{
if (reaction == THROW_ON_VIOLATION)
{
throw Exception(
"Setting " + setting_name + " shouldn't be greater than " + applyVisitor(FieldVisitorToString(), constraint->max_value),
ErrorCodes::SETTING_CONSTRAINT_VIOLATION);
}
else
change.value = max_value;
}
}
return true;
}
void SettingsConstraints::clamp(const Settings & current_settings, SettingsChanges & changes) const
SettingsConstraints::Constraint & SettingsConstraints::getConstraintRef(const std::string_view & setting_name)
{
for (auto & change : changes)
clamp(current_settings, change);
}
SettingsConstraints::Constraint & SettingsConstraints::getConstraintRef(size_t index)
{
auto it = constraints_by_index.find(index);
if (it == constraints_by_index.end())
it = constraints_by_index.emplace(index, Constraint{}).first;
auto it = constraints.find(setting_name);
if (it == constraints.end())
{
auto setting_name_ptr = std::make_shared<const String>(setting_name);
Constraint new_constraint;
new_constraint.setting_name = setting_name_ptr;
it = constraints.emplace(*setting_name_ptr, std::move(new_constraint)).first;
}
return it->second;
}
const SettingsConstraints::Constraint * SettingsConstraints::tryGetConstraint(size_t index) const
const SettingsConstraints::Constraint * SettingsConstraints::tryGetConstraint(const std::string_view & setting_name) const
{
auto it = constraints_by_index.find(index);
if (it == constraints_by_index.end())
auto it = constraints.find(setting_name);
if (it == constraints.end())
return nullptr;
return &it->second;
}
void SettingsConstraints::setProfile(const String & profile_name, const Poco::Util::AbstractConfiguration & config)
bool SettingsConstraints::Constraint::operator==(const Constraint & other) const
{
String elem = "profiles." + profile_name;
Poco::Util::AbstractConfiguration::Keys config_keys;
config.keys(elem, config_keys);
for (const std::string & key : config_keys)
{
if (key == "profile" || key.starts_with("profile[")) /// Inheritance of profiles from the current one.
setProfile(config.getString(elem + "." + key), config);
else
continue;
}
String path_to_constraints = "profiles." + profile_name + ".constraints";
if (config.has(path_to_constraints))
loadFromConfig(path_to_constraints, config);
return (read_only == other.read_only) && (min_value == other.min_value) && (max_value == other.max_value)
&& (*setting_name == *other.setting_name);
}
void SettingsConstraints::loadFromConfig(const String & path_to_constraints, const Poco::Util::AbstractConfiguration & config)
bool operator ==(const SettingsConstraints & left, const SettingsConstraints & right)
{
if (!config.has(path_to_constraints))
throw Exception("There is no path '" + path_to_constraints + "' in configuration file.", ErrorCodes::NO_ELEMENTS_IN_CONFIG);
Poco::Util::AbstractConfiguration::Keys names;
config.keys(path_to_constraints, names);
for (const String & name : names)
{
String path_to_name = path_to_constraints + "." + name;
Poco::Util::AbstractConfiguration::Keys constraint_types;
config.keys(path_to_name, constraint_types);
for (const String & constraint_type : constraint_types)
{
auto get_constraint_value = [&]{ return config.getString(path_to_name + "." + constraint_type); };
if (constraint_type == "min")
setMinValue(name, get_constraint_value());
else if (constraint_type == "max")
setMaxValue(name, get_constraint_value());
else if (constraint_type == "readonly")
setReadOnly(name, true);
else
throw Exception("Setting " + constraint_type + " value for " + name + " isn't supported", ErrorCodes::NOT_IMPLEMENTED);
}
}
}
bool SettingsConstraints::Constraint::operator==(const Constraint & rhs) const
{
return (read_only == rhs.read_only) && (min_value == rhs.min_value) && (max_value == rhs.max_value);
}
bool operator ==(const SettingsConstraints & lhs, const SettingsConstraints & rhs)
{
return lhs.constraints_by_index == rhs.constraints_by_index;
return (left.constraints == right.constraints);
}
}

View File

@ -1,23 +1,21 @@
#pragma once
#include <Core/Field.h>
#include <Common/SettingsChanges.h>
#include <common/StringRef.h>
#include <unordered_map>
namespace Poco
{
namespace Util
namespace Poco::Util
{
class AbstractConfiguration;
}
}
namespace DB
{
struct Settings;
struct SettingChange;
class SettingsChanges;
class AccessControlManager;
/** Checks if specified changes of settings are allowed or not.
* If the changes are not allowed (i.e. violates some constraints) this class throws an exception.
@ -53,7 +51,7 @@ struct Settings;
class SettingsConstraints
{
public:
SettingsConstraints();
SettingsConstraints(const AccessControlManager & manager_);
SettingsConstraints(const SettingsConstraints & src);
SettingsConstraints & operator =(const SettingsConstraints & src);
SettingsConstraints(SettingsConstraints && src);
@ -61,75 +59,57 @@ public:
~SettingsConstraints();
void clear();
bool empty() const { return constraints_by_index.empty(); }
bool empty() const { return constraints.empty(); }
void setMinValue(const StringRef & setting_name, const Field & min_value);
void setMinValue(size_t setting_index, const Field & min_value);
Field getMinValue(const StringRef & setting_name) const;
Field getMinValue(size_t setting_index) const;
void setMinValue(const std::string_view & setting_name, const Field & min_value);
Field getMinValue(const std::string_view & setting_name) const;
void setMaxValue(const StringRef & setting_name, const Field & max_value);
void setMaxValue(size_t setting_index, const Field & max_value);
Field getMaxValue(const StringRef & setting_name) const;
Field getMaxValue(size_t setting_index) const;
void setMaxValue(const std::string_view & setting_name, const Field & max_value);
Field getMaxValue(const std::string_view & setting_name) const;
void setReadOnly(const StringRef & setting_name, bool read_only);
void setReadOnly(size_t setting_index, bool read_only);
bool isReadOnly(const StringRef & setting_name) const;
bool isReadOnly(size_t setting_index) const;
void setReadOnly(const std::string_view & setting_name, bool read_only);
bool isReadOnly(const std::string_view & setting_name) const;
void set(const StringRef & setting_name, const Field & min_value, const Field & max_value, bool read_only);
void set(size_t setting_index, const Field & min_value, const Field & max_value, bool read_only);
void get(const StringRef & setting_name, Field & min_value, Field & max_value, bool & read_only) const;
void get(size_t setting_index, Field & min_value, Field & max_value, bool & read_only) const;
void set(const std::string_view & setting_name, const Field & min_value, const Field & max_value, bool read_only);
void get(const std::string_view & setting_name, Field & min_value, Field & max_value, bool & read_only) const;
void merge(const SettingsConstraints & other);
struct Info
{
StringRef name;
Field min;
Field max;
bool read_only = false;
};
using Infos = std::vector<Info>;
Infos getInfo() const;
/// Checks whether `change` violates these constraints and throws an exception if so.
void check(const Settings & current_settings, const SettingChange & change) const;
void check(const Settings & current_settings, const SettingsChanges & changes) const;
void check(const Settings & current_settings, SettingsChanges & changes) const;
/// Checks whether `change` violates these and clamps the `change` if so.
void clamp(const Settings & current_settings, SettingChange & change) const;
void clamp(const Settings & current_settings, SettingsChanges & changes) const;
/** Set multiple settings from "profile" (in server configuration file (users.xml), profiles contain groups of multiple settings).
* The profile can also be set using the `set` functions, like the profile setting.
*/
void setProfile(const String & profile_name, const Poco::Util::AbstractConfiguration & config);
/// Loads the constraints from configuration file, at "path" prefix in configuration.
void loadFromConfig(const String & path, const Poco::Util::AbstractConfiguration & config);
friend bool operator ==(const SettingsConstraints & lhs, const SettingsConstraints & rhs);
friend bool operator !=(const SettingsConstraints & lhs, const SettingsConstraints & rhs) { return !(lhs == rhs); }
friend bool operator ==(const SettingsConstraints & left, const SettingsConstraints & right);
friend bool operator !=(const SettingsConstraints & left, const SettingsConstraints & right) { return !(left == right); }
private:
struct Constraint
{
std::shared_ptr<const String> setting_name;
bool read_only = false;
Field min_value;
Field max_value;
bool operator ==(const Constraint & rhs) const;
bool operator !=(const Constraint & rhs) const { return !(*this == rhs); }
bool operator ==(const Constraint & other) const;
bool operator !=(const Constraint & other) const { return !(*this == other); }
};
Constraint & getConstraintRef(size_t index);
const Constraint * tryGetConstraint(size_t) const;
enum ReactionOnViolation
{
THROW_ON_VIOLATION,
CLAMP_ON_VIOLATION,
};
bool checkImpl(const Settings & current_settings, SettingChange & change, ReactionOnViolation reaction) const;
std::unordered_map<size_t, Constraint> constraints_by_index;
Constraint & getConstraintRef(const std::string_view & setting_name);
const Constraint * tryGetConstraint(const std::string_view & setting_name) const;
std::unordered_map<std::string_view, Constraint> constraints;
const AccessControlManager * manager = nullptr;
};
}

Some files were not shown because too many files have changed in this diff Show More