Update some docs translations (#10044)

This commit is contained in:
Ivan Blinkov 2020-04-04 12:15:31 +03:00 committed by GitHub
parent 65c317e4ca
commit 765dd7c495
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1046 changed files with 80189 additions and 35711 deletions

2
.gitignore vendored
View File

@ -18,7 +18,7 @@
/docs/website /docs/website
/docs/venv/ /docs/venv/
/docs/tools/venv/ /docs/tools/venv/
/docs/tools/translate/venv/ /docs/tools/translate/venv
/docs/tools/translate/output.md /docs/tools/translate/output.md
/docs/en/single.md /docs/en/single.md
/docs/ru/single.md /docs/ru/single.md

View File

@ -1,18 +1,21 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
--- ---
# Proveedores de servicios en la nube de ClickHouse {#clickhouse-cloud-service-providers} # Proveedores de servicios en la nube de ClickHouse {#clickhouse-cloud-service-providers}
!!! info "INFO" !!! info "INFO"
Si ha lanzado una nube pública con el servicio ClickHouse administrado, no dude en [abrir una solicitud de extracción](https://github.com/ClickHouse/ClickHouse/edit/master/docs/es/commercial/cloud.md) añadiéndolo a la siguiente lista. Si ha lanzado una nube pública con el servicio ClickHouse administrado, no dude en [abrir una solicitud de extracción](https://github.com/ClickHouse/ClickHouse/edit/master/docs/en/commercial/cloud.md) añadiéndolo a la siguiente lista.
## Nube de Yandex {#yandex-cloud} ## Nube de Yandex {#yandex-cloud}
[Servicio administrado de Yandex para ClickHouse](https://cloud.yandex.com/services/managed-clickhouse?utm_source=referrals&utm_medium=clickhouseofficialsite&utm_campaign=link3) proporciona las siguientes características clave: [Servicio administrado de Yandex para ClickHouse](https://cloud.yandex.com/services/managed-clickhouse?utm_source=referrals&utm_medium=clickhouseofficialsite&utm_campaign=link3) proporciona las siguientes características clave:
- Servicio ZooKeeper totalmente gestionado para [Replicación de ClickHouse](../operations/table_engines/replication.md) - Servicio ZooKeeper totalmente gestionado para [Replicación de ClickHouse](../engines/table_engines/mergetree_family/replication.md)
- Múltiples opciones de tipo de almacenamiento - Múltiples opciones de tipo de almacenamiento
- Réplicas en diferentes zonas de disponibilidad - Réplicas en diferentes zonas de disponibilidad
- Cifrado y aislamiento - Cifrado y aislamiento
- Mantenimiento automatizado - Mantenimiento automatizado
{## [Artículo Original](https://clickhouse.tech/docs/en/commercial/cloud/) ##}

View File

@ -0,0 +1,8 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Commercial
toc_priority: 70
---

View File

@ -1,7 +0,0 @@
---
machine_translated: true
---
# Estructuras de datos anidados {#nested-data-structures}
[Artículo Original](https://clickhouse.tech/docs/es/data_types/nested_data_structures/) <!--hide-->

View File

@ -1,9 +0,0 @@
---
machine_translated: true
---
# Expresion {#expression}
Se utiliza para representar expresiones lambda en funciones de orden superior.
[Artículo Original](https://clickhouse.tech/docs/es/data_types/special_data_types/expression/) <!--hide-->

View File

@ -1,9 +0,0 @@
---
machine_translated: true
---
# Tipos de datos especiales {#special-data-types}
Special data type values cant be saved to a table or output in results, but can be used as the intermediate result when running a query.
[Artículo Original](https://clickhouse.tech/docs/es/data_types/special_data_types/) <!--hide-->

View File

@ -1,9 +0,0 @@
---
machine_translated: true
---
# Establecer {#set}
Utilizado para la mitad derecha de un [ES](../../query_language/select.md#select-in-operators) expresión.
[Artículo Original](https://clickhouse.tech/docs/es/data_types/special_data_types/set/) <!--hide-->

View File

@ -1,17 +0,0 @@
---
machine_translated: true
---
# Motores de base de datos {#database-engines}
Los motores de bases de datos le permiten trabajar con tablas.
De forma predeterminada, ClickHouse utiliza su motor de base de datos nativa, que proporciona [motores de mesa](../operations/table_engines/index.md) y una [Sistema abierto.](../query_language/syntax.md).
También puede utilizar los siguientes motores de base de datos:
- [MySQL](mysql.md)
- [Perezoso](lazy.md)
[Artículo Original](https://clickhouse.tech/docs/es/database_engines/) <!--hide-->

View File

@ -1,50 +1,53 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 62
toc_title: "Descripci\xF3n general de la arquitectura ClickHouse"
--- ---
# Descripción general de la arquitectura ClickHouse {#overview-of-clickhouse-architecture} # Descripción general de la arquitectura ClickHouse {#overview-of-clickhouse-architecture}
ClickHouse es un verdadero DBMS orientado a columnas. Los datos se almacenan por columnas y durante la ejecución de matrices (vectores o fragmentos de columnas). Siempre que sea posible, las operaciones se envían en matrices, en lugar de en valores individuales. Esto se llama “vectorized query execution,” y ayuda a reducir el costo del procesamiento de datos real. ClickHouse es un verdadero DBMS orientado a columnas. Los datos se almacenan por columnas y durante la ejecución de matrices (vectores o fragmentos de columnas). Siempre que sea posible, las operaciones se envían en matrices, en lugar de en valores individuales. Se llama “vectorized query execution,” y ayuda a reducir el costo del procesamiento de datos real.
> Esta idea no es nada nuevo. Se remonta a la `APL` lenguaje de programación y sus descendientes: `A +`, `J`, `K`, y `Q`. La programación de matrices se utiliza en el procesamiento de datos científicos. Tampoco es esta idea algo nuevo en las bases de datos relacionales: por ejemplo, se usa en el `Vectorwise` sistema. > Esta idea no es nada nuevo. Se remonta a la `APL` lenguaje de programación y sus descendientes: `A +`, `J`, `K`, y `Q`. La programación de matrices se utiliza en el procesamiento de datos científicos. Tampoco es esta idea algo nuevo en las bases de datos relacionales: por ejemplo, se usa en el `Vectorwise` sistema.
Existen dos enfoques diferentes para acelerar el procesamiento de consultas: la ejecución de consultas vectorizadas y la generación de código en tiempo de ejecución. En este último, el código se genera para cada tipo de consulta sobre la marcha, eliminando toda la indirección y el despacho dinámico. Ninguno de estos enfoques es estrictamente mejor que el otro. La generación de código de tiempo de ejecución puede ser mejor cuando fusiona muchas operaciones, utilizando así las unidades de ejecución de la CPU y la canalización. La ejecución de consultas vectorizadas puede ser menos práctica porque implica vectores temporales que deben escribirse en la memoria caché y leerse. Si los datos temporales no caben en la memoria caché L2, esto se convierte en un problema. Pero la ejecución de consultas vectorizadas utiliza más fácilmente las capacidades SIMD de la CPU. Un [documento de investigación](http://15721.courses.cs.cmu.edu/spring2016/papers/p5-sompolski.pdf) escrito por nuestros amigos muestra que es mejor combinar ambos enfoques. ClickHouse utiliza la ejecución de consultas vectorizadas y tiene un soporte inicial limitado para la generación de código en tiempo de ejecución. Existen dos enfoques diferentes para acelerar el procesamiento de consultas: la ejecución de consultas vectorizadas y la generación de código en tiempo de ejecución. Este último elimina toda la indirección y el despacho dinámico. Ninguno de estos enfoques es estrictamente mejor que el otro. La generación de código de tiempo de ejecución puede ser mejor cuando fusiona muchas operaciones, utilizando así las unidades de ejecución de la CPU y la canalización. La ejecución de consultas vectorizadas puede ser menos práctica porque implica vectores temporales que deben escribirse en la memoria caché y leerse. Si los datos temporales no caben en la memoria caché L2, esto se convierte en un problema. Pero la ejecución de consultas vectorizadas utiliza más fácilmente las capacidades SIMD de la CPU. Un [documento de investigación](http://15721.courses.cs.cmu.edu/spring2016/papers/p5-sompolski.pdf) escrito por nuestros amigos muestra que es mejor combinar ambos enfoques. ClickHouse utiliza la ejecución de consultas vectorizadas y tiene un soporte inicial limitado para la generación de código en tiempo de ejecución.
## Columna {#columns} ## Columna {#columns}
Para representar columnas en la memoria (en realidad, fragmentos de columnas), el `IColumn` se utiliza la interfaz. Esta interfaz proporciona métodos auxiliares para la implementación de varios operadores relacionales. Casi todas las operaciones son inmutables: no modifican la columna original, sino que crean una nueva modificada. Por ejemplo, el `IColumn :: filter` método acepta una máscara de bytes de filtro. Se utiliza para el `WHERE` y `HAVING` operadores relacionales. Ejemplos adicionales: el `IColumn :: permute` para apoyar `ORDER BY` el `IColumn :: cut` para apoyar `LIMIT` y así sucesivamente. `IColumn` interfaz se utiliza para representar columnas en la memoria (en realidad, fragmentos de columnas). Esta interfaz proporciona métodos auxiliares para la implementación de varios operadores relacionales. Casi todas las operaciones son inmutables: no modifican la columna original, sino que crean una nueva modificada. Por ejemplo, el `IColumn :: filter` método acepta una máscara de bytes de filtro. Se utiliza para el `WHERE` y `HAVING` operadores relacionales. Ejemplos adicionales: el `IColumn :: permute` para apoyar `ORDER BY`, el `IColumn :: cut` para apoyar `LIMIT`.
Diversos `IColumn` aplicación (`ColumnUInt8`, `ColumnString` y así sucesivamente) son responsables del diseño de memoria de las columnas. El diseño de memoria suele ser una matriz contigua. Para el tipo entero de columnas, es solo una matriz contigua, como `std :: vector`. Para `String` y `Array` columnas, son dos vectores: uno para todos los elementos de la matriz, colocados contiguamente, y un segundo para los desplazamientos al comienzo de cada matriz. También hay `ColumnConst` que almacena solo un valor en la memoria, pero parece una columna. Diversos `IColumn` aplicación (`ColumnUInt8`, `ColumnString`, y así sucesivamente) son responsables del diseño de memoria de las columnas. El diseño de memoria suele ser una matriz contigua. Para el tipo entero de columnas, es solo una matriz contigua, como `std :: vector`. Para `String` y `Array` columnas, son dos vectores: uno para todos los elementos de la matriz, colocados contiguamente, y un segundo para los desplazamientos al comienzo de cada matriz. También hay `ColumnConst` que almacena solo un valor en la memoria, pero parece una columna.
## Campo {#field} ## Campo {#field}
Sin embargo, también es posible trabajar con valores individuales. Para representar un valor individual, el `Field` se utiliza. `Field` es sólo una unión discriminada de `UInt64`, `Int64`, `Float64`, `String` y `Array`. `IColumn` tiene el `operator[]` para obtener el valor n-ésimo como un `Field` y el `insert` método para agregar un `Field` al final de una columna. Estos métodos no son muy eficientes, ya que requieren tratar con temporal `Field` objetos que representan un valor individual. Hay métodos más eficientes, tales como `insertFrom`, `insertRangeFrom` y así sucesivamente. Sin embargo, también es posible trabajar con valores individuales. Para representar un valor individual, el `Field` se utiliza. `Field` es sólo una unión discriminada de `UInt64`, `Int64`, `Float64`, `String` y `Array`. `IColumn` tiene el `operator[]` para obtener el valor n-ésimo como un `Field` y el `insert` método para agregar un `Field` al final de una columna. Estos métodos no son muy eficientes, ya que requieren tratar con temporal `Field` objetos que representan un valor individual. Hay métodos más eficientes, tales como `insertFrom`, `insertRangeFrom` y así sucesivamente.
`Field` no tiene suficiente información sobre un tipo de datos específico para una tabla. Por ejemplo, `UInt8`, `UInt16`, `UInt32`, y `UInt64` todos están representados como `UInt64` es una `Field`. `Field` no tiene suficiente información sobre un tipo de datos específico para una tabla. Por ejemplo, `UInt8`, `UInt16`, `UInt32`, y `UInt64` todos están representados como `UInt64` en una `Field`.
## Abstracciones con fugas {#leaky-abstractions} ## Abstracciones con fugas {#leaky-abstractions}
`IColumn` tiene métodos para transformaciones relacionales comunes de datos, pero no satisfacen todas las necesidades. Por ejemplo, `ColumnUInt64` no tiene un método para calcular la suma de dos columnas, y `ColumnString` no tiene un método para ejecutar una búsqueda de subcadena. Estas innumerables rutinas se implementan fuera de `IColumn`. `IColumn` tiene métodos para transformaciones relacionales comunes de datos, pero no satisfacen todas las necesidades. Por ejemplo, `ColumnUInt64` no tiene un método para calcular la suma de dos columnas, y `ColumnString` no tiene un método para ejecutar una búsqueda de subcadena. Estas innumerables rutinas se implementan fuera de `IColumn`.
Varias funciones en columnas se pueden implementar de una manera genérica, no eficiente utilizando `IColumn` para extraer `Field` valores, o de una manera especializada utilizando el conocimiento del diseño de la memoria interna de los datos en un `IColumn` aplicación. Para hacer esto, las funciones se convierten en un `IColumn` escriba y trate con la representación interna directamente. Por ejemplo, `ColumnUInt64` tiene el `getData` método que devuelve una referencia a una matriz interna, luego una rutina separada lee o llena esa matriz directamente. De hecho, tenemos “leaky abstractions” para permitir especializaciones eficientes de varias rutinas. Varias funciones en columnas se pueden implementar de una manera genérica, no eficiente utilizando `IColumn` para extraer `Field` valores, o de una manera especializada utilizando el conocimiento del diseño de la memoria interna de los datos en un `IColumn` aplicación. Se implementa mediante la conversión de funciones a un `IColumn` escriba y trate con la representación interna directamente. Por ejemplo, `ColumnUInt64` tiene el `getData` método que devuelve una referencia a una matriz interna, luego una rutina separada lee o llena esa matriz directamente. Tenemos “leaky abstractions” para permitir especializaciones eficientes de varias rutinas.
## Tipos de datos {#data_types} ## Tipos de datos {#data_types}
`IDataType` es responsable de la serialización y deserialización: para leer y escribir fragmentos de columnas o valores individuales en formato binario o de texto. `IDataType` corresponde directamente a los tipos de datos en las tablas. Por ejemplo, heno `DataTypeUInt32`, `DataTypeDateTime`, `DataTypeString` y así sucesivamente. `IDataType` es responsable de la serialización y deserialización: para leer y escribir fragmentos de columnas o valores individuales en formato binario o de texto. `IDataType` corresponde directamente a los tipos de datos en las tablas. Por ejemplo, hay `DataTypeUInt32`, `DataTypeDateTime`, `DataTypeString` y así sucesivamente.
`IDataType` y `IColumn` están vagamente relacionados entre sí. Diferentes tipos de datos se pueden representar en la memoria por el mismo `IColumn` aplicación. Por ejemplo, `DataTypeUInt32` y `DataTypeDateTime` están representados por `ColumnUInt32` o `ColumnConstUInt32`. Además, el mismo tipo de datos se puede representar mediante `IColumn` aplicación. Por ejemplo, `DataTypeUInt8` puede ser representado por `ColumnUInt8` o `ColumnConstUInt8`. `IDataType` y `IColumn` están vagamente relacionados entre sí. Diferentes tipos de datos se pueden representar en la memoria por el mismo `IColumn` aplicación. Por ejemplo, `DataTypeUInt32` y `DataTypeDateTime` están representados por `ColumnUInt32` o `ColumnConstUInt32`. Además, el mismo tipo de datos se puede representar mediante `IColumn` aplicación. Por ejemplo, `DataTypeUInt8` puede ser representado por `ColumnUInt8` o `ColumnConstUInt8`.
`IDataType` sólo almacena metadatos. Por ejemplo, `DataTypeUInt8` no almacena nada en absoluto (excepto vptr) y `DataTypeFixedString` tiendas en solitario `N` (el tamaño de las cadenas de tamaño fijo). `IDataType` sólo almacena metadatos. Por ejemplo, `DataTypeUInt8` no almacena nada en absoluto (excepto vptr) y `DataTypeFixedString` tiendas solo `N` (el tamaño de las cadenas de tamaño fijo).
`IDataType` tiene métodos auxiliares para varios formatos de datos. Los ejemplos son métodos para serializar un valor con posibles citas, para serializar un valor para JSON y para serializar un valor como parte del formato XML. No hay correspondencia directa con los formatos de datos. Por ejemplo, los diferentes formatos de datos `Pretty` y `TabSeparated` Puede utilizar el mismo `serializeTextEscaped` método de ayuda de la `IDataType` interfaz. `IDataType` tiene métodos auxiliares para varios formatos de datos. Los ejemplos son métodos para serializar un valor con posibles citas, para serializar un valor para JSON y para serializar un valor como parte del formato XML. No hay correspondencia directa con los formatos de datos. Por ejemplo, los diferentes formatos de datos `Pretty` y `TabSeparated` puede utilizar el mismo `serializeTextEscaped` método de ayuda de la `IDataType` interfaz.
## Bloque {#block} ## Bloque {#block}
Naciones `Block` es un contenedor que representa un subconjunto (porción) de una tabla en la memoria. Es sólo un conjunto de triples: `(IColumn, IDataType, column name)`. Durante la ejecución de la consulta, los datos son procesados por `Block`s. Si tenemos un `Block`, tenemos datos (en el `IColumn` objeto), tenemos información sobre su tipo (en `IDataType`) que nos dice cómo lidiar con esa columna, y tenemos el nombre de la columna (ya sea el nombre de la columna original de la tabla o algún nombre artificial asignado para obtener resultados temporales de los cálculos). A `Block` es un contenedor que representa un subconjunto (porción) de una tabla en la memoria. Es sólo un conjunto de triples: `(IColumn, IDataType, column name)`. Durante la ejecución de la consulta, los datos son procesados por `Block`s. Si tenemos un `Block`, tenemos datos (en el `IColumn` objeto), tenemos información sobre su tipo (en `IDataType`) que nos dice cómo lidiar con esa columna, y tenemos el nombre de la columna. Podría ser el nombre de columna original de la tabla o algún nombre artificial asignado para obtener resultados temporales de los cálculos.
Cuando calculamos alguna función sobre columnas en un bloque, agregamos otra columna con su resultado al bloque, y no tocamos columnas para argumentos de la función porque las operaciones son inmutables. Más tarde, las columnas innecesarias se pueden eliminar del bloque, pero no se pueden modificar. Esto es conveniente para la eliminación de subexpresiones comunes. Cuando calculamos alguna función sobre columnas en un bloque, agregamos otra columna con su resultado al bloque, y no tocamos columnas para argumentos de la función porque las operaciones son inmutables. Más tarde, las columnas innecesarias se pueden eliminar del bloque, pero no se pueden modificar. Es conveniente para la eliminación de subexpresiones comunes.
Se crean bloques para cada fragmento de datos procesado. Tenga en cuenta que para el mismo tipo de cálculo, los nombres y tipos de columna siguen siendo los mismos para diferentes bloques y solo los cambios de datos de columna. Es mejor dividir los datos del bloque desde el encabezado del bloque porque los tamaños de bloque pequeños tendrán una gran sobrecarga de cadenas temporales para copiar shared\_ptrs y nombres de columna. Se crean bloques para cada fragmento de datos procesado. Tenga en cuenta que para el mismo tipo de cálculo, los nombres y tipos de columna siguen siendo los mismos para diferentes bloques y solo cambian los datos de columna. Es mejor dividir los datos del bloque desde el encabezado del bloque porque los tamaños de bloque pequeños tienen una gran sobrecarga de cadenas temporales para copiar shared\_ptrs y nombres de columna.
## Bloquear flujos {#block-streams} ## Bloquear flujos {#block-streams}
@ -54,90 +57,90 @@ Los flujos son responsables de:
1. Leer o escribir en una mesa. La tabla solo devuelve una secuencia para leer o escribir bloques. 1. Leer o escribir en una mesa. La tabla solo devuelve una secuencia para leer o escribir bloques.
2. Implementación de formatos de datos. Por ejemplo, si desea enviar datos a un terminal en `Pretty` formato, crea un flujo de salida de bloque donde presiona bloques y los formatea. 2. Implementación de formatos de datos. Por ejemplo, si desea enviar datos a un terminal en `Pretty` formato, crea un flujo de salida de bloque donde presiona bloques y los formatea.
3. Realización de transformaciones de datos. Digamos que tienes `IBlockInputStream` y desea crear una secuencia filtrada. Bienvenidos `FilterBlockInputStream` e inicializarlo con su transmisión. Luego, cuando tiras de un bloque de `FilterBlockInputStream`, extrae un bloque de su flujo, lo filtra y le devuelve el bloque filtrado. Las canalizaciones de ejecución de consultas se representan de esta manera. 3. Realización de transformaciones de datos. Digamos que tienes `IBlockInputStream` y desea crear una secuencia filtrada. Usted crea `FilterBlockInputStream` e inicializarlo con su transmisión. Luego, cuando tiras de un bloque de `FilterBlockInputStream`, extrae un bloque de su flujo, lo filtra y le devuelve el bloque filtrado. Las canalizaciones de ejecución de consultas se representan de esta manera.
Hay transformaciones más sofisticadas. Por ejemplo, cuando tiras de `AggregatingBlockInputStream`, lee todos los datos de su origen, los agrega y, a continuación, devuelve un flujo de datos agregados para usted. Otro ejemplo: `UnionBlockInputStream` acepta muchas fuentes de entrada en el constructor y también una serie de subprocesos. Lanza múltiples hilos y lee de múltiples fuentes en paralelo. Hay transformaciones más sofisticadas. Por ejemplo, cuando tiras de `AggregatingBlockInputStream`, lee todos los datos de su origen, los agrega y, a continuación, devuelve un flujo de datos agregados para usted. Otro ejemplo: `UnionBlockInputStream` acepta muchas fuentes de entrada en el constructor y también una serie de subprocesos. Lanza múltiples hilos y lee de múltiples fuentes en paralelo.
> Las secuencias de bloques usan el “pull” enfoque para controlar el flujo: cuando extrae un bloque de la primera secuencia, en consecuencia extrae los bloques requeridos de las secuencias anidadas, y toda la tubería de ejecución funcionará. Ni “pull” ni “push” es la mejor solución, porque el flujo de control está implícito y eso limita la implementación de varias características, como la ejecución simultánea de múltiples consultas (fusionando muchas tuberías). Esta limitación podría superarse con coroutines o simplemente ejecutando hilos adicionales que se esperan el uno al otro. Podemos tener más posibilidades si hacemos explícito el flujo de control: si localizamos la lógica para pasar datos de una unidad de cálculo a otra fuera de esas unidades de cálculo. Lea esto [artículo](http://journal.stuffwithstuff.com/2013/01/13/iteration-inside-and-out/) para más pensamientos. > Las secuencias de bloques usan el “pull” enfoque para controlar el flujo: cuando extrae un bloque de la primera secuencia, en consecuencia extrae los bloques requeridos de las secuencias anidadas, y toda la tubería de ejecución funcionará. Ni “pull” ni “push” es la mejor solución, porque el flujo de control está implícito y eso limita la implementación de varias características, como la ejecución simultánea de múltiples consultas (fusionando muchas tuberías). Esta limitación podría superarse con coroutines o simplemente ejecutando hilos adicionales que se esperan el uno al otro. Podemos tener más posibilidades si hacemos explícito el flujo de control: si localizamos la lógica para pasar datos de una unidad de cálculo a otra fuera de esas unidades de cálculo. Lea esto [artículo](http://journal.stuffwithstuff.com/2013/01/13/iteration-inside-and-out/) para más pensamientos.
Debemos tener en cuenta que la canalización de ejecución de consultas crea datos temporales en cada paso. Tratamos de mantener el tamaño del bloque lo suficientemente pequeño para que los datos temporales se ajusten a la memoria caché de la CPU. Con esa suposición, escribir y leer datos temporales es casi gratis en comparación con otros cálculos. Podríamos considerar una alternativa, que es fusionar muchas operaciones en la tubería, para hacer que la tubería sea lo más corta posible y eliminar gran parte de los datos temporales. Esto podría ser una ventaja, pero también tiene inconvenientes. Por ejemplo, una canalización dividida facilita la implementación de almacenamiento en caché de datos intermedios, el robo de datos intermedios de consultas similares que se ejecutan al mismo tiempo y la fusión de canalizaciones para consultas similares. Debemos tener en cuenta que la canalización de ejecución de consultas crea datos temporales en cada paso. Tratamos de mantener el tamaño del bloque lo suficientemente pequeño para que los datos temporales se ajusten a la memoria caché de la CPU. Con esa suposición, escribir y leer datos temporales es casi gratis en comparación con otros cálculos. Podríamos considerar una alternativa, que es fusionar muchas operaciones en la tubería. Podría hacer que la tubería sea lo más corta posible y eliminar gran parte de los datos temporales, lo que podría ser una ventaja, pero también tiene inconvenientes. Por ejemplo, una canalización dividida facilita la implementación de almacenamiento en caché de datos intermedios, el robo de datos intermedios de consultas similares que se ejecutan al mismo tiempo y la fusión de canalizaciones para consultas similares.
## Formato {#formats} ## Formato {#formats}
Los formatos de datos se implementan con flujos de bloques. Heno “presentational” sólo es adecuado para la salida de datos al cliente, tales como `Pretty` formato, que proporciona sólo `IBlockOutputStream`. Y hay formatos de entrada / salida, como `TabSeparated` o `JSONEachRow`. Los formatos de datos se implementan con flujos de bloques. Hay “presentational” sólo es adecuado para la salida de datos al cliente, tales como `Pretty` formato, que proporciona sólo `IBlockOutputStream`. Y hay formatos de entrada / salida, como `TabSeparated` o `JSONEachRow`.
También hay secuencias de filas: `IRowInputStream` y `IRowOutputStream`. Permiten pull/push datos por filas individuales, no por bloques. Y solo son necesarios para simplificar la implementación de formatos orientados a filas. Envoltura `BlockInputStreamFromRowInputStream` y `BlockOutputStreamFromRowOutputStream` seguros de que el usuario puede acceder a la información sobre cualquier tipo de información. También hay secuencias de filas: `IRowInputStream` y `IRowOutputStream`. Permiten pull/push datos por filas individuales, no por bloques. Y solo son necesarios para simplificar la implementación de formatos orientados a filas. Envoltura `BlockInputStreamFromRowInputStream` y `BlockOutputStreamFromRowOutputStream` le permite convertir flujos orientados a filas en flujos regulares orientados a bloques.
## E/S {#io} ## I/O {#io}
Para la entrada / salida orientada a bytes, heno `ReadBuffer` y `WriteBuffer` clases abstractas. Se usan en lugar de C ++ `iostream`s. No se preocupe: cada proyecto maduro de C ++ está usando algo más que `iostream`s por buenas razones. Para la entrada / salida orientada a bytes, hay `ReadBuffer` y `WriteBuffer` clases abstractas. Se usan en lugar de C ++ `iostream`s. No se preocupe: cada proyecto maduro de C ++ está usando algo más que `iostream`s por buenas razones.
`ReadBuffer` y `WriteBuffer` son solo un búfer contiguo y un cursor apuntando a la posición en ese búfer. Las implementaciones pueden poseer o no la memoria del búfer. Hay un método virtual para llenar el búfer con los siguientes datos (para `ReadBuffer`) o para vaciar el búfer en algún lugar (para `WriteBuffer`). Los métodos virtuales rara vez se llaman. `ReadBuffer` y `WriteBuffer` son solo un búfer contiguo y un cursor apuntando a la posición en ese búfer. Las implementaciones pueden poseer o no la memoria del búfer. Hay un método virtual para llenar el búfer con los siguientes datos (para `ReadBuffer`) o para vaciar el búfer en algún lugar (para `WriteBuffer`). Los métodos virtuales rara vez se llaman.
Implementaciones de `ReadBuffer`/`WriteBuffer` se utilizan para trabajar con archivos y descriptores de archivos y sockets de red, para implementar la compresión (`CompressedWriteBuffer` se inicializa con otro WriteBuffer y realiza la compresión antes de escribir datos en él), y para otros fines: los nombres `ConcatReadBuffer`, `LimitReadBuffer`, y `HashingWriteBuffer` hablar por sí mismos. Implementaciones de `ReadBuffer`/`WriteBuffer` se utilizan para trabajar con archivos y descriptores de archivos y sockets de red, para implementar la compresión (`CompressedWriteBuffer` is initialized with another WriteBuffer and performs compression before writing data to it), and for other purposes the names `ConcatReadBuffer`, `LimitReadBuffer`, y `HashingWriteBuffer` hablar por sí mismos.
Read / WriteBuffers solo se ocupan de bytes. Para ayudar con la entrada / salida formateada (por ejemplo, para escribir un número en formato decimal), hay funciones de `ReadHelpers` y `WriteHelpers` archivos de encabezado. Read / WriteBuffers solo se ocupan de bytes. Hay funciones de `ReadHelpers` y `WriteHelpers` archivos de encabezado para ayudar con el formato de entrada / salida. Por ejemplo, hay ayudantes para escribir un número en formato decimal.
Veamos qué sucede cuando quieres escribir un conjunto de resultados en `JSON` Formato una salida estándar. Tiene un conjunto de resultados listo para ser recuperado de `IBlockInputStream`. Bienvenidos `WriteBufferFromFileDescriptor(STDOUT_FILENO)` para escribir bytes en stdout. Bienvenidos `JSONRowOutputStream`, inicializado con eso `WriteBuffer` para escribir filas en `JSON` una salida estándar. Bienvenidos `BlockOutputStreamFromRowOutputStream` encima de él, para representarlo como `IBlockOutputStream`. Entonces usted llama `copyData` para transferir datos desde `IBlockInputStream` Naciones `IBlockOutputStream` y todo funciona. Internamente, `JSONRowOutputStream` escribirá varios delimitadores JSON y llamará al `IDataType::serializeTextJSON` con una referencia a `IColumn` y el número de fila como argumentos. Consecuentemente, `IDataType::serializeTextJSON` llamará a un método de `WriteHelpers.h`: por ejemplo, `writeText` para tipos numéricos y `writeJSONString` para `DataTypeString`. Veamos qué sucede cuando quieres escribir un conjunto de resultados en `JSON` formato a stdout. Tiene un conjunto de resultados listo para ser recuperado de `IBlockInputStream`. Usted crea `WriteBufferFromFileDescriptor(STDOUT_FILENO)` para escribir bytes en stdout. Usted crea `JSONRowOutputStream`, inicializado con eso `WriteBuffer` para escribir filas en `JSON` a stdout. Usted crea `BlockOutputStreamFromRowOutputStream` encima de él, para representarlo como `IBlockOutputStream`. Entonces usted llama `copyData` para transferir datos desde `IBlockInputStream` a `IBlockOutputStream` y todo funciona. Internamente, `JSONRowOutputStream` escribirá varios delimitadores JSON y llamará al `IDataType::serializeTextJSON` con una referencia a `IColumn` y el número de fila como argumentos. Consecuentemente, `IDataType::serializeTextJSON` llamará a un método de `WriteHelpers.h`: por ejemplo, `writeText` para tipos numéricos y `writeJSONString` para `DataTypeString`.
## Tabla {#tables} ## Tabla {#tables}
Las tablas están representadas por el `IStorage` interfaz. Las diferentes implementaciones de esa interfaz son diferentes motores de tabla. Los ejemplos hijo `StorageMergeTree`, `StorageMemory` y así sucesivamente. Las instancias de estas clases son solo tablas. El `IStorage` interfaz representa tablas. Las diferentes implementaciones de esa interfaz son diferentes motores de tabla. Los ejemplos son `StorageMergeTree`, `StorageMemory` y así sucesivamente. Las instancias de estas clases son solo tablas.
El más importante `IStorage` hijo `read` y `write`. También hay `alter`, `rename`, `drop` y así sucesivamente. El `read` método acepta los siguientes argumentos: el conjunto de columnas para leer de una tabla, el `AST` consulta a considerar, y el número deseado de flujos para devolver. Devuelve uno o varios `IBlockInputStream` objetos e información sobre la etapa de procesamiento de datos que se completó dentro de un motor de tablas durante la ejecución de la consulta. Clave `IStorage` son `read` y `write`. También hay `alter`, `rename`, `drop` y así sucesivamente. El `read` método acepta los siguientes argumentos: el conjunto de columnas para leer de una tabla, el `AST` consulta a considerar, y el número deseado de flujos para devolver. Devuelve uno o varios `IBlockInputStream` objetos e información sobre la etapa de procesamiento de datos que se completó dentro de un motor de tablas durante la ejecución de la consulta.
En la mayoría de los casos, el método de lectura solo es responsable de leer las columnas especificadas de una tabla, no de ningún procesamiento de datos adicional. Todo el procesamiento de datos adicional es realizado por el intérprete de consultas y está fuera de la responsabilidad de `IStorage`. En la mayoría de los casos, el método de lectura solo es responsable de leer las columnas especificadas de una tabla, no de ningún procesamiento de datos adicional. Todo el procesamiento de datos adicional es realizado por el intérprete de consultas y está fuera de la responsabilidad de `IStorage`.
Pero hay excepciones notables: Pero hay excepciones notables:
- La consulta AST se pasa al `read` y el motor de tablas puede usarlo para derivar el uso del índice y leer menos datos de una tabla. - La consulta AST se pasa al `read` método, y el motor de tablas puede usarlo para derivar el uso del índice y leer menos datos de una tabla.
- A veces, el motor de tablas puede procesar los datos a una etapa específica. Por ejemplo, `StorageDistributed` puede enviar una consulta a servidores remotos, pedirles que procesen datos a una etapa donde se puedan fusionar datos de diferentes servidores remotos y devolver esos datos preprocesados. El intérprete de consultas termina de procesar los datos. - A veces, el motor de tablas puede procesar los datos a una etapa específica. Por ejemplo, `StorageDistributed` puede enviar una consulta a servidores remotos, pedirles que procesen datos a una etapa donde se puedan fusionar datos de diferentes servidores remotos y devolver esos datos preprocesados. El intérprete de consultas termina de procesar los datos.
La mesa de `read` método puede devolver múltiples `IBlockInputStream` objetos para permitir el procesamiento de datos en paralelo. Estos flujos de entrada de bloques múltiples pueden leer de una tabla en paralelo. A continuación, puede ajustar estas secuencias con varias transformaciones (como la evaluación de expresiones o el filtrado) que se pueden calcular de forma independiente y crear un `UnionBlockInputStream` encima de ellos, para leer desde múltiples flujos en paralelo. Tabla `read` método puede devolver múltiples `IBlockInputStream` objetos para permitir el procesamiento de datos en paralelo. Estos flujos de entrada de bloques múltiples pueden leer de una tabla en paralelo. A continuación, puede ajustar estas secuencias con varias transformaciones (como la evaluación de expresiones o el filtrado) que se pueden calcular de forma independiente y crear un `UnionBlockInputStream` encima de ellos, para leer desde múltiples flujos en paralelo.
También hay `TableFunction`Estas son funciones que devuelven un `IStorage` objeto a utilizar en el `FROM` cláusula de una consulta. También hay `TableFunction`s. Estas son funciones que devuelven un `IStorage` objeto a utilizar en el `FROM` cláusula de una consulta.
Para tener una idea rápida de cómo implementar su propio motor de tablas, vea algo simple, como `StorageMemory` o `StorageTinyLog`. Para tener una idea rápida de cómo implementar su motor de tabla, vea algo simple, como `StorageMemory` o `StorageTinyLog`.
> Como resultado de la `read` método, `IStorage` devoluciones `QueryProcessingStage` información sobre qué partes de la consulta ya se han calculado dentro del almacenamiento. Actualmente, solo tenemos una granularidad muy gruesa para esa información. No hay forma de que el almacenamiento diga “I have already processed this part of the expression in WHERE, for this range of data”. Tenemos que trabajar en eso. > Como resultado de la `read` método, `IStorage` devoluciones `QueryProcessingStage` information about what parts of the query were already calculated inside storage.
## Analizador {#parsers} ## Analizador {#parsers}
Una consulta es analizada por un analizador de descenso recursivo escrito a mano. Por ejemplo, `ParserSelectQuery` simplemente llama recursivamente a los analizadores subyacentes para varias partes de la consulta. Los analizadores crean un `AST`. El `AST` está representado por nodos, que son instancias de `IAST`. Un analizador de descenso recursivo escrito a mano analiza una consulta. Por ejemplo, `ParserSelectQuery` simplemente llama recursivamente a los analizadores subyacentes para varias partes de la consulta. Los analizadores crean un `AST`. El `AST` está representado por nodos, que son instancias de `IAST`.
> Los generadores de analizadores no se utilizan por razones históricas. > Los generadores de analizadores no se utilizan por razones históricas.
## Interprete {#interpreters} ## Interprete {#interpreters}
Los intérpretes son responsables de crear la canalización de ejecución de consultas `AST`. Hay intérpretes simples, como `InterpreterExistsQuery` y `InterpreterDropQuery` o el más sofisticado `InterpreterSelectQuery`. La canalización de ejecución de consultas es una combinación de flujos de entrada o salida de bloques. Por ejemplo, el resultado de interpretar el `SELECT` la consulta es la `IBlockInputStream` para leer el conjunto de resultados; el resultado de la consulta INSERT es el `IBlockOutputStream` para escribir datos para su inserción, y el resultado de interpretar el `INSERT SELECT` la consulta es la `IBlockInputStream` que devuelve un conjunto de resultados vacío en la primera lectura, pero que copia datos de `SELECT` Naciones `INSERT` al mismo tiempo. Los intérpretes son responsables de crear la canalización de ejecución de consultas `AST`. Hay intérpretes simples, como `InterpreterExistsQuery` y `InterpreterDropQuery` o el más sofisticado `InterpreterSelectQuery`. La canalización de ejecución de consultas es una combinación de flujos de entrada o salida de bloques. Por ejemplo, el resultado de interpretar el `SELECT` la consulta es la `IBlockInputStream` para leer el conjunto de resultados; el resultado de la consulta INSERT es el `IBlockOutputStream` para escribir datos para su inserción, y el resultado de interpretar el `INSERT SELECT` la consulta es la `IBlockInputStream` que devuelve un conjunto de resultados vacío en la primera lectura, pero que copia datos de `SELECT` a `INSERT` al mismo tiempo.
`InterpreterSelectQuery` utilizar `ExpressionAnalyzer` y `ExpressionActions` maquinaria para el análisis de consultas y transformaciones. Aquí es donde se realizan la mayoría de las optimizaciones de consultas basadas en reglas. `ExpressionAnalyzer` Se deben extraer varias transformaciones de consultas y optimizaciones para separar clases para permitir transformaciones modulares o consultas. `InterpreterSelectQuery` utilizar `ExpressionAnalyzer` y `ExpressionActions` maquinaria para el análisis de consultas y transformaciones. Aquí es donde se realizan la mayoría de las optimizaciones de consultas basadas en reglas. `ExpressionAnalyzer` es bastante complicado y debe reescribirse: se deben extraer varias transformaciones de consultas y optimizaciones para separar clases para permitir transformaciones modulares o consultas.
## Función {#functions} ## Función {#functions}
Hay funciones ordinarias y funciones agregadas. Para las funciones agregadas, consulte la siguiente sección. Hay funciones ordinarias y funciones agregadas. Para las funciones agregadas, consulte la siguiente sección.
Las funciones ordinarias no cambian el número de filas; funcionan como si estuvieran procesando cada fila de forma independiente. De hecho, las funciones no se llaman para filas individuales, sino para `Block`de datos para implementar la ejecución de consultas vectorizadas. Ordinary functions don't change the number of rows they work as if they are processing each row independently. In fact, functions are not called for individual rows, but for `Block`de datos para implementar la ejecución de consultas vectorizadas.
Hay algunas funciones diversas, como [BlockSize](../query_language/functions/other_functions.md#function-blocksize), [rowNumberInBlock](../query_language/functions/other_functions.md#function-rownumberinblock), y [runningAccumulate](../query_language/functions/other_functions.md#function-runningaccumulate), que explotan el procesamiento de bloques y violan la independencia de las filas. Hay algunas funciones diversas, como [BlockSize](../sql_reference/functions/other_functions.md#function-blocksize), [rowNumberInBlock](../sql_reference/functions/other_functions.md#function-rownumberinblock), y [runningAccumulate](../sql_reference/functions/other_functions.md#function-runningaccumulate), que explotan el procesamiento de bloques y violan la independencia de las filas.
ClickHouse tiene una tipificación fuerte, por lo que no se produce la conversión de tipo implícita. Si una función no admite una combinación específica de tipos, se lanzará una excepción. Pero las funciones pueden funcionar (estar sobrecargadas) para muchas combinaciones diferentes de tipos. Por ejemplo, el `plus` función (para implementar el `+` operador) funciona para cualquier combinación de tipos numéricos: `UInt8` + `Float32`, `UInt16` + `Int8` y así sucesivamente. Además, algunas funciones variadas pueden aceptar cualquier número de argumentos, como el `concat` función. ClickHouse tiene una tipificación fuerte, por lo que no hay conversión de tipo implícita. Si una función no admite una combinación específica de tipos, produce una excepción. Pero las funciones pueden funcionar (estar sobrecargadas) para muchas combinaciones diferentes de tipos. Por ejemplo, el `plus` función (para implementar el `+` operador) funciona para cualquier combinación de tipos numéricos: `UInt8` + `Float32`, `UInt16` + `Int8` y así sucesivamente. Además, algunas funciones variadas pueden aceptar cualquier número de argumentos, como el `concat` función.
Implementar una función puede ser un poco inconveniente porque una función distribuye explícitamente tipos de datos compatibles y `IColumns`. Por ejemplo, el `plus` función tiene código generado por la creación de instancias de una plantilla de C ++ para cada combinación de tipos numéricos, y para argumentos izquierdo y derecho constantes o no constantes. Implementar una función puede ser un poco inconveniente porque una función distribuye explícitamente tipos de datos compatibles y `IColumns`. Por ejemplo, el `plus` La función tiene código generado por la creación de instancias de una plantilla de C ++ para cada combinación de tipos numéricos y argumentos izquierdo y derecho constantes o no constantes.
> Este es un buen lugar para implementar la generación de código en tiempo de ejecución para evitar la hinchazón del código de la plantilla. Además, permitirá agregar funciones fusionadas como multiplicar-agregar fusionado o hacer comparaciones múltiples en una iteración de bucle. Es un excelente lugar para implementar la generación de código en tiempo de ejecución para evitar la hinchazón del código de plantilla. Además, permite agregar funciones fusionadas como multiplicar-agregar fusionado o hacer comparaciones múltiples en una iteración de bucle.
Debido a la ejecución de consultas vectorizadas, las funciones no se cortocircuitan. Por ejemplo, si escribe `WHERE f(x) AND g(y)`, ambos lados se calculan, incluso para las filas, cuando `f(x)` es cero (excepto cuando `f(x)` es una expresión constante cero). Pero si la selectividad del `f(x)` la condición es alta, y el cálculo de `f(x)` es mucho más barato que `g(y)`, es mejor implementar el cálculo de paso múltiple: primero calcular `f(x)`, a continuación, filtrar columnas por el resultado, y luego calcular `g(y)` solo para trozos de datos más pequeños y filtrados. Debido a la ejecución de consultas vectorizadas, las funciones no se cortocircuitan. Por ejemplo, si escribe `WHERE f(x) AND g(y)`, ambos lados se calculan, incluso para las filas, cuando `f(x)` es cero (excepto cuando `f(x)` es una expresión constante cero). Pero si la selectividad del `f(x)` la condición es alta, y el cálculo de `f(x)` es mucho más barato que `g(y)`, es mejor implementar el cálculo de paso múltiple. Primero calcularía `f(x)`, a continuación, filtrar columnas por el resultado, y luego calcular `g(y)` solo para trozos de datos más pequeños y filtrados.
## Funciones agregadas {#aggregate-functions} ## Funciones agregadas {#aggregate-functions}
Las funciones agregadas son funciones con estado. Acumulan valores pasados en algún estado y le permiten obtener resultados de ese estado. Se gestionan con el `IAggregateFunction` interfaz. Los estados pueden ser bastante simples (el estado para `AggregateFunctionCount` es sólo una sola `UInt64` valor) o bastante complejo (el estado de `AggregateFunctionUniqCombined` es una combinación de una matriz lineal, una tabla hash y un `HyperLogLog` estructura de datos probabilística). Las funciones agregadas son funciones con estado. Acumulan valores pasados en algún estado y le permiten obtener resultados de ese estado. Se gestionan con el `IAggregateFunction` interfaz. Los estados pueden ser bastante simples (el estado para `AggregateFunctionCount` es sólo una sola `UInt64` valor) o bastante complejo (el estado de `AggregateFunctionUniqCombined` es una combinación de una matriz lineal, una tabla hash, y un `HyperLogLog` estructura de datos probabilística).
Para tratar con múltiples estados mientras se ejecuta una alta cardinalidad `GROUP BY` consulta, los estados se asignan en `Arena` (un grupo de memoria), o podrían asignarse en cualquier pieza de memoria adecuada. Los estados pueden tener un constructor y destructor no triviales: por ejemplo, los estados de agregación complejos pueden asignar memoria adicional ellos mismos. Esto requiere cierta atención a la creación y destrucción de estados y pasar adecuadamente su propiedad, para realizar un seguimiento de quién y cuándo destruirá los estados. Los Estados están asignados en `Arena` (un grupo de memoria) para tratar con múltiples estados mientras se ejecuta una alta cardinalidad `GROUP BY` consulta. Los estados pueden tener un constructor y destructor no trivial: por ejemplo, los estados de agregación complicados pueden asignar memoria adicional ellos mismos. Requiere cierta atención a la creación y destrucción de estados y a la adecuada aprobación de su orden de propiedad y destrucción.
Los estados de agregación se pueden serializar y deserializar para pasar a través de la red durante la ejecución de consultas distribuidas o para escribirlos en el disco donde no hay suficiente RAM. Incluso se pueden almacenar en una tabla con el `DataTypeAggregateFunction` para permitir la agregación incremental de datos. Los estados de agregación se pueden serializar y deserializar para pasar a través de la red durante la ejecución de consultas distribuidas o para escribirlos en el disco donde no hay suficiente RAM. Incluso se pueden almacenar en una tabla con el `DataTypeAggregateFunction` para permitir la agregación incremental de datos.
> El formato de datos serializados para los estados de función agregados no tiene versiones en este momento. Esto está bien si los estados agregados solo se almacenan temporalmente. Pero tenemos el `AggregatingMergeTree` motor de tabla para la agregación incremental, y la gente ya lo está utilizando en producción. Esta es la razón por la que deberíamos agregar compatibilidad con versiones anteriores al cambiar el formato serializado para cualquier función agregada en el futuro. > El formato de datos serializados para los estados de función agregados no tiene versiones en este momento. Está bien si los estados agregados solo se almacenan temporalmente. Pero tenemos el `AggregatingMergeTree` motor de tabla para la agregación incremental, y la gente ya lo está utilizando en producción. Es la razón por la que se requiere compatibilidad con versiones anteriores al cambiar el formato serializado para cualquier función agregada en el futuro.
## Servidor {#server} ## Servidor {#server}
@ -147,52 +150,54 @@ El servidor implementa varias interfaces diferentes:
- Una interfaz TCP para el cliente nativo de ClickHouse y para la comunicación entre servidores durante la ejecución de consultas distribuidas. - Una interfaz TCP para el cliente nativo de ClickHouse y para la comunicación entre servidores durante la ejecución de consultas distribuidas.
- Una interfaz para transferir datos para la replicación. - Una interfaz para transferir datos para la replicación.
Internamente, es solo un servidor multiproceso básico sin corutinas, fibras, etc. Dado que el servidor no está diseñado para procesar una alta tasa de consultas simples, sino que está destinado a procesar una tasa relativamente baja de consultas complejas, cada uno de ellos puede procesar una gran cantidad de datos para análisis. Internamente, es solo un servidor multiproceso primitivo sin corutinas ni fibras. Dado que el servidor no está diseñado para procesar una alta tasa de consultas simples, sino para procesar una tasa relativamente baja de consultas complejas, cada uno de ellos puede procesar una gran cantidad de datos para análisis.
El servidor inicializa el `Context` clase con el entorno necesario para la ejecución de consultas: la lista de bases de datos disponibles, usuarios y derechos de acceso, configuración, clústeres, la lista de procesos, el registro de consultas, etc. Este entorno es utilizado por intérpretes. El servidor inicializa el `Context` clase con el entorno necesario para la ejecución de consultas: la lista de bases de datos disponibles, usuarios y derechos de acceso, configuración, clústeres, la lista de procesos, el registro de consultas, etc. Los intérpretes utilizan este entorno.
Mantenemos una compatibilidad completa hacia atrás y hacia adelante para el protocolo TCP del servidor: los clientes antiguos pueden hablar con servidores nuevos y los nuevos clientes pueden hablar con servidores antiguos. Pero no queremos mantenerlo eternamente, y estamos eliminando el soporte para versiones antiguas después de aproximadamente un año. Mantenemos una compatibilidad total con versiones anteriores y posteriores para el protocolo TCP del servidor: los clientes antiguos pueden hablar con servidores nuevos y los nuevos clientes pueden hablar con servidores antiguos. Pero no queremos mantenerlo eternamente, y estamos eliminando el soporte para versiones antiguas después de aproximadamente un año.
> Para todas las aplicaciones externas, recomendamos usar la interfaz HTTP porque es simple y fácil de usar. El protocolo TCP está más estrechamente vinculado a las estructuras de datos internas: utiliza un formato interno para pasar bloques de datos y utiliza marcos personalizados para datos comprimidos. No hemos lanzado una biblioteca C para ese protocolo porque requiere vincular la mayor parte de la base de código ClickHouse, lo cual no es práctico. !!! note "Nota"
Para la mayoría de las aplicaciones externas, recomendamos usar la interfaz HTTP porque es simple y fácil de usar. El protocolo TCP está más estrechamente vinculado a las estructuras de datos internas: utiliza un formato interno para pasar bloques de datos y utiliza marcos personalizados para datos comprimidos. No hemos lanzado una biblioteca C para ese protocolo porque requiere vincular la mayor parte de la base de código ClickHouse, lo cual no es práctico.
## Ejecución de consultas distribuidas {#distributed-query-execution} ## Ejecución de consultas distribuidas {#distributed-query-execution}
Los servidores de una configuración de clúster son en su mayoría independientes. Puede crear un `Distributed` en uno o todos los servidores de un clúster. El `Distributed` la tabla no almacena datos en sí misma; solo proporciona un “view” a todas las tablas locales en varios nodos de un clúster. Cuando se SELECCIONA desde un `Distributed` tabla, reescribe esa consulta, elige nodos remotos de acuerdo con la configuración de equilibrio de carga y les envía la consulta. El `Distributed` table solicita a los servidores remotos que procesen una consulta hasta una etapa en la que se pueden fusionar resultados intermedios de diferentes servidores. Luego recibe los resultados intermedios y los fusiona. La tabla distribuida intenta distribuir tanto trabajo como sea posible a servidores remotos y no envía muchos datos intermedios a través de la red. Los servidores de una configuración de clúster son en su mayoría independientes. Puede crear un `Distributed` en uno o todos los servidores de un clúster. El `Distributed` table does not store data itself it only provides a “view” a todas las tablas locales en varios nodos de un clúster. Cuando se SELECCIONA desde un `Distributed` tabla, reescribe esa consulta, elige nodos remotos de acuerdo con la configuración de equilibrio de carga y les envía la consulta. El `Distributed` table solicita a los servidores remotos que procesen una consulta hasta una etapa en la que se pueden fusionar resultados intermedios de diferentes servidores. Luego recibe los resultados intermedios y los fusiona. La tabla distribuida intenta distribuir tanto trabajo como sea posible a servidores remotos y no envía muchos datos intermedios a través de la red.
> Las cosas se vuelven más complicadas cuando tiene subconsultas en cláusulas IN o JOIN y cada una de ellas usa un `Distributed` tabla. Tenemos diferentes estrategias para la ejecución de estas consultas. Las cosas se vuelven más complicadas cuando tiene subconsultas en cláusulas IN o JOIN, y cada una de ellas usa un `Distributed` tabla. Tenemos diferentes estrategias para la ejecución de estas consultas.
No existe un plan de consulta global para la ejecución de consultas distribuidas. Cada nodo tiene su propio plan de consulta local para su parte del trabajo. Solo tenemos una ejecución simple de consultas distribuidas de un solo paso: enviamos consultas para nodos remotos y luego fusionamos los resultados. Pero esto no es factible para consultas difíciles con alta cardinalidad GROUP BY o con una gran cantidad de datos temporales para JOIN: en tales casos, necesitamos “reshuffle” datos entre servidores, lo que requiere una coordinación adicional. ClickHouse no admite ese tipo de ejecución de consultas, y tenemos que trabajar en ello. No existe un plan de consulta global para la ejecución de consultas distribuidas. Cada nodo tiene su plan de consulta local para su parte del trabajo. Solo tenemos una ejecución simple de consultas distribuidas de un solo paso: enviamos consultas para nodos remotos y luego fusionamos los resultados. Pero esto no es factible para consultas complicadas con alta cardinalidad GROUP BY o con una gran cantidad de datos temporales para JOIN. En tales casos, necesitamos “reshuffle” datos entre servidores, lo que requiere una coordinación adicional. ClickHouse no admite ese tipo de ejecución de consultas, y tenemos que trabajar en ello.
## Árbol de fusión {#merge-tree} ## Árbol de fusión {#merge-tree}
`MergeTree` es una familia de motores de almacenamiento que admite la indexación por clave principal. La clave principal puede ser una tupla arbitraria de columnas o expresiones. Datos en un `MergeTree` se almacena en “parts”. Cada parte almacena datos en el orden de clave primaria (los datos son ordenados lexicográficamente por la tupla de clave primaria). Todas las columnas de la tabla se almacenan en `column.bin` archivos en estas partes. Los archivos consisten en bloques comprimidos. Cada bloque suele ser de 64 KB a 1 MB de datos sin comprimir, dependiendo del tamaño del valor promedio. Los bloques constan de valores de columna colocados contiguamente uno tras otro. Los valores de columna están en el mismo orden para cada columna (el orden está definido por la clave principal), por lo que cuando itera por muchas columnas, obtiene valores para las filas correspondientes. `MergeTree` es una familia de motores de almacenamiento que admite la indexación por clave principal. La clave principal puede ser una tupla arbitraria de columnas o expresiones. Datos en un `MergeTree` se almacena en “parts”. Cada parte almacena los datos en el orden de la clave principal, por lo que la tupla de la clave principal ordena los datos lexicográficamente. Todas las columnas de la tabla se almacenan en `column.bin` archivos en estas partes. Los archivos consisten en bloques comprimidos. Cada bloque suele ser de 64 KB a 1 MB de datos sin comprimir, dependiendo del tamaño del valor promedio. Los bloques constan de valores de columna colocados contiguamente uno tras otro. Los valores de columna están en el mismo orden para cada columna (la clave principal define el orden), por lo que cuando itera por muchas columnas, obtiene valores para las filas correspondientes.
La clave principal en sí es “sparse”. No aborda todas las filas, sino solo algunos rangos de datos. Separado `primary.idx` file tiene el valor de la clave principal para cada fila N-ésima, donde se llama N `index_granularity` (generalmente, N = 8192). Además, para cada columna, tenemos `column.mrk` Archivos con “marks,” que son desplazamientos a cada fila N-ésima en el archivo de datos. Cada marca es un par: el desplazamiento en el archivo al comienzo del bloque comprimido y el desplazamiento en el bloque descomprimido al comienzo de los datos. Por lo general, los bloques comprimidos están alineados por marcas, y el desplazamiento en el bloque descomprimido es cero. Datos para `primary.idx` siempre reside en la memoria y los datos para `column.mrk` archivos se almacena en caché. La clave principal en sí es “sparse”. No aborda cada fila, sino solo algunos rangos de datos. Separado `primary.idx` file tiene el valor de la clave principal para cada fila N-ésima, donde se llama N `index_granularity` (generalmente, N = 8192). Además, para cada columna, tenemos `column.mrk` archivos con “marks,” que son desplazamientos a cada fila N-ésima en el archivo de datos. Cada marca es un par: el desplazamiento en el archivo al comienzo del bloque comprimido y el desplazamiento en el bloque descomprimido al comienzo de los datos. Por lo general, los bloques comprimidos están alineados por marcas, y el desplazamiento en el bloque descomprimido es cero. Datos para `primary.idx` siempre reside en la memoria, y los datos para `column.mrk` archivos se almacena en caché.
Cuando vamos a leer algo de una parte en `MergeTree` miramos `primary.idx` datos y localice rangos que posiblemente podrían contener datos solicitados, luego mire `column.mrk` datos y calcular compensaciones para dónde comenzar a leer esos rangos. Debido a la escasez, el exceso de datos puede ser leído. ClickHouse no es adecuado para una gran carga de consultas de puntos simples, porque todo el rango con `index_granularity` se deben leer filas para cada clave, y todo el bloque comprimido debe descomprimirse para cada columna. Hicimos que el índice sea disperso porque debemos poder mantener billones de filas por único servidor sin un consumo de memoria notable para el índice. Además, debido a que la clave principal es escasa, no es única: no puede verificar la existencia de la clave en la tabla en el momento de INSERTAR. Podría tener muchas filas con la misma clave en una tabla. Cuando vamos a leer algo de una parte en `MergeTree` miramos `primary.idx` datos y localice rangos que podrían contener datos solicitados, luego mire `column.mrk` datos y calcular compensaciones para dónde comenzar a leer esos rangos. Debido a la escasez, el exceso de datos puede ser leído. ClickHouse no es adecuado para una gran carga de consultas de puntos simples, porque todo el rango con `index_granularity` se deben leer filas para cada clave, y todo el bloque comprimido debe descomprimirse para cada columna. Hicimos que el índice sea disperso porque debemos poder mantener billones de filas por único servidor sin un consumo de memoria notable para el índice. Además, debido a que la clave principal es escasa, no es única: no puede verificar la existencia de la clave en la tabla en el momento de INSERTAR. Podría tener muchas filas con la misma clave en una tabla.
Cuando `INSERT` un montón de datos en `MergeTree`, ese grupo está ordenado por orden de clave primaria y forma una nueva parte. Para mantener el número de partes relativamente bajo, hay subprocesos de fondo que seleccionan periódicamente algunas partes y las fusionan en una sola parte ordenada. Es por eso que se llama `MergeTree`. Por supuesto, la fusión conduce a “write amplification”. Todas las partes son inmutables: solo se crean y eliminan, pero no se modifican. Cuando se ejecuta SELECT, contiene una instantánea de la tabla (un conjunto de partes). Después de la fusión, también mantenemos las piezas viejas durante algún tiempo para facilitar la recuperación después de la falla, por lo que si vemos que alguna parte fusionada probablemente esté rota, podemos reemplazarla con sus partes fuente. Cuando `INSERT` un montón de datos en `MergeTree`, ese grupo está ordenado por orden de clave primaria y forma una nueva parte. Hay subprocesos de fondo que seleccionan periódicamente algunas partes y las fusionan en una sola parte ordenada para mantener el número de partes relativamente bajo. Es por eso que se llama `MergeTree`. Por supuesto, la fusión conduce a “write amplification”. Todas las partes son inmutables: solo se crean y eliminan, pero no se modifican. Cuando se ejecuta SELECT, contiene una instantánea de la tabla (un conjunto de partes). Después de la fusión, también mantenemos las piezas viejas durante algún tiempo para facilitar la recuperación después de la falla, por lo que si vemos que alguna parte fusionada probablemente esté rota, podemos reemplazarla con sus partes de origen.
`MergeTree` no es un árbol de LSM porque no contiene “memtable” y “log”: los datos insertados se escriben directamente en el sistema de archivos. Esto lo hace adecuado solo para INSERTAR datos en lotes, no por fila individual y no con mucha frecuencia: aproximadamente una vez por segundo está bien, pero mil veces por segundo no lo está. Lo hicimos de esta manera por simplicidad, y porque ya estamos insertando datos en lotes en nuestras aplicaciones. `MergeTree` no es un árbol de LSM porque no contiene “memtable” y “log”: inserted data is written directly to the filesystem. This makes it suitable only to INSERT data in batches, not by individual row and not very frequently about once per second is ok, but a thousand times a second is not. We did it this way for simplicity's sake, and because we are already inserting data in batches in our applications.
> Las tablas MergeTree solo pueden tener un índice (primario): no hay índices secundarios. Sería bueno permitir múltiples representaciones físicas bajo una tabla lógica, por ejemplo, para almacenar datos en más de un orden físico o incluso para permitir representaciones con datos preagregados junto con datos originales. > Las tablas MergeTree solo pueden tener un índice (primario): no hay índices secundarios. Sería bueno permitir múltiples representaciones físicas bajo una tabla lógica, por ejemplo, para almacenar datos en más de un orden físico o incluso para permitir representaciones con datos preagregados junto con datos originales.
Hay motores MergeTree que están haciendo un trabajo adicional durante las fusiones en segundo plano. Los ejemplos son `CollapsingMergeTree` y `AggregatingMergeTree`. Esto podría tratarse como un soporte especial para actualizaciones. Tenga en cuenta que estas no son actualizaciones reales porque los usuarios generalmente no tienen control sobre el tiempo en que se ejecutan las fusiones en segundo plano y los datos en un `MergeTree` casi siempre se almacena en más de una parte, no en forma completamente fusionada. Hay motores MergeTree que están haciendo un trabajo adicional durante las fusiones en segundo plano. Los ejemplos son `CollapsingMergeTree` y `AggregatingMergeTree`. Esto podría tratarse como soporte especial para actualizaciones. Tenga en cuenta que estas no son actualizaciones reales porque los usuarios generalmente no tienen control sobre el tiempo en que se ejecutan las fusiones en segundo plano y los datos en un `MergeTree` casi siempre se almacena en más de una parte, no en forma completamente fusionada.
## Replicación {#replication} ## Replicación {#replication}
La replicación en ClickHouse se implementa por tabla. Podría tener algunas tablas replicadas y otras no replicadas en el mismo servidor. También puede tener tablas replicadas de diferentes maneras, como una tabla con replicación de dos factores y otra con replicación de tres factores. La replicación en ClickHouse se puede configurar por tabla. Podría tener algunas tablas replicadas y otras no replicadas en el mismo servidor. También puede tener tablas replicadas de diferentes maneras, como una tabla con replicación de dos factores y otra con replicación de tres factores.
La replicación se implementa en el `ReplicatedMergeTree` motor de almacenamiento. El camino en `ZooKeeper` se especifica como un parámetro para el motor de almacenamiento. Todas las tablas con la misma ruta en `ZooKeeper` se convierten en réplicas entre sí: sincronizan sus datos y mantienen la coherencia. Las réplicas se pueden agregar y eliminar dinámicamente simplemente creando o soltando una tabla. La replicación se implementa en el `ReplicatedMergeTree` motor de almacenamiento. El camino en `ZooKeeper` se especifica como un parámetro para el motor de almacenamiento. Todas las tablas con la misma ruta en `ZooKeeper` se convierten en réplicas entre sí: sincronizan sus datos y mantienen la coherencia. Las réplicas se pueden agregar y eliminar dinámicamente simplemente creando o soltando una tabla.
La replicación utiliza un esquema multi-maestro asíncrono. Puede insertar datos en cualquier réplica que tenga una sesión con `ZooKeeper`, y los datos se replican en todas las demás réplicas de forma asíncrona. Debido a que ClickHouse no admite UPDATE, la replicación está libre de conflictos. Como no hay reconocimiento de quórum de inserciones, los datos recién insertados pueden perderse si un nodo falla. La replicación utiliza un esquema multi-maestro asíncrono. Puede insertar datos en cualquier réplica que tenga una sesión con `ZooKeeper`, y los datos se replican en todas las demás réplicas de forma asíncrona. Como ClickHouse no admite UPDATE, la replicación está libre de conflictos. Como no hay reconocimiento de quórum de inserciones, los datos recién insertados pueden perderse si un nodo falla.
Los metadatos para la replicación se almacenan en ZooKeeper. Hay un registro de replicación que enumera las acciones que se deben realizar. Las acciones son: obtener parte; fusionar partes; soltar una partición, etc. Cada réplica copia el registro de replicación en su cola y, a continuación, ejecuta las acciones desde la cola. Por ejemplo, en la inserción, el “get the part” la acción se crea en el registro y cada réplica descarga esa parte. Las fusiones se coordinan entre réplicas para obtener resultados idénticos en bytes. Todas las piezas se combinan de la misma manera en todas las réplicas. Para lograr esto, se elige una réplica como líder y esa réplica inicia fusiones y escrituras “merge parts” Acciones al registro. Los metadatos para la replicación se almacenan en ZooKeeper. Hay un registro de replicación que enumera las acciones que se deben realizar. Las acciones son: obtener parte; fusionar partes; soltar una partición, etc. Cada réplica copia el registro de replicación en su cola y, a continuación, ejecuta las acciones desde la cola. Por ejemplo, en la inserción, el “get the part” la acción se crea en el registro y cada réplica descarga esa parte. Las fusiones se coordinan entre réplicas para obtener resultados idénticos en bytes. Todas las piezas se combinan de la misma manera en todas las réplicas. Se logra eligiendo una réplica como líder, y esa réplica inicia fusiones y escrituras “merge parts” acciones al registro.
La replicación es física: solo las partes comprimidas se transfieren entre nodos, no consultas. Para reducir el costo de la red (para evitar la amplificación de la red), las fusiones se procesan en cada réplica de forma independiente en la mayoría de los casos. Las piezas combinadas grandes se envían a través de la red solo en casos de retraso de replicación significativo. La replicación es física: solo las partes comprimidas se transfieren entre nodos, no consultas. Las fusiones se procesan en cada réplica de forma independiente en la mayoría de los casos para reducir los costos de red al evitar la amplificación de la red. Las piezas combinadas grandes se envían a través de la red solo en casos de retraso de replicación significativo.
Además, cada réplica almacena su estado en ZooKeeper como el conjunto de piezas y sus sumas de comprobación. Cuando el estado en el sistema de archivos local difiere del estado de referencia en ZooKeeper, la réplica restaura su coherencia descargando partes faltantes y rotas de otras réplicas. Cuando hay algunos datos inesperados o rotos en el sistema de archivos local, ClickHouse no los elimina, sino que los mueve a un directorio separado y los olvida. Además, cada réplica almacena su estado en ZooKeeper como el conjunto de piezas y sus sumas de comprobación. Cuando el estado en el sistema de archivos local difiere del estado de referencia en ZooKeeper, la réplica restaura su coherencia descargando partes faltantes y rotas de otras réplicas. Cuando hay algunos datos inesperados o rotos en el sistema de archivos local, ClickHouse no los elimina, sino que los mueve a un directorio separado y los olvida.
> El clúster ClickHouse consta de fragmentos independientes y cada fragmento consta de réplicas. El clúster no es elástico, por lo que después de agregar un nuevo fragmento, los datos no se reequilibran automáticamente entre fragmentos. En su lugar, la carga del clúster será desigual. Esta implementación le da más control, y está bien para clústeres relativamente pequeños, como decenas de nodos. Pero para los clústeres con cientos de nodos que estamos utilizando en producción, este enfoque se convierte en un inconveniente significativo. Debemos implementar un motor de tablas que abarque sus datos en todo el clúster con regiones replicadas dinámicamente que podrían dividirse y equilibrarse entre clústeres automáticamente. !!! note "Nota"
El clúster ClickHouse consta de fragmentos independientes y cada fragmento consta de réplicas. El clúster es **no elástico**, por lo tanto, después de agregar un nuevo fragmento, los datos no se reequilibran automáticamente entre fragmentos. En su lugar, se supone que la carga del clúster debe ajustarse para que sea desigual. Esta implementación le da más control, y está bien para clústeres relativamente pequeños, como decenas de nodos. Pero para los clústeres con cientos de nodos que estamos utilizando en producción, este enfoque se convierte en un inconveniente significativo. Debemos implementar un motor de tablas que abarque todo el clúster con regiones replicadas dinámicamente que puedan dividirse y equilibrarse entre clústeres automáticamente.
[Artículo Original](https://clickhouse.tech/docs/es/development/architecture/) <!--hide--> {## [Artículo Original](https://clickhouse.tech/docs/en/development/architecture/) ##}

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 63
toc_title: "Examinar el c\xF3digo fuente de ClickHouse"
--- ---
# Examinar el código fuente de ClickHouse {#browse-clickhouse-source-code} # Examinar el código fuente de ClickHouse {#browse-clickhouse-source-code}

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 64
toc_title: "C\xF3mo crear ClickHouse en Linux"
--- ---
# Cómo construir ClickHouse para el desarrollo {#how-to-build-clickhouse-for-development} # Cómo construir ClickHouse para el desarrollo {#how-to-build-clickhouse-for-development}
@ -70,7 +73,7 @@ Esto creará el `programs/clickhouse` ejecutable, que se puede usar con `client`
La compilación requiere los siguientes componentes: La compilación requiere los siguientes componentes:
- Git (se usa solo para pagar las fuentes, no es necesario para la compilación) - Git (se usa solo para verificar las fuentes, no es necesario para la compilación)
- CMake 3.10 o más reciente - CMake 3.10 o más reciente
- Ninja (recomendado) o Hacer - Ninja (recomendado) o Hacer
- Compilador de C ++: gcc 9 o clang 8 o más reciente - Compilador de C ++: gcc 9 o clang 8 o más reciente
@ -105,7 +108,7 @@ Ejemplo de Fedora Rawhide:
cmake ../ClickHouse cmake ../ClickHouse
make -j $(nproc) make -j $(nproc)
# Usted no tiene que construir ClickHouse {#you-dont-have-to-build-clickhouse} # No tienes que construir ClickHouse {#you-dont-have-to-build-clickhouse}
ClickHouse está disponible en binarios y paquetes preconstruidos. Los binarios son portátiles y se pueden ejecutar en cualquier tipo de Linux. ClickHouse está disponible en binarios y paquetes preconstruidos. Los binarios son portátiles y se pueden ejecutar en cualquier tipo de Linux.
@ -135,4 +138,4 @@ $ cd ClickHouse
$ ./release $ ./release
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/development/build/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/development/build/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 67
toc_title: "C\xF3mo construir ClickHouse en Linux para AARCH64 (ARM64)"
--- ---
# Cómo construir ClickHouse en Linux para la arquitectura AARCH64 (ARM64 {#how-to-build-clickhouse-on-linux-for-aarch64-arm64-architecture} # Cómo construir ClickHouse en Linux para la arquitectura AARCH64 (ARM64 {#how-to-build-clickhouse-on-linux-for-aarch64-arm64-architecture}

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 66
toc_title: "C\xF3mo construir ClickHouse en Linux para Mac OS X"
--- ---
# Cómo construir ClickHouse en Linux para Mac OS X {#how-to-build-clickhouse-on-linux-for-mac-os-x} # Cómo construir ClickHouse en Linux para Mac OS X {#how-to-build-clickhouse-on-linux-for-mac-os-x}
@ -20,7 +23,7 @@ sudo apt-get install clang-8
# Instalar conjunto de herramientas de compilación cruzada {#install-cross-compilation-toolset} # Instalar conjunto de herramientas de compilación cruzada {#install-cross-compilation-toolset}
Recordemos la ruta donde instalamos `cctools` Como ${CCTOOLS} Recordemos la ruta donde instalamos `cctools` como ${CCTOOLS}
``` bash ``` bash
mkdir ${CCTOOLS} mkdir ${CCTOOLS}

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 65
toc_title: "C\xF3mo crear ClickHouse en Mac OS X"
--- ---
# Cómo crear ClickHouse en Mac OS X {#how-to-build-clickhouse-on-mac-os-x} # Cómo crear ClickHouse en Mac OS X {#how-to-build-clickhouse-on-mac-os-x}
@ -47,7 +50,7 @@ $ cd ..
Si tiene la intención de ejecutar clickhouse-server, asegúrese de aumentar la variable maxfiles del sistema. Si tiene la intención de ejecutar clickhouse-server, asegúrese de aumentar la variable maxfiles del sistema.
!!! info "Nota" !!! info "Nota"
Tendrá que utilizar sudo. Tendrás que usar sudo.
Para ello, cree el siguiente archivo: Para ello, cree el siguiente archivo:
@ -85,6 +88,6 @@ $ sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
Reiniciar. Reiniciar.
Para comprobar si está funcionando, puede usar `ulimit -n` comando. Para verificar si está funcionando, puede usar `ulimit -n` comando.
[Artículo Original](https://clickhouse.tech/docs/es/development/build_osx/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/development/build_osx/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 70
toc_title: Bibliotecas de terceros utilizadas
--- ---
# Bibliotecas de terceros utilizadas {#third-party-libraries-used} # Bibliotecas de terceros utilizadas {#third-party-libraries-used}
@ -7,28 +10,28 @@ machine_translated: true
| Biblioteca | Licencia | | Biblioteca | Licencia |
|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------| |--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|
| base64 | [Licencia BSD de 2 cláusulas](https://github.com/aklomp/base64/blob/a27c565d1b6c676beaf297fe503c4518185666f7/LICENSE) | | base64 | [Licencia BSD de 2 cláusulas](https://github.com/aklomp/base64/blob/a27c565d1b6c676beaf297fe503c4518185666f7/LICENSE) |
| Impulsar | [Licencia de software Boost 1.0](https://github.com/ClickHouse-Extras/boost-extra/blob/6883b40449f378019aec792f9983ce3afc7ff16e/LICENSE_1_0.txt) | | impulsar | [Licencia de software Boost 1.0](https://github.com/ClickHouse-Extras/boost-extra/blob/6883b40449f378019aec792f9983ce3afc7ff16e/LICENSE_1_0.txt) |
| Bienvenido | [MIT](https://github.com/google/brotli/blob/master/LICENSE) | | Bienvenido | [MIT](https://github.com/google/brotli/blob/master/LICENSE) |
| capnproto | [MIT](https://github.com/capnproto/capnproto/blob/master/LICENSE) | | capnproto | [MIT](https://github.com/capnproto/capnproto/blob/master/LICENSE) |
| Cctz | [Licencia Apache 2.0](https://github.com/google/cctz/blob/4f9776a310f4952454636363def82c2bf6641d5f/LICENSE.txt) | | Cctz | [Licencia Apache 2.0](https://github.com/google/cctz/blob/4f9776a310f4952454636363def82c2bf6641d5f/LICENSE.txt) |
| doble conversión | [Licencia de 3 cláusulas BSD](https://github.com/google/double-conversion/blob/cf2f0f3d547dc73b4612028a155b80536902ba02/LICENSE) | | doble conversión | [Licencia de 3 cláusulas BSD](https://github.com/google/double-conversion/blob/cf2f0f3d547dc73b4612028a155b80536902ba02/LICENSE) |
| FastMemcpy | [MIT](https://github.com/ClickHouse/ClickHouse/blob/master/libs/libmemcpy/impl/LICENSE) | | FastMemcpy | [MIT](https://github.com/ClickHouse/ClickHouse/blob/master/libs/libmemcpy/impl/LICENSE) |
| Más información | [Licencia de 3 cláusulas BSD](https://github.com/google/googletest/blob/master/LICENSE) | | Más información | [Licencia de 3 cláusulas BSD](https://github.com/google/googletest/blob/master/LICENSE) |
| Hombre | [Licencia Apache 2.0](https://github.com/uber/h3/blob/master/LICENSE) | | H3 | [Licencia Apache 2.0](https://github.com/uber/h3/blob/master/LICENSE) |
| hyperscan | [Licencia de 3 cláusulas BSD](https://github.com/intel/hyperscan/blob/master/LICENSE) | | hyperscan | [Licencia de 3 cláusulas BSD](https://github.com/intel/hyperscan/blob/master/LICENSE) |
| libbtrie | [Licencia BSD de 2 cláusulas](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libbtrie/LICENSE) | | libbtrie | [Licencia BSD de 2 cláusulas](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libbtrie/LICENSE) |
| libcxxabi | [Sistema abierto.](https://github.com/ClickHouse/ClickHouse/blob/master/libs/libglibc-compatibility/libcxxabi/LICENSE.TXT) | | libcxxabi | [BSD + MIT](https://github.com/ClickHouse/ClickHouse/blob/master/libs/libglibc-compatibility/libcxxabi/LICENSE.TXT) |
| libdivide | [Licencia Zlib](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libdivide/LICENSE.txt) | | libdivide | [Licencia Zlib](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libdivide/LICENSE.txt) |
| libgsasl | [Información adicional](https://github.com/ClickHouse-Extras/libgsasl/blob/3b8948a4042e34fb00b4fb987535dc9e02e39040/LICENSE) | | libgsasl | [Información adicional](https://github.com/ClickHouse-Extras/libgsasl/blob/3b8948a4042e34fb00b4fb987535dc9e02e39040/LICENSE) |
| libhdfs3 | [Licencia Apache 2.0](https://github.com/ClickHouse-Extras/libhdfs3/blob/bd6505cbb0c130b0db695305b9a38546fa880e5a/LICENSE.txt) | | libhdfs3 | [Licencia Apache 2.0](https://github.com/ClickHouse-Extras/libhdfs3/blob/bd6505cbb0c130b0db695305b9a38546fa880e5a/LICENSE.txt) |
| libmetrohash | [Licencia Apache 2.0](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libmetrohash/LICENSE) | | libmetrohash | [Licencia Apache 2.0](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libmetrohash/LICENSE) |
| Libpcg-al azar | [Licencia Apache 2.0](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libpcg-random/LICENSE-APACHE.txt) | | libpcg-al azar | [Licencia Apache 2.0](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/libpcg-random/LICENSE-APACHE.txt) |
| Libressl | [Licencia OpenSSL](https://github.com/ClickHouse-Extras/ssl/blob/master/COPYING) | | Libressl | [Licencia OpenSSL](https://github.com/ClickHouse-Extras/ssl/blob/master/COPYING) |
| Librdkafka | [Licencia BSD de 2 cláusulas](https://github.com/edenhill/librdkafka/blob/363dcad5a23dc29381cc626620e68ae418b3af19/LICENSE) | | Librdkafka | [Licencia BSD de 2 cláusulas](https://github.com/edenhill/librdkafka/blob/363dcad5a23dc29381cc626620e68ae418b3af19/LICENSE) |
| libwidechar\_width | [CC0 1.0 Universal](https://github.com/ClickHouse/ClickHouse/blob/master/libs/libwidechar_width/LICENSE) | | libwidechar\_width | [CC0 1.0 Universal](https://github.com/ClickHouse/ClickHouse/blob/master/libs/libwidechar_width/LICENSE) |
| llvm | [Licencia de 3 cláusulas BSD](https://github.com/ClickHouse-Extras/llvm/blob/163def217817c90fb982a6daf384744d8472b92b/llvm/LICENSE.TXT) | | llvm | [Licencia de 3 cláusulas BSD](https://github.com/ClickHouse-Extras/llvm/blob/163def217817c90fb982a6daf384744d8472b92b/llvm/LICENSE.TXT) |
| lz4 | [Licencia BSD de 2 cláusulas](https://github.com/lz4/lz4/blob/c10863b98e1503af90616ae99725ecd120265dfb/LICENSE) | | lz4 | [Licencia BSD de 2 cláusulas](https://github.com/lz4/lz4/blob/c10863b98e1503af90616ae99725ecd120265dfb/LICENSE) |
| Mariadb-conector-c | [Información adicional](https://github.com/ClickHouse-Extras/mariadb-connector-c/blob/3.1/COPYING.LIB) | | mariadb-conector-c | [Información adicional](https://github.com/ClickHouse-Extras/mariadb-connector-c/blob/3.1/COPYING.LIB) |
| murmurhash | [Dominio público](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/murmurhash/LICENSE) | | murmurhash | [Dominio público](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/murmurhash/LICENSE) |
| pdqsort | [Licencia Zlib](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/pdqsort/license.txt) | | pdqsort | [Licencia Zlib](https://github.com/ClickHouse/ClickHouse/blob/master/contrib/pdqsort/license.txt) |
| Poco | [Boost Software License - Versión 1.0](https://github.com/ClickHouse-Extras/poco/blob/fe5505e56c27b6ecb0dcbc40c49dc2caf4e9637f/LICENSE) | | Poco | [Boost Software License - Versión 1.0](https://github.com/ClickHouse-Extras/poco/blob/fe5505e56c27b6ecb0dcbc40c49dc2caf4e9637f/LICENSE) |

View File

@ -1,12 +1,15 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 61
toc_title: "La instrucci\xF3n para desarrolladores de ClickHouse para principiantes"
--- ---
La construcción de ClickHouse es compatible con Linux, FreeBSD y Mac OS X. La construcción de ClickHouse es compatible con Linux, FreeBSD y Mac OS X.
# Si utiliza Windows {#if-you-use-windows} # Si utiliza Windows {#if-you-use-windows}
Si usa Windows, necesita crear una máquina virtual con Ubuntu. Para comenzar a trabajar con una máquina virtual, instale VirtualBox. Puede descargar Ubuntu desde el sitio web: https://www.ubuntu.com/\#download. Por favor, cree una máquina virtual a partir de la imagen descargada (debe reservar al menos 4 GB de RAM para ello). Para ejecutar un terminal de línea de comandos en Ubuntu, busque un programa que contenga la palabra “terminal” es su nombre (gnome-terminal, konsole, etc.) o simplemente presione Ctrl + Alt + T. Si usa Windows, necesita crear una máquina virtual con Ubuntu. Para comenzar a trabajar con una máquina virtual, instale VirtualBox. Puede descargar Ubuntu desde el sitio web: https://www.ubuntu.com/\#download. Por favor, cree una máquina virtual a partir de la imagen descargada (debe reservar al menos 4 GB de RAM para ello). Para ejecutar un terminal de línea de comandos en Ubuntu, busque un programa que contenga la palabra “terminal” en su nombre (gnome-terminal, konsole etc.) o simplemente presione Ctrl + Alt + T.
# Si utiliza un sistema de 32 bits {#if-you-use-a-32-bit-system} # Si utiliza un sistema de 32 bits {#if-you-use-a-32-bit-system}
@ -16,11 +19,11 @@ ClickHouse no puede funcionar ni construir en un sistema de 32 bits. Debe adquir
Para comenzar a trabajar con el repositorio de ClickHouse, necesitará una cuenta de GitHub. Para comenzar a trabajar con el repositorio de ClickHouse, necesitará una cuenta de GitHub.
Probablemente ya tenga uno, pero si no lo hace, regístrese en https://github.com. En caso de que no tenga claves SSH, debe generarlas y luego cargarlas en GitHub. Es necesario para enviar a través de sus parches. También es posible usar las mismas claves SSH que usa con cualquier otro servidor SSH, probablemente ya las tenga. Probablemente ya tenga uno, pero si no lo hace, regístrese en https://github.com . En caso de que no tenga claves SSH, debe generarlas y luego cargarlas en GitHub. Es necesario para enviar a través de sus parches. También es posible usar las mismas claves SSH que usa con cualquier otro servidor SSH, probablemente ya las tenga.
Cree una bifurcación del repositorio ClickHouse. Para hacerlo por favor haga clic en el “fork” botón en la esquina superior derecha en https://github.com/ClickHouse/ClickHouse . Se bifurcará su propia copia de ClickHouse/ClickHouse a su cuenta. Cree una bifurcación del repositorio ClickHouse. Para hacerlo por favor haga clic en el “fork” botón en la esquina superior derecha en https://github.com/ClickHouse/ClickHouse . Se bifurcará su propia copia de ClickHouse/ClickHouse a su cuenta.
El proceso de desarrollo consiste en comprometer primero los cambios previstos en su bifurcación de ClickHouse y luego crear un “pull request” Para que estos cambios sean aceptados en el repositorio principal (ClickHouse / ClickHouse). El proceso de desarrollo consiste en comprometer primero los cambios previstos en su bifurcación de ClickHouse y luego crear un “pull request” para que estos cambios sean aceptados en el repositorio principal (ClickHouse / ClickHouse).
Para trabajar con repositorios git, instale `git`. Para trabajar con repositorios git, instale `git`.
@ -30,7 +33,7 @@ Para hacer eso en Ubuntu, ejecutaría en la terminal de línea de comandos:
sudo apt install git sudo apt install git
Puede encontrar un breve manual sobre el uso de Git aquí: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf . Puede encontrar un breve manual sobre el uso de Git aquí: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf .
Para obtener un manual detallado sobre Git, consulte https://git-scm.com/book/ru/v2 . Para obtener un manual detallado sobre Git, consulte https://git-scm.com/book/en/v2 .
# Clonación de un repositorio en su máquina de desarrollo {#cloning-a-repository-to-your-development-machine} # Clonación de un repositorio en su máquina de desarrollo {#cloning-a-repository-to-your-development-machine}
@ -47,7 +50,7 @@ Este comando creará un directorio `ClickHouse` que contiene la copia de trabajo
Es importante que la ruta al directorio de trabajo no contenga espacios en blanco, ya que puede ocasionar problemas con la ejecución del sistema de compilación. Es importante que la ruta al directorio de trabajo no contenga espacios en blanco, ya que puede ocasionar problemas con la ejecución del sistema de compilación.
Tenga en cuenta que el repositorio ClickHouse utiliza `submodules`. Así es como se llaman las referencias a repositorios adicionales (es decir, bibliotecas externas de las que depende el proyecto). Significa que al clonar el repositorio debe especificar el `--recursive` como en el ejemplo anterior. Si el repositorio se ha clonado sin submódulos, para descargarlos debe ejecutar lo siguiente: Tenga en cuenta que el repositorio ClickHouse utiliza `submodules`. That is what the references to additional repositories are called (i.e. external libraries on which the project depends). It means that when cloning the repository you need to specify the `--recursive` como en el ejemplo anterior. Si el repositorio se ha clonado sin submódulos, para descargarlos debe ejecutar lo siguiente:
git submodule init git submodule init
git submodule update git submodule update
@ -138,15 +141,15 @@ Las compilaciones oficiales de Yandex actualmente usan GCC porque genera código
Para instalar GCC en Ubuntu, ejecute: `sudo apt install gcc g++` Para instalar GCC en Ubuntu, ejecute: `sudo apt install gcc g++`
Compruebe la versión de gcc: `gcc --version`. Si está por debajo de 9, siga las instrucciones aquí: https://clickhouse .tech/docs/es/development/build/\#install-gcc-9. Compruebe la versión de gcc: `gcc --version`. Si está por debajo de 9, siga las instrucciones aquí: https://clickhouse .tech/docs/en/development/build/\#install-gcc-9.
La compilación de Mac OS X solo es compatible con Clang. Sólo tiene que ejecutar `brew install llvm` La compilación de Mac OS X solo es compatible con Clang. Sólo tiene que ejecutar `brew install llvm`
Si decide utilizar Clang, también puede instalar `libc++` y `lld` sabe lo que es. Utilizar `ccache` también se recomienda. Si decide utilizar Clang, también puede instalar `libc++` y `lld` si usted sabe lo que es. Utilizar `ccache` también se recomienda.
# El proceso de construcción {#the-building-process} # El proceso de construcción {#the-building-process}
Ahora que está listo para construir ClickHouse, le recomendamos que cree un directorio separado `build` Dentro `ClickHouse` que contendrá todos los de la generación de artefactos: Ahora que está listo para construir ClickHouse, le recomendamos que cree un directorio separado `build` dentro `ClickHouse` que contendrá todos los de la generación de artefactos:
mkdir build mkdir build
cd build cd build
@ -171,7 +174,7 @@ Para una construcción más rápida, puede recurrir al `debug` tipo de compilaci
cmake -D CMAKE_BUILD_TYPE=Debug .. cmake -D CMAKE_BUILD_TYPE=Debug ..
Puede cambiar el tipo de compilación ejecutando este comando en el `build` Directorio. Puede cambiar el tipo de compilación ejecutando este comando en el `build` directorio.
Ejecutar ninja para construir: Ejecutar ninja para construir:
@ -193,7 +196,7 @@ En máquinas con 4GB de RAM, se recomienda especificar 1, para 8GB de RAM `-j 2`
Si recibe el mensaje: `ninja: error: loading 'build.ninja': No such file or directory`, significa que la generación de una configuración de compilación ha fallado y necesita inspeccionar el mensaje anterior. Si recibe el mensaje: `ninja: error: loading 'build.ninja': No such file or directory`, significa que la generación de una configuración de compilación ha fallado y necesita inspeccionar el mensaje anterior.
Cuando se inicie correctamente el proceso de construcción, verá el progreso de construcción: el número de tareas procesadas y el número total de tareas. Cuando se inicie correctamente el proceso de construcción, verá el progreso de la compilación: el número de tareas procesadas y el número total de tareas.
Al crear mensajes sobre archivos protobuf en la biblioteca libhdfs2, como `libprotobuf WARNING` puede aparecer. Afectan a nada y son seguros para ser ignorado. Al crear mensajes sobre archivos protobuf en la biblioteca libhdfs2, como `libprotobuf WARNING` puede aparecer. Afectan a nada y son seguros para ser ignorado.
@ -221,7 +224,7 @@ Puede reemplazar la versión de producción del binario ClickHouse instalado en
sudo cp ClickHouse/build/programs/clickhouse /usr/bin/ sudo cp ClickHouse/build/programs/clickhouse /usr/bin/
sudo service clickhouse-server start sudo service clickhouse-server start
Tenga en cuenta que `clickhouse-client`, `clickhouse-server` y otros son enlaces simbólicos a los comúnmente compartidos `clickhouse` Binario. Tenga en cuenta que `clickhouse-client`, `clickhouse-server` y otros son enlaces simbólicos a los comúnmente compartidos `clickhouse` binario.
También puede ejecutar su binario ClickHouse personalizado con el archivo de configuración del paquete ClickHouse instalado en su sistema: También puede ejecutar su binario ClickHouse personalizado con el archivo de configuración del paquete ClickHouse instalado en su sistema:
@ -242,11 +245,11 @@ Por si acaso, vale la pena mencionar que CLion crea `build` por sí mismo, tambi
La descripción de la arquitectura ClickHouse se puede encontrar aquí: https://clickhouse.tech/docs/es/desarrollo/arquitectura/ La descripción de la arquitectura ClickHouse se puede encontrar aquí: https://clickhouse.tech/docs/es/desarrollo/arquitectura/
La Guía de estilo de código: https://clickhouse.tech/docs/es/development/style/ La Guía de estilo de código: https://clickhouse.tech/docs/en/development/style/
Pruebas de escritura: https://clickhouse.tech/docs/es/development/tests/ Pruebas de escritura: https://clickhouse.tech/docs/en/development/tests/
Lista de tareas: https://github.com/ClickHouse/ClickHouse/blob/master/tests/instructions/easy\_tasks\_sorted\_en.md Lista de tareas: https://github.com/ClickHouse/ClickHouse/blob/master/testsructions/easy\_tasks\_sorted\_en.md
# Datos de prueba {#test-data} # Datos de prueba {#test-data}
@ -275,8 +278,8 @@ Navega a tu repositorio de fork en la interfaz de usuario de GitHub. Si ha estad
Se puede crear una solicitud de extracción incluso si el trabajo aún no se ha completado. En este caso, por favor ponga la palabra “WIP” (trabajo en curso) al comienzo del título, se puede cambiar más tarde. Esto es útil para la revisión cooperativa y la discusión de los cambios, así como para ejecutar todas las pruebas disponibles. Es importante que proporcione una breve descripción de sus cambios, que más tarde se utilizará para generar registros de cambios de lanzamiento. Se puede crear una solicitud de extracción incluso si el trabajo aún no se ha completado. En este caso, por favor ponga la palabra “WIP” (trabajo en curso) al comienzo del título, se puede cambiar más tarde. Esto es útil para la revisión cooperativa y la discusión de los cambios, así como para ejecutar todas las pruebas disponibles. Es importante que proporcione una breve descripción de sus cambios, que más tarde se utilizará para generar registros de cambios de lanzamiento.
Las pruebas comenzarán tan pronto como los empleados de Yandex etiqueten su PR con una etiqueta “can be tested”. Los resultados de algunas primeras comprobaciones (por ejemplo, el estilo de código) llegarán en varios minutos. Los resultados de la comprobación de compilación llegarán dentro de media hora. Y el conjunto principal de pruebas se informará dentro de una hora. Las pruebas comenzarán tan pronto como los empleados de Yandex etiqueten su PR con una etiqueta “can be tested”. The results of some first checks (e.g. code style) will come in within several minutes. Build check results will arrive within half an hour. And the main set of tests will report itself within an hour.
El sistema preparará compilaciones binarias ClickHouse para su solicitud de extracción individualmente. Para recuperar estas compilaciones, haga clic en “Details” junto al enlace “ClickHouse build check” en la lista de cheques. Allí encontrará enlaces directos a la construcción.deb paquetes de ClickHouse que puede implementar incluso en sus servidores de producción (si no tiene miedo). El sistema preparará compilaciones binarias ClickHouse para su solicitud de extracción individualmente. Para recuperar estas compilaciones, haga clic en “Details” junto al link “ClickHouse build check” en la lista de cheques. Allí encontrará enlaces directos a la construcción.deb paquetes de ClickHouse que puede implementar incluso en sus servidores de producción (si no tiene miedo).
Lo más probable es que algunas de las compilaciones fallen las primeras veces. Esto se debe al hecho de que verificamos las compilaciones tanto con gcc como con clang, con casi todas las advertencias existentes (siempre con el `-Werror` bandera) habilitado para sonido. En esa misma página, puede encontrar todos los registros de compilación para que no tenga que compilar ClickHouse de todas las formas posibles. Lo más probable es que algunas de las compilaciones fallen las primeras veces. Esto se debe al hecho de que verificamos las compilaciones tanto con gcc como con clang, con casi todas las advertencias existentes (siempre con el `-Werror` bandera) habilitado para sonido. En esa misma página, puede encontrar todos los registros de compilación para que no tenga que compilar ClickHouse de todas las formas posibles.

View File

@ -1,7 +1,12 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Development
toc_hidden: true
toc_priority: 58
toc_title: oculto
--- ---
# Desarrollo de ClickHouse {#clickhouse-development} # Desarrollo de ClickHouse {#clickhouse-development}
[Artículo Original](https://clickhouse.tech/docs/es/development/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/development/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 68
toc_title: "C\xF3mo escribir c\xF3digo C ++"
--- ---
# Cómo escribir código C ++ {#how-to-write-c-code} # Cómo escribir código C ++ {#how-to-write-c-code}
@ -54,7 +57,7 @@ memcpy(&buf[place_value], &x, sizeof(x));
for (size_t i = 0; i < rows; i += storage.index_granularity) for (size_t i = 0; i < rows; i += storage.index_granularity)
``` ```
**7.** Agregar espacios alrededor de los operadores binarios (`+`, `-`, `*`, `/`, `%`, …) y el operador ternario `?:`. **7.** Agregar espacios alrededor de los operadores binarios (`+`, `-`, `*`, `/`, `%`, …) and the ternary operator `?:`.
``` cpp ``` cpp
UInt16 year = (s[0] - '0') * 1000 + (s[1] - '0') * 100 + (s[2] - '0') * 10 + (s[3] - '0'); UInt16 year = (s[0] - '0') * 1000 + (s[1] - '0') * 100 + (s[2] - '0') * 10 + (s[3] - '0');
@ -79,13 +82,13 @@ dst.ClickEventID = click.EventID;
dst.ClickGoodEvent = click.GoodEvent; dst.ClickGoodEvent = click.GoodEvent;
``` ```
**10.** No utilice espacios alrededor de los operadores `.`, `->`. **10.** No use espacios alrededor de los operadores `.`, `->`.
Si es necesario, el operador se puede envolver a la siguiente línea. En este caso, el desplazamiento frente a él aumenta. Si es necesario, el operador se puede envolver a la siguiente línea. En este caso, el desplazamiento frente a él aumenta.
**11.** No utilice un espacio para separar los operadores unarios (`--`, `++`, `*`, `&`, …) del argumento. **11.** No utilice un espacio para separar los operadores unarios (`--`, `++`, `*`, `&`, …) from the argument.
**12.** Pon un espacio después de una coma, pero no antes. La misma regla se aplica a un punto y coma dentro de un `for` expresión. **12.** Pon un espacio después de una coma, pero no antes. La misma regla se aplica a un punto y coma dentro de un `for` expresion.
**13.** No utilice espacios para separar el `[]` operador. **13.** No utilice espacios para separar el `[]` operador.
@ -97,7 +100,7 @@ struct AggregatedStatElement
{} {}
``` ```
**15.** En clases y estructuras, escribe `public`, `private`, y `protected` es el mismo nivel que `class/struct`, y sangrar el resto del código. **15.** En clases y estructuras, escribe `public`, `private`, y `protected` en el mismo nivel que `class/struct`, y sangrar el resto del código.
``` cpp ``` cpp
template <typename T> template <typename T>
@ -110,7 +113,7 @@ public:
} }
``` ```
**16.** Si el mismo `namespace` se utiliza para todo el archivo, y no hay nada más significativo, un desplazamiento no es necesario dentro `namespace`. **16.** Si el mismo `namespace` se usa para todo el archivo, y no hay nada más significativo, no es necesario un desplazamiento dentro `namespace`.
**17.** Si el bloque para un `if`, `for`, `while`, u otra expresión consiste en una sola `statement`, las llaves son opcionales. Coloque el `statement` en una línea separada, en su lugar. Esta regla también es válida para `if`, `for`, `while`, … **17.** Si el bloque para un `if`, `for`, `while`, u otra expresión consiste en una sola `statement`, las llaves son opcionales. Coloque el `statement` en una línea separada, en su lugar. Esta regla también es válida para `if`, `for`, `while`, …
@ -194,7 +197,7 @@ std::cerr << static_cast<int>(c) << std::endl;
Lo mismo es cierto para los métodos pequeños en cualquier clase o estructura. Lo mismo es cierto para los métodos pequeños en cualquier clase o estructura.
Para las clases y estructuras con plantillas, no separe las declaraciones de métodos de la implementación (porque de lo contrario deben definirse en la misma unidad de traducción). Para clases y estructuras con plantillas, no separe las declaraciones de métodos de la implementación (porque de lo contrario deben definirse en la misma unidad de traducción).
**31.** Puede ajustar líneas en 140 caracteres, en lugar de 80. **31.** Puede ajustar líneas en 140 caracteres, en lugar de 80.
@ -295,7 +298,7 @@ Nota: Puede usar Doxygen para generar documentación a partir de estos comentari
/// Why did you do this stuff? /// Why did you do this stuff?
``` ```
**16.** No hay necesidad de escribir un comentario al final de un bloque describiendo de qué se trataba. **16.** No es necesario escribir un comentario al final de un bloque que describa de qué se trataba.
``` cpp ``` cpp
/// for /// for
@ -445,7 +448,7 @@ Utilice excepciones. En la mayoría de los casos, solo necesita lanzar una excep
En las aplicaciones de procesamiento de datos fuera de línea, a menudo es aceptable no detectar excepciones. En las aplicaciones de procesamiento de datos fuera de línea, a menudo es aceptable no detectar excepciones.
En los servidores que manejan las solicitudes de los usuarios, suele ser suficiente para detectar excepciones en el nivel superior del controlador de conexión. En los servidores que manejan las solicitudes de los usuarios, generalmente es suficiente detectar excepciones en el nivel superior del controlador de conexión.
En las funciones de subproceso, debe capturar y mantener todas las excepciones para volver a lanzarlas en el subproceso principal después `join`. En las funciones de subproceso, debe capturar y mantener todas las excepciones para volver a lanzarlas en el subproceso principal después `join`.
@ -566,7 +569,7 @@ Utilizar `unsigned` si es necesario.
Utilice los tipos `UInt8`, `UInt16`, `UInt32`, `UInt64`, `Int8`, `Int16`, `Int32`, y `Int64`, así como `size_t`, `ssize_t`, y `ptrdiff_t`. Utilice los tipos `UInt8`, `UInt16`, `UInt32`, `UInt64`, `Int8`, `Int16`, `Int32`, y `Int64`, así como `size_t`, `ssize_t`, y `ptrdiff_t`.
No utilice estos tipos para los números: `signed/unsigned long`, `long long`, `short`, `signed/unsigned char`, `char`. No use estos tipos para números: `signed/unsigned long`, `long long`, `short`, `signed/unsigned char`, `char`.
**13.** Pasando argumentos. **13.** Pasando argumentos.
@ -602,17 +605,17 @@ Las bibliotecas pequeñas tampoco necesitan esto.
Para bibliotecas medianas a grandes, coloque todo en un `namespace`. Para bibliotecas medianas a grandes, coloque todo en un `namespace`.
En la biblioteca `.h` Archivo, se puede utilizar `namespace detail` para ocultar los detalles de implementación no necesarios para el código de la aplicación. En la biblioteca `.h` archivo, se puede utilizar `namespace detail` para ocultar los detalles de implementación no necesarios para el código de la aplicación.
En un `.cpp` archivo, puede usar un `static` o espacio de nombres anónimo para ocultar símbolos. En un `.cpp` archivo, puede usar un `static` o espacio de nombres anónimo para ocultar símbolos.
Además, un `namespace` Puede ser utilizado para un `enum` para evitar que los nombres correspondientes caigan en un `namespace` (pero es mejor usar un `enum class`). Además, un `namespace` puede ser utilizado para un `enum` para evitar que los nombres correspondientes caigan en un `namespace` (pero es mejor usar un `enum class`).
**16.** Inicialización diferida. **16.** Inicialización diferida.
Si se requieren argumentos para la inicialización, normalmente no debe escribir un constructor predeterminado. Si se requieren argumentos para la inicialización, normalmente no debe escribir un constructor predeterminado.
Si más adelante necesitará retrasar la inicialización, puede agregar un constructor predeterminado que creará un objeto no válido. O, para un pequeño número de objetos, puede usar `shared_ptr/unique_ptr`. Si más adelante tendrá que retrasar la inicialización, puede agregar un constructor predeterminado que creará un objeto no válido. O, para un pequeño número de objetos, puede usar `shared_ptr/unique_ptr`.
``` cpp ``` cpp
Loader(DB::Connection * connection_, const std::string & query, size_t max_block_size_); Loader(DB::Connection * connection_, const std::string & query, size_t max_block_size_);
@ -627,7 +630,7 @@ Si la clase no está destinada para uso polimórfico, no necesita hacer que las
**18.** Codificación. **18.** Codificación.
Usa UTF-8 en todas partes. Utilizar `std::string`y`char *`. No uso `std::wstring`y`wchar_t`. Usa UTF-8 en todas partes. Utilizar `std::string`y`char *`. No use `std::wstring`y`wchar_t`.
**19.** Tala. **19.** Tala.
@ -653,7 +656,7 @@ Utilice la codificación UTF-8 en el registro. En casos excepcionales, puede usa
No utilice `iostreams` en ciclos internos que son críticos para el rendimiento de la aplicación (y nunca usan `stringstream`). No utilice `iostreams` en ciclos internos que son críticos para el rendimiento de la aplicación (y nunca usan `stringstream`).
Descripción `DB/IO` biblioteca en su lugar. Utilice el `DB/IO` biblioteca en su lugar.
**21.** Fecha y hora. **21.** Fecha y hora.
@ -667,7 +670,7 @@ Utilice siempre `#pragma once` en lugar de incluir guardias.
`using namespace` no se utiliza. Usted puede utilizar `using` con algo específico. Pero hazlo local dentro de una clase o función. `using namespace` no se utiliza. Usted puede utilizar `using` con algo específico. Pero hazlo local dentro de una clase o función.
**24.** No uso `trailing return type` para funciones a menos que sea necesario. **24.** No use `trailing return type` para funciones a menos que sea necesario.
``` cpp ``` cpp
[auto f() -&gt; void;]{.strike} [auto f() -&gt; void;]{.strike}
@ -684,7 +687,7 @@ std::string s{"Hello"};
auto s = std::string{"Hello"}; auto s = std::string{"Hello"};
``` ```
**26.** Para funciones virtuales, escriba `virtual` es la clase base, pero escribe `override` es lugar de `virtual` en las clases descendientes. **26.** Para funciones virtuales, escriba `virtual` en la clase base, pero escribe `override` en lugar de `virtual` en las clases descendientes.
## Características no utilizadas de C ++ {#unused-features-of-c} ## Características no utilizadas de C ++ {#unused-features-of-c}
@ -698,7 +701,7 @@ auto s = std::string{"Hello"};
Pero en igualdad de condiciones, se prefiere el código multiplataforma o portátil. Pero en igualdad de condiciones, se prefiere el código multiplataforma o portátil.
**2.** Idioma: hacer ++ 17. **2.** Idioma: C ++ 17.
**3.** Compilación: `gcc`. En este momento (diciembre de 2017), el código se compila utilizando la versión 7.2. (También se puede compilar usando `clang 4`.) **3.** Compilación: `gcc`. En este momento (diciembre de 2017), el código se compila utilizando la versión 7.2. (También se puede compilar usando `clang 4`.)
@ -722,7 +725,7 @@ El conjunto de instrucciones de CPU es el conjunto mínimo admitido entre nuestr
**2.** Para la depuración, use `gdb`, `valgrind` (`memcheck`), `strace`, `-fsanitize=...`, o `tcmalloc_minimal_debug`. **2.** Para la depuración, use `gdb`, `valgrind` (`memcheck`), `strace`, `-fsanitize=...`, o `tcmalloc_minimal_debug`.
**3.** Para crear perfiles, uso `Linux Perf`, `valgrind` (`callgrind`Ciudad `strace -cf`. **3.** Para crear perfiles, use `Linux Perf`, `valgrind` (`callgrind`), o `strace -cf`.
**4.** Las fuentes están en Git. **4.** Las fuentes están en Git.
@ -754,7 +757,7 @@ Si ya hay una buena solución disponible, úsela, incluso si eso significa que d
(Pero prepárese para eliminar las bibliotecas incorrectas del código.) (Pero prepárese para eliminar las bibliotecas incorrectas del código.)
**3.** Puede instalar una biblioteca que no está en los paquetes, si los paquetes no tienen lo que necesita o tienen una versión obsoleta o el tipo incorrecto de compilación. **3.** Puede instalar una biblioteca que no esté en los paquetes, si los paquetes no tienen lo que necesita o tienen una versión obsoleta o el tipo de compilación incorrecto.
**4.** Si la biblioteca es pequeña y no tiene su propio sistema de compilación complejo, coloque los archivos `contrib` carpeta. **4.** Si la biblioteca es pequeña y no tiene su propio sistema de compilación complejo, coloque los archivos `contrib` carpeta.
@ -778,17 +781,17 @@ Si ya hay una buena solución disponible, úsela, incluso si eso significa que d
**1.** Especificar explícitamente `std::` para tipos de `stddef.h` **1.** Especificar explícitamente `std::` para tipos de `stddef.h`
no se recomienda. En otras palabras, recomendamos escribir `size_t` es su lugar `std::size_t` porque es más corto. no se recomienda. En otras palabras, recomendamos escribir `size_t` en su lugar `std::size_t` porque es más corto.
Es aceptable agregar `std::`. Es aceptable agregar `std::`.
**2.** Especificar explícitamente `std::` para funciones de la biblioteca C estándar **2.** Especificar explícitamente `std::` para funciones de la biblioteca C estándar
no se recomienda. En otras palabras, escribir `memcpy` es lugar de `std::memcpy`. no se recomienda. En otras palabras, escribir `memcpy` en lugar de `std::memcpy`.
La razón es que hay funciones no estándar similares, tales como `memmem`. Utilizamos estas funciones en ocasiones. Estas funciones no existen en `namespace std`. La razón es que hay funciones no estándar similares, tales como `memmem`. Utilizamos estas funciones en ocasiones. Estas funciones no existen en `namespace std`.
Si usted escribe `std::memcpy` es lugar de `memcpy` es todas partes, entonces `memmem` pecado `std::` se verá extraño. Si usted escribe `std::memcpy` en lugar de `memcpy` en todas partes, entonces `memmem` sin `std::` se verá extraño.
Sin embargo, todavía puedes usar `std::` si lo prefieres. Sin embargo, todavía puedes usar `std::` si lo prefieres.
@ -796,7 +799,7 @@ Sin embargo, todavía puedes usar `std::` si lo prefieres.
Esto es aceptable si es más eficiente. Esto es aceptable si es más eficiente.
Por ejemplo, uso `memcpy` es lugar de `std::copy` para copiar grandes trozos de memoria. Por ejemplo, use `memcpy` en lugar de `std::copy` para copiar grandes trozos de memoria.
**4.** Argumentos de función multilínea. **4.** Argumentos de función multilínea.
@ -835,4 +838,4 @@ function(
size_t limit) size_t limit)
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/development/style/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/development/style/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 69
toc_title: "C\xF3mo ejecutar pruebas de ClickHouse"
--- ---
# Pruebas de ClickHouse {#clickhouse-testing} # Pruebas de ClickHouse {#clickhouse-testing}
@ -10,15 +13,15 @@ Las pruebas funcionales son las más simples y cómodas de usar. La mayoría de
Cada prueba funcional envía una o varias consultas al servidor ClickHouse en ejecución y compara el resultado con la referencia. Cada prueba funcional envía una o varias consultas al servidor ClickHouse en ejecución y compara el resultado con la referencia.
Las pruebas se encuentran en `tests/queries` Directorio. Hay dos subdirectorios: `stateless` y `stateful`. Las pruebas sin estado ejecutan consultas sin datos de prueba precargados: a menudo crean pequeños conjuntos de datos sintéticos sobre la marcha, dentro de la prueba misma. Las pruebas estatales requieren datos de prueba precargados de Yandex.Métrica y no está disponible para el público en general. Tendemos a usar sólo `stateless` pruebas y evitar la adición de nuevos `stateful` prueba. Las pruebas se encuentran en `testsies` directorio. Hay dos subdirectorios: `stateless` y `stateful`. Las pruebas sin estado ejecutan consultas sin datos de prueba precargados: a menudo crean pequeños conjuntos de datos sintéticos sobre la marcha, dentro de la prueba misma. Las pruebas estatales requieren datos de prueba precargados de Yandex.Métrica y no está disponible para el público en general. Tendemos a usar sólo `stateless` pruebas y evitar la adición de nuevos `stateful` prueba.
Cada prueba puede ser de dos tipos: `.sql` y `.sh`. `.sql` prueba es el script SQL simple que se canaliza a `clickhouse-client --multiquery --testmode`. `.sh` test es un script que se ejecuta por sí mismo. Cada prueba puede ser de dos tipos: `.sql` y `.sh`. `.sql` test es el script SQL simple que se canaliza a `clickhouse-client --multiquery --testmode`. `.sh` test es un script que se ejecuta por sí mismo.
Para ejecutar todas las pruebas, use `tests/clickhouse-test` herramienta. Mira `--help` para la lista de posibles opciones. Simplemente puede ejecutar todas las pruebas o ejecutar un subconjunto de pruebas filtradas por subcadena en el nombre de la prueba: `./clickhouse-test substring`. Para ejecutar todas las pruebas, use `testskhouse-test` herramienta. Mira `--help` para la lista de posibles opciones. Simplemente puede ejecutar todas las pruebas o ejecutar un subconjunto de pruebas filtradas por subcadena en el nombre de la prueba: `./clickhouse-test substring`.
La forma más sencilla de invocar pruebas funcionales es copiar `clickhouse-client` Naciones `/usr/bin/`, ejecutar `clickhouse-server` y luego ejecutar `./clickhouse-test` de su propio directorio. La forma más sencilla de invocar pruebas funcionales es copiar `clickhouse-client` a `/usr/bin/`, ejecutar `clickhouse-server` y luego ejecutar `./clickhouse-test` de su propio directorio.
Atracciones cercanas al hotel `.sql` o `.sh` archivo en `tests/queries/0_stateless` directorio, compruébelo manualmente y luego genere `.reference` archivo de la siguiente manera: `clickhouse-client -n --testmode < 00000_test.sql > 00000_test.reference` o `./00000_test.sh > ./00000_test.reference`. Para agregar una nueva prueba, cree un `.sql` o `.sh` archivo en `testsies/0_stateless` directorio, compruébelo manualmente y luego genere `.reference` archivo de la siguiente manera: `clickhouse-client -n --testmode < 00000_test.sql > 00000_test.reference` o `./00000_test.sh > ./00000_test.reference`.
Las pruebas deben usar (crear, soltar, etc.) solo tablas en `test` base de datos que se supone que se crea de antemano; también las pruebas pueden usar tablas temporales. Las pruebas deben usar (crear, soltar, etc.) solo tablas en `test` base de datos que se supone que se crea de antemano; también las pruebas pueden usar tablas temporales.
@ -26,20 +29,20 @@ Si desea utilizar consultas distribuidas en pruebas funcionales, puede aprovecha
Algunas pruebas están marcadas con `zookeeper`, `shard` o `long` en sus nombres. Algunas pruebas están marcadas con `zookeeper`, `shard` o `long` en sus nombres.
`zookeeper` es para pruebas que están usando ZooKeeper. `shard` es para pruebas que `zookeeper` es para pruebas que están usando ZooKeeper. `shard` es para pruebas que
Requiere servidor para escuchar `127.0.0.*`; `distributed` o `global` Tienen el mismo requiere servidor para escuchar `127.0.0.*`; `distributed` o `global` tienen el mismo
significado. `long` es para pruebas que duran un poco más de un segundo. Usted puede significado. `long` es para pruebas que duran un poco más de un segundo. Usted puede
Deshabilitar estos grupos de pruebas utilizando `--no-zookeeper`, `--no-shard` y deshabilitar estos grupos de pruebas utilizando `--no-zookeeper`, `--no-shard` y
`--no-long` opciones, respectivamente. `--no-long` opciones, respectivamente.
## Errores conocidos {#known-bugs} ## Bugs conocidos {#known-bugs}
Si conocemos algunos errores que se pueden reproducir fácilmente mediante pruebas funcionales, colocamos pruebas funcionales preparadas en `tests/queries/bugs` directorio. Estas pruebas se moverán a `tests/queries/0_stateless` cuando se corrigen errores. Si conocemos algunos errores que se pueden reproducir fácilmente mediante pruebas funcionales, colocamos pruebas funcionales preparadas en `testsies/bugs` directorio. Estas pruebas se moverán a `teststests_stateless` cuando se corrigen errores.
## Pruebas de integración {#integration-tests} ## Pruebas de integración {#integration-tests}
Las pruebas de integración permiten probar ClickHouse en la configuración agrupada y la interacción de ClickHouse con otros servidores como MySQL, Postgres, MongoDB. Son útiles para emular divisiones de red, caídas de paquetes, etc. Estas pruebas se ejecutan bajo Docker y crean múltiples contenedores con varios software. Las pruebas de integración permiten probar ClickHouse en la configuración agrupada y la interacción de ClickHouse con otros servidores como MySQL, Postgres, MongoDB. Son útiles para emular divisiones de red, caídas de paquetes, etc. Estas pruebas se ejecutan bajo Docker y crean múltiples contenedores con varios software.
Ver `tests/integration/README.md` sobre cómo ejecutar estas pruebas. Ver `testsgration/README.md` sobre cómo ejecutar estas pruebas.
Tenga en cuenta que la integración de ClickHouse con controladores de terceros no se ha probado. Además, actualmente no tenemos pruebas de integración con nuestros controladores JDBC y ODBC. Tenga en cuenta que la integración de ClickHouse con controladores de terceros no se ha probado. Además, actualmente no tenemos pruebas de integración con nuestros controladores JDBC y ODBC.
@ -59,11 +62,11 @@ Si desea mejorar el rendimiento de ClickHouse en algún escenario, y si se puede
## Herramientas de prueba y secuencias de comandos {#test-tools-and-scripts} ## Herramientas de prueba y secuencias de comandos {#test-tools-and-scripts}
Algunos programas en `tests` directorio no son pruebas preparadas, pero son herramientas de prueba. Por ejemplo, párr `Lexer` hay una herramienta `src/Parsers/tests/lexer` que solo hacen la tokenización de stdin y escriben el resultado coloreado en stdout. Puede usar este tipo de herramientas como ejemplos de código y para exploración y pruebas manuales. Algunos programas en `tests` directorio no son pruebas preparadas, pero son herramientas de prueba. Por ejemplo, para `Lexer` hay una herramienta `dbms/Parsers/tests/lexer` que solo hacen la tokenización de stdin y escriben el resultado coloreado en stdout. Puede usar este tipo de herramientas como ejemplos de código y para exploración y pruebas manuales.
También puede colocar un par de archivos `.sh` y `.reference` junto con la herramienta para ejecutarlo en alguna entrada predefinida, entonces el resultado del script se puede comparar con `.reference` file. Este tipo de pruebas no están automatizadas. También puede colocar un par de archivos `.sh` y `.reference` junto con la herramienta para ejecutarlo en alguna entrada predefinida, entonces el resultado del script se puede comparar con `.reference` file. Este tipo de pruebas no están automatizadas.
## Pruebas misceláneas {#miscellanous-tests} ## Miscellanous Pruebas {#miscellanous-tests}
Hay pruebas para diccionarios externos ubicados en `tests/external_dictionaries` y para modelos aprendidos a máquina en `tests/external_models`. Estas pruebas no se actualizan y deben transferirse a pruebas de integración. Hay pruebas para diccionarios externos ubicados en `tests/external_dictionaries` y para modelos aprendidos a máquina en `tests/external_models`. Estas pruebas no se actualizan y deben transferirse a pruebas de integración.
@ -77,7 +80,7 @@ Cuando desarrolla una nueva característica, es razonable probarla también manu
Construir ClickHouse. Ejecute ClickHouse desde el terminal: cambie el directorio a `programs/clickhouse-server` y ejecutarlo con `./clickhouse-server`. Se utilizará la configuración (`config.xml`, `users.xml` y archivos dentro de `config.d` y `users.d` directorios) desde el directorio actual de forma predeterminada. Para conectarse al servidor ClickHouse, ejecute `programs/clickhouse-client/clickhouse-client`. Construir ClickHouse. Ejecute ClickHouse desde el terminal: cambie el directorio a `programs/clickhouse-server` y ejecutarlo con `./clickhouse-server`. Se utilizará la configuración (`config.xml`, `users.xml` y archivos dentro de `config.d` y `users.d` directorios) desde el directorio actual de forma predeterminada. Para conectarse al servidor ClickHouse, ejecute `programs/clickhouse-client/clickhouse-client`.
Tenga en cuenta que todas las herramientas de clickhouse (servidor, cliente, etc.) son solo enlaces simbólicos a un único binario llamado `clickhouse`. Puede encontrar este binario en `programs/clickhouse`. Todas las herramientas también se pueden invocar como `clickhouse tool` es lugar de `clickhouse-tool`. Tenga en cuenta que todas las herramientas de clickhouse (servidor, cliente, etc.) son solo enlaces simbólicos a un único binario llamado `clickhouse`. Puede encontrar este binario en `programs/clickhouse`. Todas las herramientas también se pueden invocar como `clickhouse tool` en lugar de `clickhouse-tool`.
Alternativamente, puede instalar el paquete ClickHouse: ya sea una versión estable del repositorio de Yandex o puede crear un paquete para usted con `./release` en la raíz de fuentes de ClickHouse. Luego inicie el servidor con `sudo service clickhouse-server start` (o detener para detener el servidor). Busque registros en `/etc/clickhouse-server/clickhouse-server.log`. Alternativamente, puede instalar el paquete ClickHouse: ya sea una versión estable del repositorio de Yandex o puede crear un paquete para usted con `./release` en la raíz de fuentes de ClickHouse. Luego inicie el servidor con `sudo service clickhouse-server start` (o detener para detener el servidor). Busque registros en `/etc/clickhouse-server/clickhouse-server.log`.
@ -154,9 +157,9 @@ Normalmente lanzamos y ejecutamos todas las pruebas en una sola variante de comp
- construir en FreeBSD; - construir en FreeBSD;
- construir en Debian con bibliotecas de paquetes del sistema; - construir en Debian con bibliotecas de paquetes del sistema;
- Construir con enlaces compartidos de bibliotecas; - construir con enlaces compartidos de bibliotecas;
- construir en la plataforma AArch64; - construir en la plataforma AArch64;
- Construir en la plataforma PowerPc. - construir en la plataforma PowerPc.
Por ejemplo, construir con paquetes del sistema es una mala práctica, porque no podemos garantizar qué versión exacta de paquetes tendrá un sistema. Pero esto es realmente necesario para los mantenedores de Debian. Por esta razón, al menos tenemos que admitir esta variante de construcción. Otro ejemplo: la vinculación compartida es una fuente común de problemas, pero es necesaria para algunos entusiastas. Por ejemplo, construir con paquetes del sistema es una mala práctica, porque no podemos garantizar qué versión exacta de paquetes tendrá un sistema. Pero esto es realmente necesario para los mantenedores de Debian. Por esta razón, al menos tenemos que admitir esta variante de construcción. Otro ejemplo: la vinculación compartida es una fuente común de problemas, pero es necesaria para algunos entusiastas.
@ -168,7 +171,7 @@ Cuando ampliamos el protocolo de red ClickHouse, probamos manualmente que el ant
## Ayuda del compilador {#help-from-the-compiler} ## Ayuda del compilador {#help-from-the-compiler}
Código principal de ClickHouse (que se encuentra en `dbms` Directorio) se construye con `-Wall -Wextra -Werror` y con algunas advertencias habilitadas adicionales. Aunque estas opciones no están habilitadas para bibliotecas de terceros. Código principal de ClickHouse (que se encuentra en `dbms` directorio) se construye con `-Wall -Wextra -Werror` y con algunas advertencias habilitadas adicionales. Aunque estas opciones no están habilitadas para bibliotecas de terceros.
Clang tiene advertencias aún más útiles: puedes buscarlas con `-Weverything` y elige algo para la compilación predeterminada. Clang tiene advertencias aún más útiles: puedes buscarlas con `-Weverything` y elige algo para la compilación predeterminada.
@ -180,7 +183,7 @@ Para las compilaciones de producción, se usa gcc (todavía genera un código li
Ejecutamos pruebas funcionales y de integración bajo ASan por compromiso. Ejecutamos pruebas funcionales y de integración bajo ASan por compromiso.
**Valgrind (Memcheck)**. **Valgrind (Memcheck)**.
Realizamos pruebas funcionales bajo Valgrind durante la noche. Se tarda varias horas. Actualmente hay un falso positivo conocido en `re2` Biblioteca, ver [este artículo](https://research.swtch.com/sparse). Realizamos pruebas funcionales bajo Valgrind durante la noche. Se tarda varias horas. Actualmente hay un falso positivo conocido en `re2` biblioteca, ver [este artículo](https://research.swtch.com/sparse).
**Desinfectante de comportamiento indefinido.** **Desinfectante de comportamiento indefinido.**
Ejecutamos pruebas funcionales y de integración bajo ASan por compromiso. Ejecutamos pruebas funcionales y de integración bajo ASan por compromiso.
@ -196,7 +199,7 @@ Versión de depuración de `jemalloc` se utiliza para la compilación de depurac
## Fuzzing {#fuzzing} ## Fuzzing {#fuzzing}
Usamos una prueba de fuzz simple para generar consultas SQL aleatorias y para verificar que el servidor no muera. Las pruebas de pelusa se realizan con el desinfectante Address. Lo puedes encontrar en `00746_sql_fuzzy.pl`. Esta prueba debe ejecutarse de forma continua (de la noche a la mañana y más). Usamos una prueba de fuzz simple para generar consultas SQL aleatorias y verificar que el servidor no muera. Las pruebas de pelusa se realizan con el desinfectante Address. Lo puedes encontrar en `00746_sql_fuzzy.pl`. Esta prueba debe ejecutarse de forma continua (de la noche a la mañana y más).
A partir de diciembre de 2018, todavía no usamos pruebas de fuzz aisladas del código de la biblioteca. A partir de diciembre de 2018, todavía no usamos pruebas de fuzz aisladas del código de la biblioteca.
@ -208,7 +211,7 @@ La gente del departamento de Yandex Cloud hace una visión general básica de la
Corremos `PVS-Studio` por compromiso. Hemos evaluado `clang-tidy`, `Coverity`, `cppcheck`, `PVS-Studio`, `tscancode`. Encontrará instrucciones de uso en `tests/instructions/` directorio. También puedes leer [el artículo en ruso](https://habr.com/company/yandex/blog/342018/). Corremos `PVS-Studio` por compromiso. Hemos evaluado `clang-tidy`, `Coverity`, `cppcheck`, `PVS-Studio`, `tscancode`. Encontrará instrucciones de uso en `tests/instructions/` directorio. También puedes leer [el artículo en ruso](https://habr.com/company/yandex/blog/342018/).
Si usted estados unidos `CLion` Como IDE, puede aprovechar algunos `clang-tidy` comprueba fuera de la caja. Si usted usa `CLion` como IDE, puede aprovechar algunos `clang-tidy` comprueba fuera de la caja.
## Endurecer {#hardening} ## Endurecer {#hardening}
@ -216,7 +219,7 @@ Si usted estados unidos `CLion` Como IDE, puede aprovechar algunos `clang-tidy`
## Estilo de código {#code-style} ## Estilo de código {#code-style}
Se describen las reglas de estilo de código [aqui](https://clickhouse.tech/docs/es/development/style/). Se describen las reglas de estilo de código [aqui](https://clickhouse.tech/docs/en/development/style/).
Para comprobar si hay algunas violaciones de estilo comunes, puede usar `utils/check-style` script. Para comprobar si hay algunas violaciones de estilo comunes, puede usar `utils/check-style` script.
@ -234,7 +237,7 @@ Estas pruebas son automatizadas por un equipo separado. Debido a la gran cantida
## Cobertura de prueba {#test-coverage} ## Cobertura de prueba {#test-coverage}
A partir de julio de 2018 no realizamos un seguimiento de la cobertura de las pruebas. A partir de julio de 2018, no realizamos un seguimiento de la cobertura de las pruebas.
## Automatización de pruebas {#test-automation} ## Automatización de pruebas {#test-automation}
@ -245,4 +248,5 @@ Los trabajos de compilación y las pruebas se ejecutan en Sandbox por confirmaci
No usamos Travis CI debido al límite de tiempo y potencia computacional. No usamos Travis CI debido al límite de tiempo y potencia computacional.
No usamos Jenkins. Se usó antes y ahora estamos felices de no estar usando Jenkins. No usamos Jenkins. Se usó antes y ahora estamos felices de no estar usando Jenkins.
[Artículo Original](https://clickhouse.tech/docs/es/development/tests/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/development/tests/) <!--hide-->
pruebas/) <!--hide-->

View File

@ -0,0 +1,21 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Database Engines
toc_priority: 27
toc_title: "Implantaci\xF3n"
---
# Motores de base de datos {#database-engines}
Los motores de bases de datos le permiten trabajar con tablas.
De forma predeterminada, ClickHouse utiliza su motor de base de datos nativa, que proporciona [motores de mesa](../../engines/table_engines/index.md) y una [Dialecto SQL](../../sql_reference/syntax.md).
También puede utilizar los siguientes motores de base de datos:
- [MySQL](mysql.md)
- [Perezoso](lazy.md)
[Artículo Original](https://clickhouse.tech/docs/en/database_engines/) <!--hide-->

View File

@ -1,15 +1,18 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 31
toc_title: Perezoso
--- ---
# Perezoso {#lazy} # Perezoso {#lazy}
Mantiene las tablas en RAM solamente `expiration_time_in_seconds` segundos después del último acceso. Solo se puede usar con tablas \*Log. Mantiene las tablas en RAM solamente `expiration_time_in_seconds` segundos después del último acceso. Solo se puede usar con tablas \*Log.
Está optimizado para almacenar muchas tablas pequeñas \* Log, para las cuales hay un intervalo de tiempo largo entre los accesos. Está optimizado para almacenar muchas tablas pequeñas \* Log, para las cuales hay un largo intervalo de tiempo entre los accesos.
## Creación de una base de datos {#creating-a-database} ## Creación de una base de datos {#creating-a-database}
CREAR BASE DE DATOS testlazy ENGINE = Lazy(expiration\_time\_in\_seconds); CREATE DATABASE testlazy ENGINE = Lazy(expiration_time_in_seconds);
[Artículo Original](https://clickhouse.tech/docs/es/database_engines/lazy/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/database_engines/lazy/) <!--hide-->

View File

@ -1,10 +1,13 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 30
toc_title: MySQL
--- ---
# MySQL {#mysql} # Mysql {#mysql}
Permite conectarse a bases de datos en un servidor MySQL remoto y realizar `INSERT` y `SELECT` Consultas para intercambiar datos entre ClickHouse y MySQL. Permite conectarse a bases de datos en un servidor MySQL remoto y realizar `INSERT` y `SELECT` consultas para intercambiar datos entre ClickHouse y MySQL.
El `MySQL` motor de base de datos traducir consultas al servidor MySQL para que pueda realizar operaciones tales como `SHOW TABLES` o `SHOW CREATE TABLE`. El `MySQL` motor de base de datos traducir consultas al servidor MySQL para que pueda realizar operaciones tales como `SHOW TABLES` o `SHOW CREATE TABLE`.
@ -23,32 +26,32 @@ ENGINE = MySQL('host:port', 'database', 'user', 'password')
**Parámetros del motor** **Parámetros del motor**
- `host:port`Dirección del servidor MySQL. - `host:port`MySQL server address.
- `database`Nombre de base de datos remota. - `database`Remote database name.
- `user`Usuario de MySQL. - `user` — MySQL user.
- `password`Contraseña de usuario. - `password`User password.
## Soporte de tipos de datos {#data_types-support} ## Soporte de tipos de datos {#data_types-support}
| MySQL | Haga clic en Casa | | MySQL | Haga clic en Casa |
|-----------------------------------|---------------------------------------------| |----------------------------------|--------------------------------------------------------------|
| TINYINT NO FIRMADO | [UInt8](../data_types/int_uint.md) | | UNSIGNED TINYINT | [UInt8](../../sql_reference/data_types/int_uint.md) |
| TINYINT | [Int8](../data_types/int_uint.md) | | TINYINT | [Int8](../../sql_reference/data_types/int_uint.md) |
| SMALLINT UNSIGNED | [UInt16](../data_types/int_uint.md) | | UNSIGNED SMALLINT | [UInt16](../../sql_reference/data_types/int_uint.md) |
| SMALLINT | [Int16](../data_types/int_uint.md) | | SMALLINT | [Int16](../../sql_reference/data_types/int_uint.md) |
| UNFIRED INT, MEDIUMINT NO FIRMADO | [UInt32](../data_types/int_uint.md) | | UNSIGNED INT, UNSIGNED MEDIUMINT | [UInt32](../../sql_reference/data_types/int_uint.md) |
| INT, MEDIUMINT | [Int32](../data_types/int_uint.md) | | INT, MEDIUMINT | [Int32](../../sql_reference/data_types/int_uint.md) |
| BIGINT NO FIRMADO | [UInt64](../data_types/int_uint.md) | | UNSIGNED BIGINT | [UInt64](../../sql_reference/data_types/int_uint.md) |
| BIGINT | [Int64](../data_types/int_uint.md) | | BIGINT | [Int64](../../sql_reference/data_types/int_uint.md) |
| FLOTANTE | [Float32](../data_types/float.md) | | FLOAT | [Float32](../../sql_reference/data_types/float.md) |
| DOBLE | [Float64](../data_types/float.md) | | DOUBLE | [Float64](../../sql_reference/data_types/float.md) |
| FECHA | [Fecha](../data_types/date.md) | | DATE | [Fecha](../../sql_reference/data_types/date.md) |
| DATETIME, TIMESTAMP | [FechaHora](../data_types/datetime.md) | | DATETIME, TIMESTAMP | [FechaHora](../../sql_reference/data_types/datetime.md) |
| BINARIO | [Cadena fija](../data_types/fixedstring.md) | | BINARY | [Cadena fija](../../sql_reference/data_types/fixedstring.md) |
Todos los demás tipos de datos MySQL se convierten en [Cadena](../data_types/string.md). Todos los demás tipos de datos MySQL se convierten en [Cadena](../../sql_reference/data_types/string.md).
[NULO](../data_types/nullable.md) se admite. [NULL](../../sql_reference/data_types/nullable.md) se admite.
## Ejemplos de uso {#examples-of-use} ## Ejemplos de uso {#examples-of-use}
@ -68,11 +71,11 @@ mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec) Query OK, 1 row affected (0,00 sec)
mysql> select * from mysql_table; mysql> select * from mysql_table;
+--------+-------+ +------+-----+
| int_id | value | | int_id | value |
+--------+-------+ +------+-----+
| 1 | 2 | | 1 | 2 |
+--------+-------+ +------+-----+
1 row in set (0,00 sec) 1 row in set (0,00 sec)
``` ```
@ -129,4 +132,4 @@ SELECT * FROM mysql_db.mysql_table
└────────┴───────┘ └────────┴───────┘
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/database_engines/mysql/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/database_engines/mysql/) <!--hide-->

8
docs/es/engines/index.md Normal file
View File

@ -0,0 +1,8 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Engines
toc_priority: 25
---

View File

@ -0,0 +1,85 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Table Engines
toc_priority: 26
toc_title: "Implantaci\xF3n"
---
# Motores de mesa {#table_engines}
El motor de tabla (tipo de tabla) determina:
- Cómo y dónde se almacenan los datos, dónde escribirlos y dónde leerlos.
- Qué consultas son compatibles y cómo.
- Acceso a datos simultáneos.
- Uso de índices, si está presente.
- Si es posible la ejecución de solicitudes multiproceso.
- Parámetros de replicación de datos.
## Familias de motores {#engine-families}
### Mergetree {#mergetree}
Los motores de mesa más universales y funcionales para tareas de alta carga. La propiedad compartida por estos motores es la inserción rápida de datos con el posterior procesamiento de datos en segundo plano. `MergeTree` Los motores familiares admiten la replicación de datos (con [Replicado\*](mergetree_family/replication.md) versiones de motores), particionamiento y otras características no admitidas en otros motores.
Motores en la familia:
- [Método de codificación de datos:](mergetree_family/mergetree.md)
- [ReplacingMergeTree](mergetree_family/replacingmergetree.md)
- [SummingMergeTree](mergetree_family/summingmergetree.md)
- [AgregaciónMergeTree](mergetree_family/aggregatingmergetree.md)
- [ColapsarMergeTree](mergetree_family/collapsingmergetree.md)
- [VersionedCollapsingMergeTree](mergetree_family/versionedcollapsingmergetree.md)
- [GraphiteMergeTree](mergetree_family/graphitemergetree.md)
### Registro {#log}
Ligero [motor](log_family/index.md) con funcionalidad mínima. Son los más efectivos cuando necesita escribir rápidamente muchas tablas pequeñas (hasta aproximadamente 1 millón de filas) y leerlas más tarde como un todo.
Motores en la familia:
- [TinyLog](log_family/tinylog.md)
- [StripeLog](log_family/stripelog.md)
- [Registro](log_family/log.md)
### Motores de integración {#integration-engines}
Motores para comunicarse con otros sistemas de almacenamiento y procesamiento de datos.
Motores en la familia:
- [Kafka](integrations/kafka.md)
- [MySQL](integrations/mysql.md)
- [ODBC](integrations/odbc.md)
- [JDBC](integrations/jdbc.md)
- [HDFS](integrations/hdfs.md)
### Motores especiales {#special-engines}
Motores en la familia:
- [Distribuido](special/distributed.md)
- [Método de codificación de datos:](special/materializedview.md)
- [Diccionario](special/dictionary.md)
- [Fusionar](special/merge.md)
- [File](special/file.md)
- [Nulo](special/null.md)
- [Establecer](special/set.md)
- [Unir](special/join.md)
- [URL](special/url.md)
- [Vista](special/view.md)
- [Memoria](special/memory.md)
- [Búfer](special/buffer.md)
## Virtual Columnas {#table_engines-virtual-columns}
La columna virtual es un atributo de motor de tabla integral que se define en el código fuente del motor.
No debe especificar columnas virtuales en el `CREATE TABLE` consulta y no puedes verlos en `SHOW CREATE TABLE` y `DESCRIBE TABLE` resultados de la consulta. Las columnas virtuales también son de solo lectura, por lo que no puede insertar datos en columnas virtuales.
Para seleccionar datos de una columna virtual, debe especificar su nombre en el `SELECT` consulta. `SELECT *` no devuelve valores de columnas virtuales.
Si crea una tabla con una columna que tiene el mismo nombre que una de las columnas virtuales de la tabla, la columna virtual se vuelve inaccesible. No recomendamos hacer esto. Para ayudar a evitar conflictos, los nombres de columna virtual suelen tener el prefijo de un guión bajo.
[Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/) <!--hide-->

View File

@ -1,11 +1,14 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 36
toc_title: HDFS
--- ---
# HDFS {#table_engines-hdfs} # HDFS {#table_engines-hdfs}
Este motor proporciona integración con [Acerca de nosotros](https://en.wikipedia.org/wiki/Apache_Hadoop) permitiendo gestionar datos sobre [HDFS](https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html)a través de ClickHouse. Este motor es similar Este motor proporciona integración con [Acerca de nosotros](https://en.wikipedia.org/wiki/Apache_Hadoop) permitiendo gestionar datos sobre [HDFS](https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html)a través de ClickHouse. Este motor es similar
Angeles [File](file.md) y [URL](url.md) motores, pero proporciona características específicas de Hadoop. a la [File](../special/file.md) y [URL](../special/url.md) motores, pero proporciona características específicas de Hadoop.
## Uso {#usage} ## Uso {#usage}
@ -16,8 +19,8 @@ ENGINE = HDFS(URI, format)
El `URI` El parámetro es el URI del archivo completo en HDFS. El `URI` El parámetro es el URI del archivo completo en HDFS.
El `format` parámetro especifica uno de los formatos de archivo disponibles. Realizar El `format` parámetro especifica uno de los formatos de archivo disponibles. Realizar
`SELECT` consultas, el formato debe ser compatible para la entrada, y para realizar `SELECT` consultas, el formato debe ser compatible para la entrada, y para realizar
`INSERT` consultas para la salida. Los formatos disponibles se enumeran en el `INSERT` queries for output. The available formats are listed in the
[Formato](../../interfaces/formats.md#formats) apartado. [Formato](../../../interfaces/formats.md#formats) apartado.
La parte de la ruta de `URI` puede contener globs. En este caso, la tabla sería de solo lectura. La parte de la ruta de `URI` puede contener globs. En este caso, la tabla sería de solo lectura.
**Ejemplo:** **Ejemplo:**
@ -59,12 +62,12 @@ SELECT * FROM hdfs_engine_table LIMIT 2
Múltiples componentes de ruta de acceso pueden tener globs. Para ser procesado, el archivo debe existir y coincidir con todo el patrón de ruta. Listado de archivos determina durante `SELECT` (no en `CREATE` momento). Múltiples componentes de ruta de acceso pueden tener globs. Para ser procesado, el archivo debe existir y coincidir con todo el patrón de ruta. Listado de archivos determina durante `SELECT` (no en `CREATE` momento).
- `*` — Sustituye cualquier número de caracteres excepto `/` incluyendo cadena vacía. - `*` — Substitutes any number of any characters except `/` incluyendo cadena vacía.
- `?` — Sustituye a cualquier carácter individual. - `?` — Substitutes any single character.
- `{some_string,another_string,yet_another_one}` — Sustituye cualquiera de las cadenas `'some_string', 'another_string', 'yet_another_one'`. - `{some_string,another_string,yet_another_one}` — Substitutes any of strings `'some_string', 'another_string', 'yet_another_one'`.
- `{N..M}` — Sustituye cualquier número en el intervalo de N a M, incluidas ambas fronteras. - `{N..M}` — Substitutes any number in range from N to M including both borders.
Construcciones con `{}` hijo similares a la [remoto](../../query_language/table_functions/remote.md) función de la tabla. Construcciones con `{}` son similares a la [remoto](../../../sql_reference/table_functions/remote.md) función de la tabla.
**Ejemplo** **Ejemplo**
@ -108,13 +111,13 @@ Crear tabla con archivos llamados `file000`, `file001`, … , `file999`:
CREARE TABLE big_table (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV') CREARE TABLE big_table (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV')
``` ```
## Columnas virtuales {#virtual-columns} ## Virtual Columnas {#virtual-columns}
- `_path`Ruta de acceso al archivo. - `_path`Path to the file.
- `_file` — Nombre del expediente. - `_file` — Name of the file.
**Ver también** **Ver también**
- [Columnas virtuales](https://clickhouse.tech/docs/es/operations/table_engines/#table_engines-virtual_columns) - [Virtual columnas](../index.md#table_engines-virtual_columns)
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/hdfs/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/hdfs/) <!--hide-->

View File

@ -0,0 +1,8 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Integrations
toc_priority: 30
---

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 34
toc_title: JDBC
--- ---
# JDBC {#table-engine-jdbc} # JDBC {#table-engine-jdbc}
@ -8,7 +11,7 @@ Permite que ClickHouse se conecte a bases de datos externas a través de [JDBC](
Para implementar la conexión JDBC, ClickHouse utiliza el programa independiente [Sistema abierto.](https://github.com/alex-krash/clickhouse-jdbc-bridge) que debería ejecutarse como un demonio. Para implementar la conexión JDBC, ClickHouse utiliza el programa independiente [Sistema abierto.](https://github.com/alex-krash/clickhouse-jdbc-bridge) que debería ejecutarse como un demonio.
Este motor soporta el [NULO](../../data_types/nullable.md) tipo de datos. Este motor soporta el [NULL](../../../sql_reference/data_types/nullable.md) tipo de datos.
## Creación de una tabla {#creating-a-table} ## Creación de una tabla {#creating-a-table}
@ -22,18 +25,18 @@ ENGINE = JDBC(dbms_uri, external_database, external_table)
**Parámetros del motor** **Parámetros del motor**
- `dbms_uri` — URI de un DBMS externo. - `dbms_uri` — URI of an external DBMS.
Formato: `jdbc:<driver_name>://<host_name>:<port>/?user=<username>&password=<password>`. Formato: `jdbc:<driver_name>://<host_name>:<port>/?user=<username>&password=<password>`.
Ejemplo para MySQL: `jdbc:mysql://localhost:3306/?user=root&password=root`. Ejemplo para MySQL: `jdbc:mysql://localhost:3306/?user=root&password=root`.
- `external_database`Base de datos en un DBMS externo. - `external_database`Database in an external DBMS.
- `external_table` — Nombre de la tabla en `external_database`. - `external_table` — Name of the table in `external_database`.
## Ejemplo de uso {#usage-example} ## Ejemplo de uso {#usage-example}
Creación de una tabla en el servidor MySQL mediante la conexión directa con su cliente de consola: Crear una tabla en el servidor MySQL conectándose directamente con su cliente de consola:
``` text ``` text
mysql> CREATE TABLE `test`.`test` ( mysql> CREATE TABLE `test`.`test` (
@ -48,11 +51,11 @@ mysql> insert into test (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec) Query OK, 1 row affected (0,00 sec)
mysql> select * from test; mysql> select * from test;
+--------+--------------+-------+----------------+ +------+----------+-----+----------+
| int_id | int_nullable | float | float_nullable | | int_id | int_nullable | float | float_nullable |
+--------+--------------+-------+----------------+ +------+----------+-----+----------+
| 1 | NULL | 2 | NULL | | 1 | NULL | 2 | NULL |
+--------+--------------+-------+----------------+ +------+----------+-----+----------+
1 row in set (0,00 sec) 1 row in set (0,00 sec)
``` ```
@ -82,6 +85,6 @@ FROM jdbc_table
## Ver también {#see-also} ## Ver también {#see-also}
- [Función de la tabla de JDBC](../../query_language/table_functions/jdbc.md). - [Función de la tabla de JDBC](../../../sql_reference/table_functions/jdbc.md).
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/jdbc/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/jdbc/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 32
toc_title: Kafka
--- ---
# Kafka {#kafka} # Kafka {#kafka}
@ -34,17 +37,17 @@ SETTINGS
Parámetros requeridos: Parámetros requeridos:
- `kafka_broker_list` Una lista separada por comas de corredores (por ejemplo, `localhost:9092`). - `kafka_broker_list` A comma-separated list of brokers (for example, `localhost:9092`).
- `kafka_topic_list` Una lista de temas Kafka. - `kafka_topic_list` A list of Kafka topics.
- `kafka_group_name` Un grupo de consumidores Kafka. Los márgenes de lectura se rastrean para cada grupo por separado. Si no desea que los mensajes se dupliquen en el clúster, utilice el mismo nombre de grupo en todas partes. - `kafka_group_name` A group of Kafka consumers. Reading margins are tracked for each group separately. If you don't want messages to be duplicated in the cluster, use the same group name everywhere.
- `kafka_format` Formato de mensaje. Utiliza la misma notación que el SQL `FORMAT` función, tal como `JSONEachRow`. Para obtener más información, consulte [Formato](../../interfaces/formats.md) apartado. - `kafka_format` Message format. Uses the same notation as the SQL `FORMAT` función, tal como `JSONEachRow`. Para obtener más información, consulte [Formato](../../../interfaces/formats.md) apartado.
Parámetros opcionales: Parámetros opcionales:
- `kafka_row_delimiter` Carácter delimitador, que termina el mensaje. - `kafka_row_delimiter` Delimiter character, which ends the message.
- `kafka_schema` Parámetro que debe utilizarse si el formato requiere una definición de esquema. Por ejemplo, [Cap'n Proto](https://capnproto.org/) requiere la ruta de acceso al archivo de esquema y el nombre de la raíz `schema.capnp:Message` objeto. - `kafka_schema` Parameter that must be used if the format requires a schema definition. For example, [Cap'n Proto](https://capnproto.org/) requiere la ruta de acceso al archivo de esquema y el nombre de la raíz `schema.capnp:Message` objeto.
- `kafka_num_consumers` El número de consumidores por tabla. Predeterminado: `1`. Especifique más consumidores si el rendimiento de un consumidor es insuficiente. El número total de consumidores no debe exceder el número de particiones en el tema, ya que solo se puede asignar un consumidor por partición. - `kafka_num_consumers` The number of consumers per table. Default: `1`. Especifique más consumidores si el rendimiento de un consumidor es insuficiente. El número total de consumidores no debe exceder el número de particiones en el tema, ya que solo se puede asignar un consumidor por partición.
- `kafka_skip_broken_messages` Tolerancia analizador de mensajes Kafka a los mensajes incompatibles con el esquema por bloque. Predeterminado: `0`. Si `kafka_skip_broken_messages = N` Entonces el motor salta *Y* Mensajes de Kafka que no se pueden analizar (un mensaje es igual a una fila de datos). - `kafka_skip_broken_messages` Kafka message parser tolerance to schema-incompatible messages per block. Default: `0`. Si `kafka_skip_broken_messages = N` entonces el motor salta *N* Mensajes de Kafka que no se pueden analizar (un mensaje es igual a una fila de datos).
Ejemplos: Ejemplos:
@ -90,7 +93,7 @@ Kafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format
</details> </details>
## Descripción {#description} ## Descripci {#description}
Los mensajes entregados se realizan un seguimiento automático, por lo que cada mensaje de un grupo solo se cuenta una vez. Si desea obtener los datos dos veces, cree una copia de la tabla con otro nombre de grupo. Los mensajes entregados se realizan un seguimiento automático, por lo que cada mensaje de un grupo solo se cuenta una vez. Si desea obtener los datos dos veces, cree una copia de la tabla con otro nombre de grupo.
@ -127,7 +130,7 @@ Ejemplo:
SELECT level, sum(total) FROM daily GROUP BY level; SELECT level, sum(total) FROM daily GROUP BY level;
``` ```
Para mejorar el rendimiento, los mensajes recibidos se agrupan en bloques del tamaño de [Max\_insert\_block\_size](../settings/settings.md#settings-max_insert_block_size). Si el bloque no se formó dentro [Nombre de la red inalámbrica (SSID):](../settings/settings.md) milisegundos, los datos se vaciarán a la tabla independientemente de la integridad del bloque. Para mejorar el rendimiento, los mensajes recibidos se agrupan en bloques del tamaño de [Max\_insert\_block\_size](../../../operations/server_configuration_parameters/settings.md#settings-max_insert_block_size). Si el bloque no se formó dentro de [Nombre de la red inalámbrica (SSID):](../../../operations/server_configuration_parameters/settings.md) milisegundos, los datos se vaciarán a la tabla independientemente de la integridad del bloque.
Para detener la recepción de datos de tema o cambiar la lógica de conversión, desconecte la vista materializada: Para detener la recepción de datos de tema o cambiar la lógica de conversión, desconecte la vista materializada:
@ -158,16 +161,16 @@ Similar a GraphiteMergeTree, el motor Kafka admite una configuración extendida
Para obtener una lista de posibles opciones de configuración, consulte [referencia de configuración librdkafka](https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md). Usa el guión bajo (`_`) en lugar de un punto en la configuración de ClickHouse. Por ejemplo, `check.crcs=true` será `<check_crcs>true</check_crcs>`. Para obtener una lista de posibles opciones de configuración, consulte [referencia de configuración librdkafka](https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md). Usa el guión bajo (`_`) en lugar de un punto en la configuración de ClickHouse. Por ejemplo, `check.crcs=true` será `<check_crcs>true</check_crcs>`.
## Columnas virtuales {#virtual-columns} ## Virtual Columnas {#virtual-columns}
- `_topic`El tema de Kafka. - `_topic` — Kafka topic.
- `_key`Clave del mensaje. - `_key`Key of the message.
- `_offset`Desplazamiento del mensaje. - `_offset`Offset of the message.
- `_timestamp`Marca de tiempo del mensaje. - `_timestamp`Timestamp of the message.
- `_partition` — Partición de Kafka tema. - `_partition` — Partition of Kafka topic.
**Ver también** **Ver también**
- [Columnas virtuales](index.md#table_engines-virtual_columns) - [Virtual columnas](../index.md#table_engines-virtual_columns)
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/kafka/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/kafka/) <!--hide-->

View File

@ -1,10 +1,13 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 33
toc_title: MySQL
--- ---
# MySQL {#mysql} # Mysql {#mysql}
El motor MySQL le permite realizar `SELECT` Consultas sobre datos almacenados en un servidor MySQL remoto. El motor MySQL le permite realizar `SELECT` consultas sobre datos almacenados en un servidor MySQL remoto.
## Creación de una tabla {#creating-a-table} ## Creación de una tabla {#creating-a-table}
@ -17,32 +20,32 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
) ENGINE = MySQL('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause']); ) ENGINE = MySQL('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause']);
``` ```
Vea una descripción detallada del [CREAR TABLA](../../query_language/create.md#create-table-query) consulta. Vea una descripción detallada del [CREATE TABLE](../../../sql_reference/statements/create.md#create-table-query) consulta.
La estructura de la tabla puede diferir de la estructura de la tabla MySQL original: La estructura de la tabla puede diferir de la estructura de la tabla MySQL original:
- Los nombres de columna deben ser los mismos que en la tabla MySQL original, pero puede usar solo algunas de estas columnas y en cualquier orden. - Los nombres de columna deben ser los mismos que en la tabla MySQL original, pero puede usar solo algunas de estas columnas y en cualquier orden.
- Los tipos de columna pueden diferir de los de la tabla MySQL original. Haga clic en Casa intenta [elenco](../../query_language/functions/type_conversion_functions.md#type_conversion_function-cast) valores a los tipos de datos ClickHouse. - Los tipos de columna pueden diferir de los de la tabla MySQL original. ClickHouse intenta [elenco](../../../sql_reference/functions/type_conversion_functions.md#type_conversion_function-cast) valores a los tipos de datos ClickHouse.
**Parámetros del motor** **Parámetros del motor**
- `host:port`Dirección del servidor MySQL. - `host:port`MySQL server address.
- `database`Nombre de base de datos remota. - `database`Remote database name.
- `table`Nombre de la tabla remota. - `table`Remote table name.
- `user`Usuario de MySQL. - `user` — MySQL user.
- `password`Contraseña de usuario. - `password`User password.
- `replace_query`Bandera que convierte `INSERT INTO` Consultas a `REPLACE INTO`. Si `replace_query=1`, la consulta se sustituye. - `replace_query`Flag that converts `INSERT INTO` consultas a `REPLACE INTO`. Si `replace_query=1`, la consulta se sustituye.
- `on_duplicate_clause`El `ON DUPLICATE KEY on_duplicate_clause` expresión que se añade a la `INSERT` consulta. - `on_duplicate_clause`The `ON DUPLICATE KEY on_duplicate_clause` expresión que se añade a la `INSERT` consulta.
Ejemplo: `INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1`, donde `on_duplicate_clause` ser `UPDATE c2 = c2 + 1`. Ver el [Documentación de MySQL](https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html) para encontrar qué `on_duplicate_clause` se puede utilizar con el `ON DUPLICATE KEY` clausula. Ejemplo: `INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1`, donde `on_duplicate_clause` ser `UPDATE c2 = c2 + 1`. Ver el [Documentación de MySQL](https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html) para encontrar qué `on_duplicate_clause` se puede utilizar con el `ON DUPLICATE KEY` clausula.
Especificar `on_duplicate_clause` tienes que pasar `0` Angeles `replace_query` parámetro. Si pasa simultáneamente `replace_query = 1` y `on_duplicate_clause`, ClickHouse genera una excepción. Especificar `on_duplicate_clause` tienes que pasar `0` a la `replace_query` parámetro. Si pasa simultáneamente `replace_query = 1` y `on_duplicate_clause`, ClickHouse genera una excepción.
Simple `WHERE` cláusulas tales como `=, !=, >, >=, <, <=` se ejecutan en el servidor MySQL. Simple `WHERE` cláusulas tales como `=, !=, >, >=, <, <=` se ejecutan en el servidor MySQL.
@ -65,11 +68,11 @@ mysql> insert into test (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec) Query OK, 1 row affected (0,00 sec)
mysql> select * from test; mysql> select * from test;
+--------+--------------+-------+----------------+ +------+----------+-----+----------+
| int_id | int_nullable | float | float_nullable | | int_id | int_nullable | float | float_nullable |
+--------+--------------+-------+----------------+ +------+----------+-----+----------+
| 1 | NULL | 2 | NULL | | 1 | NULL | 2 | NULL |
+--------+--------------+-------+----------------+ +------+----------+-----+----------+
1 row in set (0,00 sec) 1 row in set (0,00 sec)
``` ```
@ -96,7 +99,7 @@ SELECT * FROM mysql_table
## Ver también {#see-also} ## Ver también {#see-also}
- [El mysql función de la tabla](../../query_language/table_functions/mysql.md) - [El mysql función de la tabla](../../../sql_reference/table_functions/mysql.md)
- [Uso de MySQL como fuente de diccionario externo](../../query_language/dicts/external_dicts_dict_sources.md#dicts-external_dicts_dict_sources-mysql) - [Uso de MySQL como fuente de diccionario externo](../../../sql_reference/dictionaries/external_dictionaries/external_dicts_dict_sources.md#dicts-external_dicts_dict_sources-mysql)
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/mysql/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/mysql/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 35
toc_title: ODBC
--- ---
# ODBC {#table-engine-odbc} # ODBC {#table-engine-odbc}
@ -8,7 +11,7 @@ Permite que ClickHouse se conecte a bases de datos externas a través de [ODBC](
Para implementar con seguridad conexiones ODBC, ClickHouse usa un programa separado `clickhouse-odbc-bridge`. Si el controlador ODBC se carga directamente desde `clickhouse-server`, problemas de controlador pueden bloquear el servidor ClickHouse. ClickHouse se inicia automáticamente `clickhouse-odbc-bridge` cuando se requiere. El programa de puente ODBC se instala desde el mismo paquete que el `clickhouse-server`. Para implementar con seguridad conexiones ODBC, ClickHouse usa un programa separado `clickhouse-odbc-bridge`. Si el controlador ODBC se carga directamente desde `clickhouse-server`, problemas de controlador pueden bloquear el servidor ClickHouse. ClickHouse se inicia automáticamente `clickhouse-odbc-bridge` cuando se requiere. El programa de puente ODBC se instala desde el mismo paquete que el `clickhouse-server`.
Este motor soporta el [NULO](../../data_types/nullable.md) tipo de datos. Este motor soporta el [NULL](../../../sql_reference/data_types/nullable.md) tipo de datos.
## Creación de una tabla {#creating-a-table} ## Creación de una tabla {#creating-a-table}
@ -22,18 +25,18 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
ENGINE = ODBC(connection_settings, external_database, external_table) ENGINE = ODBC(connection_settings, external_database, external_table)
``` ```
Vea una descripción detallada del [CREAR TABLA](../../query_language/create.md#create-table-query) consulta. Vea una descripción detallada del [CREATE TABLE](../../../sql_reference/statements/create.md#create-table-query) consulta.
La estructura de la tabla puede diferir de la estructura de la tabla de origen: La estructura de la tabla puede diferir de la estructura de la tabla de origen:
- Los nombres de columna deben ser los mismos que en la tabla de origen, pero puede usar solo algunas de estas columnas y en cualquier orden. - Los nombres de columna deben ser los mismos que en la tabla de origen, pero puede usar solo algunas de estas columnas y en cualquier orden.
- Los tipos de columna pueden diferir de los de la tabla de origen. Haga clic en Casa intenta [elenco](../../query_language/functions/type_conversion_functions.md#type_conversion_function-cast) valores a los tipos de datos ClickHouse. - Los tipos de columna pueden diferir de los de la tabla de origen. ClickHouse intenta [elenco](../../../sql_reference/functions/type_conversion_functions.md#type_conversion_function-cast) valores a los tipos de datos ClickHouse.
**Parámetros del motor** **Parámetros del motor**
- `connection_settings` — Nombre de la sección con ajustes de conexión en el `odbc.ini` file. - `connection_settings` — Name of the section with connection settings in the `odbc.ini` file.
- `external_database` — Nombre de una base de datos en un DBMS externo. - `external_database` — Name of a database in an external DBMS.
- `external_table` — Nombre de una tabla en el `external_database`. - `external_table` — Name of a table in the `external_database`.
## Ejemplo de uso {#usage-example} ## Ejemplo de uso {#usage-example}
@ -71,7 +74,7 @@ Puede verificar la conexión usando el `isql` utilidad desde la instalación de
``` bash ``` bash
$ isql -v mysqlconn $ isql -v mysqlconn
+---------------------------------------+ +-------------------------+
| Connected! | | Connected! |
| | | |
... ...
@ -92,11 +95,11 @@ mysql> insert into test (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec) Query OK, 1 row affected (0,00 sec)
mysql> select * from test; mysql> select * from test;
+--------+--------------+-------+----------------+ +------+----------+-----+----------+
| int_id | int_nullable | float | float_nullable | | int_id | int_nullable | float | float_nullable |
+--------+--------------+-------+----------------+ +------+----------+-----+----------+
| 1 | NULL | 2 | NULL | | 1 | NULL | 2 | NULL |
+--------+--------------+-------+----------------+ +------+----------+-----+----------+
1 row in set (0,00 sec) 1 row in set (0,00 sec)
``` ```
@ -123,7 +126,7 @@ SELECT * FROM odbc_t
## Ver también {#see-also} ## Ver también {#see-also}
- [Diccionarios externos ODBC](../../query_language/dicts/external_dicts_dict_sources.md#dicts-external_dicts_dict_sources-odbc) - [Diccionarios externos ODBC](../../../sql_reference/dictionaries/external_dictionaries/external_dicts_dict_sources.md#dicts-external_dicts_dict_sources-odbc)
- [Tabla ODBC función](../../query_language/table_functions/odbc.md) - [Tabla ODBC función](../../../sql_reference/table_functions/odbc.md)
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/odbc/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/odbc/) <!--hide-->

View File

@ -0,0 +1,8 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Log Family
toc_priority: 29
---

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 33
toc_title: Registro
--- ---
# Registro {#log} # Registro {#log}
@ -10,4 +13,4 @@ El registro difiere de [TinyLog](tinylog.md) en que un pequeño archivo de “ma
Para el acceso a datos simultáneos, las operaciones de lectura se pueden realizar simultáneamente, mientras que las operaciones de escritura bloquean las lecturas entre sí. Para el acceso a datos simultáneos, las operaciones de lectura se pueden realizar simultáneamente, mientras que las operaciones de escritura bloquean las lecturas entre sí.
El motor de registro no admite índices. Del mismo modo, si la escritura en una tabla falla, la tabla se rompe y la lectura de ella devuelve un error. El motor de registro es adecuado para datos temporales, tablas de escritura única y para fines de prueba o demostración. El motor de registro no admite índices. Del mismo modo, si la escritura en una tabla falla, la tabla se rompe y la lectura de ella devuelve un error. El motor de registro es adecuado para datos temporales, tablas de escritura única y para fines de prueba o demostración.
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/log/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/log/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 31
toc_title: "Implantaci\xF3n"
--- ---
# Familia del motor de registro {#log-engine-family} # Familia del motor de registro {#log-engine-family}
@ -24,7 +27,7 @@ Motor:
Durante `INSERT` consultas, la tabla está bloqueada y otras consultas para leer y escribir datos esperan a que la tabla se desbloquee. Si no hay consultas de escritura de datos, se puede realizar cualquier número de consultas de lectura de datos simultáneamente. Durante `INSERT` consultas, la tabla está bloqueada y otras consultas para leer y escribir datos esperan a que la tabla se desbloquee. Si no hay consultas de escritura de datos, se puede realizar cualquier número de consultas de lectura de datos simultáneamente.
- No apoyo [mutación](../../query_language/alter.md#alter-mutations) operación. - No apoyo [mutación](../../../sql_reference/statements/alter.md#alter-mutations) operación.
- No admite índices. - No admite índices.
@ -36,8 +39,8 @@ Motor:
## Diferencia {#differences} ## Diferencia {#differences}
El `TinyLog` es el más simple de la familia y proporciona la funcionalidad más pobre y la eficiencia más baja. El `TinyLog` el motor no admite la lectura de datos paralelos por varios subprocesos. Lee datos más lentamente que otros motores de la familia que admiten lectura paralela y utiliza casi tantos descriptores como los `Log` motor porque almacena cada columna en un archivo separado. Úselo en escenarios simples de baja carga. El `TinyLog` es el más simple de la familia y proporciona la funcionalidad más pobre y la eficiencia más baja. El `TinyLog` el motor no admite la lectura de datos paralelos por varios hilos. Lee datos más lentamente que otros motores de la familia que admiten lectura paralela y utiliza casi tantos descriptores como los `Log` motor porque almacena cada columna en un archivo separado. Úselo en escenarios simples de baja carga.
El `Log` y `StripeLog` Los motores admiten lectura de datos paralela. Al leer datos, ClickHouse usa múltiples hilos. Cada subproceso procesa un bloque de datos separado. El `Log` utiliza un archivo separado para cada columna de la tabla. `StripeLog` almacena todos los datos en un archivo. Como resultado, el `StripeLog` el motor utiliza menos descriptores en el sistema operativo, pero el `Log` proporciona una mayor eficiencia al leer datos. El `Log` y `StripeLog` Los motores admiten lectura de datos paralela. Al leer datos, ClickHouse usa múltiples hilos. Cada subproceso procesa un bloque de datos separado. El `Log` utiliza un archivo separado para cada columna de la tabla. `StripeLog` almacena todos los datos en un archivo. Como resultado, el `StripeLog` el motor utiliza menos descriptores en el sistema operativo, pero el `Log` proporciona una mayor eficiencia al leer datos.
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/log_family/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/log_family/) <!--hide-->

View File

@ -1,8 +1,11 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 32
toc_title: StripeLog
--- ---
# StripeLog {#stripelog} # Lista de Stripelog {#stripelog}
Este motor pertenece a la familia de motores de registro. Consulte las propiedades comunes de los motores de registro y sus diferencias en [Familia del motor de registro](log_family.md) artículo. Este motor pertenece a la familia de motores de registro. Consulte las propiedades comunes de los motores de registro y sus diferencias en [Familia del motor de registro](log_family.md) artículo.
@ -19,22 +22,22 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
) ENGINE = StripeLog ) ENGINE = StripeLog
``` ```
Vea la descripción detallada del [CREAR TABLA](../../query_language/create.md#create-table-query) consulta. Vea la descripción detallada del [CREATE TABLE](../../../sql_reference/statements/create.md#create-table-query) consulta.
## Escribir los datos {#table_engines-stripelog-writing-the-data} ## Escribir los datos {#table_engines-stripelog-writing-the-data}
El `StripeLog` el motor almacena todas las columnas en un archivo. Para cada `INSERT` ClickHouse agrega el bloque de datos al final de un archivo de tabla, escribiendo columnas una por una. El `StripeLog` el motor almacena todas las columnas en un archivo. Para cada `INSERT` consulta, ClickHouse agrega el bloque de datos al final de un archivo de tabla, escribiendo columnas una por una.
Para cada tabla, ClickHouse escribe los archivos: Para cada tabla, ClickHouse escribe los archivos:
- `data.bin`Archivo de datos. - `data.bin`Data file.
- `index.mrk`Archivo con marcas. Las marcas contienen compensaciones para cada columna de cada bloque de datos insertado. - `index.mrk`File with marks. Marks contain offsets for each column of each data block inserted.
El `StripeLog` el motor no soporta el `ALTER UPDATE` y `ALTER DELETE` operación. El `StripeLog` el motor no soporta el `ALTER UPDATE` y `ALTER DELETE` operación.
## Lectura de los datos {#table_engines-stripelog-reading-the-data} ## Lectura de los datos {#table_engines-stripelog-reading-the-data}
El archivo con marcas permite ClickHouse paralelizar la lectura de datos. Esto significa que un `SELECT` consulta devuelve filas en un orden impredecible. Descripción `ORDER BY` cláusula para ordenar filas. El archivo con marcas permite ClickHouse paralelizar la lectura de datos. Esto significa que un `SELECT` query devuelve filas en un orden impredecible. Utilice el `ORDER BY` cláusula para ordenar filas.
## Ejemplo de uso {#table_engines-stripelog-example-of-use} ## Ejemplo de uso {#table_engines-stripelog-example-of-use}
@ -50,7 +53,7 @@ CREATE TABLE stripe_log_table
ENGINE = StripeLog ENGINE = StripeLog
``` ```
Inserte datos: Insertar datos:
``` sql ``` sql
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The first regular message') INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The first regular message')
@ -89,4 +92,4 @@ SELECT * FROM stripe_log_table ORDER BY timestamp
└─────────────────────┴──────────────┴────────────────────────────┘ └─────────────────────┴──────────────┴────────────────────────────┘
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/stripelog/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/stripelog/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 34
toc_title: TinyLog
--- ---
# TinyLog {#tinylog} # TinyLog {#tinylog}
@ -8,6 +11,6 @@ El motor pertenece a la familia de motores de registro. Ver [Familia del motor d
Este motor de tablas se usa normalmente con el método write-once: escribir datos una vez, luego leerlos tantas veces como sea necesario. Por ejemplo, puede usar `TinyLog`-type tablas para datos intermedios que se procesan en pequeños lotes. Tenga en cuenta que el almacenamiento de datos en un gran número de tablas pequeñas es ineficiente. Este motor de tablas se usa normalmente con el método write-once: escribir datos una vez, luego leerlos tantas veces como sea necesario. Por ejemplo, puede usar `TinyLog`-type tablas para datos intermedios que se procesan en pequeños lotes. Tenga en cuenta que el almacenamiento de datos en un gran número de tablas pequeñas es ineficiente.
Las consultas se ejecutan en una sola secuencia. En otras palabras, este motor está diseñado para tablas relativamente pequeñas (hasta aproximadamente 1,000,000 filas). Tiene sentido utilizar este motor de tablas si tiene muchas tablas pequeñas, ya que es más simple que el [Registro](log.md) motor (menos archivos necesitan ser abiertos. Las consultas se ejecutan en una sola secuencia. En otras palabras, este motor está diseñado para tablas relativamente pequeñas (hasta aproximadamente 1,000,000 filas). Tiene sentido usar este motor de tablas si tiene muchas tablas pequeñas, ya que es más simple que el [Registro](log.md) motor (menos archivos necesitan ser abiertos).
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/tinylog/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/tinylog/) <!--hide-->

View File

@ -1,14 +1,17 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 35
toc_title: "Agregaci\xF3nMergeTree"
--- ---
# AgregaciónMergeTree {#aggregatingmergetree} # Aggregatingmergetree {#aggregatingmergetree}
El motor hereda de [Método de codificación de datos:](mergetree.md#table_engines-mergetree), alterando la lógica para la fusión de partes de datos. ClickHouse reemplaza todas las filas con la misma clave principal (o más exactamente, con la misma [clave de clasificación](mergetree.md)) con una sola fila (dentro de una parte de datos) que almacena una combinación de estados de funciones agregadas. El motor hereda de [Método de codificación de datos:](mergetree.md#table_engines-mergetree), alterando la lógica para la fusión de partes de datos. ClickHouse reemplaza todas las filas con la misma clave principal (o más exactamente, con la misma [clave de clasificación](mergetree.md)) con una sola fila (dentro de una parte de datos) que almacena una combinación de estados de funciones agregadas.
Usted puede utilizar `AggregatingMergeTree` tablas para la agregación de datos incrementales, incluidas las vistas materializadas agregadas. Usted puede utilizar `AggregatingMergeTree` tablas para la agregación de datos incrementales, incluidas las vistas materializadas agregadas.
El motor procesa todas las columnas con [AggregateFunction](../../data_types/nested_data_structures/aggregatefunction.md) tipo. El motor procesa todas las columnas con [AggregateFunction](../../../sql_reference/data_types/aggregatefunction.md) tipo.
Es apropiado usar `AggregatingMergeTree` si reduce el número de filas por pedidos. Es apropiado usar `AggregatingMergeTree` si reduce el número de filas por pedidos.
@ -28,7 +31,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
[SETTINGS name=value, ...] [SETTINGS name=value, ...]
``` ```
Para obtener una descripción de los parámetros de solicitud, consulte [descripción de la solicitud](../../query_language/create.md). Para obtener una descripción de los parámetros de solicitud, consulte [descripción de la solicitud](../../../sql_reference/statements/create.md).
**Cláusulas de consulta** **Cláusulas de consulta**
@ -55,10 +58,10 @@ Todos los parámetros tienen el mismo significado que en `MergeTree`.
## SELECCIONAR e INSERTAR {#select-and-insert} ## SELECCIONAR e INSERTAR {#select-and-insert}
Para insertar datos, utilice [INSERTAR SELECCIONAR](../../query_language/insert_into.md) Consulta con funciones agregadas -State-. Para insertar datos, utilice [INSERT SELECT](../../../sql_reference/statements/insert_into.md) consulta con funciones agregadas -State-.
Al seleccionar datos de `AggregatingMergeTree` mesa, uso `GROUP BY` cláusula y las mismas funciones agregadas que al insertar datos, pero usando `-Merge` sufijo. Al seleccionar datos de `AggregatingMergeTree` mesa, uso `GROUP BY` cláusula y las mismas funciones agregadas que al insertar datos, pero usando `-Merge` sufijo.
En los resultados de `SELECT` consulta, los valores de `AggregateFunction` tipo tiene representación binaria específica de la implementación para todos los formatos de salida de ClickHouse. Si volcar datos en, por ejemplo, `TabSeparated` Formato con `SELECT` Consulta entonces este volcado se puede cargar de nuevo usando `INSERT` consulta. En los resultados de `SELECT` consulta, los valores de `AggregateFunction` tipo tiene representación binaria específica de la implementación para todos los formatos de salida de ClickHouse. Si volcar datos en, por ejemplo, `TabSeparated` formato con `SELECT` consulta entonces este volcado se puede cargar de nuevo usando `INSERT` consulta.
## Ejemplo de una vista materializada agregada {#example-of-an-aggregated-materialized-view} ## Ejemplo de una vista materializada agregada {#example-of-an-aggregated-materialized-view}
@ -96,4 +99,4 @@ GROUP BY StartDate
ORDER BY StartDate; ORDER BY StartDate;
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/aggregatingmergetree/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/aggregatingmergetree/) <!--hide-->

View File

@ -1,8 +1,11 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 36
toc_title: ColapsarMergeTree
--- ---
# ColapsarMergeTree {#table_engine-collapsingmergetree} # Colapsarmergetree {#table_engine-collapsingmergetree}
El motor hereda de [Método de codificación de datos:](mergetree.md) y agrega la lógica de las filas que colapsan al algoritmo de fusión de partes de datos. El motor hereda de [Método de codificación de datos:](mergetree.md) y agrega la lógica de las filas que colapsan al algoritmo de fusión de partes de datos.
@ -25,13 +28,13 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
[SETTINGS name=value, ...] [SETTINGS name=value, ...]
``` ```
Para obtener una descripción de los parámetros de consulta, consulte [descripción de la consulta](../../query_language/create.md). Para obtener una descripción de los parámetros de consulta, consulte [descripción de la consulta](../../../sql_reference/statements/create.md).
**CollapsingMergeTree Parámetros** **CollapsingMergeTree Parámetros**
- `sign` — Nombre de la columna con el tipo de fila: `1` es una “state” fila, `-1` es una “cancel” Fila. - `sign` — Name of the column with the type of row: `1` es una “state” fila, `-1` es una “cancel” fila.
Tipo de datos de columna`Int8`. Column data type`Int8`.
**Cláusulas de consulta** **Cláusulas de consulta**
@ -55,9 +58,9 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
Todos los parámetros excepto `sign` el mismo significado que en `MergeTree`. Todos los parámetros excepto `sign` el mismo significado que en `MergeTree`.
- `sign` — Nombre de la columna con el tipo de fila: `1` — “state” fila, `-1` — “cancel” Fila. - `sign` — Name of the column with the type of row: `1` — “state” fila, `-1` — “cancel” fila.
Tipo de datos de columna`Int8`. Column Data Type`Int8`.
</details> </details>
@ -67,7 +70,7 @@ Todos los parámetros excepto `sign` el mismo significado que en `MergeTree`.
Considere la situación en la que necesita guardar datos que cambian continuamente para algún objeto. Parece lógico tener una fila para un objeto y actualizarla en cualquier cambio, pero la operación de actualización es costosa y lenta para DBMS porque requiere la reescritura de los datos en el almacenamiento. Si necesita escribir datos rápidamente, la actualización no es aceptable, pero puede escribir los cambios de un objeto secuencialmente de la siguiente manera. Considere la situación en la que necesita guardar datos que cambian continuamente para algún objeto. Parece lógico tener una fila para un objeto y actualizarla en cualquier cambio, pero la operación de actualización es costosa y lenta para DBMS porque requiere la reescritura de los datos en el almacenamiento. Si necesita escribir datos rápidamente, la actualización no es aceptable, pero puede escribir los cambios de un objeto secuencialmente de la siguiente manera.
Utilice la columna en particular `Sign`. Si `Sign = 1` significa que la fila es un estado de un objeto, llamémoslo “state” Fila. Si `Sign = -1` significa la cancelación del estado de un objeto con los mismos atributos, llamémoslo “cancel” Fila. Utilice la columna en particular `Sign`. Si `Sign = 1` significa que la fila es un estado de un objeto, llamémoslo “state” fila. Si `Sign = -1` significa la cancelación del estado de un objeto con los mismos atributos, llamémoslo “cancel” fila.
Por ejemplo, queremos calcular cuántas páginas revisaron los usuarios en algún sitio y cuánto tiempo estuvieron allí. En algún momento escribimos la siguiente fila con el estado de la actividad del usuario: Por ejemplo, queremos calcular cuántas páginas revisaron los usuarios en algún sitio y cuánto tiempo estuvieron allí. En algún momento escribimos la siguiente fila con el estado de la actividad del usuario:
@ -115,22 +118,22 @@ Cuando ClickHouse combina partes de datos, cada grupo de filas consecutivas tien
Para cada parte de datos resultante, ClickHouse guarda: Para cada parte de datos resultante, ClickHouse guarda:
1. El primero “cancel” y el último “state” si el número de “state” y “cancel” y la última fila es una “state” Fila. 1. El primero “cancel” y el último “state” si el número de “state” y “cancel” y la última fila es una “state” fila.
2. El último “state” fila, si hay más “state” películas que “cancel” películas. 2. El último “state” fila, si hay más “state” filas que “cancel” filas.
3. El primero “cancel” fila, si hay más “cancel” películas que “state” películas. 3. El primero “cancel” fila, si hay más “cancel” filas que “state” filas.
4. Ninguna de las filas, en todos los demás casos. 4. Ninguna de las filas, en todos los demás casos.
También cuando hay al menos 2 más “state” películas que “cancel” filas, o al menos 2 más “cancel” películas entonces “state” fila, la fusión continúa, pero ClickHouse trata esta situación como un error lógico y la registra en el registro del servidor. Este error puede producirse si se insertan los mismos datos más de una vez. También cuando hay al menos 2 más “state” filas que “cancel” filas, o al menos 2 más “cancel” filas entonces “state” fila, la fusión continúa, pero ClickHouse trata esta situación como un error lógico y la registra en el registro del servidor. Este error puede producirse si se insertan los mismos datos más de una vez.
Por lo tanto, el colapso no debe cambiar los resultados del cálculo de las estadísticas. Por lo tanto, el colapso no debe cambiar los resultados del cálculo de las estadísticas.
Los cambios colapsaron gradualmente para que al final solo quedara el último estado de casi todos los objetos. Los cambios colapsaron gradualmente para que al final solo quedara el último estado de casi todos los objetos.
El `Sign` se requiere porque el algoritmo de fusión no garantiza que todas las filas con la misma clave de ordenación estarán en la misma parte de datos resultante e incluso en el mismo servidor físico. Proceso de ClickHouse `SELECT` consultas con múltiples hilos, y no puede predecir el orden de las filas en el resultado. La agregación es necesaria si hay una necesidad de obtener completamente “collapsed” datos de `CollapsingMergeTree` tabla. El `Sign` se requiere porque el algoritmo de fusión no garantiza que todas las filas con la misma clave de clasificación estén en la misma parte de datos resultante e incluso en el mismo servidor físico. Proceso de ClickHouse `SELECT` consultas con múltiples hilos, y no puede predecir el orden de las filas en el resultado. La agregación es necesaria si hay una necesidad de obtener completamente “collapsed” datos de `CollapsingMergeTree` tabla.
Para finalizar el colapso, escriba una consulta con `GROUP BY` cláusula y funciones agregadas que representan el signo. Por ejemplo, para calcular la cantidad, use `sum(Sign)` es lugar de `count()`. Para calcular la suma de algo, use `sum(Sign * x)` es lugar de `sum(x)` y así sucesivamente, y también añadir `HAVING sum(Sign) > 0`. Para finalizar el colapso, escriba una consulta con `GROUP BY` cláusula y funciones agregadas que representan el signo. Por ejemplo, para calcular la cantidad, use `sum(Sign)` en lugar de `count()`. Para calcular la suma de algo, use `sum(Sign * x)` en lugar de `sum(x)` y así sucesivamente, y también añadir `HAVING sum(Sign) > 0`.
Los agregados `count`, `sum` y `avg` podría calcularse de esta manera. El agregado `uniq` podría calcularse si un objeto tiene al menos un estado no colapsado. Los agregados `min` y `max` no se pudo calcular porque `CollapsingMergeTree` no guarda el historial de valores de los estados colapsados. Los agregados `count`, `sum` y `avg` podría calcularse de esta manera. El agregado `uniq` podría calcularse si un objeto tiene al menos un estado no colapsado. Los agregados `min` y `max` no se pudo calcular porque `CollapsingMergeTree` no guarda el historial de valores de los estados colapsados.
@ -190,9 +193,9 @@ SELECT * FROM UAct
└─────────────────────┴───────────┴──────────┴──────┘ └─────────────────────┴───────────┴──────────┴──────┘
``` ```
¿Qué vemos y dónde está colapsando? ¿qué vemos y dónde está colapsando?
Con dos `INSERT` Consultas, hemos creado 2 partes de datos. El `SELECT` la consulta se realizó en 2 hilos, y obtuvimos un orden aleatorio de filas. No se ha producido un colapso porque todavía no se había fusionado las partes de datos. ClickHouse fusiona parte de datos en un momento desconocido que no podemos predecir. Con dos `INSERT` consultas, hemos creado 2 partes de datos. El `SELECT` la consulta se realizó en 2 hilos, y obtuvimos un orden aleatorio de filas. No se ha producido un colapso porque todavía no se había fusionado las partes de datos. ClickHouse fusiona parte de datos en un momento desconocido que no podemos predecir.
Por lo tanto, necesitamos agregación: Por lo tanto, necesitamos agregación:
@ -212,7 +215,7 @@ HAVING sum(Sign) > 0
└─────────────────────┴───────────┴──────────┘ └─────────────────────┴───────────┴──────────┘
``` ```
Si no necesitamos agregación y queremos forzar el colapso, podemos usar `FINAL` Modificador para `FROM` clausula. Si no necesitamos agregación y queremos forzar el colapso, podemos usar `FINAL` modificador para `FROM` clausula.
``` sql ``` sql
SELECT * FROM UAct FINAL SELECT * FROM UAct FINAL
@ -303,4 +306,4 @@ select * FROM UAct
└─────────────────────┴───────────┴──────────┴──────┘ └─────────────────────┴───────────┴──────────┴──────┘
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/collapsingmergetree/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/collapsingmergetree/) <!--hide-->

View File

@ -1,14 +1,17 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 32
toc_title: "Clave de partici\xF3n personalizada"
--- ---
# Clave de partición personalizada {#custom-partitioning-key} # Clave de partición personalizada {#custom-partitioning-key}
La partición está disponible para el [Método de codificación de datos:](mergetree.md) mesas familiares (incluyendo [repetición](replication.md) tabla). [Vistas materializadas](materializedview.md) basado en tablas MergeTree soporte de particionamiento, también. La partición está disponible para el [Método de codificación de datos:](mergetree.md) mesas familiares (incluyendo [repetición](replication.md) tabla). [Vistas materializadas](../special/materializedview.md) basado en tablas MergeTree soporte de particionamiento, también.
Una partición es una combinación lógica de registros en una tabla por un criterio especificado. Puede establecer una partición por un criterio arbitrario, como por mes, por día o por tipo de evento. Cada partición se almacena por separado para simplificar las manipulaciones de estos datos. Al acceder a los datos, ClickHouse utiliza el subconjunto más pequeño de particiones posible. Una partición es una combinación lógica de registros en una tabla por un criterio especificado. Puede establecer una partición por un criterio arbitrario, como por mes, por día o por tipo de evento. Cada partición se almacena por separado para simplificar las manipulaciones de estos datos. Al acceder a los datos, ClickHouse utiliza el subconjunto más pequeño de particiones posible.
La partición se especifica en el `PARTITION BY expr` cláusula cuando [Creando una tabla](mergetree.md#table_engine-mergetree-creating-a-table). La clave de partición puede ser cualquier expresión de las columnas de la tabla. Por ejemplo, para especificar la partición por mes, utilice la expresión `toYYYYMM(date_column)`: La partición se especifica en el `PARTITION BY expr` cláusula cuando [creando una tabla](mergetree.md#table_engine-mergetree-creating-a-table). La clave de partición puede ser cualquier expresión de las columnas de la tabla. Por ejemplo, para especificar la partición por mes, utilice la expresión `toYYYYMM(date_column)`:
``` sql ``` sql
CREATE TABLE visits CREATE TABLE visits
@ -22,7 +25,7 @@ PARTITION BY toYYYYMM(VisitDate)
ORDER BY Hour; ORDER BY Hour;
``` ```
La clave de partición también puede ser una tupla de expresiones (similar a la [Clave primaria](mergetree.md#primary-keys-and-indexes-in-queries)). Por ejemplo: La clave de partición también puede ser una tupla de expresiones (similar a la [clave primaria](mergetree.md#primary-keys-and-indexes-in-queries)). Por ejemplo:
``` sql ``` sql
ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/name', 'replica1', Sign) ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/name', 'replica1', Sign)
@ -35,9 +38,9 @@ En este ejemplo, establecemos la partición por los tipos de eventos que se prod
Al insertar datos nuevos en una tabla, estos datos se almacenan como una parte separada (porción) ordenada por la clave principal. En 10-15 minutos después de insertar, las partes de la misma partición se fusionan en toda la parte. Al insertar datos nuevos en una tabla, estos datos se almacenan como una parte separada (porción) ordenada por la clave principal. En 10-15 minutos después de insertar, las partes de la misma partición se fusionan en toda la parte.
!!! info "INFO" !!! info "INFO"
Una combinación solo funciona para partes de datos que tienen el mismo valor para la expresión de partición. Esto significa **no debe hacer particiones demasiado granulares** (más de un millar de particiones). De lo contrario, el `SELECT` consulta funciona mal debido a un número excesivamente grande de archivos en el sistema de archivos y descriptores de archivos abiertos. Una combinación solo funciona para partes de datos que tienen el mismo valor para la expresión de partición. Esto significa **no deberías hacer particiones demasiado granulares** (más de un millar de particiones). De lo contrario, el `SELECT` consulta funciona mal debido a un número excesivamente grande de archivos en el sistema de archivos y descriptores de archivos abiertos.
Descripción [sistema.parte](../system_tables.md#system_tables-parts) tabla para ver las partes y particiones de la tabla. Por ejemplo, supongamos que tenemos un `visits` tabla con partición por mes. Vamos a realizar el `SELECT` Consulta para el `system.parts` tabla: Utilice el [sistema.parte](../../../operations/system_tables.md#system_tables-parts) tabla para ver las partes y particiones de la tabla. Por ejemplo, supongamos que tenemos un `visits` tabla con partición por mes. Vamos a realizar el `SELECT` consulta para el `system.parts` tabla:
``` sql ``` sql
SELECT SELECT
@ -62,7 +65,7 @@ WHERE table = 'visits'
El `partition` columna contiene los nombres de las particiones. Hay dos particiones en este ejemplo: `201901` y `201902`. Puede utilizar este valor de columna para especificar el nombre de partición en [ALTER … PARTITION](#alter_manipulations-with-partitions) consulta. El `partition` columna contiene los nombres de las particiones. Hay dos particiones en este ejemplo: `201901` y `201902`. Puede utilizar este valor de columna para especificar el nombre de partición en [ALTER … PARTITION](#alter_manipulations-with-partitions) consulta.
El `name` columna contiene los nombres de las partes de datos de partición. Puede utilizar esta columna para especificar el nombre de la pieza [ALTERAR PIEZA DE ADJUNTO](#alter_attach-partition) consulta. El `name` columna contiene los nombres de las partes de datos de partición. Puede utilizar esta columna para especificar el nombre de la pieza [ALTER ATTACH PART](#alter_attach-partition) consulta.
Vamos a desglosar el nombre de la primera parte: `201901_1_3_1`: Vamos a desglosar el nombre de la primera parte: `201901_1_3_1`:
@ -76,7 +79,7 @@ Vamos a desglosar el nombre de la primera parte: `201901_1_3_1`:
El `active` columna muestra el estado de la pieza. `1` está activo; `0` está inactivo. Las partes inactivas son, por ejemplo, las partes de origen que quedan después de fusionarse con una parte más grande. Las partes de datos dañadas también se indican como inactivas. El `active` columna muestra el estado de la pieza. `1` está activo; `0` está inactivo. Las partes inactivas son, por ejemplo, las partes de origen que quedan después de fusionarse con una parte más grande. Las partes de datos dañadas también se indican como inactivas.
Como puede ver en el ejemplo, hay varias partes separadas de la misma partición (por ejemplo, `201901_1_3_1` y `201901_1_9_2`). Esto significa que estas partes aún no están fusionadas. ClickHouse combina las partes insertadas de datos periódicamente, aproximadamente 15 minutos después de la inserción. Además, puede realizar una fusión no programada utilizando el [OPTIMIZAR](../../query_language/misc.md#misc_operations-optimize) consulta. Ejemplo: Como puede ver en el ejemplo, hay varias partes separadas de la misma partición (por ejemplo, `201901_1_3_1` y `201901_1_9_2`). Esto significa que estas partes aún no están fusionadas. ClickHouse combina las partes insertadas de datos periódicamente, aproximadamente 15 minutos después de la inserción. Además, puede realizar una fusión no programada utilizando el [OPTIMIZE](../../../sql_reference/statements/misc.md#misc_operations-optimize) consulta. Ejemplo:
``` sql ``` sql
OPTIMIZE TABLE visits PARTITION 201902; OPTIMIZE TABLE visits PARTITION 201902;
@ -115,10 +118,10 @@ drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 1 16:48 detached
Carpeta 201901\_1\_1\_0, 201901\_1\_7\_1 y así sucesivamente son los directorios de las partes. Cada parte se relaciona con una partición correspondiente y contiene datos solo para un mes determinado (la tabla de este ejemplo tiene particiones por mes). Carpeta 201901\_1\_1\_0, 201901\_1\_7\_1 y así sucesivamente son los directorios de las partes. Cada parte se relaciona con una partición correspondiente y contiene datos solo para un mes determinado (la tabla de este ejemplo tiene particiones por mes).
El `detached` el directorio contiene partes que se separaron de la tabla utilizando el [SEPARAR](#alter_detach-partition) consulta. Las partes dañadas también se mueven a este directorio, en lugar de eliminarse. El servidor no utiliza las piezas del `detached` directorio. Puede agregar, eliminar o modificar los datos de este directorio en cualquier momento; el servidor no lo sabrá hasta que ejecute el [CONECTAR](../../query_language/alter.md#alter_attach-partition) consulta. El `detached` el directorio contiene partes que se separaron de la tabla utilizando el [DETACH](#alter_detach-partition) consulta. Las partes dañadas también se mueven a este directorio, en lugar de eliminarse. El servidor no utiliza las piezas del `detached` directory. You can add, delete, or modify the data in this directory at any time the server will not know about this until you run the [ATTACH](../../../sql_reference/statements/alter.md#alter_attach-partition) consulta.
Tenga en cuenta que en el servidor operativo, no puede cambiar manualmente el conjunto de piezas o sus datos en el sistema de archivos, ya que el servidor no lo sabrá. Para tablas no replicadas, puede hacerlo cuando el servidor está detenido, pero no se recomienda. Para tablas replicadas, el conjunto de piezas no se puede cambiar en ningún caso. Tenga en cuenta que en el servidor operativo, no puede cambiar manualmente el conjunto de piezas o sus datos en el sistema de archivos, ya que el servidor no lo sabrá. Para tablas no replicadas, puede hacer esto cuando se detiene el servidor, pero no se recomienda. Para tablas replicadas, el conjunto de piezas no se puede cambiar en ningún caso.
ClickHouse le permite realizar operaciones con las particiones: eliminarlas, copiar de una tabla a otra o crear una copia de seguridad. Consulte la lista de todas las operaciones en la sección [Manipulaciones con particiones y piezas](../../query_language/alter.md#alter_manipulations-with-partitions). ClickHouse le permite realizar operaciones con las particiones: eliminarlas, copiar de una tabla a otra o crear una copia de seguridad. Consulte la lista de todas las operaciones en la sección [Manipulaciones con particiones y piezas](../../../sql_reference/statements/alter.md#alter_manipulations-with-partitions).
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/custom_partitioning_key/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/custom_partitioning_key/) <!--hide-->

View File

@ -1,12 +1,15 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 38
toc_title: GraphiteMergeTree
--- ---
# GraphiteMergeTree {#graphitemergetree} # Graphitemergetree {#graphitemergetree}
Este motor está diseñado para el adelgazamiento y la agregación / promedio (rollup) [Grafito](http://graphite.readthedocs.io/en/latest/index.html) datos. Puede ser útil para los desarrolladores que desean usar ClickHouse como almacén de datos para Graphite. Este motor está diseñado para el adelgazamiento y la agregación / promedio (rollup) [Grafito](http://graphite.readthedocs.io/en/latest/index.html) datos. Puede ser útil para los desarrolladores que desean usar ClickHouse como almacén de datos para Graphite.
Puede utilizar cualquier motor de tabla ClickHouse para almacenar los datos de grafito si no necesita un paquete acumulativo, pero si necesita un paquete acumulativo, use `GraphiteMergeTree`. El motor reduce el volumen de almacenamiento y aumenta la eficiencia de las consultas de Grafito. Puede usar cualquier motor de tabla ClickHouse para almacenar los datos de Graphite si no necesita un paquete acumulativo, pero si necesita un paquete acumulativo, use `GraphiteMergeTree`. El motor reduce el volumen de almacenamiento y aumenta la eficiencia de las consultas de Graphite.
El motor hereda propiedades de [Método de codificación de datos:](mergetree.md). El motor hereda propiedades de [Método de codificación de datos:](mergetree.md).
@ -27,7 +30,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
[SETTINGS name=value, ...] [SETTINGS name=value, ...]
``` ```
Vea una descripción detallada del [CREAR TABLA](../../query_language/create.md#create-table-query) consulta. Vea una descripción detallada del [CREATE TABLE](../../../sql_reference/statements/create.md#create-table-query) consulta.
Una tabla para los datos de grafito debe tener las siguientes columnas para los siguientes datos: Una tabla para los datos de grafito debe tener las siguientes columnas para los siguientes datos:
@ -45,7 +48,7 @@ Los nombres de estas columnas deben establecerse en la configuración acumulativ
**GraphiteMergeTree parámetros** **GraphiteMergeTree parámetros**
- `config_section` — Nombre de la sección en el archivo de configuración, donde se establecen las reglas de acumulación. - `config_section` — Name of the section in the configuration file, where are the rules of rollup set.
**Cláusulas de consulta** **Cláusulas de consulta**
@ -72,13 +75,13 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
Todos los parámetros excepto `config_section` el mismo significado que en `MergeTree`. Todos los parámetros excepto `config_section` el mismo significado que en `MergeTree`.
- `config_section` — Nombre de la sección en el archivo de configuración, donde se establecen las reglas de acumulación. - `config_section` — Name of the section in the configuration file, where are the rules of rollup set.
</details> </details>
## Configuración acumulativa {#rollup-configuration} ## Configuración acumulativa {#rollup-configuration}
La configuración del paquete acumulativo está definida por [graphite\_rollup](../server_settings/settings.md#server_settings-graphite_rollup) parámetro en la configuración del servidor. El nombre del parámetro podría ser cualquiera. Puede crear varias configuraciones y usarlas para diferentes tablas. La configuración del paquete acumulativo está definida por [graphite\_rollup](../../../operations/server_configuration_parameters/settings.md#server_configuration_parameters-graphite_rollup) parámetro en la configuración del servidor. El nombre del parámetro podría ser cualquiera. Puede crear varias configuraciones y usarlas para diferentes tablas.
Estructura de configuración Rollup: Estructura de configuración Rollup:
@ -87,10 +90,10 @@ Estructura de configuración Rollup:
### Columnas requeridas {#required-columns} ### Columnas requeridas {#required-columns}
- `path_column_name`El nombre de la columna que almacena el nombre de la métrica (sensor de grafito). Valor predeterminado: `Path`. - `path_column_name`The name of the column storing the metric name (Graphite sensor). Default value: `Path`.
- `time_column_name`El nombre de la columna que almacena el tiempo de medición de la métrica. Valor predeterminado: `Time`. - `time_column_name`The name of the column storing the time of measuring the metric. Default value: `Time`.
- `value_column_name`El nombre de la columna que almacena el valor de la métrica a la hora establecida en `time_column_name`. Valor predeterminado: `Value`. - `value_column_name`The name of the column storing the value of the metric at the time set in `time_column_name`. Valor predeterminado: `Value`.
- `version_column_name`El nombre de la columna que almacena la versión de la métrica. Valor predeterminado: `Timestamp`. - `version_column_name`The name of the column storing the version of the metric. Default value: `Timestamp`.
### Patrón {#patterns} ### Patrón {#patterns}
@ -128,10 +131,10 @@ Al procesar una fila, ClickHouse comprueba las reglas en el `pattern` apartado.
Campos para `pattern` y `default` apartado: Campos para `pattern` y `default` apartado:
- `regexp` Un patrón para el nombre de la métrica. - `regexp` A pattern for the metric name.
- `age` La edad mínima de los datos en segundos. - `age` The minimum age of the data in seconds.
- `precision` Cómo definir con precisión la edad de los datos en segundos. Debe ser un divisor para 86400 (segundos en un día). - `precision` How precisely to define the age of the data in seconds. Should be a divisor for 86400 (seconds in a day).
- `function` El nombre de la función de agregación que se aplicará a los datos cuya antigüedad se encuentra dentro del intervalo `[age, age + precision]`. - `function` The name of the aggregating function to apply to data whose age falls within the range `[age, age + precision]`.
### Ejemplo de configuración {#configuration-example} ### Ejemplo de configuración {#configuration-example}
@ -168,4 +171,4 @@ Campos para `pattern` y `default` apartado:
</graphite_rollup> </graphite_rollup>
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/graphitemergetree/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/graphitemergetree/) <!--hide-->

View File

@ -0,0 +1,8 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: MergeTree Family
toc_priority: 28
---

View File

@ -1,8 +1,11 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 30
toc_title: "M\xE9todo de codificaci\xF3n de datos:"
--- ---
# Método de codificación de datos: {#table_engines-mergetree} # Mergetree {#table_engines-mergetree}
El `MergeTree` motor y otros motores de esta familia (`*MergeTree`) son los motores de mesa ClickHouse más robustos. El `MergeTree` motor y otros motores de esta familia (`*MergeTree`) son los motores de mesa ClickHouse más robustos.
@ -27,7 +30,7 @@ Principales características:
Si es necesario, puede establecer el método de muestreo de datos en la tabla. Si es necesario, puede establecer el método de muestreo de datos en la tabla.
!!! info "INFO" !!! info "INFO"
El [Fusionar](merge.md) el motor no pertenece al `*MergeTree` Familia. El [Fusionar](../special/merge.md) el motor no pertenece al `*MergeTree` familia.
## Creación de una tabla {#table_engine-mergetree-creating-a-table} ## Creación de una tabla {#table_engine-mergetree-creating-a-table}
@ -48,32 +51,32 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
[SETTINGS name=value, ...] [SETTINGS name=value, ...]
``` ```
Para obtener una descripción de los parámetros, consulte [Descripción de la consulta CREATE](../../query_language/create.md). Para obtener una descripción de los parámetros, consulte [Descripción de la consulta CREATE](../../../sql_reference/statements/create.md).
!!! note "Nota" !!! note "Nota"
`INDEX` es una característica experimental, ver [Índices de saltos de datos](#table_engine-mergetree-data_skipping-indexes). `INDEX` es una característica experimental, ver [Índices de saltos de datos](#table_engine-mergetree-data_skipping-indexes).
### Cláusulas de consulta {#mergetree-query-clauses} ### Cláusulas de consulta {#mergetree-query-clauses}
- `ENGINE` — Nombre y parámetros del motor. `ENGINE = MergeTree()`. El `MergeTree` el motor no tiene parámetros. - `ENGINE` — Name and parameters of the engine. `ENGINE = MergeTree()`. El `MergeTree` el motor no tiene parámetros.
- `PARTITION BY`El [clave de partición](custom_partitioning_key.md). - `PARTITION BY`The [clave de partición](custom_partitioning_key.md).
Para particionar por mes, utilice el `toYYYYMM(date_column)` expresión, donde `date_column` es una columna con una fecha del tipo [Fecha](../../data_types/date.md). Los nombres de partición aquí tienen el `"YYYYMM"` formato. Para particionar por mes, utilice el `toYYYYMM(date_column)` expresión, donde `date_column` es una columna con una fecha del tipo [Fecha](../../../sql_reference/data_types/date.md). Los nombres de partición aquí tienen el `"YYYYMM"` formato.
- `ORDER BY`La clave de clasificación. - `ORDER BY`The sorting key.
Una tupla de columnas o expresiones arbitrarias. Ejemplo: `ORDER BY (CounterID, EventDate)`. Una tupla de columnas o expresiones arbitrarias. Ejemplo: `ORDER BY (CounterID, EventDate)`.
- `PRIMARY KEY`La clave principal si [difiere de la clave de clasificación](mergetree.md). - `PRIMARY KEY`The primary key if it [difiere de la clave de clasificación](mergetree.md).
De forma predeterminada, la clave principal es la misma que la clave de ordenación (que se especifica `ORDER BY` clausula). Por lo tanto, en la mayoría de los casos no es necesario especificar un `PRIMARY KEY` clausula. De forma predeterminada, la clave principal es la misma que la clave de ordenación (que se especifica `ORDER BY` clausula). Por lo tanto, en la mayoría de los casos no es necesario especificar un `PRIMARY KEY` clausula.
- `SAMPLE BY`Una expresión para el muestreo. - `SAMPLE BY`An expression for sampling.
Si se utiliza una expresión de muestreo, la clave principal debe contenerla. Ejemplo: `SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`. Si se utiliza una expresión de muestreo, la clave principal debe contenerla. Ejemplo: `SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`.
- `TTL`Una lista de reglas que especifican la duración de almacenamiento de las filas y definen la lógica del movimiento automático de piezas [entre discos y volúmenes](#table_engine-mergetree-multiple-volumes). - `TTL`A list of rules specifying storage duration of rows and defining logic of automatic parts movement [entre discos y volúmenes](#table_engine-mergetree-multiple-volumes).
La expresión debe tener una `Date` o `DateTime` columna como resultado. Ejemplo: La expresión debe tener una `Date` o `DateTime` columna como resultado. Ejemplo:
`TTL date + INTERVAL 1 DAY` `TTL date + INTERVAL 1 DAY`
@ -82,18 +85,18 @@ Para obtener una descripción de los parámetros, consulte [Descripción de la c
Para obtener más información, consulte [TTL para columnas y tablas](#table_engine-mergetree-ttl) Para obtener más información, consulte [TTL para columnas y tablas](#table_engine-mergetree-ttl)
- `SETTINGS`Parámetros adicionales que controlan el comportamiento del `MergeTree`: - `SETTINGS`Additional parameters that control the behavior of the `MergeTree`:
- `index_granularity`Número máximo de filas de datos entre las marcas de un índice. Valor predeterminado: 8192. Ver [Almacenamiento de datos](#mergetree-data-storage). - `index_granularity`Maximum number of data rows between the marks of an index. Default value: 8192. See [Almacenamiento de datos](#mergetree-data-storage).
- `index_granularity_bytes`Tamaño máximo de los gránulos de datos en bytes. Valor predeterminado: 10 MB. Para restringir el tamaño del gránulo solo por el número de filas, establezca en 0 (no recomendado). Ver [Almacenamiento de datos](#mergetree-data-storage). - `index_granularity_bytes`Maximum size of data granules in bytes. Default value: 10Mb. To restrict the granule size only by number of rows, set to 0 (not recommended). See [Almacenamiento de datos](#mergetree-data-storage).
- `enable_mixed_granularity_parts`Habilita o deshabilita la transición para controlar el tamaño del gránulo `index_granularity_bytes` configuración. Antes de la versión 19.11, sólo existía el `index_granularity` ajuste para restringir el tamaño del gránulo. El `index_granularity_bytes` mejora el rendimiento de ClickHouse al seleccionar datos de tablas con filas grandes (decenas y cientos de megabytes). Si tiene tablas con filas grandes, puede habilitar esta configuración para que las tablas mejoren la eficiencia de `SELECT` consulta. - `enable_mixed_granularity_parts`Enables or disables transitioning to control the granule size with the `index_granularity_bytes` configuración. Antes de la versión 19.11, sólo existía el `index_granularity` ajuste para restringir el tamaño del gránulo. El `index_granularity_bytes` mejora el rendimiento de ClickHouse al seleccionar datos de tablas con filas grandes (decenas y cientos de megabytes). Si tiene tablas con filas grandes, puede habilitar esta configuración para que las tablas mejoren la eficiencia de `SELECT` consulta.
- `use_minimalistic_part_header_in_zookeeper`Método de almacenamiento de los encabezados de partes de datos en ZooKeeper. Si `use_minimalistic_part_header_in_zookeeper=1`, entonces ZooKeeper almacena menos datos. Para obtener más información, consulte [descripción del ajuste](../server_settings/settings.md#server-settings-use_minimalistic_part_header_in_zookeeper) es “Server configuration parameters”. - `use_minimalistic_part_header_in_zookeeper`Storage method of the data parts headers in ZooKeeper. If `use_minimalistic_part_header_in_zookeeper=1`, entonces ZooKeeper almacena menos datos. Para obtener más información, consulte [descripción del ajuste](../../../operations/server_configuration_parameters/settings.md#server-settings-use_minimalistic_part_header_in_zookeeper) en “Server configuration parameters”.
- `min_merge_bytes_to_use_direct_io`El volumen mínimo de datos para la operación de fusión que se necesita para utilizar el acceso directo de E/S al disco de almacenamiento. Al fusionar partes de datos, ClickHouse calcula el volumen total de almacenamiento de todos los datos que se van a fusionar. Si el volumen excede `min_merge_bytes_to_use_direct_io` bytes, ClickHouse lee y escribe los datos en el disco de almacenamiento utilizando la interfaz de E / S directa (`O_DIRECT` opción). Si `min_merge_bytes_to_use_direct_io = 0`, entonces la E/S directa está deshabilitada. Valor predeterminado: `10 * 1024 * 1024 * 1024` byte. - `min_merge_bytes_to_use_direct_io`The minimum data volume for merge operation that is required for using direct I/O access to the storage disk. When merging data parts, ClickHouse calculates the total storage volume of all the data to be merged. If the volume exceeds `min_merge_bytes_to_use_direct_io` bytes, ClickHouse lee y escribe los datos en el disco de almacenamiento utilizando la interfaz de E / S directa (`O_DIRECT` opcion). Si `min_merge_bytes_to_use_direct_io = 0`, entonces la E/S directa está deshabilitada. Valor predeterminado: `10 * 1024 * 1024 * 1024` byte.
<a name="mergetree_setting-merge_with_ttl_timeout"></a> <a name="mergetree_setting-merge_with_ttl_timeout"></a>
- `merge_with_ttl_timeout`Retraso mínimo en segundos antes de repetir una fusión con TTL. Valor predeterminado: 86400 (1 día). - `merge_with_ttl_timeout`Minimum delay in seconds before repeating a merge with TTL. Default value: 86400 (1 day).
- `write_final_mark`Habilita o deshabilita la escritura de la marca de índice final al final de la parte de datos (después del último byte). Valor predeterminado: 1. No lo apague. - `write_final_mark`Enables or disables writing the final index mark at the end of data part (after the last byte). Default value: 1. Don't turn it off.
- `merge_max_block_size`Número máximo de filas en el bloque para operaciones de fusión. Valor predeterminado: 8192. - `merge_max_block_size`Maximum number of rows in block for merge operations. Default value: 8192.
- `storage_policy`Política de almacenamiento. Ver [Uso de varios dispositivos de bloque para el almacenamiento de datos](#table_engine-mergetree-multiple-volumes). - `storage_policy`Storage policy. See [Uso de varios dispositivos de bloque para el almacenamiento de datos](#table_engine-mergetree-multiple-volumes).
**Ejemplo de configuración de secciones** **Ejemplo de configuración de secciones**
@ -103,7 +106,7 @@ ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDa
En el ejemplo, configuramos la partición por mes. En el ejemplo, configuramos la partición por mes.
También establecemos una expresión para el muestreo como un hash por el ID de usuario. Esto le permite pseudoaleatorizar los datos en la tabla para cada `CounterID` y `EventDate`. Si definir un [MUESTRA](../../query_language/select.md#select-sample-clause) cláusula al seleccionar los datos, ClickHouse devolverá una muestra de datos pseudoaleatoria uniforme para un subconjunto de usuarios. También establecemos una expresión para el muestreo como un hash por el ID de usuario. Esto le permite pseudoaleatorizar los datos en la tabla para cada `CounterID` y `EventDate`. Si define un [SAMPLE](../../../sql_reference/statements/select.md#select-sample-clause) cláusula al seleccionar los datos, ClickHouse devolverá una muestra de datos pseudoaleatoria uniforme para un subconjunto de usuarios.
El `index_granularity` se puede omitir porque 8192 es el valor predeterminado. El `index_granularity` se puede omitir porque 8192 es el valor predeterminado.
@ -125,10 +128,10 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
**Parámetros MergeTree()** **Parámetros MergeTree()**
- `date-column`El nombre de una columna del [Fecha](../../data_types/date.md) tipo. ClickHouse crea automáticamente particiones por mes en función de esta columna. Los nombres de partición están en el `"YYYYMM"` formato. - `date-column`The name of a column of the [Fecha](../../../sql_reference/data_types/date.md) tipo. ClickHouse crea automáticamente particiones por mes en función de esta columna. Los nombres de partición están en el `"YYYYMM"` formato.
- `sampling_expression`Una expresión para el muestreo. - `sampling_expression`An expression for sampling.
- `(primary, key)`Clave principal. Tipo: [Tupla()](../../data_types/tuple.md) - `(primary, key)`Primary key. Type: [Tupla()](../../../sql_reference/data_types/tuple.md)
- `index_granularity`La granularidad de un índice. El número de filas de datos entre “marks” de un índice. El valor 8192 es apropiado para la mayoría de las tareas. - `index_granularity`The granularity of an index. The number of data rows between the “marks” de un índice. El valor 8192 es apropiado para la mayoría de las tareas.
**Ejemplo** **Ejemplo**
@ -155,7 +158,7 @@ El tamaño del gránulo es restringido por `index_granularity` y `index_granular
Tome el `(CounterID, Date)` clave primaria como ejemplo. En este caso, la clasificación y el índice se pueden ilustrar de la siguiente manera: Tome el `(CounterID, Date)` clave primaria como ejemplo. En este caso, la clasificación y el índice se pueden ilustrar de la siguiente manera:
Whole data: [-------------------------------------------------------------------------] Whole data: [---------------------------------------------]
CounterID: [aaaaaaaaaaaaaaaaaabbbbcdeeeeeeeeeeeeefgggggggghhhhhhhhhiiiiiiiiikllllllll] CounterID: [aaaaaaaaaaaaaaaaaabbbbcdeeeeeeeeeeeeefgggggggghhhhhhhhhiiiiiiiiikllllllll]
Date: [1111111222222233331233211111222222333211111112122222223111112223311122333] Date: [1111111222222233331233211111222222333211111112122222223111112223311122333]
Marks: | | | | | | | | | | | Marks: | | | | | | | | | | |
@ -185,7 +188,7 @@ El número de columnas en la clave principal no está explícitamente limitado.
Si la clave principal es `(a, b)`, a continuación, añadir otra columna `c` mejorará el rendimiento si se cumplen las siguientes condiciones: Si la clave principal es `(a, b)`, a continuación, añadir otra columna `c` mejorará el rendimiento si se cumplen las siguientes condiciones:
- Hay consultas con una condición en la columna `c`. - Hay consultas con una condición en la columna `c`.
- Rangos de datos largos (varias veces más `index_granularity`) con valores idénticos para `(a, b)` hijo comunes. En otras palabras, al agregar otra columna le permite omitir rangos de datos bastante largos. - Rangos de datos largos (varias veces más `index_granularity`) con valores idénticos para `(a, b)` son comunes. En otras palabras, al agregar otra columna le permite omitir rangos de datos bastante largos.
- Mejorar la compresión de datos. - Mejorar la compresión de datos.
@ -206,7 +209,7 @@ Esta característica es útil cuando se [SummingMergeTree](summingmergetree.md)
En este caso, tiene sentido dejar solo unas pocas columnas en la clave principal que proporcionarán análisis de rango eficientes y agregarán las columnas de dimensión restantes a la tupla de clave de clasificación. En este caso, tiene sentido dejar solo unas pocas columnas en la clave principal que proporcionarán análisis de rango eficientes y agregarán las columnas de dimensión restantes a la tupla de clave de clasificación.
[ALTERAR](../../query_language/alter.md) de la clave de ordenación es una operación ligera porque cuando se agrega una nueva columna simultáneamente a la tabla y a la clave de ordenación, no es necesario cambiar las partes de datos existentes. Dado que la clave de ordenación anterior es un prefijo de la nueva clave de ordenación y no hay datos en la columna recién agregada, los datos se ordenan tanto por las claves de ordenación antiguas como por las nuevas en el momento de la modificación de la tabla. [ALTER](../../../sql_reference/statements/alter.md) de la clave de ordenación es una operación ligera porque cuando se agrega una nueva columna simultáneamente a la tabla y a la clave de ordenación, las partes de datos existentes no necesitan ser cambiadas. Dado que la clave de ordenación anterior es un prefijo de la nueva clave de ordenación y no hay datos en la columna recién agregada, los datos se ordenan tanto por las claves de ordenación antiguas como por las nuevas en el momento de la modificación de la tabla.
### Uso de índices y particiones en consultas {#use-of-indexes-and-partitions-in-queries} ### Uso de índices y particiones en consultas {#use-of-indexes-and-partitions-in-queries}
@ -228,7 +231,7 @@ SELECT count() FROM table WHERE ((EventDate >= toDate('2014-01-01') AND EventDat
ClickHouse utilizará el índice de clave principal para recortar datos incorrectos y la clave de partición mensual para recortar particiones que están en intervalos de fechas incorrectos. ClickHouse utilizará el índice de clave principal para recortar datos incorrectos y la clave de partición mensual para recortar particiones que están en intervalos de fechas incorrectos.
Las consultas anteriores muestran que el índice se usa incluso para expresiones complejas. La lectura de la tabla está organizada de modo que el uso del índice no puede ser más lento que un análisis completo. Las consultas anteriores muestran que el índice se usa incluso para expresiones complejas. La lectura de la tabla está organizada de modo que el uso del índice no puede ser más lento que un escaneo completo.
En el siguiente ejemplo, el índice no se puede usar. En el siguiente ejemplo, el índice no se puede usar.
@ -236,7 +239,7 @@ En el siguiente ejemplo, el índice no se puede usar.
SELECT count() FROM table WHERE CounterID = 34 OR URL LIKE '%upyachka%' SELECT count() FROM table WHERE CounterID = 34 OR URL LIKE '%upyachka%'
``` ```
Para comprobar si ClickHouse puede usar el índice al ejecutar una consulta, use la configuración [Fecha de nacimiento](../settings/settings.md#settings-force_index_by_date) y [force\_primary\_key](../settings/settings.md). Para comprobar si ClickHouse puede usar el índice al ejecutar una consulta, use la configuración [Fecha de nacimiento](../../../operations/settings/settings.md#settings-force_index_by_date) y [force\_primary\_key](../../../operations/settings/settings.md).
La clave para particionar por mes permite leer solo aquellos bloques de datos que contienen fechas del rango adecuado. En este caso, el bloque de datos puede contener datos para muchas fechas (hasta un mes). Dentro de un bloque, los datos se ordenan por clave principal, que puede no contener la fecha como la primera columna. Debido a esto, el uso de una consulta con solo una condición de fecha que no especifica el prefijo de clave principal hará que se lean más datos que para una sola fecha. La clave para particionar por mes permite leer solo aquellos bloques de datos que contienen fechas del rango adecuado. En este caso, el bloque de datos puede contener datos para muchas fechas (hasta un mes). Dentro de un bloque, los datos se ordenan por clave principal, que puede no contener la fecha como la primera columna. Debido a esto, el uso de una consulta con solo una condición de fecha que no especifica el prefijo de clave principal hará que se lean más datos que para una sola fecha.
@ -290,28 +293,28 @@ SELECT count() FROM table WHERE u64 * i32 == 10 AND u64 * length(s) >= 1234
- `set(max_rows)` - `set(max_rows)`
Almacena valores únicos de la expresión especificada (no más de `max_rows` películas, `max_rows=0` medio “no limits”). Utiliza los valores para comprobar si `WHERE` expresión no es satisfactorio en un bloque de datos. Almacena valores únicos de la expresión especificada (no más de `max_rows` filas, `max_rows=0` medio “no limits”). Utiliza los valores para comprobar si `WHERE` expresión no es satisfactorio en un bloque de datos.
- `ngrambf_v1(n, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed)` - `ngrambf_v1(n, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed)`
Tiendas a [Filtro de floración](https://en.wikipedia.org/wiki/Bloom_filter) que contiene todos los ngrams de un bloque de datos. Funciona solo con cadenas. Puede ser utilizado para la optimización de `equals`, `like` y `in` expresiones. Tiendas a [Bloom filter](https://en.wikipedia.org/wiki/Bloom_filter) que contiene todos los ngrams de un bloque de datos. Funciona solo con cadenas. Puede ser utilizado para la optimización de `equals`, `like` y `in` expresiones.
- `n`tamaño del ngram, - `n` — ngram size,
- `size_of_bloom_filter_in_bytes`Tamaño del filtro Bloom en bytes (puede usar valores grandes aquí, por ejemplo, 256 o 512, porque se puede comprimir bien). - `size_of_bloom_filter_in_bytes`Bloom filter size in bytes (you can use large values here, for example, 256 or 512, because it can be compressed well).
- `number_of_hash_functions`El número de funciones hash utilizadas en el filtro Bloom. - `number_of_hash_functions`The number of hash functions used in the Bloom filter.
- `random_seed`La semilla para las funciones hash de filtro Bloom. - `random_seed`The seed for Bloom filter hash functions.
- `tokenbf_v1(size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed)` - `tokenbf_v1(size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed)`
Lo mismo que `ngrambf_v1`, pero almacena tokens en lugar de ngrams. Los tokens son secuencias separadas por caracteres no alfanuméricos. Lo mismo que `ngrambf_v1`, pero almacena tokens en lugar de ngrams. Los tokens son secuencias separadas por caracteres no alfanuméricos.
- `bloom_filter([false_positive])`Almacena un [Filtro de floración](https://en.wikipedia.org/wiki/Bloom_filter) para las columnas especificadas. - `bloom_filter([false_positive])`Stores a [Filtro de floración](https://en.wikipedia.org/wiki/Bloom_filter) para las columnas especificadas.
Opcional `false_positive` parámetro es la probabilidad de recibir una respuesta falsa positiva del filtro. Valores posibles: (0, 1). Valor predeterminado: 0.025. Opcional `false_positive` parámetro es la probabilidad de recibir una respuesta falsa positiva del filtro. Valores posibles: (0, 1). Valor predeterminado: 0.025.
Tipos de datos admitidos: `Int*`, `UInt*`, `Float*`, `Enum`, `Date`, `DateTime`, `String`, `FixedString`, `Array`, `LowCardinality`, `Nullable`. Tipos de datos admitidos: `Int*`, `UInt*`, `Float*`, `Enum`, `Date`, `DateTime`, `String`, `FixedString`, `Array`, `LowCardinality`, `Nullable`.
Las siguientes funciones pueden usarlo: [igual](../../query_language/functions/comparison_functions.md), [notEquals](../../query_language/functions/comparison_functions.md), [es](../../query_language/functions/in_functions.md), [noEn](../../query_language/functions/in_functions.md), [Tener](../../query_language/functions/array_functions.md). Las siguientes funciones pueden usarlo: [igual](../../../sql_reference/functions/comparison_functions.md), [notEquals](../../../sql_reference/functions/comparison_functions.md), [en](../../../sql_reference/functions/in_functions.md), [noEn](../../../sql_reference/functions/in_functions.md), [tener](../../../sql_reference/functions/array_functions.md).
<!-- --> <!-- -->
@ -327,24 +330,24 @@ Condiciones en el `WHERE` cláusula contiene llamadas de las funciones que opera
El `set` index se puede utilizar con todas las funciones. Subconjuntos de funciones para otros índices se muestran en la siguiente tabla. El `set` index se puede utilizar con todas las funciones. Subconjuntos de funciones para otros índices se muestran en la siguiente tabla.
| Función (operador) / Índice | Clave primaria | minmax | Descripción | Sistema abierto. | bloom\_filter | | Función (operador) / Índice | clave primaria | minmax | Descripción | Sistema abierto. | bloom\_filter |
|--------------------------------------------------------------------------------------------------------|----------------|--------|-------------|------------------|---------------| |----------------------------------------------------------------------------------------------------------|----------------|--------|-------------|------------------|---------------|
| [¿Por qué?)](../../query_language/functions/comparison_functions.md#function-equals) | ✔ | ✔ | ✔ | ✔ | ✔ | | [igual (=, ==)](../../../sql_reference/functions/comparison_functions.md#function-equals) | ✔ | ✔ | ✔ | ✔ | ✔ |
| [notEquals(!Número)](../../query_language/functions/comparison_functions.md#function-notequals) | ✔ | ✔ | ✔ | ✔ | ✔ | | [notEquals(!=, \<\>)](../../../sql_reference/functions/comparison_functions.md#function-notequals) | ✔ | ✔ | ✔ | ✔ | ✔ |
| [como](../../query_language/functions/string_search_functions.md#function-like) | ✔ | ✔ | ✔ | ✗ | ✗ | | [como](../../../sql_reference/functions/string_search_functions.md#function-like) | ✔ | ✔ | ✔ | ✗ | ✗ |
| [No como](../../query_language/functions/string_search_functions.md#function-notlike) | ✔ | ✔ | ✔ | ✗ | ✗ | | [No como](../../../sql_reference/functions/string_search_functions.md#function-notlike) | ✔ | ✔ | ✔ | ✗ | ✗ |
| [Comienza con](../../query_language/functions/string_functions.md#startswith) | ✔ | ✔ | ✔ | ✔ | ✗ | | [Comienza con](../../../sql_reference/functions/string_functions.md#startswith) | ✔ | ✔ | ✔ | ✔ | ✗ |
| [Finaliza con](../../query_language/functions/string_functions.md#endswith) | ✗ | ✗ | ✔ | ✔ | ✗ | | [Finaliza con](../../../sql_reference/functions/string_functions.md#endswith) | ✗ | ✗ | ✔ | ✔ | ✗ |
| [multiSearchAny](../../query_language/functions/string_search_functions.md#function-multisearchany) | ✗ | ✗ | ✔ | ✗ | ✗ | | [multiSearchAny](../../../sql_reference/functions/string_search_functions.md#function-multisearchany) | ✗ | ✗ | ✔ | ✗ | ✗ |
| [es](../../query_language/functions/in_functions.md#in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | | [en](../../../sql_reference/functions/in_functions.md#in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ |
| [noEn](../../query_language/functions/in_functions.md#in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | | [noEn](../../../sql_reference/functions/in_functions.md#in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ |
| [menos (\<)](../../query_language/functions/comparison_functions.md#function-less) | ✔ | ✔ | ✗ | ✗ | ✗ | | [menos (\<)](../../../sql_reference/functions/comparison_functions.md#function-less) | ✔ | ✔ | ✗ | ✗ | ✗ |
| [Alcalde (\>)](../../query_language/functions/comparison_functions.md#function-greater) | ✔ | ✔ | ✗ | ✗ | ✗ | | [mayor (\>)](../../../sql_reference/functions/comparison_functions.md#function-greater) | ✔ | ✔ | ✗ | ✗ | ✗ |
| [menosOrEquals (\<=)](../../query_language/functions/comparison_functions.md#function-lessorequals) | ✔ | ✔ | ✗ | ✗ | ✗ | | [menosOrEquals (\<=)](../../../sql_reference/functions/comparison_functions.md#function-lessorequals) | ✔ | ✔ | ✗ | ✗ | ✗ |
| [mayorOrEquals (\>=)](../../query_language/functions/comparison_functions.md#function-greaterorequals) | ✔ | ✔ | ✗ | ✗ | ✗ | | [mayorOrEquals (\>=)](../../../sql_reference/functions/comparison_functions.md#function-greaterorequals) | ✔ | ✔ | ✗ | ✗ | ✗ |
| [Vaciar](../../query_language/functions/array_functions.md#function-empty) | ✔ | ✔ | ✗ | ✗ | ✗ | | [vaciar](../../../sql_reference/functions/array_functions.md#function-empty) | ✔ | ✔ | ✗ | ✗ | ✗ |
| [notEmpty](../../query_language/functions/array_functions.md#function-notempty) | ✔ | ✔ | ✗ | ✗ | ✗ | | [notEmpty](../../../sql_reference/functions/array_functions.md#function-notempty) | ✔ | ✔ | ✗ | ✗ | ✗ |
| hasToken | ✗ | ✗ | ✗ | ✔ | ✗ | | hasToken | ✗ | ✗ | ✗ | ✔ | ✗ |
Las funciones con un argumento constante que es menor que el tamaño de ngram no pueden ser utilizadas por `ngrambf_v1` para la optimización de consultas. Las funciones con un argumento constante que es menor que el tamaño de ngram no pueden ser utilizadas por `ngrambf_v1` para la optimización de consultas.
@ -375,7 +378,7 @@ Determina la duración de los valores.
El `TTL` se puede establecer para toda la tabla y para cada columna individual. TTL de nivel de tabla también puede especificar la lógica de movimiento automático de datos entre discos y volúmenes. El `TTL` se puede establecer para toda la tabla y para cada columna individual. TTL de nivel de tabla también puede especificar la lógica de movimiento automático de datos entre discos y volúmenes.
Las expresiones deben evaluar [Fecha](../../data_types/date.md) o [FechaHora](../../data_types/datetime.md) tipo de datos. Las expresiones deben evaluar [Fecha](../../../sql_reference/data_types/date.md) o [FechaHora](../../../sql_reference/data_types/datetime.md) tipo de datos.
Ejemplo: Ejemplo:
@ -384,7 +387,7 @@ TTL time_column
TTL time_column + interval TTL time_column + interval
``` ```
Definir `interval`, utilizar [intervalo de tiempo](../../query_language/operators.md#operators-datetime) operador. Definir `interval`, utilizar [intervalo de tiempo](../../../sql_reference/operators.md#operators-datetime) operador.
``` sql ``` sql
TTL date_time + INTERVAL 1 MONTH TTL date_time + INTERVAL 1 MONTH
@ -475,32 +478,30 @@ Los datos con un TTL caducado se eliminan cuando ClickHouse fusiona partes de da
Cuando ClickHouse ve que los datos han caducado, realiza una combinación fuera de programación. Para controlar la frecuencia de tales fusiones, puede establecer [Método de codificación de datos:](#mergetree_setting-merge_with_ttl_timeout). Si el valor es demasiado bajo, realizará muchas fusiones fuera de horario que pueden consumir muchos recursos. Cuando ClickHouse ve que los datos han caducado, realiza una combinación fuera de programación. Para controlar la frecuencia de tales fusiones, puede establecer [Método de codificación de datos:](#mergetree_setting-merge_with_ttl_timeout). Si el valor es demasiado bajo, realizará muchas fusiones fuera de horario que pueden consumir muchos recursos.
Si realiza el `SELECT` consulta entre fusiones, puede obtener datos caducados. Para evitarlo, use el [OPTIMIZAR](../../query_language/misc.md#misc_operations-optimize) Consulta antes `SELECT`. Si realiza el `SELECT` consulta entre fusiones, puede obtener datos caducados. Para evitarlo, use el [OPTIMIZE](../../../sql_reference/statements/misc.md#misc_operations-optimize) consulta antes `SELECT`.
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/mergetree/) <!--hide--> ## Uso de múltiples dispositivos de bloque para el almacenamiento de datos {#table_engine-mergetree-multiple-volumes}
## Uso de varios dispositivos de bloque para el almacenamiento de datos {#table_engine-mergetree-multiple-volumes}
### Implantación {#introduction} ### Implantación {#introduction}
`MergeTree` Los motores de tablas familiares pueden almacenar datos en múltiples dispositivos de bloque. Por ejemplo, puede ser útil cuando los datos de una determinada tabla se dividen implícitamente en “hot” y “cold”. Los datos más recientes se solicitan regularmente, pero solo requieren una pequeña cantidad de espacio. Por el contrario, los datos históricos de cola gorda se solicitan raramente. Si hay varios discos disponibles, el “hot” los datos pueden estar ubicados en discos rápidos (por ejemplo, SSD NVMe o en memoria), mientras que “cold” datos - en los relativamente lentos (por ejemplo, HDD). `MergeTree` Los motores de tablas familiares pueden almacenar datos en múltiples dispositivos de bloque. Por ejemplo, puede ser útil cuando los datos de una determinada tabla se dividen implícitamente en “hot” y “cold”. Los datos más recientes se solicitan regularmente, pero solo requieren una pequeña cantidad de espacio. Por el contrario, los datos históricos de cola gorda se solicitan raramente. Si hay varios discos disponibles, el “hot” los datos pueden estar ubicados en discos rápidos (por ejemplo, SSD NVMe o en memoria), mientras que “cold” datos - en los relativamente lentos (por ejemplo, HDD).
La parte de datos es la unidad móvil mínima para `MergeTree`-mesas de motor. Los datos que pertenecen a una parte se almacenan en un disco. Las partes de datos se pueden mover entre discos en segundo plano (según la configuración del usuario) así como por medio de la [ALTERAR](../../query_language/alter.md#alter_move-partition) consulta. La parte de datos es la unidad móvil mínima para `MergeTree`-mesas de motor. Los datos que pertenecen a una parte se almacenan en un disco. Las partes de datos se pueden mover entre discos en segundo plano (según la configuración del usuario) así como por medio de la [ALTER](../../../sql_reference/statements/alter.md#alter_move-partition) consulta.
### Plazo {#terms} ### Plazo {#terms}
- Disco: bloquea el dispositivo montado en el sistema de archivos. - Disk — Block device mounted to the filesystem.
- Disco predeterminado: disco que almacena la ruta especificada en el [camino](../server_settings/settings.md#server_settings-path) configuración del servidor. - Default disk — Disk that stores the path specified in the [camino](../../../operations/server_configuration_parameters/settings.md#server_configuration_parameters-path) configuración del servidor.
- Volumen — Conjunto ordenado de discos iguales (similar a [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures)). - Volume — Ordered set of equal disks (similar to [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures)).
- Política de almacenamiento: conjunto de volúmenes y reglas para mover datos entre ellos. - Storage policy — Set of volumes and the rules for moving data between them.
Los nombres dados a las entidades descritas se pueden encontrar en las tablas del sistema, [sistema.almacenamiento\_policies](../system_tables.md#system_tables-storage_policies) y [sistema.Discoteca](../system_tables.md#system_tables-disks). Para aplicar una de las directivas de almacenamiento configuradas para una tabla, `storage_policy` establecimiento de `MergeTree`-mesas de la familia del motor. Los nombres dados a las entidades descritas se pueden encontrar en las tablas del sistema, [sistema.almacenamiento\_policies](../../../operations/system_tables.md#system_tables-storage_policies) y [sistema.disco](../../../operations/system_tables.md#system_tables-disks). Para aplicar una de las directivas de almacenamiento configuradas para una tabla, `storage_policy` establecimiento de `MergeTree`-motor de la familia de las tablas.
### Configuración {#table_engine-mergetree-multiple-volumes-configure} ### Configuración {#table_engine-mergetree-multiple-volumes-configure}
Los discos, los volúmenes y las políticas de almacenamiento deben declararse `<storage_configuration>` etiqueta ya sea en el archivo principal `config.xml` o en un archivo distinto en el `config.d` Directorio. Discos, volúmenes y políticas de almacenamiento deben ser declaradas dentro de la `<storage_configuration>` etiqueta ya sea en el archivo principal `config.xml` o en un archivo distinto en el `config.d` directorio.
Estructura de configuración: Configuración de la estructura:
``` xml ``` xml
<storage_configuration> <storage_configuration>
@ -526,9 +527,9 @@ Estructura de configuración:
Tags: Tags:
- `<disk_name_N>`Nombre del disco. Los nombres deben ser diferentes para todos los discos. - `<disk_name_N>`Disk name. Names must be different for all disks.
- `path`ruta bajo la cual un servidor almacenará datos (`data` y `shadow` carpetas), debe terminarse con /. - `path`path under which a server will store data (`data` y `shadow` carpetas), debe terminarse con /.
- `keep_free_space_bytes`la cantidad de espacio libre en disco que debe reservarse. - `keep_free_space_bytes`the amount of free disk space to be reserved.
El orden de la definición del disco no es importante. El orden de la definición del disco no es importante.
@ -563,11 +564,11 @@ Marcado de configuración de directivas de almacenamiento:
Tags: Tags:
- `policy_name_N`Nombre de la póliza. Los nombres de directiva deben ser únicos. - `policy_name_N`Policy name. Policy names must be unique.
- `volume_name_N`Nombre del volumen. Los nombres de volumen deben ser únicos. - `volume_name_N`Volume name. Volume names must be unique.
- `disk`un disco dentro de un volumen. - `disk`a disk within a volume.
- `max_data_part_size_bytes`el tamaño máximo de una pieza que puede almacenarse en cualquiera de los discos del volumen. - `max_data_part_size_bytes`the maximum size of a part that can be stored on any of the volume's disks.
- `move_factor`cuando la cantidad de espacio disponible es inferior a este factor, los datos comienzan a moverse automáticamente en el siguiente volumen si los hay (por defecto, 0.1). - `move_factor`when the amount of available space gets lower than this factor, data automatically start to move on the next volume if any (by default, 0.1).
Cofiguration ejemplos: Cofiguration ejemplos:
@ -601,9 +602,9 @@ Cofiguration ejemplos:
</storage_configuration> </storage_configuration>
``` ```
En un ejemplo dado, el `hdd_in_order` la política implementa el [Ronda-robin](https://en.wikipedia.org/wiki/Round-robin_scheduling) enfoque. Por lo tanto, esta política define solo un volumen (`single`), las partes de datos se almacenan en todos sus discos en orden circular. Dicha política puede ser bastante útil si hay varios discos similares montados en el sistema, pero RAID no está configurado. Tenga en cuenta que cada unidad de disco individual no es confiable y es posible que desee compensarlo con un factor de replicación de 3 o más. En un ejemplo dado, el `hdd_in_order` implementa la política de [Ronda-robin](https://en.wikipedia.org/wiki/Round-robin_scheduling) enfoque. Por lo tanto esta política define un sólo volumen (`single`), las partes de datos se almacenan en todos sus discos en orden circular. Dicha política puede ser bastante útil si hay varios discos similares montados en el sistema, pero RAID no está configurado. Tenga en cuenta que cada unidad de disco individual no es confiable y es posible que desee compensarlo con un factor de replicación de 3 o más.
Si hay diferentes tipos de discos disponibles en el sistema, `moving_from_ssd_to_hdd` política se puede utilizar en su lugar. Volumen `hot` consta de un disco SSD (`fast_ssd`), y el tamaño máximo de una pieza que se puede almacenar en este volumen es de 1 GB. Todas las piezas con el tamaño más grande que 1GB serán almacenadas directamente en `cold` volumen, que contiene un disco duro `disk1`. Si hay diferentes tipos de discos disponibles en el sistema, `moving_from_ssd_to_hdd` la política puede ser utilizado en su lugar. Volumen `hot` consta de un disco SSD (`fast_ssd`), y el tamaño máximo de una parte que puede ser almacenado en este volumen es de 1GB. Todas las piezas con el tamaño de más de 1GB se almacenan directamente en el `cold` volumen, que contiene un disco duro `disk1`.
Además, una vez que el disco `fast_ssd` se llena en más del 80%, los datos se transferirán al `disk1` por un proceso en segundo plano. Además, una vez que el disco `fast_ssd` se llena en más del 80%, los datos se transferirán al `disk1` por un proceso en segundo plano.
El orden de enumeración de volúmenes dentro de una directiva de almacenamiento es importante. Una vez que un volumen está sobrellenado, los datos se mueven al siguiente. El orden de la enumeración del disco también es importante porque los datos se almacenan en ellos por turnos. El orden de enumeración de volúmenes dentro de una directiva de almacenamiento es importante. Una vez que un volumen está sobrellenado, los datos se mueven al siguiente. El orden de la enumeración del disco también es importante porque los datos se almacenan en ellos por turnos.
@ -629,9 +630,9 @@ El `default` política de almacenamiento implica el uso de un solo volumen, que
En el caso de `MergeTree` tablas, los datos están llegando al disco de diferentes maneras: En el caso de `MergeTree` tablas, los datos están llegando al disco de diferentes maneras:
- Como resultado de un inserto (`INSERT` consulta). - Como resultado de un inserto (`INSERT` consulta).
- Durante las fusiones de fondo y [mutación](../../query_language/alter.md#alter-mutations). - Durante las fusiones de fondo y [mutación](../../../sql_reference/statements/alter.md#alter-mutations).
- Al descargar desde otra réplica. - Al descargar desde otra réplica.
- Como resultado de la congelación de particiones [ALTER TABLE … CONGELAR LA PARTICIÓN](../../query_language/alter.md#alter_freeze-partition). - Como resultado de la congelación de particiones [ALTER TABLE … FREEZE PARTITION](../../../sql_reference/statements/alter.md#alter_freeze-partition).
En todos estos casos, excepto las mutaciones y la congelación de particiones, una pieza se almacena en un volumen y un disco de acuerdo con la política de almacenamiento dada: En todos estos casos, excepto las mutaciones y la congelación de particiones, una pieza se almacena en un volumen y un disco de acuerdo con la política de almacenamiento dada:
@ -641,13 +642,13 @@ En todos estos casos, excepto las mutaciones y la congelación de particiones, u
Bajo el capó, las mutaciones y la congelación de particiones hacen uso de [enlaces duros](https://en.wikipedia.org/wiki/Hard_link). Los enlaces duros entre diferentes discos no son compatibles, por lo tanto, en tales casos las partes resultantes se almacenan en los mismos discos que los iniciales. Bajo el capó, las mutaciones y la congelación de particiones hacen uso de [enlaces duros](https://en.wikipedia.org/wiki/Hard_link). Los enlaces duros entre diferentes discos no son compatibles, por lo tanto, en tales casos las partes resultantes se almacenan en los mismos discos que los iniciales.
En el fondo, las partes se mueven entre volúmenes en función de la cantidad de espacio libre (`move_factor` parámetro) según el orden en que se declaran los volúmenes en el archivo de configuración. En el fondo, las partes se mueven entre volúmenes en función de la cantidad de espacio libre (`move_factor` parámetro) según el orden en que se declaran los volúmenes en el archivo de configuración.
Los datos nunca se transfieren desde el último y al primero. Uno puede usar tablas del sistema [sistema.part\_log](../system_tables.md#system_tables-part-log) (campo `type = MOVE_PART`) y [sistema.parte](../system_tables.md#system_tables-parts) (campo `path` y `disk`) para monitorear movimientos de fondo. Además, la información detallada se puede encontrar en los registros del servidor. Los datos nunca se transfieren desde el último y al primero. Uno puede usar tablas del sistema [sistema.part\_log](../../../operations/system_tables.md#system_tables-part-log) (campo `type = MOVE_PART`) y [sistema.parte](../../../operations/system_tables.md#system_tables-parts) (campo `path` y `disk`) para monitorear el fondo se mueve. Además, la información detallada se puede encontrar en los registros del servidor.
El usuario puede forzar el movimiento de una pieza o una partición de un volumen a otro mediante la consulta [ALTER TABLE … MUEVA PARTE\|PARTICIÓN … AL VOLUMEN\|DISCO …](../../query_language/alter.md#alter_move-partition), todas las restricciones para las operaciones en segundo plano se tienen en cuenta. La consulta inicia un movimiento por sí misma y no espera a que se completen las operaciones en segundo plano. El usuario recibirá un mensaje de error si no hay suficiente espacio libre disponible o si no se cumple alguna de las condiciones requeridas. El usuario puede forzar el movimiento de una pieza o una partición de un volumen a otro mediante la consulta [ALTER TABLE … MOVE PART\|PARTITION … TO VOLUME\|DISK …](../../../sql_reference/statements/alter.md#alter_move-partition), todas las restricciones para las operaciones en segundo plano se tienen en cuenta. La consulta inicia un movimiento por sí misma y no espera a que se completen las operaciones en segundo plano. El usuario recibirá un mensaje de error si no hay suficiente espacio libre disponible o si no se cumple alguna de las condiciones requeridas.
Mover datos no interfiere con la replicación de datos. Por lo tanto, se pueden especificar diferentes directivas de almacenamiento para la misma tabla en diferentes réplicas. Mover datos no interfiere con la replicación de datos. Por lo tanto, se pueden especificar diferentes directivas de almacenamiento para la misma tabla en diferentes réplicas.
Después de la finalización de las fusiones y mutaciones de fondo, las partes viejas se eliminan solo después de un cierto período de tiempo (`old_parts_lifetime`). Después de la finalización de las fusiones y mutaciones de fondo, las partes viejas se eliminan solo después de un cierto período de tiempo (`old_parts_lifetime`).
Durante este tiempo, no se mueven a otros volúmenes o discos. Por lo tanto, hasta que las partes finalmente se eliminen, aún se tienen en cuenta para la evaluación del espacio en disco ocupado. Durante este tiempo, no se mueven a otros volúmenes o discos. Por lo tanto, hasta que finalmente se retira, se tomará en cuenta para la evaluación de los ocupados de espacio en disco.
[Artículo Original](https://clickhouse.tech/docs/ru/operations/table_engines/mergetree/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/ru/operations/table_engines/mergetree/) <!--hide-->

View File

@ -1,12 +1,15 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 33
toc_title: ReplacingMergeTree
--- ---
# ReplacingMergeTree {#replacingmergetree} # Replacingmergetree {#replacingmergetree}
El motor difiere de [Método de codificación de datos:](mergetree.md#table_engines-mergetree) en que elimina las entradas duplicadas con el mismo valor de clave principal (o más exactamente, con el mismo [clave de clasificación](mergetree.md) de valor). El motor difiere de [Método de codificación de datos:](mergetree.md#table_engines-mergetree) en que elimina las entradas duplicadas con el mismo valor de clave principal (o más exactamente, con el mismo [clave de clasificación](mergetree.md) valor).
La desduplicación de datos solo se produce durante una fusión. La fusión se produce en segundo plano en un momento desconocido, por lo que no se puede planificar para ello. Algunos de los datos pueden permanecer sin procesar. Aunque puede ejecutar una fusión no programada utilizando el `OPTIMIZE` Consulta, no cuente con su uso, porque el `OPTIMIZE` consulta leerá y escribirá una gran cantidad de datos. La desduplicación de datos solo se produce durante una fusión. La fusión ocurre en segundo plano en un momento desconocido, por lo que no puede planificarla. Algunos de los datos pueden permanecer sin procesar. Aunque puede ejecutar una fusión no programada utilizando el `OPTIMIZE` consulta, no cuente con usarlo, porque el `OPTIMIZE` consulta leerá y escribirá una gran cantidad de datos.
Así, `ReplacingMergeTree` es adecuado para borrar datos duplicados en segundo plano para ahorrar espacio, pero no garantiza la ausencia de duplicados. Así, `ReplacingMergeTree` es adecuado para borrar datos duplicados en segundo plano para ahorrar espacio, pero no garantiza la ausencia de duplicados.
@ -26,11 +29,11 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
[SETTINGS name=value, ...] [SETTINGS name=value, ...]
``` ```
Para obtener una descripción de los parámetros de solicitud, consulte [descripción de la solicitud](../../query_language/create.md). Para obtener una descripción de los parámetros de solicitud, consulte [descripción de la solicitud](../../../sql_reference/statements/create.md).
**ReplacingMergeTree Parámetros** **ReplacingMergeTree Parámetros**
- `ver` — columna con versión. Tipo `UInt*`, `Date` o `DateTime`. Parámetro opcional. - `ver` — column with version. Type `UInt*`, `Date` o `DateTime`. Parámetro opcional.
Al fusionar, `ReplacingMergeTree` de todas las filas con la misma clave primaria deja solo una: Al fusionar, `ReplacingMergeTree` de todas las filas con la misma clave primaria deja solo una:
@ -63,4 +66,4 @@ Todos los parámetros excepto `ver` el mismo significado que en `MergeTree`.
</details> </details>
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/replacingmergetree/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/replacingmergetree/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 31
toc_title: "Replicaci\xF3n de datos"
--- ---
# Replicación de datos {#table_engines-replication} # Replicación de datos {#table_engines-replication}
@ -18,7 +21,7 @@ La replicación funciona a nivel de una tabla individual, no de todo el servidor
La replicación no depende de la fragmentación. Cada fragmento tiene su propia replicación independiente. La replicación no depende de la fragmentación. Cada fragmento tiene su propia replicación independiente.
Datos comprimidos para `INSERT` y `ALTER` se replica (para obtener más información, consulte la documentación para [ALTERAR](../../query_language/alter.md#query_language_queries_alter)). Datos comprimidos para `INSERT` y `ALTER` se replica (para obtener más información, consulte la documentación para [ALTER](../../../sql_reference/statements/alter.md#query_language_queries_alter)).
`CREATE`, `DROP`, `ATTACH`, `DETACH` y `RENAME` las consultas se ejecutan en un único servidor y no se replican: `CREATE`, `DROP`, `ATTACH`, `DETACH` y `RENAME` las consultas se ejecutan en un único servidor y no se replican:
@ -28,7 +31,7 @@ Datos comprimidos para `INSERT` y `ALTER` se replica (para obtener más informac
Uso de ClickHouse [Apache ZooKeeper](https://zookeeper.apache.org) para almacenar metainformación de réplicas. Utilice ZooKeeper versión 3.4.5 o posterior. Uso de ClickHouse [Apache ZooKeeper](https://zookeeper.apache.org) para almacenar metainformación de réplicas. Utilice ZooKeeper versión 3.4.5 o posterior.
Para utilizar la replicación, establezca los parámetros [Zookeeper](../server_settings/settings.md#server-settings_zookeeper) sección de configuración del servidor. Para utilizar la replicación, establezca los parámetros [Zookeeper](../../../operations/server_configuration_parameters/settings.md#server-settings_zookeeper) sección de configuración del servidor.
!!! attention "Atención" !!! attention "Atención"
No descuides la configuración de seguridad. ClickHouse soporta el `digest` [Esquema de ACL](https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#sc_ZooKeeperAccessControl) del subsistema de seguridad ZooKeeper. No descuides la configuración de seguridad. ClickHouse soporta el `digest` [Esquema de ACL](https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#sc_ZooKeeperAccessControl) del subsistema de seguridad ZooKeeper.
@ -56,7 +59,7 @@ Puede especificar cualquier clúster ZooKeeper existente y el sistema utilizará
Si ZooKeeper no está establecido en el archivo de configuración, no puede crear tablas replicadas y las tablas replicadas existentes serán de solo lectura. Si ZooKeeper no está establecido en el archivo de configuración, no puede crear tablas replicadas y las tablas replicadas existentes serán de solo lectura.
ZooKeeper no se utiliza en `SELECT` consultas porque la replicación no afecta al rendimiento de `SELECT` y las consultas se ejecutan tan rápido como lo hacen para las tablas no replicadas. Al consultar tablas replicadas distribuidas, el comportamiento de ClickHouse se controla mediante la configuración [max\_replica\_delay\_for\_distributed\_queries](../settings/settings.md#settings-max_replica_delay_for_distributed_queries) y [fallback\_to\_stale\_replicas\_for\_distributed\_queries](../settings/settings.md#settings-fallback_to_stale_replicas_for_distributed_queries). ZooKeeper no se utiliza en `SELECT` consultas porque la replicación no afecta al rendimiento de `SELECT` y las consultas se ejecutan tan rápido como lo hacen para las tablas no replicadas. Al consultar tablas replicadas distribuidas, el comportamiento de ClickHouse se controla mediante la configuración [max\_replica\_delay\_for\_distributed\_queries](../../../operations/settings/settings.md#settings-max_replica_delay_for_distributed_queries) y [fallback\_to\_stale\_replicas\_for\_distributed\_queries](../../../operations/settings/settings.md#settings-fallback_to_stale_replicas_for_distributed_queries).
Para cada `INSERT` consulta, aproximadamente diez entradas se agregan a ZooKeeper a través de varias transacciones. (Para ser más precisos, esto es para cada bloque de datos insertado; una consulta INSERT contiene un bloque o un bloque por `max_insert_block_size = 1048576` filas.) Esto conduce a latencias ligeramente más largas para `INSERT` en comparación con las tablas no replicadas. Pero si sigue las recomendaciones para insertar datos en lotes de no más de uno `INSERT` por segundo, no crea ningún problema. Todo el clúster ClickHouse utilizado para coordinar un clúster ZooKeeper tiene un total de varios cientos `INSERTs` por segundo. El rendimiento en las inserciones de datos (el número de filas por segundo) es tan alto como para los datos no replicados. Para cada `INSERT` consulta, aproximadamente diez entradas se agregan a ZooKeeper a través de varias transacciones. (Para ser más precisos, esto es para cada bloque de datos insertado; una consulta INSERT contiene un bloque o un bloque por `max_insert_block_size = 1048576` filas.) Esto conduce a latencias ligeramente más largas para `INSERT` en comparación con las tablas no replicadas. Pero si sigue las recomendaciones para insertar datos en lotes de no más de uno `INSERT` por segundo, no crea ningún problema. Todo el clúster ClickHouse utilizado para coordinar un clúster ZooKeeper tiene un total de varios cientos `INSERTs` por segundo. El rendimiento en las inserciones de datos (el número de filas por segundo) es tan alto como para los datos no replicados.
@ -64,11 +67,11 @@ Para clústeres muy grandes, puede usar diferentes clústeres de ZooKeeper para
La replicación es asíncrona y multi-master. `INSERT` consultas (así como `ALTER`) se puede enviar a cualquier servidor disponible. Los datos se insertan en el servidor donde se ejecuta la consulta y, a continuación, se copian a los demás servidores. Debido a que es asincrónico, los datos insertados recientemente aparecen en las otras réplicas con cierta latencia. Si parte de las réplicas no está disponible, los datos se escriben cuando estén disponibles. Si hay una réplica disponible, la latencia es la cantidad de tiempo que tarda en transferir el bloque de datos comprimidos a través de la red. La replicación es asíncrona y multi-master. `INSERT` consultas (así como `ALTER`) se puede enviar a cualquier servidor disponible. Los datos se insertan en el servidor donde se ejecuta la consulta y, a continuación, se copian a los demás servidores. Debido a que es asincrónico, los datos insertados recientemente aparecen en las otras réplicas con cierta latencia. Si parte de las réplicas no está disponible, los datos se escriben cuando estén disponibles. Si hay una réplica disponible, la latencia es la cantidad de tiempo que tarda en transferir el bloque de datos comprimidos a través de la red.
De forma predeterminada, una consulta INSERT espera la confirmación de la escritura de los datos de una sola réplica. Si los datos fue correctamente escrito a sólo una réplica y el servidor con esta réplica deja de existir, los datos almacenados se perderán. Para habilitar la confirmación de las escrituras de datos de varias réplicas, utilice `insert_quorum` opción. De forma predeterminada, una consulta INSERT espera la confirmación de la escritura de los datos de una sola réplica. Si los datos fue correctamente escrito a sólo una réplica y el servidor con esta réplica deja de existir, los datos almacenados se perderán. Para habilitar la confirmación de las escrituras de datos de varias réplicas, utilice `insert_quorum` opcion.
Cada bloque de datos se escribe atómicamente. La consulta INSERT se divide en bloques hasta `max_insert_block_size = 1048576` películas. En otras palabras, si el `INSERT` consulta tiene menos de 1048576 filas, se hace atómicamente. Cada bloque de datos se escribe atómicamente. La consulta INSERT se divide en bloques hasta `max_insert_block_size = 1048576` filas. En otras palabras, si el `INSERT` consulta tiene menos de 1048576 filas, se hace atómicamente.
Los bloques de datos se deduplican. Para varias escrituras del mismo bloque de datos (bloques de datos del mismo tamaño que contienen las mismas filas en el mismo orden), el bloque solo se escribe una vez. La razón de esto es en caso de errores de red cuando la aplicación cliente no sabe si los datos se escribieron en la base de datos, por lo que `INSERT` consulta simplemente se puede repetir. No importa a qué réplica se enviaron los INSERT con datos idénticos. `INSERTs` son idempotentes. Los parámetros de desduplicación son controlados por [merge\_tree](../server_settings/settings.md#server_settings-merge_tree) configuración del servidor. Los bloques de datos se deduplican. Para varias escrituras del mismo bloque de datos (bloques de datos del mismo tamaño que contienen las mismas filas en el mismo orden), el bloque solo se escribe una vez. La razón de esto es en caso de fallas de red cuando la aplicación cliente no sabe si los datos se escribieron en la base de datos, por lo que `INSERT` consulta simplemente se puede repetir. No importa a qué réplica se enviaron los INSERT con datos idénticos. `INSERTs` son idempotentes. Los parámetros de desduplicación son controlados por [merge\_tree](../../../operations/server_configuration_parameters/settings.md#server_configuration_parameters-merge_tree) configuración del servidor.
Durante la replicación, sólo los datos de origen que se van a insertar se transfieren a través de la red. La transformación de datos adicional (fusión) se coordina y se realiza en todas las réplicas de la misma manera. Esto minimiza el uso de la red, lo que significa que la replicación funciona bien cuando las réplicas residen en centros de datos diferentes. (Tenga en cuenta que la duplicación de datos en diferentes centros de datos es el objetivo principal de la replicación.) Durante la replicación, sólo los datos de origen que se van a insertar se transfieren a través de la red. La transformación de datos adicional (fusión) se coordina y se realiza en todas las réplicas de la misma manera. Esto minimiza el uso de la red, lo que significa que la replicación funciona bien cuando las réplicas residen en centros de datos diferentes. (Tenga en cuenta que la duplicación de datos en diferentes centros de datos es el objetivo principal de la replicación.)
@ -82,8 +85,8 @@ El `Replicated` prefijo se agrega al nombre del motor de tabla. Por ejemplo:`Rep
**Replicated\*MergeTree parámetros** **Replicated\*MergeTree parámetros**
- `zoo_path`El camino a la mesa en ZooKeeper. - `zoo_path`The path to the table in ZooKeeper.
- `replica_name`El nombre de la réplica en ZooKeeper. - `replica_name`The replica name in ZooKeeper.
Ejemplo: Ejemplo:
@ -132,7 +135,7 @@ En este caso, la ruta consta de las siguientes partes:
`{layer}-{shard}` es el identificador de fragmento. En este ejemplo consta de dos partes, ya que el Yandex.Metrica clúster utiliza sharding de dos niveles. Para la mayoría de las tareas, puede dejar solo la sustitución {shard}, que se expandirá al identificador de fragmento. `{layer}-{shard}` es el identificador de fragmento. En este ejemplo consta de dos partes, ya que el Yandex.Metrica clúster utiliza sharding de dos niveles. Para la mayoría de las tareas, puede dejar solo la sustitución {shard}, que se expandirá al identificador de fragmento.
`table_name` es el nombre del nodo de la tabla en ZooKeeper. Es una buena idea hacerlo igual que el nombre de la tabla. Se define explícitamente, porque a diferencia del nombre de la tabla, no cambia después de una consulta RENAME. `table_name` es el nombre del nodo de la tabla en ZooKeeper. Es una buena idea hacerlo igual que el nombre de la tabla. Se define explícitamente, porque a diferencia del nombre de la tabla, no cambia después de una consulta RENAME.
*SUGERENCIA*: podría agregar un nombre de base de datos delante de `table_name` También. Nivel de Cifrado WEP `db_name.table_name` *HINT*: podría agregar un nombre de base de datos delante de `table_name` También. Nivel de Cifrado WEP `db_name.table_name`
El nombre de réplica identifica diferentes réplicas de la misma tabla. Puede usar el nombre del servidor para esto, como en el ejemplo. El nombre solo tiene que ser único dentro de cada fragmento. El nombre de réplica identifica diferentes réplicas de la misma tabla. Puede usar el nombre del servidor para esto, como en el ejemplo. El nombre solo tiene que ser único dentro de cada fragmento.
@ -144,7 +147,7 @@ Ejecute el `CREATE TABLE` consulta en cada réplica. Esta consulta crea una nuev
Si agrega una nueva réplica después de que la tabla ya contenga algunos datos en otras réplicas, los datos se copiarán de las otras réplicas a la nueva después de ejecutar la consulta. En otras palabras, la nueva réplica se sincroniza con las demás. Si agrega una nueva réplica después de que la tabla ya contenga algunos datos en otras réplicas, los datos se copiarán de las otras réplicas a la nueva después de ejecutar la consulta. En otras palabras, la nueva réplica se sincroniza con las demás.
Para eliminar una réplica, ejecute `DROP TABLE`. Sin embargo, solo se elimina una réplica, la que reside en el servidor donde se ejecuta la consulta. Para eliminar una réplica, ejecute `DROP TABLE`. However, only one replica is deleted the one that resides on the server where you run the query.
## Recuperación después de fallos {#recovery-after-failures} ## Recuperación después de fallos {#recovery-after-failures}
@ -162,7 +165,7 @@ Cuando el servidor se inicia (o establece una nueva sesión con ZooKeeper), solo
Si el conjunto local de datos difiere demasiado del esperado, se activa un mecanismo de seguridad. El servidor ingresa esto en el registro y se niega a iniciarse. La razón de esto es que este caso puede indicar un error de configuración, como si una réplica en un fragmento se configurara accidentalmente como una réplica en un fragmento diferente. Sin embargo, los umbrales para este mecanismo se establecen bastante bajos, y esta situación puede ocurrir durante la recuperación de falla normal. En este caso, los datos se restauran semiautomáticamente, mediante “pushing a button”. Si el conjunto local de datos difiere demasiado del esperado, se activa un mecanismo de seguridad. El servidor ingresa esto en el registro y se niega a iniciarse. La razón de esto es que este caso puede indicar un error de configuración, como si una réplica en un fragmento se configurara accidentalmente como una réplica en un fragmento diferente. Sin embargo, los umbrales para este mecanismo se establecen bastante bajos, y esta situación puede ocurrir durante la recuperación de falla normal. En este caso, los datos se restauran semiautomáticamente, mediante “pushing a button”.
Para iniciar la recuperación, cree el nodo `/path_to_table/replica_name/flags/force_restore_data` es ZooKeeper con cualquier contenido, o ejecute el comando para restaurar todas las tablas replicadas: Para iniciar la recuperación, cree el nodo `/path_to_table/replica_name/flags/force_restore_data` en ZooKeeper con cualquier contenido, o ejecute el comando para restaurar todas las tablas replicadas:
``` bash ``` bash
sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data
@ -185,7 +188,7 @@ Una opción de recuperación alternativa es eliminar información sobre la répl
No hay restricción en el ancho de banda de la red durante la recuperación. Tenga esto en cuenta si está restaurando muchas réplicas a la vez. No hay restricción en el ancho de banda de la red durante la recuperación. Tenga esto en cuenta si está restaurando muchas réplicas a la vez.
## La conversión de MergeTree a ReplicatedMergeTree {#converting-from-mergetree-to-replicatedmergetree} ## La Conversión De Mergetree A Replicatedmergetree {#converting-from-mergetree-to-replicatedmergetree}
Usamos el término `MergeTree` para referirse a todos los motores de mesa en el `MergeTree family`, lo mismo que para `ReplicatedMergeTree`. Usamos el término `MergeTree` para referirse a todos los motores de mesa en el `MergeTree family`, lo mismo que para `ReplicatedMergeTree`.
@ -197,7 +200,7 @@ Cambie el nombre de la tabla MergeTree existente y, a continuación, cree un `Re
Mueva los datos de la tabla antigua a la `detached` subdirectorio dentro del directorio con los nuevos datos de la tabla (`/var/lib/clickhouse/data/db_name/table_name/`). Mueva los datos de la tabla antigua a la `detached` subdirectorio dentro del directorio con los nuevos datos de la tabla (`/var/lib/clickhouse/data/db_name/table_name/`).
Luego ejecuta `ALTER TABLE ATTACH PARTITION` en una de las réplicas para agregar estas partes de datos al conjunto de trabajo. Luego ejecuta `ALTER TABLE ATTACH PARTITION` en una de las réplicas para agregar estas partes de datos al conjunto de trabajo.
## La conversión de ReplicatedMergeTree a MergeTree {#converting-from-replicatedmergetree-to-mergetree} ## La Conversión De Replicatedmergetree A Mergetree {#converting-from-replicatedmergetree-to-mergetree}
Cree una tabla MergeTree con un nombre diferente. Mueva todos los datos del directorio con el `ReplicatedMergeTree` datos de la tabla al directorio de datos de la nueva tabla. A continuación, elimine el `ReplicatedMergeTree` y reinicie el servidor. Cree una tabla MergeTree con un nombre diferente. Mueva todos los datos del directorio con el `ReplicatedMergeTree` datos de la tabla al directorio de datos de la nueva tabla. A continuación, elimine el `ReplicatedMergeTree` y reinicie el servidor.
@ -208,8 +211,8 @@ Si desea deshacerse de un `ReplicatedMergeTree` sin iniciar el servidor:
Después de esto, puede iniciar el servidor, crear un `MergeTree` tabla, mueva los datos a su directorio y, a continuación, reinicie el servidor. Después de esto, puede iniciar el servidor, crear un `MergeTree` tabla, mueva los datos a su directorio y, a continuación, reinicie el servidor.
## Recuperación cuando los metadatos del clúster ZooKeeper se pierden o se dañan {#recovery-when-metadata-in-the-zookeeper-cluster-is-lost-or-damaged} ## Recuperación cuando los metadatos en el clúster de Zookeeper se pierden o se dañan {#recovery-when-metadata-in-the-zookeeper-cluster-is-lost-or-damaged}
Si los datos de ZooKeeper se perdieron o se dañaron, puede guardar los datos moviéndolos a una tabla no duplicada como se describió anteriormente. Si los datos de ZooKeeper se perdieron o se dañaron, puede guardar los datos moviéndolos a una tabla no duplicada como se describió anteriormente.
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/replication/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/replication/) <!--hide-->

View File

@ -1,8 +1,11 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 34
toc_title: SummingMergeTree
--- ---
# SummingMergeTree {#summingmergetree} # Summingmergetree {#summingmergetree}
El motor hereda de [Método de codificación de datos:](mergetree.md#table_engines-mergetree). La diferencia es que al fusionar partes de datos para `SummingMergeTree` ClickHouse reemplaza todas las filas con la misma clave primaria (o más exactamente, con la misma [clave de clasificación](mergetree.md)) con una fila que contiene valores resumidos para las columnas con el tipo de datos numérico. Si la clave de ordenación está compuesta de manera que un solo valor de clave corresponde a un gran número de filas, esto reduce significativamente el volumen de almacenamiento y acelera la selección de datos. El motor hereda de [Método de codificación de datos:](mergetree.md#table_engines-mergetree). La diferencia es que al fusionar partes de datos para `SummingMergeTree` ClickHouse reemplaza todas las filas con la misma clave primaria (o más exactamente, con la misma [clave de clasificación](mergetree.md)) con una fila que contiene valores resumidos para las columnas con el tipo de datos numérico. Si la clave de ordenación está compuesta de manera que un solo valor de clave corresponde a un gran número de filas, esto reduce significativamente el volumen de almacenamiento y acelera la selección de datos.
@ -23,7 +26,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
[SETTINGS name=value, ...] [SETTINGS name=value, ...]
``` ```
Para obtener una descripción de los parámetros de solicitud, consulte [descripción de la solicitud](../../query_language/create.md). Para obtener una descripción de los parámetros de solicitud, consulte [descripción de la solicitud](../../../sql_reference/statements/create.md).
**Parámetros de SummingMergeTree** **Parámetros de SummingMergeTree**
@ -54,7 +57,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
Todos los parámetros excepto `columns` el mismo significado que en `MergeTree`. Todos los parámetros excepto `columns` el mismo significado que en `MergeTree`.
- `columns` — tupla con nombres de valores de columnas de los cuales se resumirán. Parámetro opcional. Para una descripción, vea el texto anterior. - `columns` — tuple with names of columns values of which will be summarized. Optional parameter. For a description, see the text above.
</details> </details>
@ -72,7 +75,7 @@ ENGINE = SummingMergeTree()
ORDER BY key ORDER BY key
``` ```
Inserte datos: Insertar datos:
``` sql ``` sql
INSERT INTO summtt Values(1,1),(1,2),(2,1) INSERT INTO summtt Values(1,1),(1,2),(2,1)
@ -95,7 +98,7 @@ SELECT key, sum(value) FROM summtt GROUP BY key
Cuando los datos se insertan en una tabla, se guardan tal cual. Clickhouse fusiona las partes insertadas de datos periódicamente y esto es cuando las filas con la misma clave principal se suman y se reemplazan con una para cada parte resultante de los datos. Cuando los datos se insertan en una tabla, se guardan tal cual. Clickhouse fusiona las partes insertadas de datos periódicamente y esto es cuando las filas con la misma clave principal se suman y se reemplazan con una para cada parte resultante de los datos.
ClickHouse puede fusionar las partes de datos para que las diferentes partes resultantes del cat de datos consistan en filas con la misma clave principal, es decir, la suma estará incompleta. Pues (`SELECT`) una función agregada [resumir()](../../query_language/agg_functions/reference.md#agg_function-sum) y `GROUP BY` cláusula se debe utilizar en una consulta como se describe en el ejemplo anterior. ClickHouse can merge the data parts so that different resulting parts of data cat consist rows with the same primary key, i.e. the summation will be incomplete. Therefore (`SELECT`) una función agregada [resumir()](../../../sql_reference/aggregate_functions/reference.md#agg_function-sum) y `GROUP BY` cláusula se debe utilizar en una consulta como se describe en el ejemplo anterior.
### Reglas comunes para la suma {#common-rules-for-summation} ### Reglas comunes para la suma {#common-rules-for-summation}
@ -107,9 +110,9 @@ Si la columna no está en la clave principal y no se resume, se selecciona un va
Los valores no se resumen para las columnas de la clave principal. Los valores no se resumen para las columnas de la clave principal.
### La suma en las columnas AggregateFunction {#the-summation-in-the-aggregatefunction-columns} ### La suma en las columnas de función agregada {#the-summation-in-the-aggregatefunction-columns}
Para columnas de [Tipo AggregateFunction](../../data_types/nested_data_structures/aggregatefunction.md) ClickHouse se comporta como [AgregaciónMergeTree](aggregatingmergetree.md) agregación del motor según la función. Para columnas de [Tipo AggregateFunction](../../../sql_reference/data_types/aggregatefunction.md) ClickHouse se comporta como [AgregaciónMergeTree](aggregatingmergetree.md) agregación del motor según la función.
### Estructuras anidadas {#nested-structures} ### Estructuras anidadas {#nested-structures}
@ -117,7 +120,7 @@ La tabla puede tener estructuras de datos anidadas que se procesan de una manera
Si el nombre de una tabla anidada termina con `Map` y contiene al menos dos columnas que cumplen los siguientes criterios: Si el nombre de una tabla anidada termina con `Map` y contiene al menos dos columnas que cumplen los siguientes criterios:
- la primera columna es numérica `(*Int*, Date, DateTime)` O una cadena `(String, FixedString)`, vamos a llamarlo `key`, - la primera columna es numérica `(*Int*, Date, DateTime)` o una cadena `(String, FixedString)`, vamos a llamarlo `key`,
- las otras columnas son aritméticas `(*Int*, Float32/64)`, vamos a llamarlo `(values...)`, - las otras columnas son aritméticas `(*Int*, Float32/64)`, vamos a llamarlo `(values...)`,
entonces esta tabla anidada se interpreta como una asignación de `key => (values...)`, y al fusionar sus filas, los elementos de dos conjuntos de datos se fusionan por `key` con una suma de los correspondientes `(values...)`. entonces esta tabla anidada se interpreta como una asignación de `key => (values...)`, y al fusionar sus filas, los elementos de dos conjuntos de datos se fusionan por `key` con una suma de los correspondientes `(values...)`.
@ -131,8 +134,8 @@ Ejemplos:
[(1, 100), (2, 150)] + [(1, -100)] -> [(2, 150)] [(1, 100), (2, 150)] + [(1, -100)] -> [(2, 150)]
``` ```
Al solicitar datos, utilice el [SumMap (clave, valor)](../../query_language/agg_functions/reference.md) función para la agregación de `Map`. Al solicitar datos, utilice el [sumMap(clave, valor)](../../../sql_reference/aggregate_functions/reference.md) función para la agregación de `Map`.
Para la estructura de datos anidados, no necesita especificar sus columnas en la tupla de columnas para la suma. Para la estructura de datos anidados, no necesita especificar sus columnas en la tupla de columnas para la suma.
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/summingmergetree/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/summingmergetree/) <!--hide-->

View File

@ -1,8 +1,11 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 37
toc_title: VersionedCollapsingMergeTree
--- ---
# VersionedCollapsingMergeTree {#versionedcollapsingmergetree} # Versionedcollapsingmergetree {#versionedcollapsingmergetree}
Este motor: Este motor:
@ -28,7 +31,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
[SETTINGS name=value, ...] [SETTINGS name=value, ...]
``` ```
Para obtener una descripción de los parámetros de consulta, consulte [descripción de la consulta](../../query_language/create.md). Para obtener una descripción de los parámetros de consulta, consulte [descripción de la consulta](../../../sql_reference/statements/create.md).
**Parámetros del motor** **Parámetros del motor**
@ -36,11 +39,11 @@ Para obtener una descripción de los parámetros de consulta, consulte [descripc
VersionedCollapsingMergeTree(sign, version) VersionedCollapsingMergeTree(sign, version)
``` ```
- `sign` — Nombre de la columna con el tipo de fila: `1` es una “state” fila, `-1` es una “cancel” Fila. - `sign` — Name of the column with the type of row: `1` es una “state” fila, `-1` es una “cancel” fila.
El tipo de datos de columna debe ser `Int8`. El tipo de datos de columna debe ser `Int8`.
- `version` — Nombre de la columna con la versión del estado del objeto. - `version` — Name of the column with the version of the object state.
El tipo de datos de columna debe ser `UInt*`. El tipo de datos de columna debe ser `UInt*`.
@ -66,11 +69,11 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
Todos los parámetros excepto `sign` y `version` el mismo significado que en `MergeTree`. Todos los parámetros excepto `sign` y `version` el mismo significado que en `MergeTree`.
- `sign` — Nombre de la columna con el tipo de fila: `1` es una “state” fila, `-1` es una “cancel” Fila. - `sign` — Name of the column with the type of row: `1` es una “state” fila, `-1` es una “cancel” fila.
Tipo de datos de columna`Int8`. Column Data Type`Int8`.
- `version` — Nombre de la columna con la versión del estado del objeto. - `version` — Name of the column with the version of the object state.
El tipo de datos de columna debe ser `UInt*`. El tipo de datos de columna debe ser `UInt*`.
@ -82,7 +85,7 @@ Todos los parámetros excepto `sign` y `version` el mismo significado que en `Me
Considere una situación en la que necesite guardar datos que cambien continuamente para algún objeto. Es razonable tener una fila para un objeto y actualizar la fila siempre que haya cambios. Sin embargo, la operación de actualización es costosa y lenta para un DBMS porque requiere volver a escribir los datos en el almacenamiento. La actualización no es aceptable si necesita escribir datos rápidamente, pero puede escribir los cambios en un objeto secuencialmente de la siguiente manera. Considere una situación en la que necesite guardar datos que cambien continuamente para algún objeto. Es razonable tener una fila para un objeto y actualizar la fila siempre que haya cambios. Sin embargo, la operación de actualización es costosa y lenta para un DBMS porque requiere volver a escribir los datos en el almacenamiento. La actualización no es aceptable si necesita escribir datos rápidamente, pero puede escribir los cambios en un objeto secuencialmente de la siguiente manera.
Descripción `Sign` columna al escribir la fila. Si `Sign = 1` significa que la fila es un estado de un objeto (llamémoslo el “state” fila). Si `Sign = -1` indica la cancelación del estado de un objeto con los mismos atributos (llamémoslo el “cancel” fila). También use el `Version` columna, que debe identificar cada estado de un objeto con un número separado. Utilice el `Sign` columna al escribir la fila. Si `Sign = 1` significa que la fila es un estado de un objeto (llamémoslo el “state” fila). Si `Sign = -1` indica la cancelación del estado de un objeto con los mismos atributos (llamémoslo el “cancel” fila). También use el `Version` columna, que debe identificar cada estado de un objeto con un número separado.
Por ejemplo, queremos calcular cuántas páginas visitaron los usuarios en algún sitio y cuánto tiempo estuvieron allí. En algún momento escribimos la siguiente fila con el estado de la actividad del usuario: Por ejemplo, queremos calcular cuántas páginas visitaron los usuarios en algún sitio y cuánto tiempo estuvieron allí. En algún momento escribimos la siguiente fila con el estado de la actividad del usuario:
@ -120,7 +123,7 @@ Para averiguar por qué necesitamos dos filas para cada cambio, vea [Algoritmo](
**Notas sobre el uso** **Notas sobre el uso**
1. El programa que escribe los datos debe recordar el estado de un objeto para cancelarlo. El “cancel” Cadena debe ser una copia de la “state” con lo opuesto `Sign`. Esto aumenta el tamaño inicial de almacenamiento, pero permite escribir los datos rápidamente. 1. El programa que escribe los datos debe recordar el estado de un objeto para cancelarlo. El “cancel” cadena debe ser una copia de la “state” con lo opuesto `Sign`. Esto aumenta el tamaño inicial de almacenamiento, pero permite escribir los datos rápidamente.
2. Las matrices de largo crecimiento en columnas reducen la eficiencia del motor debido a la carga para escribir. Cuanto más sencillos sean los datos, mejor será la eficiencia. 2. Las matrices de largo crecimiento en columnas reducen la eficiencia del motor debido a la carga para escribir. Cuanto más sencillos sean los datos, mejor será la eficiencia.
3. `SELECT` Los resultados dependen en gran medida de la coherencia del historial de cambios de objetos. Sea preciso al preparar los datos para insertarlos. Puede obtener resultados impredecibles con datos incoherentes, como valores negativos para métricas no negativas, como la profundidad de la sesión. 3. `SELECT` Los resultados dependen en gran medida de la coherencia del historial de cambios de objetos. Sea preciso al preparar los datos para insertarlos. Puede obtener resultados impredecibles con datos incoherentes, como valores negativos para métricas no negativas, como la profundidad de la sesión.
@ -132,9 +135,9 @@ Cuando ClickHouse inserta datos, ordena filas por la clave principal. Si el `Ver
## Selección de datos {#selecting-data} ## Selección de datos {#selecting-data}
ClickHouse no garantiza que todas las filas con la misma clave principal estarán en la misma parte de datos resultante o incluso en el mismo servidor físico. Esto es cierto tanto para escribir los datos como para la posterior fusión de las partes de datos. Además, ClickHouse procesa `SELECT` consultas con múltiples subprocesos, y no puede predecir el orden de las filas en el resultado. Esto significa que la agregación es necesaria si hay una necesidad de obtener completamente “collapsed” datos de un `VersionedCollapsingMergeTree` tabla. ClickHouse no garantiza que todas las filas con la misma clave principal estén en la misma parte de datos resultante o incluso en el mismo servidor físico. Esto es cierto tanto para escribir los datos como para la posterior fusión de las partes de datos. Además, ClickHouse procesa `SELECT` consultas con múltiples subprocesos, y no puede predecir el orden de las filas en el resultado. Esto significa que la agregación es necesaria si hay una necesidad de obtener completamente “collapsed” datos de un `VersionedCollapsingMergeTree` tabla.
Para finalizar el colapso, escriba una consulta con un `GROUP BY` cláusula y funciones agregadas que representan el signo. Por ejemplo, para calcular la cantidad, use `sum(Sign)` es lugar de `count()`. Para calcular la suma de algo, use `sum(Sign * x)` es lugar de `sum(x)` y agregar `HAVING sum(Sign) > 0`. Para finalizar el colapso, escriba una consulta con un `GROUP BY` cláusula y funciones agregadas que representan el signo. Por ejemplo, para calcular la cantidad, use `sum(Sign)` en lugar de `count()`. Para calcular la suma de algo, use `sum(Sign * x)` en lugar de `sum(x)` y agregar `HAVING sum(Sign) > 0`.
Los agregados `count`, `sum` y `avg` se puede calcular de esta manera. El agregado `uniq` se puede calcular si un objeto tiene al menos un estado no colapsado. Los agregados `min` y `max` no se puede calcular porque `VersionedCollapsingMergeTree` no guarda el historial de valores de estados colapsados. Los agregados `count`, `sum` y `avg` se puede calcular de esta manera. El agregado `uniq` se puede calcular si un objeto tiene al menos un estado no colapsado. Los agregados `min` y `max` no se puede calcular porque `VersionedCollapsingMergeTree` no guarda el historial de valores de estados colapsados.
@ -195,7 +198,7 @@ SELECT * FROM UAct
└─────────────────────┴───────────┴──────────┴──────┴─────────┘ └─────────────────────┴───────────┴──────────┴──────┴─────────┘
``` ```
¿Qué vemos aquí y dónde están las partes colapsadas? ¿qué vemos aquí y dónde están las partes colapsadas?
Creamos dos partes de datos usando dos `INSERT` consulta. El `SELECT` la consulta se realizó en dos subprocesos, y el resultado es un orden aleatorio de filas. Creamos dos partes de datos usando dos `INSERT` consulta. El `SELECT` la consulta se realizó en dos subprocesos, y el resultado es un orden aleatorio de filas.
No se produjo el colapso porque las partes de datos aún no se han fusionado. ClickHouse fusiona partes de datos en un punto desconocido en el tiempo que no podemos predecir. No se produjo el colapso porque las partes de datos aún no se han fusionado. ClickHouse fusiona partes de datos en un punto desconocido en el tiempo que no podemos predecir.
@ -232,4 +235,4 @@ SELECT * FROM UAct FINAL
Esta es una forma muy ineficiente de seleccionar datos. No lo use para mesas grandes. Esta es una forma muy ineficiente de seleccionar datos. No lo use para mesas grandes.
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/versionedcollapsingmergetree/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/versionedcollapsingmergetree/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 45
toc_title: "B\xFAfer"
--- ---
# Búfer {#buffer} # Búfer {#buffer}
@ -12,16 +15,16 @@ Buffer(database, table, num_layers, min_time, max_time, min_rows, max_rows, min_
Parámetros del motor: Parámetros del motor:
- `database` Nombre de la base de datos. En lugar del nombre de la base de datos, puede usar una expresión constante que devuelva una cadena. - `database` Database name. Instead of the database name, you can use a constant expression that returns a string.
- `table` Tabla para eliminar los datos. - `table` Table to flush data to.
- `num_layers` Capa de paralelismo. Físicamente, la tabla se representará como `num_layers` de búferes independientes. Valor recomendado: 16. - `num_layers` Parallelism layer. Physically, the table will be represented as `num_layers` de búferes independientes. Valor recomendado: 16.
- `min_time`, `max_time`, `min_rows`, `max_rows`, `min_bytes`, y `max_bytes` Condiciones para el lavado de datos del búfer. - `min_time`, `max_time`, `min_rows`, `max_rows`, `min_bytes`, y `max_bytes` Conditions for flushing data from the buffer.
Los datos se vacían del búfer y se escriben en la tabla de destino si `min*` condiciones o al menos una `max*` condición se cumplen. Los datos se vacían del búfer y se escriben en la tabla de destino si `min*` condiciones o al menos una `max*` condición se cumplen.
- `min_time`, `max_time` Condición para el tiempo en segundos desde el momento de la primera escritura en el búfer. - `min_time`, `max_time` Condition for the time in seconds from the moment of the first write to the buffer.
- `min_rows`, `max_rows` Condición para el número de filas en el búfer. - `min_rows`, `max_rows` Condition for the number of rows in the buffer.
- `min_bytes`, `max_bytes` Condición para el número de bytes en el búfer. - `min_bytes`, `max_bytes` Condition for the number of bytes in the buffer.
Durante la operación de escritura, los datos se insertan en un `num_layers` número de búferes aleatorios. O bien, si la parte de datos para insertar es lo suficientemente grande (mayor que `max_rows` o `max_bytes`), se escribe directamente en la tabla de destino, omitiendo el búfer. Durante la operación de escritura, los datos se insertan en un `num_layers` número de búferes aleatorios. O bien, si la parte de datos para insertar es lo suficientemente grande (mayor que `max_rows` o `max_bytes`), se escribe directamente en la tabla de destino, omitiendo el búfer.
@ -42,7 +45,7 @@ Puede establecer cadenas vacías entre comillas simples para la base de datos y
Al leer desde una tabla de búfer, los datos se procesan tanto desde el búfer como desde la tabla de destino (si hay uno). Al leer desde una tabla de búfer, los datos se procesan tanto desde el búfer como desde la tabla de destino (si hay uno).
Tenga en cuenta que las tablas Buffer no admiten un índice. En otras palabras, los datos del búfer se analizan por completo, lo que puede ser lento para los búferes grandes. (Para los datos de una tabla subordinada, se utilizará el índice que admite.) Tenga en cuenta que las tablas Buffer no admiten un índice. En otras palabras, los datos del búfer se analizan por completo, lo que puede ser lento para los búferes grandes. (Para los datos de una tabla subordinada, se utilizará el índice que admite.)
Si el conjunto de columnas de la tabla Buffer no coinciden con el conjunto de columnas de una tabla subordinada, se inserta un subconjunto de columnas que existen en ambas tablas. Si el conjunto de columnas de la tabla Buffer no coincide con el conjunto de columnas de una tabla subordinada, se inserta un subconjunto de columnas que existen en ambas tablas.
Si los tipos no coinciden con una de las columnas de la tabla Búfer y una tabla subordinada, se escribe un mensaje de error en el registro del servidor y se borra el búfer. Si los tipos no coinciden con una de las columnas de la tabla Búfer y una tabla subordinada, se escribe un mensaje de error en el registro del servidor y se borra el búfer.
Lo mismo sucede si la tabla subordinada no existe cuando se vacía el búfer. Lo mismo sucede si la tabla subordinada no existe cuando se vacía el búfer.
@ -61,8 +64,8 @@ Si se replica la tabla de destino, se pierden algunas características esperadas
Debido a estas desventajas, solo podemos recomendar el uso de una tabla Buffer en casos raros. Debido a estas desventajas, solo podemos recomendar el uso de una tabla Buffer en casos raros.
Una tabla de búfer se utiliza cuando se reciben demasiados INSERT de un gran número de servidores durante una unidad de tiempo y los datos no se pueden almacenar en búfer antes de la inserción, lo que significa que los INSERT no pueden ejecutarse lo suficientemente rápido. Una tabla de búfer se usa cuando se reciben demasiados INSERT de un gran número de servidores durante una unidad de tiempo y los datos no se pueden almacenar en búfer antes de la inserción, lo que significa que los INSERT no pueden ejecutarse lo suficientemente rápido.
Tenga en cuenta que no tiene sentido insertar datos una fila a la vez, incluso para tablas de búfer. Esto solo producirá una velocidad de unos pocos miles de filas por segundo, mientras que la inserción de bloques de datos más grandes puede producir más de un millón de filas por segundo (consulte la sección “Performance”). Tenga en cuenta que no tiene sentido insertar datos una fila a la vez, incluso para las tablas de búfer. Esto solo producirá una velocidad de unos pocos miles de filas por segundo, mientras que la inserción de bloques de datos más grandes puede producir más de un millón de filas por segundo (consulte la sección “Performance”).
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/buffer/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/buffer/) <!--hide-->

View File

@ -1,10 +1,13 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 35
toc_title: Diccionario
--- ---
# Diccionario {#dictionary} # Diccionario {#dictionary}
El `Dictionary` el motor muestra el [Diccionario](../../query_language/dicts/external_dicts.md) datos como una tabla ClickHouse. El `Dictionary` el motor muestra el [diccionario](../../../sql_reference/dictionaries/external_dictionaries/external_dicts.md) datos como una tabla ClickHouse.
Como ejemplo, considere un diccionario de `products` con la siguiente configuración: Como ejemplo, considere un diccionario de `products` con la siguiente configuración:
@ -61,7 +64,7 @@ WHERE name = 'products'
└──────────┴──────┴────────┴─────────────────┴─────────────────┴─────────────────┴───────────────┴─────────────────┘ └──────────┴──────┴────────┴─────────────────┴─────────────────┴─────────────────┴───────────────┴─────────────────┘
``` ```
Puede usar el [dictGet\*](../../query_language/functions/ext_dict_functions.md#ext_dict_functions) función para obtener los datos del diccionario en este formato. Puede usar el [dictGet\*](../../../sql_reference/functions/ext_dict_functions.md#ext_dict_functions) función para obtener los datos del diccionario en este formato.
Esta vista no es útil cuando necesita obtener datos sin procesar o cuando `JOIN` operación. Para estos casos, puede usar el `Dictionary` motor, que muestra los datos del diccionario en una tabla. Esta vista no es útil cuando necesita obtener datos sin procesar o cuando `JOIN` operación. Para estos casos, puede usar el `Dictionary` motor, que muestra los datos del diccionario en una tabla.
@ -91,4 +94,4 @@ select * from products limit 1;
└───────────────┴─────────────────┘ └───────────────┴─────────────────┘
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/dictionary/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/dictionary/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 33
toc_title: Distribuido
--- ---
# Distribuido {#distributed} # Distribuido {#distributed}
@ -22,7 +25,7 @@ El motor distribuido acepta parámetros:
Ver también: Ver también:
- `insert_distributed_sync` configuración - `insert_distributed_sync` configuración
- [Método de codificación de datos:](mergetree.md#table_engine-mergetree-multiple-volumes) para los ejemplos - [Método de codificación de datos:](../mergetree_family/mergetree.md#table_engine-mergetree-multiple-volumes) para los ejemplos
Ejemplo: Ejemplo:
@ -36,7 +39,7 @@ Por ejemplo, para una consulta con GROUP BY, los datos se agregarán en servidor
En lugar del nombre de la base de datos, puede usar una expresión constante que devuelva una cadena. Por ejemplo: currentDatabase(). En lugar del nombre de la base de datos, puede usar una expresión constante que devuelva una cadena. Por ejemplo: currentDatabase().
logs: el nombre del clúster en el archivo de configuración del servidor. logs The cluster name in the server's config file.
Los clústeres se establecen así: Los clústeres se establecen así:
@ -80,15 +83,15 @@ Las réplicas están duplicando servidores (para leer todos los datos, puede acc
Los nombres de clúster no deben contener puntos. Los nombres de clúster no deben contener puntos.
Los parámetros `host`, `port`, y opcionalmente `user`, `password`, `secure`, `compression` Se especifican para cada servidor: Los parámetros `host`, `port`, y opcionalmente `user`, `password`, `secure`, `compression` se especifican para cada servidor:
- `host` La dirección del servidor remoto. Puede utilizar el dominio o la dirección IPv4 o IPv6. Si especifica el dominio, el servidor realiza una solicitud DNS cuando se inicia y el resultado se almacena mientras el servidor se esté ejecutando. Si la solicitud DNS falla, el servidor no se inicia. Si cambia el registro DNS, reinicie el servidor. - `host` The address of the remote server. You can use either the domain or the IPv4 or IPv6 address. If you specify the domain, the server makes a DNS request when it starts, and the result is stored as long as the server is running. If the DNS request fails, the server doesn't start. If you change the DNS record, restart the server.
- `port` El puerto TCP para la actividad de mensajería (tcp\_port en la configuración, generalmente establecido en 9000). No lo confundas con http\_port. - `port` The TCP port for messenger activity (tcp\_port en la configuración, generalmente establecido en 9000). No lo confundas con http\_port.
- `user` Nombre del usuario para conectarse a un servidor remoto. Valor predeterminado: predeterminado. Este usuario debe tener acceso para conectarse al servidor especificado. El acceso se configura en los usuarios.archivo xml. Para obtener más información, consulte la sección [Derechos de acceso](../../operations/access_rights.md). - `user` Name of the user for connecting to a remote server. Default value: default. This user must have access to connect to the specified server. Access is configured in the users.xml file. For more information, see the section [Derechos de acceso](../../../operations/access_rights.md).
- `password` La contraseña para conectarse a un servidor remoto (no enmascarado). Valor predeterminado: cadena vacía. - `password` The password for connecting to a remote server (not masked). Default value: empty string.
- `secure` - Use ssl para la conexión, por lo general también debe definir `port` ¿Por qué? El servidor debe escuchar en <tcp_port_secure>Método de codificación de datos:</tcp_port_secure> y tener certificados correctos. - `secure` - Use ssl para la conexión, por lo general también debe definir `port` = 9440. El servidor debe escuchar en <tcp_port_secure>9440</tcp_port_secure> y tener certificados correctos.
- `compression` - Utilice la compresión de datos. Valor predeterminado: true. - `compression` - Utilice la compresión de datos. Valor predeterminado: true.
Al especificar réplicas, se seleccionará una de las réplicas disponibles para cada uno de los fragmentos al leer. Puede configurar el algoritmo para el equilibrio de carga (la preferencia para qué réplica acceder) [load\_balancing](../settings/settings.md#settings-load_balancing) configuración. When specifying replicas, one of the available replicas will be selected for each of the shards when reading. You can configure the algorithm for load balancing (the preference for which replica to access) see the [load\_balancing](../../../operations/settings/settings.md#settings-load_balancing) configuración.
Si no se establece la conexión con el servidor, habrá un intento de conectarse con un breve tiempo de espera. Si la conexión falla, se seleccionará la siguiente réplica, y así sucesivamente para todas las réplicas. Si el intento de conexión falló para todas las réplicas, el intento se repetirá de la misma manera, varias veces. Si no se establece la conexión con el servidor, habrá un intento de conectarse con un breve tiempo de espera. Si la conexión falla, se seleccionará la siguiente réplica, y así sucesivamente para todas las réplicas. Si el intento de conexión falló para todas las réplicas, el intento se repetirá de la misma manera, varias veces.
Esto funciona a favor de la resiliencia, pero no proporciona una tolerancia completa a errores: un servidor remoto podría aceptar la conexión, pero podría no funcionar o funcionar mal. Esto funciona a favor de la resiliencia, pero no proporciona una tolerancia completa a errores: un servidor remoto podría aceptar la conexión, pero podría no funcionar o funcionar mal.
@ -100,9 +103,7 @@ Para ver los clústeres, utilice el system.clusters tabla.
El motor distribuido permite trabajar con un clúster como un servidor local. Sin embargo, el clúster es inextensible: debe escribir su configuración en el archivo de configuración del servidor (mejor aún, para todos los servidores del clúster). El motor distribuido permite trabajar con un clúster como un servidor local. Sin embargo, el clúster es inextensible: debe escribir su configuración en el archivo de configuración del servidor (mejor aún, para todos los servidores del clúster).
No hay compatibilidad con las tablas distribuidas que miran a otras tablas distribuidas (excepto en los casos en que una tabla distribuida solo tiene un fragmento). Como alternativa, haga que la tabla Distribuida mire el “final” tabla. The Distributed engine requires writing clusters to the config file. Clusters from the config file are updated on the fly, without restarting the server. If you need to send a query to an unknown set of shards and replicas each time, you don't need to create a Distributed table use the remote función de tabla en su lugar. Vea la sección [Funciones de tabla](../../../sql_reference/table_functions/index.md).
El motor distribuido requiere escribir clústeres en el archivo de configuración. Los clústeres del archivo de configuración se actualizan sobre la marcha, sin reiniciar el servidor. Si necesita enviar una consulta a un conjunto desconocido de fragmentos y réplicas cada vez, no necesita crear una tabla remote función de tabla en su lugar. Vea la sección [Funciones de tabla](../../query_language/table_functions/index.md).
Hay dos métodos para escribir datos en un clúster: Hay dos métodos para escribir datos en un clúster:
@ -118,34 +119,34 @@ Si este parámetro se establece en true, la operación de escritura selecc
Si se establece en false (el valor predeterminado), los datos se escriben en todas las réplicas. En esencia, esto significa que la tabla distribuida replica los datos en sí. Esto es peor que usar tablas replicadas, porque no se verifica la consistencia de las réplicas y, con el tiempo, contendrán datos ligeramente diferentes. Si se establece en false (el valor predeterminado), los datos se escriben en todas las réplicas. En esencia, esto significa que la tabla distribuida replica los datos en sí. Esto es peor que usar tablas replicadas, porque no se verifica la consistencia de las réplicas y, con el tiempo, contendrán datos ligeramente diferentes.
Para seleccionar el fragmento al que se envía una fila de datos, se analiza la expresión de fragmentación y su resto se toma de dividirlo por el peso total de los fragmentos. La fila se envía al fragmento que corresponde al medio intervalo de los restos de prev\_weight Naciones prev\_weights + weight, donde prev\_weights es el peso total de los fragmentos con el número más pequeño, y weight es el peso de este fragmento. Por ejemplo, si hay dos fragmentos, y el primero tiene un peso de 9 mientras que el segundo tiene un peso de 10, la fila se enviará al primer fragmento para los restos del rango \[0, 9), y al segundo para los restos del rango \[9, 19). Para seleccionar el fragmento al que se envía una fila de datos, se analiza la expresión de fragmentación y su resto se toma de dividirlo por el peso total de los fragmentos. La fila se envía al fragmento que corresponde al medio intervalo de los restos de prev\_weight a prev\_weights + weight, donde prev\_weights es el peso total de los fragmentos con el número más pequeño, y weight es el peso de este fragmento. Por ejemplo, si hay dos fragmentos, y el primero tiene un peso de 9 mientras que el segundo tiene un peso de 10, la fila se enviará al primer fragmento para los restos del rango \[0, 9), y al segundo para los restos del rango \[9, 19).
La expresión de fragmentación puede ser cualquier expresión de constantes y columnas de tabla que devuelva un entero. Por ejemplo, puede usar la expresión rand() para la distribución aleatoria de datos, o UserID para la distribución por el resto de dividir el ID del usuario (entonces los datos de un solo usuario residirán en un solo fragmento, lo que simplifica la ejecución de IN y JOIN por los usuarios). Si una de las columnas no se distribuye lo suficientemente uniformemente, puede envolverla en una función hash: intHash64(UserID) . La expresión de fragmentación puede ser cualquier expresión de constantes y columnas de tabla que devuelva un entero. Por ejemplo, puede usar la expresión rand() para la distribución aleatoria de datos, o UserID para la distribución por el resto de dividir la ID del usuario (entonces los datos de un solo usuario residirán en un solo fragmento, lo que simplifica la ejecución de IN y JOIN por los usuarios). Si una de las columnas no se distribuye lo suficientemente uniformemente, puede envolverla en una función hash: intHash64(UserID) .
Un simple recordatorio de la división es una solución limitada para la fragmentación y no siempre es apropiado. Funciona para volúmenes medianos y grandes de datos (docenas de servidores), pero no para volúmenes muy grandes de datos (cientos de servidores o más). En este último caso, use el esquema de fragmentación requerido por el área asunto, en lugar de usar entradas en Tablas distribuidas. Un simple recordatorio de la división es una solución limitada para sharding y no siempre es apropiado. Funciona para volúmenes medianos y grandes de datos (docenas de servidores), pero no para volúmenes muy grandes de datos (cientos de servidores o más). En este último caso, use el esquema de fragmentación requerido por el área asunto, en lugar de usar entradas en Tablas distribuidas.
Las consultas SELECT se envían a todos los fragmentos y funcionan independientemente de cómo se distribuyen los datos entre los fragmentos (se pueden distribuir completamente aleatoriamente). Cuando agrega un nuevo fragmento, no tiene que transferirle los datos antiguos. Puede escribir nuevos datos con un peso más pesado: los datos se distribuirán de manera ligeramente desigual, pero las consultas funcionarán correcta y eficientemente. SELECT queries are sent to all the shards and work regardless of how data is distributed across the shards (they can be distributed completely randomly). When you add a new shard, you don't have to transfer the old data to it. You can write new data with a heavier weight the data will be distributed slightly unevenly, but queries will work correctly and efficiently.
Debería preocuparse por el esquema de fragmentación en los siguientes casos: Debería preocuparse por el esquema de fragmentación en los siguientes casos:
- Se utilizan consultas que requieren unir datos (IN o JOIN) mediante una clave específica. Si esta clave fragmenta datos, puede usar IN local o JOIN en lugar de GLOBAL IN o GLOBAL JOIN, que es mucho más eficiente. - Se utilizan consultas que requieren unir datos (IN o JOIN) mediante una clave específica. Si esta clave fragmenta datos, puede usar IN local o JOIN en lugar de GLOBAL IN o GLOBAL JOIN, que es mucho más eficiente.
- Se usa una gran cantidad de servidores (cientos o más) con una gran cantidad de consultas pequeñas (consultas de clientes individuales: sitios web, anunciantes o socios). Para que las pequeñas consultas no afecten a todo el clúster, tiene sentido ubicar datos para un solo cliente en un solo fragmento. Alternativamente, como lo hemos hecho en Yandex.Metrica, puede configurar sharding de dos niveles: divida todo el clúster en “layers”, donde una capa puede consistir en varios fragmentos. Los datos de un único cliente se encuentran en una sola capa, pero los fragmentos se pueden agregar a una capa según sea necesario y los datos se distribuyen aleatoriamente dentro de ellos. Las tablas distribuidas se crean para cada capa y se crea una única tabla distribuida compartida para consultas globales. - Se usa una gran cantidad de servidores (cientos o más) con una gran cantidad de consultas pequeñas (consultas de clientes individuales: sitios web, anunciantes o socios). Para que las pequeñas consultas no afecten a todo el clúster, tiene sentido ubicar datos para un solo cliente en un solo fragmento. Alternativamente, como lo hemos hecho en Yandex.Metrica, puede configurar sharding de dos niveles: divida todo el clúster en “layers”, donde una capa puede consistir en varios fragmentos. Los datos de un único cliente se encuentran en una sola capa, pero los fragmentos se pueden agregar a una capa según sea necesario y los datos se distribuyen aleatoriamente dentro de ellos. Las tablas distribuidas se crean para cada capa y se crea una única tabla distribuida compartida para consultas globales.
Los datos se escriben de forma asíncrona. Cuando se inserta en la tabla, el bloque de datos se acaba de escribir en el sistema de archivos local. Los datos se envían a los servidores remotos en segundo plano tan pronto como sea posible. El período de envío de datos está gestionado por el [Distributed\_directory\_monitor\_sleep\_time\_ms](../settings/settings.md#distributed_directory_monitor_sleep_time_ms) y [Distributed\_directory\_monitor\_max\_sleep\_time\_ms](../settings/settings.md#distributed_directory_monitor_max_sleep_time_ms) configuración. El `Distributed` el motor envía cada archivo con datos insertados por separado, pero puede habilitar el envío por lotes de archivos [distributed\_directory\_monitor\_batch\_inserts](../settings/settings.md#distributed_directory_monitor_batch_inserts) configuración. Esta configuración mejora el rendimiento del clúster al utilizar mejor los recursos de red y servidor local. Debe comprobar si los datos se envían correctamente comprobando la lista de archivos (datos en espera de ser enviados) en el directorio de la tabla: `/var/lib/clickhouse/data/database/table/`. Los datos se escriben de forma asíncrona. Cuando se inserta en la tabla, el bloque de datos se acaba de escribir en el sistema de archivos local. Los datos se envían a los servidores remotos en segundo plano tan pronto como sea posible. El período de envío de datos está gestionado por el [Distributed\_directory\_monitor\_sleep\_time\_ms](../../../operations/settings/settings.md#distributed_directory_monitor_sleep_time_ms) y [Distributed\_directory\_monitor\_max\_sleep\_time\_ms](../../../operations/settings/settings.md#distributed_directory_monitor_max_sleep_time_ms) configuración. El `Distributed` el motor envía cada archivo con datos insertados por separado, pero puede habilitar el envío por lotes de archivos [distributed\_directory\_monitor\_batch\_inserts](../../../operations/settings/settings.md#distributed_directory_monitor_batch_inserts) configuración. Esta configuración mejora el rendimiento del clúster al utilizar mejor los recursos de red y servidor local. Debe comprobar si los datos se envían correctamente comprobando la lista de archivos (datos en espera de ser enviados) en el directorio de la tabla: `/var/lib/clickhouse/data/database/table/`.
Si el servidor dejó de existir o tuvo un reinicio aproximado (por ejemplo, después de un error de dispositivo) después de un INSERT en una tabla distribuida, es posible que se pierdan los datos insertados. Si se detecta un elemento de datos dañado en el directorio de la tabla, se transfiere al broken subdirectorio y ya no se utiliza. Si el servidor dejó de existir o tuvo un reinicio aproximado (por ejemplo, después de un error de dispositivo) después de un INSERT en una tabla distribuida, es posible que se pierdan los datos insertados. Si se detecta un elemento de datos dañado en el directorio de la tabla, se transfiere al broken subdirectorio y ya no se utiliza.
Cuando la opción max\_parallel\_replicas está habilitada, el procesamiento de consultas se paralela en todas las réplicas dentro de un solo fragmento. Para obtener más información, consulte la sección [max\_parallel\_replicas](../settings/settings.md#settings-max_parallel_replicas). Cuando la opción max\_parallel\_replicas está habilitada, el procesamiento de consultas se paralela en todas las réplicas dentro de un solo fragmento. Para obtener más información, consulte la sección [max\_parallel\_replicas](../../../operations/settings/settings.md#settings-max_parallel_replicas).
## Columnas virtuales {#virtual-columns} ## Virtual Columnas {#virtual-columns}
- `_shard_num` — Contiene el `shard_num` (de `system.clusters`). Tipo: [UInt32](../../data_types/int_uint.md). - `_shard_num` — Contains the `shard_num` (de `system.clusters`). Tipo: [UInt32](../../../sql_reference/data_types/int_uint.md).
!!! note "Nota" !!! note "Nota"
Ya [`remote`](../../query_language/table_functions/remote.md)/`cluster` funciones de tabla crean internamente instancia temporal del mismo motor distribuido, `_shard_num` está disponible allí también. Ya [`remote`](../../../sql_reference/table_functions/remote.md)/`cluster` funciones de tabla crean internamente instancia temporal del mismo motor distribuido, `_shard_num` está disponible allí también.
**Ver también** **Ver también**
- [Columnas virtuales](index.md#table_engines-virtual_columns) - [Virtual columnas](index.md#table_engines-virtual_columns)
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/distributed/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/distributed/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 34
toc_title: Datos externos
--- ---
# Datos externos para el procesamiento de consultas {#external-data-for-query-processing} # Datos externos para el procesamiento de consultas {#external-data-for-query-processing}
@ -20,15 +23,15 @@ En el cliente de línea de comandos, puede especificar una sección de parámetr
Puede tener varias secciones como esta, para el número de tablas que se transmiten. Puede tener varias secciones como esta, para el número de tablas que se transmiten.
**externo** Marca el comienzo de una cláusula. **external** Marks the beginning of a clause.
**file** Ruta al archivo con el volcado de tabla, o -, que hace referencia a stdin. **file** Path to the file with the table dump, or -, which refers to stdin.
Solo se puede recuperar una sola tabla de stdin. Solo se puede recuperar una sola tabla de stdin.
Los siguientes parámetros son opcionales: **nombre** Nombre de la tabla. Si se omite, se utiliza \_data. Los siguientes parámetros son opcionales: **name** Name of the table. If omitted, \_data is used.
**formato** Formato de datos en el archivo. Si se omite, se utiliza TabSeparated. **format** Data format in the file. If omitted, TabSeparated is used.
Se requiere uno de los siguientes parámetros:**tipo** Una lista de tipos de columnas separadas por comas. Por ejemplo: `UInt64,String`. Las columnas se llamarán \_1, \_2, … Se requiere uno de los siguientes parámetros:**types** A list of comma-separated column types. For example: `UInt64,String`. The columns will be named \_1, \_2, …
**estructura** La estructura de la tabla en el formato`UserID UInt64`, `URL String`. Definir los nombres y tipos de columna. **structure** The table structure in the format`UserID UInt64`, `URL String`. Define los nombres y tipos de columna.
Los archivos especificados en file se analizará mediante el formato especificado en format utilizando los tipos de datos especificados en types o structure. La mesa será cargado en el servidor y accesibles, como una tabla temporal con el nombre de name. Los archivos especificados en file se analizará mediante el formato especificado en format utilizando los tipos de datos especificados en types o structure. La mesa será cargado en el servidor y accesibles, como una tabla temporal con el nombre de name.
@ -62,4 +65,4 @@ $ curl -F 'passwd=@passwd.tsv;' 'http://localhost:8123/?query=SELECT+shell,+coun
Para el procesamiento de consultas distribuidas, las tablas temporales se envían a todos los servidores remotos. Para el procesamiento de consultas distribuidas, las tablas temporales se envían a todos los servidores remotos.
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/external_data/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/external_data/) <!--hide-->

View File

@ -1,11 +1,14 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 37
toc_title: File
--- ---
# File {#table_engines-file} # File {#table_engines-file}
El motor de tabla de archivos mantiene los datos en un archivo en uno de los [file El motor de tabla de archivos mantiene los datos en un archivo en uno de los [file
Formato](../../interfaces/formats.md#formats) (TabSeparated, Native, etc.). formato](../../../interfaces/formats.md#formats) (TabSeparated, Native, etc.).
Ejemplos de uso: Ejemplos de uso:
@ -13,7 +16,7 @@ Ejemplos de uso:
- Convertir datos de un formato a otro. - Convertir datos de un formato a otro.
- Actualización de datos en ClickHouse mediante la edición de un archivo en un disco. - Actualización de datos en ClickHouse mediante la edición de un archivo en un disco.
## Uso en el servidor ClickHouse {#usage-in-clickhouse-server} ## Uso en el servidor de Clickhouse {#usage-in-clickhouse-server}
``` sql ``` sql
File(Format) File(Format)
@ -21,14 +24,14 @@ File(Format)
El `Format` parámetro especifica uno de los formatos de archivo disponibles. Realizar El `Format` parámetro especifica uno de los formatos de archivo disponibles. Realizar
`SELECT` consultas, el formato debe ser compatible para la entrada, y para realizar `SELECT` consultas, el formato debe ser compatible para la entrada, y para realizar
`INSERT` consultas para la salida. Los formatos disponibles se enumeran en el `INSERT` queries for output. The available formats are listed in the
[Formato](../../interfaces/formats.md#formats) apartado. [Formato](../../../interfaces/formats.md#formats) apartado.
ClickHouse no permite especificar la ruta del sistema de archivos para`File`. Utilizará la carpeta definida por [camino](../server_settings/settings.md) configuración en la configuración del servidor. ClickHouse no permite especificar la ruta del sistema de archivos para`File`. Utilizará la carpeta definida por [camino](../../../operations/server_configuration_parameters/settings.md) configuración en la configuración del servidor.
Al crear una tabla usando `File(Format)` crea un subdirectorio vacío en esa carpeta. Cuando los datos se escriben en esa tabla, se colocan en `data.Format` en ese subdirectorio. Al crear una tabla usando `File(Format)` crea un subdirectorio vacío en esa carpeta. Cuando los datos se escriben en esa tabla, se colocan en `data.Format` en ese subdirectorio.
Puede crear manualmente esta subcarpeta y archivo en el sistema de archivos del servidor y luego [CONECTAR](../../query_language/misc.md) para mostrar información con el nombre coincidente, para que pueda consultar datos desde ese archivo. Puede crear manualmente esta subcarpeta y archivo en el sistema de archivos del servidor y luego [ATTACH](../../../sql_reference/statements/misc.md) para mostrar información con el nombre coincidente, para que pueda consultar datos desde ese archivo.
!!! warning "Advertencia" !!! warning "Advertencia"
Tenga cuidado con esta funcionalidad, ya que ClickHouse no realiza un seguimiento de los cambios externos en dichos archivos. El resultado de las escrituras simultáneas a través de ClickHouse y fuera de ClickHouse no está definido. Tenga cuidado con esta funcionalidad, ya que ClickHouse no realiza un seguimiento de los cambios externos en dichos archivos. El resultado de las escrituras simultáneas a través de ClickHouse y fuera de ClickHouse no está definido.
@ -64,9 +67,9 @@ SELECT * FROM file_engine_table
└──────┴───────┘ └──────┴───────┘
``` ```
## Uso es Clickhouse-local {#usage-in-clickhouse-local} ## Uso en Clickhouse-local {#usage-in-clickhouse-local}
En [Sistema abierto.](../utils/clickhouse-local.md) El motor de archivos acepta la ruta del archivo además de `Format`. Los flujos de entrada / salida predeterminados se pueden especificar utilizando nombres numéricos o legibles por humanos como `0` o `stdin`, `1` o `stdout`. En [Sistema abierto.](../../../operations/utilities/clickhouse-local.md) El motor de archivos acepta la ruta del archivo además de `Format`. Los flujos de entrada / salida predeterminados se pueden especificar utilizando nombres numéricos o legibles por humanos como `0` o `stdin`, `1` o `stdout`.
**Ejemplo:** **Ejemplo:**
``` bash ``` bash
@ -84,4 +87,4 @@ $ echo -e "1,2\n3,4" | clickhouse-local -q "CREATE TABLE table (a Int64, b Int64
- Indice - Indice
- Replicación - Replicación
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/file/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/file/) <!--hide-->

View File

@ -1,8 +1,11 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 46
toc_title: GenerateRandom
--- ---
# GenerateRandom {#table_engines-generate} # Generaterandom {#table_engines-generate}
El motor de tabla GenerateRandom produce datos aleatorios para el esquema de tabla determinado. El motor de tabla GenerateRandom produce datos aleatorios para el esquema de tabla determinado.
@ -11,7 +14,7 @@ Ejemplos de uso:
- Se usa en la prueba para poblar una tabla grande reproducible. - Se usa en la prueba para poblar una tabla grande reproducible.
- Generar entrada aleatoria para pruebas de fuzzing. - Generar entrada aleatoria para pruebas de fuzzing.
## Uso en el servidor ClickHouse {#usage-in-clickhouse-server} ## Uso en el servidor de Clickhouse {#usage-in-clickhouse-server}
``` sql ``` sql
ENGINE = GenerateRandom(random_seed, max_string_length, max_array_length) ENGINE = GenerateRandom(random_seed, max_string_length, max_array_length)
@ -22,7 +25,7 @@ columnas y cadenas de matriz correspondientemente en los datos generados.
Generar motor de tabla sólo admite `SELECT` consulta. Generar motor de tabla sólo admite `SELECT` consulta.
Es compatible con todos [Tipos de datos](../../data_types/index.md) que se pueden almacenar en una tabla excepto `LowCardinality` y `AggregateFunction`. Es compatible con todos [Tipos de datos](../../../sql_reference/data_types/index.md) que se pueden almacenar en una tabla excepto `LowCardinality` y `AggregateFunction`.
**Ejemplo:** **Ejemplo:**
@ -55,4 +58,4 @@ SELECT * FROM generate_engine_table LIMIT 3
- Indice - Indice
- Replicación - Replicación
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/generate/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/generate/) <!--hide-->

View File

@ -0,0 +1,8 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Special
toc_priority: 31
---

View File

@ -1,10 +1,13 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 40
toc_title: Unir
--- ---
# Unir {#join} # Unir {#join}
Estructura de datos preparada para usar en [UNIR](../../query_language/select.md#select-join) operación. Estructura de datos preparada para usar en [JOIN](../../../sql_reference/statements/select.md#select-join) operación.
## Creación de una tabla {#creating-a-table} ## Creación de una tabla {#creating-a-table}
@ -16,15 +19,15 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
) ENGINE = Join(join_strictness, join_type, k1[, k2, ...]) ) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])
``` ```
Vea la descripción detallada del [CREAR TABLA](../../query_language/create.md#create-table-query) consulta. Vea la descripción detallada del [CREATE TABLE](../../../sql_reference/statements/create.md#create-table-query) consulta.
**Parámetros del motor** **Parámetros del motor**
- `join_strictness` [ÚNETE a la rigurosidad](../../query_language/select.md#select-join-strictness). - `join_strictness` [ÚNETE a la rigurosidad](../../../sql_reference/statements/select.md#select-join-strictness).
- `join_type` [Tipo de unión](../../query_language/select.md#select-join-types). - `join_type` [Tipo de unión](../../../sql_reference/statements/select.md#select-join-types).
- `k1[, k2, ...]` Columnas clave de la `USING` cláusula que el `JOIN` operación se hace con. - `k1[, k2, ...]` Key columns from the `USING` cláusula que el `JOIN` operación se hace con.
Entrar `join_strictness` y `join_type` parámetros sin comillas, por ejemplo, `Join(ANY, LEFT, col1)`. Deben coincidir con el `JOIN` operación para la que se utilizará la tabla. Si los parámetros no coinciden, ClickHouse no produce una excepción y puede devolver datos incorrectos. Entrar `join_strictness` y `join_type` parámetros sin comillas, por ejemplo, `Join(ANY, LEFT, col1)`. Deben coincidir con el `JOIN` operación para la que se utilizará la tabla. Si los parámetros no coinciden, ClickHouse no lanza una excepción y puede devolver datos incorrectos.
## Uso de la tabla {#table-usage} ## Uso de la tabla {#table-usage}
@ -78,26 +81,26 @@ SELECT joinGet('id_val_join', 'val', toUInt32(1))
### Selección e inserción de datos {#selecting-and-inserting-data} ### Selección e inserción de datos {#selecting-and-inserting-data}
Usted puede utilizar `INSERT` Consultas para agregar datos al `Join`-mesas de motor. Si la tabla se creó con el `ANY` estricta, se ignoran los datos de las claves duplicadas. Con el `ALL` estricta, se agregan todas las filas. Usted puede utilizar `INSERT` consultas para agregar datos al `Join`-mesas de motor. Si la tabla se creó con el `ANY` estricta, se ignoran los datos de las claves duplicadas. Con el `ALL` estricta, se agregan todas las filas.
No se puede realizar una `SELECT` consulta directamente desde la tabla. En su lugar, use uno de los siguientes métodos: No se puede realizar una `SELECT` consulta directamente desde la tabla. En su lugar, use uno de los siguientes métodos:
- Coloque la mesa hacia el lado derecho en un `JOIN` clausula. - Coloque la mesa hacia el lado derecho en un `JOIN` clausula.
- Llame al [joinGet](../../query_language/functions/other_functions.md#joinget) función, que le permite extraer datos de la tabla de la misma manera que de un diccionario. - Llame al [joinGet](../../../sql_reference/functions/other_functions.md#joinget) función, que le permite extraer datos de la tabla de la misma manera que de un diccionario.
### Limitaciones y ajustes {#join-limitations-and-settings} ### Limitaciones y ajustes {#join-limitations-and-settings}
Al crear una tabla, se aplican los siguientes valores: Al crear una tabla, se aplican los siguientes valores:
- [Sistema abierto.](../settings/settings.md#join_use_nulls) - [Sistema abierto.](../../../operations/settings/settings.md#join_use_nulls)
- [Método de codificación de datos:](../settings/query_complexity.md#settings-max_rows_in_join) - [Método de codificación de datos:](../../../operations/settings/query_complexity.md#settings-max_rows_in_join)
- [Método de codificación de datos:](../settings/query_complexity.md#settings-max_bytes_in_join) - [Método de codificación de datos:](../../../operations/settings/query_complexity.md#settings-max_bytes_in_join)
- [join\_overflow\_mode](../settings/query_complexity.md#settings-join_overflow_mode) - [join\_overflow\_mode](../../../operations/settings/query_complexity.md#settings-join_overflow_mode)
- [join\_any\_take\_last\_row](../settings/settings.md#settings-join_any_take_last_row) - [join\_any\_take\_last\_row](../../../operations/settings/settings.md#settings-join_any_take_last_row)
El `Join`-las tablas del motor no se pueden utilizar adentro `GLOBAL JOIN` operación. El `Join`-las tablas del motor no se pueden usar en `GLOBAL JOIN` operación.
El `Join`-motor permite el uso [Sistema abierto.](../settings/settings.md#join_use_nulls) ajuste en el `CREATE TABLE` instrucción. Y [SELECCIONAR](../../query_language/select.md) Consulta permite el uso `join_use_nulls` demasiado. Si tienes diferentes `join_use_nulls` configuración, puede obtener un error al unirse a la tabla. Depende del tipo de JOIN. Cuando se utiliza [joinGet](../../query_language/functions/other_functions.md#joinget) función, usted tiene que utilizar el mismo `join_use_nulls` ajuste en `CRATE TABLE` y `SELECT` instrucción. El `Join`-motor permite el uso [Sistema abierto.](../../../operations/settings/settings.md#join_use_nulls) ajuste en el `CREATE TABLE` instrucción. Y [SELECT](../../../sql_reference/statements/select.md) consulta permite el uso `join_use_nulls` demasiado. Si tienes diferentes `join_use_nulls` configuración, puede obtener un error al unirse a la tabla. Depende del tipo de JOIN. Cuando se utiliza [joinGet](../../../sql_reference/functions/other_functions.md#joinget) función, usted tiene que utilizar el mismo `join_use_nulls` ajuste en `CRATE TABLE` y `SELECT` instrucción.
## Almacenamiento de datos {#data-storage} ## Almacenamiento de datos {#data-storage}
@ -105,4 +108,4 @@ El `Join`-motor permite el uso [Sistema abierto.](../settings/settings.md#join_u
Si el servidor se reinicia incorrectamente, el bloque de datos en el disco puede perderse o dañarse. En este caso, es posible que deba eliminar manualmente el archivo con datos dañados. Si el servidor se reinicia incorrectamente, el bloque de datos en el disco puede perderse o dañarse. En este caso, es posible que deba eliminar manualmente el archivo con datos dañados.
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/join/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/join/) <!--hide-->

View File

@ -0,0 +1,12 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 43
toc_title: "M\xE9todo de codificaci\xF3n de datos:"
---
# Método de codificación de datos: {#materializedview}
Se utiliza para implementar vistas materializadas (para obtener más información, consulte [CREATE TABLE](../../../sql_reference/statements/create.md)). Para almacenar datos, utiliza un motor diferente que se especificó al crear la vista. Al leer desde una tabla, solo usa este motor.
[Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/materializedview/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 44
toc_title: Memoria
--- ---
# Memoria {#memory} # Memoria {#memory}
@ -13,4 +16,4 @@ Normalmente, el uso de este motor de tabla no está justificado. Sin embargo, se
El sistema utiliza el motor de memoria para tablas temporales con datos de consulta externos (consulte la sección “External data for processing a query”), y para la implementación de GLOBAL IN (véase la sección “IN operators”). El sistema utiliza el motor de memoria para tablas temporales con datos de consulta externos (consulte la sección “External data for processing a query”), y para la implementación de GLOBAL IN (véase la sección “IN operators”).
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/memory/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/memory/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 36
toc_title: Fusionar
--- ---
# Fusionar {#merge} # Fusionar {#merge}
@ -18,17 +21,17 @@ Los datos se leerán de las tablas en el `hits` base de datos que tienen nombres
En lugar del nombre de la base de datos, puede usar una expresión constante que devuelva una cadena. Por ejemplo, `currentDatabase()`. En lugar del nombre de la base de datos, puede usar una expresión constante que devuelva una cadena. Por ejemplo, `currentDatabase()`.
Expresiones regulares — [Re2](https://github.com/google/re2) (soporta un subconjunto de PCRE), sensible a mayúsculas y minúsculas. Regular expressions — [Re2](https://github.com/google/re2) (soporta un subconjunto de PCRE), sensible a mayúsculas y minúsculas.
Vea las notas sobre los símbolos de escape en expresiones regulares en el “match” apartado. Vea las notas sobre los símbolos de escape en expresiones regulares en el “match” apartado.
Al seleccionar tablas para leer, el `Merge` no se seleccionará la tabla en sí, incluso si coincide con la expresión regular. Esto es para evitar bucles. Al seleccionar tablas para leer, el `Merge` no se seleccionará la tabla en sí, incluso si coincide con la expresión regular. Esto es para evitar bucles.
Es posible crear dos `Merge` tablas que intentarán sin cesar leer los datos de los demás, pero esta no es una buena idea. Es posible crear dos `Merge` tablas que intentarán interminablemente leer los datos de los demás, pero esta no es una buena idea.
La forma típica de usar el `Merge` para trabajar con un gran número de `TinyLog` tablas como si con una sola tabla. La forma típica de usar el `Merge` para trabajar con un gran número de `TinyLog` tablas como si con una sola tabla.
Ejemplo 2: Ejemplo 2:
Supongamos que tiene una tabla antigua (WatchLog\_old) y decidió cambiar la partición sin mover los datos a una nueva tabla (WatchLog\_new) y necesita ver los datos de ambas tablas. Digamos que tiene una tabla antigua (WatchLog\_old) y decidió cambiar la partición sin mover datos a una nueva tabla (WatchLog\_new) y necesita ver datos de ambas tablas.
``` sql ``` sql
CREATE TABLE WatchLog_old(date Date, UserId Int64, EventType String, Cnt UInt64) CREATE TABLE WatchLog_old(date Date, UserId Int64, EventType String, Cnt UInt64)
@ -54,14 +57,14 @@ FROM WatchLog
└────────────┴────────┴───────────┴─────┘ └────────────┴────────┴───────────┴─────┘
``` ```
## Columnas virtuales {#virtual-columns} ## Virtual Columnas {#virtual-columns}
- `_table` — Contiene el nombre de la tabla de la que se leyeron los datos. Tipo: [Cadena](../../data_types/string.md). - `_table` — Contains the name of the table from which data was read. Type: [Cadena](../../../sql_reference/data_types/string.md).
Puede establecer las condiciones constantes en `_table` es el `WHERE/PREWHERE` cláusula (por ejemplo, `WHERE _table='xyz'`). En este caso, la operación de lectura se realiza sólo para las tablas donde la condición en `_table` está satisfecho, por lo que el `_table` columna actúa como un índice. Puede establecer las condiciones constantes en `_table` en el `WHERE/PREWHERE` cláusula (por ejemplo, `WHERE _table='xyz'`). En este caso, la operación de lectura se realiza sólo para las tablas donde la condición en `_table` está satisfecho, por lo que el `_table` columna actúa como un índice.
**Ver también** **Ver también**
- [Columnas virtuales](index.md#table_engines-virtual_columns) - [Virtual columnas](index.md#table_engines-virtual_columns)
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/merge/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/merge/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 38
toc_title: Nulo
--- ---
# Nulo {#null} # Nulo {#null}
@ -8,4 +11,4 @@ Al escribir en una tabla Null, los datos se ignoran. Al leer desde una tabla Nul
Sin embargo, puede crear una vista materializada en una tabla Null. Entonces los datos escritos en la tabla terminarán en la vista. Sin embargo, puede crear una vista materializada en una tabla Null. Entonces los datos escritos en la tabla terminarán en la vista.
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/null/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/null/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 39
toc_title: Establecer
--- ---
# Establecer {#set} # Establecer {#set}
@ -13,4 +16,4 @@ Los datos siempre se encuentran en la memoria RAM. Para INSERT, los bloques de d
Para un reinicio aproximado del servidor, el bloque de datos en el disco puede perderse o dañarse. En este último caso, es posible que deba eliminar manualmente el archivo con datos dañados. Para un reinicio aproximado del servidor, el bloque de datos en el disco puede perderse o dañarse. En este último caso, es posible que deba eliminar manualmente el archivo con datos dañados.
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/set/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/set/) <!--hide-->

View File

@ -1,27 +1,30 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 41
toc_title: URL
--- ---
# Nombre de la red inalámbrica (SSID):) {#table_engines-url} # URL(URL, Formato) {#table_engines-url}
Administra datos en un servidor HTTP/HTTPS remoto. Este motor es similar Administra datos en un servidor HTTP/HTTPS remoto. Este motor es similar
Angeles [File](file.md) motor. a la [File](file.md) motor.
## Uso del motor en el servidor ClickHouse {#using-the-engine-in-the-clickhouse-server} ## Uso del motor en el servidor de Clickhouse {#using-the-engine-in-the-clickhouse-server}
El `format` debe ser uno que ClickHouse pueda usar en El `format` debe ser uno que ClickHouse pueda usar en
`SELECT` consultas y, si es necesario, en `INSERTs`. Para obtener la lista completa de formatos admitidos, consulte `SELECT` consultas y, si es necesario, en `INSERTs`. Para obtener la lista completa de formatos admitidos, consulte
[Formato](../../interfaces/formats.md#formats). [Formato](../../../interfaces/formats.md#formats).
El `URL` debe ajustarse a la estructura de un localizador uniforme de recursos. La dirección URL especificada debe apuntar a un servidor El `URL` debe ajustarse a la estructura de un localizador uniforme de recursos. La dirección URL especificada debe apuntar a un servidor
que utiliza HTTP o HTTPS. Esto no requiere ningún que utiliza HTTP o HTTPS. Esto no requiere ningún
encabezados adicionales para obtener una respuesta del servidor. encabezados adicionales para obtener una respuesta del servidor.
`INSERT` y `SELECT` las consultas se transforman en `POST` y `GET` Peticiones, `INSERT` y `SELECT` las consultas se transforman en `POST` y `GET` peticiones,
Respectivamente. Para el procesamiento `POST` solicitudes, el servidor remoto debe admitir respectivamente. Para el procesamiento `POST` solicitudes, el servidor remoto debe admitir
[Codificación de transferencia fragmentada](https://en.wikipedia.org/wiki/Chunked_transfer_encoding). [Codificación de transferencia fragmentada](https://en.wikipedia.org/wiki/Chunked_transfer_encoding).
Puede limitar el número máximo de saltos de redirección HTTP GET utilizando el [Nombre de la red inalámbrica (SSID):](../settings/settings.md#setting-max_http_get_redirects) configuración. Puede limitar el número máximo de saltos de redirección HTTP GET utilizando el [Nombre de la red inalámbrica (SSID):](../../../operations/settings/settings.md#setting-max_http_get_redirects) configuración.
**Ejemplo:** **Ejemplo:**
@ -76,4 +79,4 @@ SELECT * FROM url_engine_table
- Índices. - Índices.
- Replicación. - Replicación.
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/url/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/url/) <!--hide-->

View File

@ -1,9 +1,12 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 42
toc_title: Vista
--- ---
# Vista {#table_engines-view} # Vista {#table_engines-view}
Se utiliza para implementar vistas (para obtener más información, consulte `CREATE VIEW query`). No almacena datos, pero solo almacena los datos especificados `SELECT` consulta. Al leer desde una tabla, ejecuta esta consulta (y elimina todas las columnas innecesarias de la consulta). Se utiliza para implementar vistas (para obtener más información, consulte `CREATE VIEW query`). No almacena datos, pero solo almacena los datos especificados `SELECT` consulta. Al leer desde una tabla, ejecuta esta consulta (y elimina todas las columnas innecesarias de la consulta).
[Artículo Original](https://clickhouse.tech/docs/es/operations/table_engines/view/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/table_engines/view/) <!--hide-->

View File

@ -1,18 +1,21 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 78
toc_title: Preguntas generales
--- ---
# Preguntas generales {#general-questions} # Preguntas generales {#general-questions}
## ¿Por qué no usar algo como MapReduce? {#why-not-use-something-like-mapreduce} ## ¿por qué no usar algo como mapreduce? {#why-not-use-something-like-mapreduce}
Podemos referirnos a sistemas como MapReduce como sistemas informáticos distribuidos en los que la operación de reducción se basa en la clasificación distribuida. La solución de código abierto más común en esta clase es [Acerca de nosotros](http://hadoop.apache.org). Yandex utiliza su solución interna, YT. Podemos referirnos a sistemas como MapReduce como sistemas informáticos distribuidos en los que la operación de reducción se basa en la clasificación distribuida. La solución de código abierto más común en esta clase es [Acerca de nosotros](http://hadoop.apache.org). Yandex utiliza su solución interna, YT.
Estos sistemas no son apropiados para consultas en línea debido a su alta latencia. En otras palabras, no se pueden usar como back-end para una interfaz web. Estos tipos de sistemas no son útiles para actualizaciones de datos en tiempo real. La clasificación distribuida no es la mejor manera de realizar operaciones de reducción si el resultado de la operación y todos los resultados intermedios (si los hay) se encuentran en la RAM de un único servidor, que suele ser el caso para las consultas en línea. En tal caso, una tabla hash es una forma óptima de realizar operaciones de reducción. Un enfoque común para optimizar las tareas de reducción de mapas es la preagregación (reducción parcial) utilizando una tabla hash en RAM. El usuario realiza esta optimización manualmente. La clasificación distribuida es una de las principales causas de un rendimiento reducido cuando se ejecutan tareas simples de reducción de mapas. Estos sistemas no son apropiados para consultas en línea debido a su alta latencia. En otras palabras, no se pueden usar como back-end para una interfaz web. Estos tipos de sistemas no son útiles para actualizaciones de datos en tiempo real. La clasificación distribuida no es la mejor manera de realizar operaciones de reducción si el resultado de la operación y todos los resultados intermedios (si los hay) se encuentran en la RAM de un único servidor, que generalmente es el caso de las consultas en línea. En tal caso, una tabla hash es una forma óptima de realizar operaciones de reducción. Un enfoque común para optimizar las tareas de reducción de mapas es la preagregación (reducción parcial) utilizando una tabla hash en RAM. El usuario realiza esta optimización manualmente. La clasificación distribuida es una de las principales causas de un rendimiento reducido cuando se ejecutan tareas simples de reducción de mapas.
La mayoría de las implementaciones de MapReduce le permiten ejecutar código arbitrario en un clúster. Pero un lenguaje de consulta declarativo es más adecuado para OLAP para ejecutar experimentos rápidamente. Por ejemplo, Hadoop tiene Hive y Pig. También considere Cloudera Impala o Shark (obsoleto) para Spark, así como Spark SQL, Presto y Apache Drill. El rendimiento cuando se ejecutan tales tareas es muy subóptimo en comparación con los sistemas especializados, pero la latencia relativamente alta hace que sea poco realista utilizar estos sistemas como back-end para una interfaz web. La mayoría de las implementaciones de MapReduce le permiten ejecutar código arbitrario en un clúster. Pero un lenguaje de consulta declarativo es más adecuado para OLAP para ejecutar experimentos rápidamente. Por ejemplo, Hadoop tiene Hive y Pig. También considere Cloudera Impala o Shark (obsoleto) para Spark, así como Spark SQL, Presto y Apache Drill. El rendimiento cuando se ejecutan tales tareas es muy subóptimo en comparación con los sistemas especializados, pero la latencia relativamente alta hace que sea poco realista utilizar estos sistemas como back-end para una interfaz web.
## ¿Qué sucede si tengo un problema con las codificaciones al usar Oracle a través de ODBC? {#oracle-odbc-encodings} ## ¿qué sucede si tengo un problema con las codificaciones al usar oracle a través de odbc? {#oracle-odbc-encodings}
Si utiliza Oracle a través del controlador ODBC como fuente de diccionarios externos, debe establecer el valor `NLS_LANG` variable de entorno en `/etc/default/clickhouse`. Para obtener más información, consulte [Oracle NLS\_LANG Preguntas frecuentes](https://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html). Si utiliza Oracle a través del controlador ODBC como fuente de diccionarios externos, debe establecer el valor `NLS_LANG` variable de entorno en `/etc/default/clickhouse`. Para obtener más información, consulte [Oracle NLS\_LANG Preguntas frecuentes](https://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html).
@ -34,7 +37,7 @@ Por ejemplo:
SELECT * FROM table INTO OUTFILE 'file' SELECT * FROM table INTO OUTFILE 'file'
``` ```
De forma predeterminada, ClickHouse usa el [TabSeparated](../interfaces/formats.md#tabseparated) formato de datos de salida. Para seleccionar el [Formato de datos](../interfaces/formats.md), utilizar el [Cláusula FORMAT](../query_language/select/#format-clause). De forma predeterminada, ClickHouse usa el [TabSeparated](../interfaces/formats.md#tabseparated) formato de datos de salida. Para seleccionar el [formato de datos](../interfaces/formats.md), utilizar el [Cláusula FORMAT](../query_language/select/#format-clause).
Por ejemplo: Por ejemplo:
@ -44,7 +47,7 @@ SELECT * FROM table INTO OUTFILE 'file' FORMAT CSV
### Uso de una tabla de motor de archivo {#using-a-file-engine-table} ### Uso de una tabla de motor de archivo {#using-a-file-engine-table}
Ver [File](../operations/table_engines/file.md). Ver [File](../engines/table_engines/special/file.md).
### Uso de la redirección de línea de comandos {#using-command-line-redirection} ### Uso de la redirección de línea de comandos {#using-command-line-redirection}
@ -54,4 +57,4 @@ $ clickhouse-client --query "SELECT * from table" --format FormatName > result.t
Ver [Casa de clics-cliente](../interfaces/cli.md). Ver [Casa de clics-cliente](../interfaces/cli.md).
[Artículo Original](https://clickhouse.tech/docs/es/faq/general/) <!--hide--> {## [Artículo Original](https://clickhouse.tech/docs/en/faq/general/) ##}

8
docs/es/faq/index.md Normal file
View File

@ -0,0 +1,8 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: F.A.Q.
toc_priority: 76
---

View File

@ -1,12 +1,15 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 17
toc_title: Referencia de Big Data de AMPLab
--- ---
# Referencia de Big Data de AMPLab {#amplab-big-data-benchmark} # Referencia de Big Data de AMPLab {#amplab-big-data-benchmark}
Ver https://amplab.cs.berkeley.edu/benchmark/ Ver https://amplab.cs.berkeley.edu/benchmark/
Regístrese para obtener una cuenta gratuita en https://aws.amazon.com. Necesitará una tarjeta de crédito, correo electrónico y número de teléfono. Obtenga una nueva clave de acceso en https://console.aws.amazon.com/iam/home?nc2=h\_m\_sc\#security\_credential Regístrese para obtener una cuenta gratuita en https://aws.amazon.com. Requiere una tarjeta de crédito, correo electrónico y número de teléfono. Obtenga una nueva clave de acceso en https://console.aws.amazon.com/iam/home?nc2=h\_m\_sc\#security\_credential
Ejecute lo siguiente en la consola: Ejecute lo siguiente en la consola:
@ -123,4 +126,4 @@ ORDER BY totalRevenue DESC
LIMIT 1 LIMIT 1
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/getting_started/example_datasets/amplab_benchmark/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/amplab_benchmark/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 19
toc_title: Registros de clics de Terabyte de Criteo
--- ---
# Terabyte de registros de clics de Criteo {#terabyte-of-click-logs-from-criteo} # Terabyte de registros de clics de Criteo {#terabyte-of-click-logs-from-criteo}
@ -75,4 +78,4 @@ INSERT INTO criteo SELECT date, clicked, int1, int2, int3, int4, int5, int6, int
DROP TABLE criteo_log; DROP TABLE criteo_log;
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/getting_started/example_datasets/criteo/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/criteo/) <!--hide-->

View File

@ -1 +0,0 @@
../../../en/getting_started/example_datasets/index.md

View File

@ -0,0 +1,22 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Example Datasets
toc_priority: 12
toc_title: "Implantaci\xF3n"
---
# Datos De Ejemplo {#example-datasets}
En esta sección se describe cómo obtener conjuntos de datos de ejemplo e importarlos a ClickHouse.
Para algunos conjuntos de datos también están disponibles consultas de ejemplo.
- [Yandex anonimizado.Conjunto de datos de Metrica](metrica.md)
- [Estrella Schema Benchmark](star_schema.md)
- [Nombre de la red inalámbrica (SSID):](wikistat.md)
- [Terabyte de registros de clics de Criteo](criteo.md)
- [Referencia de Big Data de AMPLab](amplab_benchmark.md)
- [Datos de taxis de Nueva York](nyc_taxi.md)
- [A tiempo](ontime.md)
[Artículo Original](https://clickhouse.tech/docs/en/getting_started/example_datasets) <!--hide-->

View File

@ -1,12 +1,15 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 21
toc_title: El Yandex.Metrica Datos
--- ---
# Yandex anonimizado.Metrica Datos {#anonymized-yandex-metrica-data} # Yandex anonimizado.Metrica Datos {#anonymized-yandex-metrica-data}
El conjunto de datos consta de dos tablas que contienen datos anónimos sobre los hits (`hits_v1`) y visitas (`visits_v1`) el Yandex.Métrica. Puedes leer más sobre Yandex.Metrica en [Historial de ClickHouse](../../introduction/history.md) apartado. El conjunto de datos consta de dos tablas que contienen datos anónimos sobre los hits (`hits_v1`) y visitas (`visits_v1`) el Yandex.Métrica. Puedes leer más sobre Yandex.Metrica en [Historial de ClickHouse](../../introduction/history.md) apartado.
El conjunto de datos consta de dos tablas, cualquiera de ellas se puede descargar como `tsv.xz` o como particiones preparadas. Además, una versión extendida de la `hits` La tabla que contiene 100 millones de filas está disponible como TSV en https://clickhouse-datasets.s3.yandex.net/hits/tsv/hits_100m_obfuscated_v1.tsv.xz y como particiones preparadas en https://clickhouse-datasets.s3.yandex.net/hits/partitions/hits_100m_obfuscated\_v1.tar.xz. El conjunto de datos consta de dos tablas, cualquiera de ellas se puede descargar como `tsv.xz` o como particiones preparadas. Además, una versión extendida de la `hits` La tabla que contiene 100 millones de filas está disponible como TSV en https://clickhouse-datasets.s3.yandex.net/hits/tsv/hits\_100m\_obfuscated\_v1.tsv.xz y como particiones preparadas en https://clickhouse-datasets.s3.yandex.net/hits/partitions/hits\_100m\_obfuscated\_v1.tar.xz.
## Obtención de tablas a partir de particiones preparadas {#obtaining-tables-from-prepared-partitions} ## Obtención de tablas a partir de particiones preparadas {#obtaining-tables-from-prepared-partitions}
@ -64,4 +67,4 @@ clickhouse-client --query "SELECT COUNT(*) FROM datasets.visits_v1"
[Tutorial de ClickHouse](../../getting_started/tutorial.md) se basa en Yandex.El conjunto de datos de Metrica y la forma recomendada de comenzar con este conjunto de datos es simplemente pasar por el tutorial. [Tutorial de ClickHouse](../../getting_started/tutorial.md) se basa en Yandex.El conjunto de datos de Metrica y la forma recomendada de comenzar con este conjunto de datos es simplemente pasar por el tutorial.
Se pueden encontrar ejemplos adicionales de consultas a estas tablas entre [pruebas estatales](https://github.com/ClickHouse/ClickHouse/tree/master/tests/queries/1_stateful) de ClickHouse (se nombran `test.hists` y `test.visits` Todos los derechos reservados. Se pueden encontrar ejemplos adicionales de consultas a estas tablas entre [pruebas estatales](https://github.com/ClickHouse/ClickHouse/tree/master/tests/queries/1_stateful) de ClickHouse (se nombran `test.hists` y `test.visits` alli).

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 16
toc_title: Datos de taxis de Nueva York
--- ---
# Datos de taxis de Nueva York {#new-york-taxi-data} # Datos de taxis de Nueva York {#new-york-taxi-data}
@ -279,7 +282,7 @@ SELECT formatReadableSize(sum(bytes)) FROM system.parts WHERE table = 'trips_mer
Entre otras cosas, puede ejecutar la consulta OPTIMIZE en MergeTree. Pero no es necesario ya que todo estará bien sin él. Entre otras cosas, puede ejecutar la consulta OPTIMIZE en MergeTree. Pero no es necesario ya que todo estará bien sin él.
## Descarga de Particiones Preparadas {#download-of-prepared-partitions} ## Descarga de Prepared Partitions {#download-of-prepared-partitions}
``` bash ``` bash
$ curl -O https://clickhouse-datasets.s3.yandex.net/trips_mergetree/partitions/trips_mergetree.tar $ curl -O https://clickhouse-datasets.s3.yandex.net/trips_mergetree/partitions/trips_mergetree.tar
@ -378,10 +381,10 @@ Ejecutamos consultas utilizando un cliente ubicado en un centro de datos de Yand
## Resumen {#summary} ## Resumen {#summary}
| servidor | Q1 | Q2 | Q3 | Q4 | | servidor | Q1 | Q2 | Q3 | Q4 |
|-----------------|------------------|---------------------|-----------------|---------| |----------|-------|-------|-------|-------|
| Uno | 0.490 | Ciudad de México | Más información | 3.593 | | 1 | 0.490 | 1.224 | 2.104 | 3.593 |
| Cómo hacer | Número de modelo | Código del artículo | 0.733 | Puertas | | 3 | 0.212 | 0.438 | 0.733 | 1.241 |
| Más información | 0.028 | 0.043 | 0.051 | 0.072 | | 140 | 0.028 | 0.043 | 0.051 | 0.072 |
[Artículo Original](https://clickhouse.tech/docs/es/getting_started/example_datasets/nyc_taxi/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/nyc_taxi/) <!--hide-->

View File

@ -1,8 +1,11 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 15
toc_title: A tiempo
--- ---
# Un tiempo {#ontime} # A tiempo {#ontime}
Este conjunto de datos se puede obtener de dos maneras: Este conjunto de datos se puede obtener de dos maneras:
@ -150,7 +153,7 @@ Carga de datos:
$ for i in *.zip; do echo $i; unzip -cq $i '*.csv' | sed 's/\.00//g' | clickhouse-client --host=example-perftest01j --query="INSERT INTO ontime FORMAT CSVWithNames"; done $ for i in *.zip; do echo $i; unzip -cq $i '*.csv' | sed 's/\.00//g' | clickhouse-client --host=example-perftest01j --query="INSERT INTO ontime FORMAT CSVWithNames"; done
``` ```
## Descarga de Particiones Preparadas {#download-of-prepared-partitions} ## Descarga de Prepared Partitions {#download-of-prepared-partitions}
``` bash ``` bash
$ curl -O https://clickhouse-datasets.s3.yandex.net/ontime/partitions/ontime.tar $ curl -O https://clickhouse-datasets.s3.yandex.net/ontime/partitions/ontime.tar
@ -254,7 +257,7 @@ GROUP BY Carrier
ORDER BY c3 DESC ORDER BY c3 DESC
``` ```
¿Por qué? La solicitud anterior de una gama más amplia de años, 2000-2008 ¿por qué? la solicitud anterior de una gama más amplia de años, 2000-2008
``` sql ``` sql
SELECT Carrier, c, c2, c*100/c2 as c3 SELECT Carrier, c, c2, c*100/c2 as c3
@ -323,7 +326,7 @@ GROUP BY Year
ORDER BY Year; ORDER BY Year;
``` ```
¿Por qué? Los destinos más populares por el número de ciudades conectadas directamente para varios rangos de año ¿por qué? los destinos más populares por el número de ciudades conectadas directamente para varios rangos de año
``` sql ``` sql
SELECT DestCityName, uniqExact(OriginCityName) AS u SELECT DestCityName, uniqExact(OriginCityName) AS u
@ -333,7 +336,7 @@ GROUP BY DestCityName
ORDER BY u DESC LIMIT 10; ORDER BY u DESC LIMIT 10;
``` ```
¿Por qué? Q9.
``` sql ``` sql
SELECT Year, count(*) AS c1 SELECT Year, count(*) AS c1
@ -341,7 +344,7 @@ FROM ontime
GROUP BY Year; GROUP BY Year;
``` ```
Preguntas frecuentes Q10.
``` sql ``` sql
SELECT SELECT
@ -406,4 +409,4 @@ Esta prueba de rendimiento fue creada por Vadim Tkachenko. Ver:
- https://www.percona.com/blog/2016/01/07/apache-spark-with-air-ontime-performance-data/ - https://www.percona.com/blog/2016/01/07/apache-spark-with-air-ontime-performance-data/
- http://nickmakos.blogspot.ru/2012/08/analyzing-air-traffic-performance-with.html - http://nickmakos.blogspot.ru/2012/08/analyzing-air-traffic-performance-with.html
[Artículo Original](https://clickhouse.tech/docs/es/getting_started/example_datasets/ontime/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/ontime/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 20
toc_title: Estrella Schema Benchmark
--- ---
# Estrella Schema Benchmark {#star-schema-benchmark} # Estrella Schema Benchmark {#star-schema-benchmark}
@ -15,7 +18,7 @@ $ make
Generación de datos: Generación de datos:
!!! warning "Atención" !!! warning "Atención"
Desventaja `-s 100` dbgen genera 600 millones de filas (67 GB), mientras que `-s 1000` genera 6 mil millones de filas (lo que lleva mucho tiempo) Con `-s 100` dbgen genera 600 millones de filas (67 GB), mientras que `-s 1000` genera 6 mil millones de filas (lo que lleva mucho tiempo)
``` bash ``` bash
$ ./dbgen -s 1000 -T c $ ./dbgen -s 1000 -T c
@ -90,7 +93,7 @@ CREATE TABLE supplier
ENGINE = MergeTree ORDER BY S_SUPPKEY; ENGINE = MergeTree ORDER BY S_SUPPKEY;
``` ```
Inserte datos: Insertar datos:
``` bash ``` bash
$ clickhouse-client --query "INSERT INTO customer FORMAT CSV" < customer.tbl $ clickhouse-client --query "INSERT INTO customer FORMAT CSV" < customer.tbl
@ -155,7 +158,7 @@ INNER JOIN part AS p ON p.P_PARTKEY = l.LO_PARTKEY;
Las consultas: Las consultas:
Número de teléfono Q1.1
``` sql ``` sql
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
@ -163,7 +166,7 @@ FROM lineorder_flat
WHERE toYear(LO_ORDERDATE) = 1993 AND LO_DISCOUNT BETWEEN 1 AND 3 AND LO_QUANTITY < 25; WHERE toYear(LO_ORDERDATE) = 1993 AND LO_DISCOUNT BETWEEN 1 AND 3 AND LO_QUANTITY < 25;
``` ```
¿Qué puedes encontrar en Neodigit Q1.2
``` sql ``` sql
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
@ -171,7 +174,7 @@ FROM lineorder_flat
WHERE toYYYYMM(LO_ORDERDATE) = 199401 AND LO_DISCOUNT BETWEEN 4 AND 6 AND LO_QUANTITY BETWEEN 26 AND 35; WHERE toYYYYMM(LO_ORDERDATE) = 199401 AND LO_DISCOUNT BETWEEN 4 AND 6 AND LO_QUANTITY BETWEEN 26 AND 35;
``` ```
¿Qué puedes encontrar en Neodigit Q1.3
``` sql ``` sql
SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
@ -180,7 +183,7 @@ WHERE toISOWeek(LO_ORDERDATE) = 6 AND toYear(LO_ORDERDATE) = 1994
AND LO_DISCOUNT BETWEEN 5 AND 7 AND LO_QUANTITY BETWEEN 26 AND 35; AND LO_DISCOUNT BETWEEN 5 AND 7 AND LO_QUANTITY BETWEEN 26 AND 35;
``` ```
Preguntas frecuentes Q2.1
``` sql ``` sql
SELECT SELECT
@ -197,7 +200,7 @@ ORDER BY
P_BRAND; P_BRAND;
``` ```
Preguntas frecuentes Q2.2
``` sql ``` sql
SELECT SELECT
@ -214,7 +217,7 @@ ORDER BY
P_BRAND; P_BRAND;
``` ```
Preguntas más frecuentes Q2.3
``` sql ``` sql
SELECT SELECT
@ -231,7 +234,7 @@ ORDER BY
P_BRAND; P_BRAND;
``` ```
¿Qué puedes encontrar en Neodigit Q3.1
``` sql ``` sql
SELECT SELECT
@ -250,7 +253,7 @@ ORDER BY
revenue DESC; revenue DESC;
``` ```
¿Qué puedes encontrar en Neodigit Q3.2
``` sql ``` sql
SELECT SELECT
@ -269,7 +272,7 @@ ORDER BY
revenue DESC; revenue DESC;
``` ```
¿Qué puedes encontrar en Neodigit Q3.3
``` sql ``` sql
SELECT SELECT
@ -288,7 +291,7 @@ ORDER BY
revenue DESC; revenue DESC;
``` ```
¿Qué puedes encontrar en Neodigit Q3.4
``` sql ``` sql
SELECT SELECT
@ -307,7 +310,7 @@ ORDER BY
revenue DESC; revenue DESC;
``` ```
Preguntas más frecuentes Q4.1
``` sql ``` sql
SELECT SELECT
@ -324,7 +327,7 @@ ORDER BY
C_NATION ASC; C_NATION ASC;
``` ```
Preguntas más frecuentes Q4.2
``` sql ``` sql
SELECT SELECT
@ -344,7 +347,7 @@ ORDER BY
P_CATEGORY ASC; P_CATEGORY ASC;
``` ```
Preguntas más frecuentes Q4.3
``` sql ``` sql
SELECT SELECT
@ -364,4 +367,4 @@ ORDER BY
P_BRAND ASC; P_BRAND ASC;
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/getting_started/example_datasets/star_schema/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/star_schema/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 18
toc_title: "Nombre de la red inal\xE1mbrica (SSID):"
--- ---
# Nombre de la red inalámbrica (SSID): {#wikistat} # Nombre de la red inalámbrica (SSID): {#wikistat}
@ -29,4 +32,4 @@ $ cat links.txt | while read link; do wget http://dumps.wikimedia.org/other/page
$ ls -1 /opt/wikistat/ | grep gz | while read i; do echo $i; gzip -cd /opt/wikistat/$i | ./wikistat-loader --time="$(echo -n $i | sed -r 's/pagecounts-([0-9]{4})([0-9]{2})([0-9]{2})-([0-9]{2})([0-9]{2})([0-9]{2})\.gz/\1-\2-\3 \4-00-00/')" | clickhouse-client --query="INSERT INTO wikistat FORMAT TabSeparated"; done $ ls -1 /opt/wikistat/ | grep gz | while read i; do echo $i; gzip -cd /opt/wikistat/$i | ./wikistat-loader --time="$(echo -n $i | sed -r 's/pagecounts-([0-9]{4})([0-9]{2})([0-9]{2})-([0-9]{2})([0-9]{2})([0-9]{2})\.gz/\1-\2-\3 \4-00-00/')" | clickhouse-client --query="INSERT INTO wikistat FORMAT TabSeparated"; done
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/getting_started/example_datasets/wikistat/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/wikistat/) <!--hide-->

View File

@ -1,5 +1,10 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Getting Started
toc_hidden: true
toc_priority: 8
toc_title: oculto
--- ---
# Primeros pasos {#getting-started} # Primeros pasos {#getting-started}
@ -9,4 +14,4 @@ Si eres nuevo en ClickHouse y quieres tener una sensación práctica de su rendi
- [Ir a través de tutorial detallado](tutorial.md) - [Ir a través de tutorial detallado](tutorial.md)
- [Experimente con conjuntos de datos de ejemplo](example_datasets/ontime.md) - [Experimente con conjuntos de datos de ejemplo](example_datasets/ontime.md)
[Artículo Original](https://clickhouse.tech/docs/es/getting_started/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/getting_started/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 11
toc_title: "Instalaci\xF3n"
--- ---
# Instalación {#installation} # Instalación {#installation}
@ -14,21 +17,21 @@ Los binarios oficiales preconstruidos generalmente se compilan para x86\_64 y ap
$ grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported" $ grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
``` ```
Para ejecutar ClickHouse en procesadores que no admiten SSE 4.2 o tienen arquitectura AArch64 o PowerPC64LE, debe [Construir ClickHouse a partir de fuentes](#from-sources) con los ajustes de configuración adecuados. Para ejecutar ClickHouse en procesadores que no admiten SSE 4.2 o tienen arquitectura AArch64 o PowerPC64LE, debe [construir ClickHouse a partir de fuentes](#from-sources) con los ajustes de configuración adecuados.
## Opciones de instalación disponibles {#available-installation-options} ## Opciones de instalación disponibles {#available-installation-options}
### De paquetes DEB {#install-from-deb-packages} ### De paquetes DEB {#install-from-deb-packages}
Se recomienda utilizar pre-compilado oficial `deb` " resultados de la búsqueda relacionados Se recomienda utilizar pre-compilado oficial `deb` Paquetes para Debian o Ubuntu.
Para instalar paquetes oficiales, agregue el repositorio de Yandex en `/etc/apt/sources.list` o en otra `/etc/apt/sources.list.d/clickhouse.list` file: Para instalar paquetes oficiales, agregue el repositorio de Yandex en `/etc/apt/sources.list` o en otra `/etc/apt/sources.list.d/clickhouse.list` file:
deb http://repo.clickhouse.tech/deb/stable/ main/ deb http://repo.clickhouse.tech/deb/stable/ main/
Si desea utilizar la versión más reciente, reemplace `stable` desventaja `testing` (esto se recomienda para sus entornos de prueba). Si desea utilizar la versión más reciente, reemplace `stable` con `testing` (esto se recomienda para sus entornos de prueba).
A continuación, ejecute estos comandos para instalar realmente los paquetes: A continuación, ejecute estos comandos para instalar paquetes:
``` bash ``` bash
sudo apt-get install dirmngr # optional sudo apt-get install dirmngr # optional
@ -42,13 +45,13 @@ También puede descargar e instalar paquetes manualmente desde aquí: https://re
#### Paquete {#packages} #### Paquete {#packages}
- `clickhouse-common-static` — Installs ClickHouse compiled binary files. - `clickhouse-common-static` — Installs ClickHouse compiled binary files.
- `clickhouse-server` — Creates a symbolic link for `clickhouse-server`. Instala la configuración del servidor. - `clickhouse-server` — Creates a symbolic link for `clickhouse-server` e instala la configuración predeterminada del servidor.
- `clickhouse-client` — Creates a symbolic link for `clickhouse-client` y otras herramientas relacionadas con el cliente. Instala configuraciones de cliente. - `clickhouse-client` — Creates a symbolic link for `clickhouse-client` y otras herramientas relacionadas con el cliente. e instala los archivos de configuración del cliente.
- `clickhouse-common-static-dbg` — Installs ClickHouse compiled binary files with debug info. - `clickhouse-common-static-dbg` — Installs ClickHouse compiled binary files with debug info.
### De paquetes RPM {#from-rpm-packages} ### De paquetes RPM {#from-rpm-packages}
Se recomienda utilizar pre-compilado oficial `rpm` paquetes para CentOS, RedHat y todas las demás distribuciones de Linux basadas en rpm. Se recomienda utilizar pre-compilado oficial `rpm` También puede utilizar los paquetes para CentOS, RedHat y todas las demás distribuciones de Linux basadas en rpm.
Primero, necesitas agregar el repositorio oficial: Primero, necesitas agregar el repositorio oficial:
@ -58,7 +61,7 @@ sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64 sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
``` ```
Si desea utilizar la versión más reciente, reemplace `stable` desventaja `testing` (esto se recomienda para sus entornos de prueba). El `prestable` etiqueta a veces está disponible también. Si desea utilizar la versión más reciente, reemplace `stable` con `testing` (esto se recomienda para sus entornos de prueba). El `prestable` etiqueta a veces está disponible también.
A continuación, ejecute estos comandos para instalar paquetes: A continuación, ejecute estos comandos para instalar paquetes:
@ -98,7 +101,7 @@ sudo clickhouse-client-$LATEST_VERSION/install/doinst.sh
Para los entornos de producción, se recomienda utilizar las últimas `stable`-versión. Puede encontrar su número en la página de GitHub https://github.com/ClickHouse/ClickHouse/tags con postfix `-stable`. Para los entornos de producción, se recomienda utilizar las últimas `stable`-versión. Puede encontrar su número en la página de GitHub https://github.com/ClickHouse/ClickHouse/tags con postfix `-stable`.
### Imagen de Desde Docker {#from-docker-image} ### Desde Docker Image {#from-docker-image}
Para ejecutar ClickHouse dentro de Docker, siga la guía en [Eje de acoplador](https://hub.docker.com/r/yandex/clickhouse-server/). Esas imágenes usan oficial `deb` paquetes dentro. Para ejecutar ClickHouse dentro de Docker, siga la guía en [Eje de acoplador](https://hub.docker.com/r/yandex/clickhouse-server/). Esas imágenes usan oficial `deb` paquetes dentro.
@ -111,7 +114,7 @@ Puede compilar paquetes e instalarlos o usar programas sin instalar paquetes. Ad
Client: programs/clickhouse-client Client: programs/clickhouse-client
Server: programs/clickhouse-server Server: programs/clickhouse-server
Tendrá que crear carpetas de datos y metadatos y `chown` para el usuario deseado. Sus rutas se pueden cambiar en la configuración del servidor (src/programs/server/config .xml), por defecto son: Tendrá que crear carpetas de datos y metadatos y `chown` para el usuario deseado. Sus rutas se pueden cambiar en la configuración del servidor (src/programs/server/config.xml), por defecto son:
/opt/clickhouse/data/default/ /opt/clickhouse/data/default/
/opt/clickhouse/metadata/default/ /opt/clickhouse/metadata/default/
@ -132,7 +135,7 @@ Si no tienes `service` comando ejecutar como
$ sudo /etc/init.d/clickhouse-server start $ sudo /etc/init.d/clickhouse-server start
``` ```
Vea los registros en el `/var/log/clickhouse-server/` Directorio. Vea los registros en el `/var/log/clickhouse-server/` directorio.
Si el servidor no se inicia, compruebe las configuraciones en el archivo `/etc/clickhouse-server/config.xml`. Si el servidor no se inicia, compruebe las configuraciones en el archivo `/etc/clickhouse-server/config.xml`.
@ -145,7 +148,7 @@ $ clickhouse-server --config-file=/etc/clickhouse-server/config.xml
En este caso, el registro se imprimirá en la consola, lo cual es conveniente durante el desarrollo. En este caso, el registro se imprimirá en la consola, lo cual es conveniente durante el desarrollo.
Si el archivo de configuración está en el directorio actual, no es necesario `--config-file` parámetro. De forma predeterminada, utiliza `./config.xml`. Si el archivo de configuración está en el directorio actual, no es necesario `--config-file` parámetro. De forma predeterminada, utiliza `./config.xml`.
ClickHouse admite la configuración de restricción de acceso. Están ubicados en el `users.xml` Archivo (junto a `config.xml`). ClickHouse admite la configuración de restricción de acceso. Están ubicados en el `users.xml` archivo (junto a `config.xml`).
De forma predeterminada, se permite el acceso desde cualquier lugar `default` usuario, sin una contraseña. Ver `user/default/networks`. De forma predeterminada, se permite el acceso desde cualquier lugar `default` usuario, sin una contraseña. Ver `user/default/networks`.
Para obtener más información, consulte la sección [“Configuration Files”](../operations/configuration_files.md). Para obtener más información, consulte la sección [“Configuration Files”](../operations/configuration_files.md).
@ -155,7 +158,7 @@ Después de iniciar el servidor, puede usar el cliente de línea de comandos par
$ clickhouse-client $ clickhouse-client
``` ```
Por defecto, se conecta a `localhost:9000` es nombre del usuario `default` sin una contraseña. También se puede usar para conectarse a un servidor remoto usando `--host` argumento. Por defecto, se conecta a `localhost:9000` en nombre del usuario `default` sin una contraseña. También se puede usar para conectarse a un servidor remoto usando `--host` argumento.
El terminal debe usar codificación UTF-8. El terminal debe usar codificación UTF-8.
Para obtener más información, consulte la sección [“Command-line client”](../interfaces/cli.md). Para obtener más información, consulte la sección [“Command-line client”](../interfaces/cli.md).
@ -185,4 +188,4 @@ SELECT 1
Para continuar experimentando, puede descargar uno de los conjuntos de datos de prueba o pasar por [tutorial](https://clickhouse.tech/tutorial.html). Para continuar experimentando, puede descargar uno de los conjuntos de datos de prueba o pasar por [tutorial](https://clickhouse.tech/tutorial.html).
[Artículo Original](https://clickhouse.tech/docs/es/getting_started/install/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/getting_started/install/) <!--hide-->

View File

@ -1 +0,0 @@
../../en/getting_started/playground.md

View File

@ -0,0 +1,48 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 14
toc_title: Infantil
---
# Zona de juegos ClickHouse {#clickhouse-playground}
[Zona de juegos ClickHouse](https://play.clickhouse.tech?file=welcome) permite a las personas experimentar con ClickHouse ejecutando consultas al instante, sin configurar su servidor o clúster.
Varios conjuntos de datos de ejemplo están disponibles en Playground, así como consultas de ejemplo que muestran las características de ClickHouse.
Las consultas se ejecutan como un usuario de sólo lectura. Implica algunas limitaciones:
- No se permiten consultas DDL
- Las consultas INSERT no están permitidas
También se aplican los siguientes valores:
- [`max_result_bytes=10485760`](../operations/settings/query_complexity/#max-result-bytes)
- [`max_result_rows=2000`](../operations/settings/query_complexity/#setting-max_result_rows)
- [`result_overflow_mode=break`](../operations/settings/query_complexity/#result-overflow-mode)
- [`max_execution_time=60000`](../operations/settings/query_complexity/#max-execution-time)
ClickHouse Playground da la experiencia de m2.pequeño
[Servicio administrado para ClickHouse](https://cloud.yandex.com/services/managed-clickhouse)
instancia alojada en [El Yandex.Nube](https://cloud.yandex.com/).
Más información sobre [proveedores de la nube](../commercial/cloud.md).
La interfaz web de ClickHouse Playground realiza solicitudes a través de ClickHouse [HTTP API](../interfaces/http.md).
El backend Playground es solo un clúster ClickHouse sin ninguna aplicación adicional del lado del servidor.
El punto final HTTPS de ClickHouse también está disponible como parte de Playground.
Puede realizar consultas al patio de recreo utilizando cualquier cliente HTTP, por ejemplo [rizo](https://curl.haxx.se) o [wget](https://www.gnu.org/software/wget/), o configurar una conexión usando [JDBC](../interfaces/jdbc.md) o [ODBC](../interfaces/odbc.md) controlador.
Más información sobre los productos de software compatibles con ClickHouse está disponible [aqui](../interfaces/index.md).
| Parámetro | Valor |
|:------------|:----------------------------------------------|
| Punto final | https://play-api.casa de clic.tecnología:8443 |
| Usuario | `playground` |
| Contraseña | `clickhouse` |
Tenga en cuenta que este extremo requiere una conexión segura.
Ejemplo:
``` bash
curl "https://play-api.clickhouse.tech:8443/?query=SELECT+'Play+ClickHouse!';&user=playground&password=clickhouse&database=datasets"
```

View File

@ -1,16 +1,19 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 12
toc_title: Tutorial
--- ---
# Tutorial de ClickHouse {#clickhouse-tutorial} # Tutorial de ClickHouse {#clickhouse-tutorial}
## Qué Esperar de Este Tutorial? {#what-to-expect-from-this-tutorial} ## Qué Esperar de Este Tutorial? {#what-to-expect-from-this-tutorial}
Al pasar por este tutorial, aprenderá cómo configurar el clúster básico de ClickHouse, será pequeño, pero tolerante a fallos y escalable. Usaremos uno de los conjuntos de datos de ejemplo para llenarlo con datos y ejecutar algunas consultas de demostración. Al pasar por este tutorial, aprenderá cómo configurar un clúster de ClickHouse simple. Será pequeño, pero tolerante a fallos y escalable. Luego usaremos uno de los conjuntos de datos de ejemplo para llenarlo con datos y ejecutar algunas consultas de demostración.
## Configuración de nodo único {#single-node-setup} ## Configuración de nodo único {#single-node-setup}
Para posponer las complejidades del entorno distribuido, comenzaremos con la implementación de ClickHouse en un único servidor o máquina virtual. ClickHouse generalmente se instala desde [deb](index.md#install-from-deb-packages) o [RPM](index.md#from-rpm-packages) paquetes, pero hay [alternativa](index.md#from-docker-image) para los sistemas operativos que no los admiten. Para posponer las complejidades de un entorno distribuido, comenzaremos con la implementación de ClickHouse en un único servidor o máquina virtual. ClickHouse generalmente se instala desde [deb](index.md#install-from-deb-packages) o [RPM](index.md#from-rpm-packages) paquetes, pero hay [alternativa](index.md#from-docker-image) para los sistemas operativos que no los admiten.
Por ejemplo, ha elegido `deb` paquetes y ejecutado: Por ejemplo, ha elegido `deb` paquetes y ejecutado:
@ -24,15 +27,15 @@ sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-client sudo apt-get install -y clickhouse-server clickhouse-client
``` ```
¿Qué tenemos en los paquetes que tengo instalados: ¿qué tenemos en los paquetes que tengo instalados:
- `clickhouse-client` el paquete contiene [Casa de clics-cliente](../interfaces/cli.md) aplicación, cliente interactivo de la consola ClickHouse. - `clickhouse-client` el paquete contiene [Casa de clics-cliente](../interfaces/cli.md) aplicación, cliente interactivo de la consola ClickHouse.
- `clickhouse-common` El paquete contiene un archivo ejecutable ClickHouse. - `clickhouse-common` El paquete contiene un archivo ejecutable ClickHouse.
- `clickhouse-server` El paquete contiene archivos de configuración para ejecutar ClickHouse como servidor. - `clickhouse-server` El paquete contiene archivos de configuración para ejecutar ClickHouse como servidor.
Los archivos de configuración del servidor se encuentran en `/etc/clickhouse-server/`. Antes de ir más lejos, tenga en cuenta el `<path>` elemento en `config.xml`. La ruta determina la ubicación para el almacenamiento de datos, por lo que debe ubicarse en un volumen con gran capacidad de disco, el valor predeterminado es `/var/lib/clickhouse/`. Si desea ajustar la configuración, no es útil editar directamente `config.xml` archivo, teniendo en cuenta que podría ser reescrito en futuras actualizaciones de paquetes. La forma recomendada de anular los elementos de configuración es crear [archivos en config.directorio d](../operations/configuration_files.md) que sirven como “patches” de configuración.XML. Los archivos de configuración del servidor se encuentran en `/etc/clickhouse-server/`. Antes de ir más lejos, tenga en cuenta el `<path>` elemento en `config.xml`. La ruta determina la ubicación para el almacenamiento de datos, por lo que debe ubicarse en un volumen con gran capacidad de disco; el valor predeterminado es `/var/lib/clickhouse/`. Si desea ajustar la configuración, no es útil editar directamente `config.xml` archivo, teniendo en cuenta que podría ser reescrito en futuras actualizaciones de paquetes. La forma recomendada de anular los elementos de configuración es crear [archivos en config.directorio d](../operations/configuration_files.md) que sirven como “patches” de configuración.XML.
Como habrás notado, `clickhouse-server` no se inicia automáticamente después de la instalación del paquete. Tampoco se reiniciará automáticamente después de las actualizaciones. La forma en que inicia el servidor depende de su sistema de inicio, generalmente, es: Como habrás notado, `clickhouse-server` no se inicia automáticamente después de la instalación del paquete. Tampoco se reiniciará automáticamente después de las actualizaciones. La forma en que inicia el servidor depende de su sistema de inicio, por lo general, es:
``` bash ``` bash
sudo service clickhouse-server start sudo service clickhouse-server start
@ -44,7 +47,7 @@ o
sudo /etc/init.d/clickhouse-server start sudo /etc/init.d/clickhouse-server start
``` ```
La ubicación predeterminada para los registros del servidor es `/var/log/clickhouse-server/`. El servidor estará listo para manejar las conexiones de cliente una vez `Ready for connections` se registró el mensaje. La ubicación predeterminada para los registros del servidor es `/var/log/clickhouse-server/`. El servidor está listo para manejar las conexiones de cliente una vez que registra el `Ready for connections` mensaje.
Una vez que el `clickhouse-server` está en funcionamiento, podemos usar `clickhouse-client` para conectarse al servidor y ejecutar algunas consultas de prueba como `SELECT "Hello, world!";`. Una vez que el `clickhouse-server` está en funcionamiento, podemos usar `clickhouse-client` para conectarse al servidor y ejecutar algunas consultas de prueba como `SELECT "Hello, world!";`.
@ -84,7 +87,7 @@ clickhouse-client --query='INSERT INTO table FORMAT TabSeparated' < data.tsv
## Importar conjunto de datos de muestra {#import-sample-dataset} ## Importar conjunto de datos de muestra {#import-sample-dataset}
Ahora es el momento de llenar nuestro servidor ClickHouse con algunos datos de muestra. En este tutorial, usaremos datos anónimos de Yandex.Metrica, el primer servicio que ejecuta ClickHouse en forma de producción antes de que se convirtiera en código abierto (más sobre eso en [sección de historia](../introduction/history.md)). Hay [múltiples formas de importar Yandex.Conjunto de datos de Metrica](example_datasets/metrica.md) y por el bien del tutorial, iremos con el más realista. Ahora es el momento de llenar nuestro servidor ClickHouse con algunos datos de muestra. En este tutorial, usaremos los datos anónimos de Yandex.Metrica, el primer servicio que ejecuta ClickHouse en forma de producción antes de que se convirtiera en código abierto (más sobre eso en [sección de historia](../introduction/history.md)). Hay [múltiples formas de importar Yandex.Conjunto de datos de Metrica](example_datasets/metrica.md), y por el bien del tutorial, iremos con el más realista.
### Descargar y extraer datos de tabla {#download-and-extract-table-data} ### Descargar y extraer datos de tabla {#download-and-extract-table-data}
@ -97,19 +100,19 @@ Los archivos extraídos tienen un tamaño de aproximadamente 10 GB.
### Crear tablas {#create-tables} ### Crear tablas {#create-tables}
Las tablas se agrupan lógicamente en “databases”. Hay un `default` base de datos, pero crearemos una nueva llamada `tutorial`: Como en la mayoría de los sistemas de gestión de bases de datos, ClickHouse agrupa lógicamente las tablas en “databases”. Hay un `default` base de datos, pero crearemos una nueva llamada `tutorial`:
``` bash ``` bash
clickhouse-client --query "CREATE DATABASE IF NOT EXISTS tutorial" clickhouse-client --query "CREATE DATABASE IF NOT EXISTS tutorial"
``` ```
La sintaxis para crear tablas es mucho más complicada en comparación con las bases de datos (ver [referencia](../query_language/create.md). En general `CREATE TABLE` declaración tiene que especificar tres cosas clave: La sintaxis para crear tablas es mucho más complicada en comparación con las bases de datos (ver [referencia](../sql_reference/statements/create.md). En general `CREATE TABLE` declaración tiene que especificar tres cosas clave:
1. Nombre de la tabla que se va a crear. 1. Nombre de la tabla que se va a crear.
2. Table schema, i.e. list of columns and their [tipos de datos](../data_types/index.md). 2. Table schema, i.e. list of columns and their [tipos de datos](../sql_reference/data_types/index.md).
3. [Motor de tabla](../operations/table_engines/index.md) y su configuración, que determina todos los detalles sobre cómo se ejecutarán físicamente las consultas a esta tabla. 3. [Motor de tabla](../engines/table_engines/index.md) y su configuración, que determina todos los detalles sobre cómo se ejecutarán físicamente las consultas a esta tabla.
El Yandex.Metrica es un servicio de análisis web y el conjunto de datos de muestra no cubre toda su funcionalidad, por lo que solo hay dos tablas para crear: El Yandex.Metrica es un servicio de análisis web, y el conjunto de datos de muestra no cubre toda su funcionalidad, por lo que solo hay dos tablas para crear:
- `hits` es una tabla con cada acción realizada por todos los usuarios en todos los sitios web cubiertos por el servicio. - `hits` es una tabla con cada acción realizada por todos los usuarios en todos los sitios web cubiertos por el servicio.
- `visits` es una tabla que contiene sesiones precompiladas en lugar de acciones individuales. - `visits` es una tabla que contiene sesiones precompiladas en lugar de acciones individuales.
@ -459,11 +462,11 @@ SETTINGS index_granularity = 8192
Puede ejecutar esas consultas utilizando el modo interactivo de `clickhouse-client` (simplemente ejecútelo en un terminal sin especificar una consulta por adelantado) o pruebe algunos [interfaz alternativa](../interfaces/index.md) Si quieres. Puede ejecutar esas consultas utilizando el modo interactivo de `clickhouse-client` (simplemente ejecútelo en un terminal sin especificar una consulta por adelantado) o pruebe algunos [interfaz alternativa](../interfaces/index.md) Si quieres.
Como podemos ver, `hits_v1` utiliza el [motor básico MergeTree](../operations/table_engines/mergetree.md), mientras que el `visits_v1` utiliza el [Derrumbar](../operations/table_engines/collapsingmergetree.md) variante. Como podemos ver, `hits_v1` utiliza el [motor básico MergeTree](../engines/table_engines/mergetree_family/mergetree.md), mientras que el `visits_v1` utiliza el [Derrumbar](../engines/table_engines/mergetree_family/collapsingmergetree.md) variante.
### Importar datos {#import-data} ### Importar datos {#import-data}
La importación de datos a ClickHouse se realiza a través de [INSERTAR EN](../query_language/insert_into.md) consulta como en muchas otras bases de datos SQL. Sin embargo, los datos generalmente se proporcionan en uno de los [Formatos soportados](../interfaces/formats.md) en lugar de `VALUES` cláusula (que también es compatible). La importación de datos a ClickHouse se realiza a través de [INSERT INTO](../sql_reference/statements/insert_into.md) consulta como en muchas otras bases de datos SQL. Sin embargo, los datos generalmente se proporcionan en uno de los [Formatos de serialización compatibles](../interfaces/formats.md) en lugar de `VALUES` cláusula (que también es compatible).
Los archivos que descargamos anteriormente están en formato separado por tabuladores, así que aquí le mostramos cómo importarlos a través del cliente de la consola: Los archivos que descargamos anteriormente están en formato separado por tabuladores, así que aquí le mostramos cómo importarlos a través del cliente de la consola:
@ -483,16 +486,16 @@ FORMAT TSV
max_insert_block_size 1048576 0 "The maximum block size for insertion, if we control the creation of blocks for insertion." max_insert_block_size 1048576 0 "The maximum block size for insertion, if we control the creation of blocks for insertion."
``` ```
Opcionalmente se puede [OPTIMIZAR](../query_language/misc/#misc_operations-optimize) las tablas después de la importación. Las tablas que están configuradas con el motor de la familia MergeTree siempre fusionan partes de datos en segundo plano para optimizar el almacenamiento de datos (o al menos verificar si tiene sentido). Estas consultas solo obligan al motor de tablas a realizar la optimización del almacenamiento en este momento en lugar de algún tiempo después: Opcionalmente se puede [OPTIMIZE](../query_language/misc/#misc_operations-optimize) las tablas después de la importación. Las tablas que están configuradas con un motor de la familia MergeTree siempre fusionan partes de datos en segundo plano para optimizar el almacenamiento de datos (o al menos verificar si tiene sentido). Estas consultas obligan al motor de tablas a realizar la optimización del almacenamiento en este momento en lugar de algún tiempo después:
``` bash ``` bash
clickhouse-client --query "OPTIMIZE TABLE tutorial.hits_v1 FINAL" clickhouse-client --query "OPTIMIZE TABLE tutorial.hits_v1 FINAL"
clickhouse-client --query "OPTIMIZE TABLE tutorial.visits_v1 FINAL" clickhouse-client --query "OPTIMIZE TABLE tutorial.visits_v1 FINAL"
``` ```
Esta es una operación intensiva de E / S y CPU, por lo que si la tabla recibe constantemente datos nuevos, es mejor dejarlo solo y dejar que las fusiones se ejecuten en segundo plano. Estas consultas inician una operación intensiva de E / S y CPU, por lo que si la tabla recibe datos nuevos de manera consistente, es mejor dejarlos solos y dejar que las fusiones se ejecuten en segundo plano.
Ahora podemos comprobar que las tablas se han importado correctamente: Ahora podemos comprobar si la importación de la tabla fue exitosa:
``` bash ``` bash
clickhouse-client --query "SELECT COUNT(*) FROM tutorial.hits_v1" clickhouse-client --query "SELECT COUNT(*) FROM tutorial.hits_v1"
@ -528,9 +531,9 @@ El clúster ClickHouse es un clúster homogéneo. Pasos para configurar:
1. Instale el servidor ClickHouse en todas las máquinas del clúster 1. Instale el servidor ClickHouse en todas las máquinas del clúster
2. Configurar configuraciones de clúster en archivos de configuración 2. Configurar configuraciones de clúster en archivos de configuración
3. Crear tablas locales en cada instancia 3. Crear tablas locales en cada instancia
4. Crear un [Tabla distribuida](../operations/table_engines/distributed.md) 4. Crear un [Tabla distribuida](../engines/table_engines/special/distributed.md)
[Tabla distribuida](../operations/table_engines/distributed.md) es en realidad una especie de “view” a las tablas locales del clúster ClickHouse. La consulta SELECT de una tabla distribuida se ejecuta utilizando recursos de todos los fragmentos del clúster. Puede especificar configuraciones para varios clústeres y crear varias tablas distribuidas que proporcionen vistas a diferentes clústeres. [Tabla distribuida](../engines/table_engines/special/distributed.md) es en realidad una especie de “view” a las tablas locales del clúster ClickHouse. La consulta SELECT de una tabla distribuida se ejecuta utilizando recursos de todos los fragmentos del clúster. Puede especificar configuraciones para varios clústeres y crear varias tablas distribuidas que proporcionen vistas a diferentes clústeres.
Ejemplo de configuración para un clúster con tres fragmentos, una réplica cada uno: Ejemplo de configuración para un clúster con tres fragmentos, una réplica cada uno:
@ -559,7 +562,7 @@ Ejemplo de configuración para un clúster con tres fragmentos, una réplica cad
</remote_servers> </remote_servers>
``` ```
Para más demostraciones, creemos una nueva tabla local con la misma `CREATE TABLE` consulta que utilizamos para `hits_v1`, pero nombre de tabla diferente: Para más demostraciones, vamos a crear una nueva tabla local con la misma `CREATE TABLE` consulta que utilizamos para `hits_v1`, pero nombre de tabla diferente:
``` sql ``` sql
CREATE TABLE tutorial.hits_local (...) ENGINE = MergeTree() ... CREATE TABLE tutorial.hits_local (...) ENGINE = MergeTree() ...
@ -572,22 +575,22 @@ CREATE TABLE tutorial.hits_all AS tutorial.hits_local
ENGINE = Distributed(perftest_3shards_1replicas, tutorial, hits_local, rand()); ENGINE = Distributed(perftest_3shards_1replicas, tutorial, hits_local, rand());
``` ```
Una práctica común es crear tablas distribuidas similares en todas las máquinas del clúster. Esto permitiría ejecutar consultas distribuidas en cualquier máquina del clúster. También hay una opción alternativa para crear una tabla distribuida temporal para una consulta SELECT determinada usando [remoto](../query_language/table_functions/remote.md) función de la tabla. Una práctica común es crear tablas distribuidas similares en todas las máquinas del clúster. Permite ejecutar consultas distribuidas en cualquier máquina del clúster. También hay una opción alternativa para crear una tabla distribuida temporal para una consulta SELECT determinada usando [remoto](../sql_reference/table_functions/remote.md) función de la tabla.
Vamos a correr [INSERTAR SELECCIONAR](../query_language/insert_into.md) en la tabla Distributed para extender la tabla a varios servidores. Vamos a correr [INSERT SELECT](../sql_reference/statements/insert_into.md) en la tabla Distributed para extender la tabla a varios servidores.
``` sql ``` sql
INSERT INTO tutorial.hits_all SELECT * FROM tutorial.hits_v1; INSERT INTO tutorial.hits_all SELECT * FROM tutorial.hits_v1;
``` ```
!!! warning "Aviso" !!! warning "Aviso"
Este enfoque no es adecuado para la fragmentación de tablas grandes. Hay una herramienta separada [Método de codificación de datos:](../operations/utils/clickhouse-copier.md) que puede volver a fragmentar tablas grandes arbitrarias. Este enfoque no es adecuado para la fragmentación de tablas grandes. Hay una herramienta separada [Método de codificación de datos:](../operations/utilities/clickhouse-copier.md) que puede volver a fragmentar tablas grandes arbitrarias.
Como era de esperar, las consultas computacionalmente pesadas se ejecutan N veces más rápido y se lanzan en 3 servidores en lugar de uno. Como era de esperar, las consultas computacionalmente pesadas se ejecutan N veces más rápido si utilizan 3 servidores en lugar de uno.
En este caso, hemos utilizado un clúster con 3 fragmentos, cada uno contiene una única réplica. En este caso, hemos utilizado un clúster con 3 fragmentos, y cada uno contiene una sola réplica.
Para proporcionar resiliencia en un entorno de producción, recomendamos que cada fragmento contenga 2-3 réplicas distribuidas entre varios centros de datos. Tenga en cuenta que ClickHouse admite un número ilimitado de réplicas. Para proporcionar resiliencia en un entorno de producción, se recomienda que cada fragmento contenga 2-3 réplicas distribuidas entre varias zonas de disponibilidad o centros de datos (o al menos racks). Tenga en cuenta que ClickHouse admite un número ilimitado de réplicas.
Ejemplo de configuración para un clúster de un fragmento que contiene tres réplicas: Ejemplo de configuración para un clúster de un fragmento que contiene tres réplicas:
@ -613,13 +616,12 @@ Ejemplo de configuración para un clúster de un fragmento que contiene tres ré
</remote_servers> </remote_servers>
``` ```
Para habilitar la replicación nativa <a href="http://zookeeper.apache.org/" rel="external nofollow">ZooKeeper</a> se requiere. ClickHouse se encargará de la coherencia de los datos en todas las réplicas y ejecutará el procedimiento de restauración después de la falla Para habilitar la replicación nativa [ZooKeeper](http://zookeeper.apache.org/) se requiere. ClickHouse se encarga de la coherencia de los datos en todas las réplicas y ejecuta el procedimiento de restauración después de la falla automáticamente. Se recomienda implementar el clúster ZooKeeper en servidores independientes (donde no se están ejecutando otros procesos, incluido ClickHouse).
automática. Se recomienda implementar el clúster ZooKeeper en servidores separados.
ZooKeeper no es un requisito estricto: en algunos casos simples, puede duplicar los datos escribiéndolos en todas las réplicas de su código de aplicación. Este enfoque es **ni** recomendado, en este caso, ClickHouse no podrá !!! note "Nota"
garantizar la coherencia de los datos en todas las réplicas. Esto sigue siendo responsabilidad de su aplicación. ZooKeeper no es un requisito estricto: en algunos casos simples, puede duplicar los datos escribiéndolos en todas las réplicas de su código de aplicación. Este enfoque es **ni** recomendado, en este caso, ClickHouse no podrá garantizar la coherencia de los datos en todas las réplicas. Por lo tanto, se convierte en responsabilidad de su aplicación.
Las ubicaciones de ZooKeeper deben especificarse en el archivo de configuración: Las ubicaciones de ZooKeeper se especifican en el archivo de configuración:
``` xml ``` xml
<zookeeper> <zookeeper>
@ -638,7 +640,7 @@ Las ubicaciones de ZooKeeper deben especificarse en el archivo de configuración
</zookeeper> </zookeeper>
``` ```
Además, necesitamos establecer macros para identificar cada fragmento y réplica, se usará en la creación de la tabla: Además, necesitamos establecer macros para identificar cada fragmento y réplica que se utilizan en la creación de tablas:
``` xml ``` xml
<macros> <macros>
@ -647,7 +649,7 @@ Además, necesitamos establecer macros para identificar cada fragmento y réplic
</macros> </macros>
``` ```
Si no hay réplicas en este momento en la creación de la tabla replicada, se crea una nueva primera réplica. Si ya hay réplicas activas, la nueva réplica clona los datos de las existentes. Tiene la opción de crear primero todas las tablas replicadas e insertar datos en ella. Otra opción es crear algunas réplicas y agregar las otras después o durante la inserción de datos. Si no hay réplicas en este momento en la creación de la tabla replicada, se crea una instancia de una nueva primera réplica. Si ya hay réplicas activas, la nueva réplica clona los datos de las existentes. Tiene la opción de crear primero todas las tablas replicadas y, a continuación, insertar datos en ella. Otra opción es crear algunas réplicas y agregar las otras después o durante la inserción de datos.
``` sql ``` sql
CREATE TABLE tutorial.hits_replica (...) CREATE TABLE tutorial.hits_replica (...)
@ -658,12 +660,12 @@ ENGINE = ReplcatedMergeTree(
... ...
``` ```
Aquí usamos [ReplicatedMergeTree](../operations/table_engines/replication.md) motor de mesa. En los parámetros, especificamos la ruta ZooKeeper que contiene identificadores de fragmentos y réplicas. Aquí usamos [ReplicatedMergeTree](../engines/table_engines/mergetree_family/replication.md) motor de mesa. En los parámetros, especificamos la ruta ZooKeeper que contiene identificadores de fragmentos y réplicas.
``` sql ``` sql
INSERT INTO tutorial.hits_replica SELECT * FROM tutorial.hits_local; INSERT INTO tutorial.hits_replica SELECT * FROM tutorial.hits_local;
``` ```
La replicación funciona en modo multi-master. Los datos se pueden cargar en cualquier réplica y se sincronizarán con otras instancias automáticamente. La replicación es asíncrona, por lo que en un momento dado, no todas las réplicas pueden contener datos insertados recientemente. Para permitir la inserción de datos, al menos una réplica debe estar activa. Otros sincronizarán los datos y repararán la coherencia una vez que vuelvan a activarse. Tenga en cuenta que tal enfoque permite la baja posibilidad de una pérdida de datos que acaba de agregar. La replicación funciona en modo multi-master. Los datos se pueden cargar en cualquier réplica y el sistema los sincroniza automáticamente con otras instancias. La replicación es asíncrona, por lo que en un momento dado, no todas las réplicas pueden contener datos insertados recientemente. Al menos una réplica debe estar disponible para permitir la ingestión de datos. Otros sincronizarán los datos y repararán la coherencia una vez que vuelvan a activarse. Tenga en cuenta que este enfoque permite la baja posibilidad de una pérdida de datos recientemente insertados.
[Artículo Original](https://clickhouse.tech/docs/es/getting_started/tutorial/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/getting_started/tutorial/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 41
toc_title: "Aplicaci\xF3n de modelos CatBoost"
--- ---
# Aplicación de un modelo Catboost en ClickHouse {#applying-catboost-model-in-clickhouse} # Aplicación de un modelo Catboost en ClickHouse {#applying-catboost-model-in-clickhouse}
@ -19,14 +22,14 @@ Para obtener más información sobre la formación de modelos CatBoost, consulte
## Requisito {#prerequisites} ## Requisito {#prerequisites}
Si usted no tiene el [Acoplador](https://docs.docker.com/install/) sin embargo, instalarlo. Si no tienes el [Acoplador](https://docs.docker.com/install/) sin embargo, instalarlo.
!!! note "Nota" !!! note "Nota"
[Acoplador](https://www.docker.com) es una plataforma de software que le permite crear contenedores que aíslan una instalación de CatBoost y ClickHouse del resto del sistema. [Acoplador](https://www.docker.com) es una plataforma de software que le permite crear contenedores que aíslan una instalación de CatBoost y ClickHouse del resto del sistema.
Antes de aplicar un modelo CatBoost: Antes de aplicar un modelo CatBoost:
**1.** Neumático de la [Imagen de acoplador](https://hub.docker.com/r/yandex/tutorial-catboost-clickhouse) del registro: **1.** Tire de la [Imagen de acoplador](https://hub.docker.com/r/yandex/tutorial-catboost-clickhouse) del registro:
``` bash ``` bash
$ docker pull yandex/tutorial-catboost-clickhouse $ docker pull yandex/tutorial-catboost-clickhouse
@ -113,7 +116,7 @@ FROM amazon_train
+-count()-+ +-count()-+
| 65538 | | 65538 |
+---------+ +-------+
``` ```
## 3. Integrar CatBoost en ClickHouse {#integrate-catboost-into-clickhouse} ## 3. Integrar CatBoost en ClickHouse {#integrate-catboost-into-clickhouse}
@ -162,7 +165,7 @@ La forma más rápida de evaluar un modelo CatBoost es compilar `libcatboostmode
Para el modelo de prueba, ejecute el cliente ClickHouse `$ clickhouse client`. Para el modelo de prueba, ejecute el cliente ClickHouse `$ clickhouse client`.
Vamos a asegurarnos de que el modelo está funcionando: Asegurémonos de que el modelo esté funcionando:
``` sql ``` sql
:) SELECT :) SELECT
@ -182,7 +185,7 @@ LIMIT 10
``` ```
!!! note "Nota" !!! note "Nota"
Función [modelEvaluar](../query_language/functions/other_functions.md#function-modelevaluate) devuelve tupla con predicciones sin procesar por clase para modelos multiclase. Función [modelEvaluar](../sql_reference/functions/other_functions.md#function-modelevaluate) devuelve tupla con predicciones sin procesar por clase para modelos multiclase.
Vamos a predecir la probabilidad: Vamos a predecir la probabilidad:
@ -205,7 +208,7 @@ LIMIT 10
``` ```
!!! note "Nota" !!! note "Nota"
Más información sobre [exp()](../query_language/functions/math_functions.md) función. Más información sobre [exp()](../sql_reference/functions/math_functions.md) función.
Vamos a calcular LogLoss en la muestra: Vamos a calcular LogLoss en la muestra:
@ -231,6 +234,6 @@ FROM
``` ```
!!! note "Nota" !!! note "Nota"
Más información sobre [avg()](../query_language/agg_functions/reference.md#agg_function-avg) y [Registro()](../query_language/functions/math_functions.md) función. Más información sobre [avg()](../sql_reference/aggregate_functions/reference.md#agg_function-avg) y [registro()](../sql_reference/functions/math_functions.md) función.
[Artículo Original](https://clickhouse.tech/docs/es/guides/apply_catboost_model/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/guides/apply_catboost_model/) <!--hide-->

View File

@ -1,11 +1,16 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Guides
toc_priority: 38
toc_title: "Descripci\xF3n"
--- ---
# Guías de ClickHouse {#clickhouse-guides} # Guías de ClickHouse {#clickhouse-guides}
Instrucciones detalladas paso a paso que lo ayudarán a resolver varias tareas usando ClickHouse. Lista de instrucciones detalladas paso a paso que ayudan a resolver varias tareas usando ClickHouse:
- [Tutorial sobre la configuración simple del clúster](../getting_started/tutorial.md)
- [Aplicación de un modelo CatBoost en ClickHouse](apply_catboost_model.md) - [Aplicación de un modelo CatBoost en ClickHouse](apply_catboost_model.md)
[Artículo Original](https://clickhouse.tech/docs/es/guides/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/guides/) <!--hide-->

View File

@ -1,39 +1,42 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 3
toc_title: "Descripci\xF3n"
--- ---
# ¿Qué es ClickHouse? {#what-is-clickhouse} # ¿qué es clickhouse? {#what-is-clickhouse}
ClickHouse es un sistema de gestión de bases de datos orientado a columnas (DBMS) para el procesamiento analítico en línea de consultas (OLAP). ClickHouse es un sistema de gestión de bases de datos orientado a columnas (DBMS) para el procesamiento analítico en línea de consultas (OLAP).
En un “normal” DBMS orientado a filas, los datos se almacenan en este orden: En un “normal” DBMS orientado a filas, los datos se almacenan en este orden:
| Fila | Argumento | JavaEnable | Titular | GoodEvent | EventTime | | Fila | Argumento | JavaEnable | Titular | GoodEvent | EventTime |
|--------|------------------------------------|------------|---------------------------|-----------|-----------------------------------| |------|-------------|------------|---------------------------|-----------|---------------------|
| \#0 | Sistema abierto. | Uno | Relaciones con inversores | Uno | ¿Qué puedes encontrar en Neodigit | | \#0 | 89354350662 | 1 | Relaciones con inversores | 1 | 2016-05-18 05:19:20 |
| \#1 | Sistema abierto. | Cero | Contáctenos | Uno | ¿Qué puedes encontrar en Neodigit | | \#1 | 90329509958 | 0 | Contáctenos | 1 | 2016-05-18 08:10:20 |
| Nombre | Método de codificación de datos: | Uno | Misión | Uno | ¿Qué puedes encontrar en Neodigit | | \#2 | 89953706054 | 1 | Mision | 1 | 2016-05-18 07:38:00 |
| \#Y | … | … | … | … | … | | \#N | … | … | … | … | … |
En otras palabras, todos los valores relacionados con una fila se almacenan físicamente uno junto al otro. En otras palabras, todos los valores relacionados con una fila se almacenan físicamente uno junto al otro.
Ejemplos de un DBMS orientado a filas son MySQL, Postgres y MS SQL Server. ¿Cómo?gris } Ejemplos de un DBMS orientado a filas son MySQL, Postgres y MS SQL Server.
En un DBMS orientado a columnas, los datos se almacenan así: En un DBMS orientado a columnas, los datos se almacenan así:
| Fila: | \#0 | \#1 | Nombre | \#Y | | Fila: | \#0 | \#1 | \#2 | \#N |
|-------------|-----------------------------------|-----------------------------------|------------------------------------|-----| |-------------|---------------------------|---------------------|---------------------|-----|
| Argumento: | Sistema abierto. | Sistema abierto. | Método de codificación de datos: | … | | Argumento: | 89354350662 | 90329509958 | 89953706054 | … |
| JavaEnable: | Uno | Cero | Uno | … | | JavaEnable: | 1 | 0 | 1 | … |
| Titular: | Relaciones con inversores | Contáctenos | Misión | … | | Titular: | Relaciones con inversores | Contáctenos | Mision | … |
| GoodEvent: | Uno | Uno | Uno | … | | GoodEvent: | 1 | 1 | 1 | … |
| EventTime: | ¿Qué puedes encontrar en Neodigit | ¿Qué puedes encontrar en Neodigit | ¿Qué puedes encontrar en Neodigit | … | | EventTime: | 2016-05-18 05:19:20 | 2016-05-18 08:10:20 | 2016-05-18 07:38:00 | … |
Estos ejemplos solo muestran el orden en el que se organizan los datos. Los valores de diferentes columnas se almacenan por separado y los datos de la misma columna se almacenan juntos. Estos ejemplos solo muestran el orden en el que se organizan los datos. Los valores de diferentes columnas se almacenan por separado y los datos de la misma columna se almacenan juntos.
Ejemplos de un DBMS orientado a columnas: Vertica, Paraccel (Actian Matrix y Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise y Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid y kdb+. ¿Cómo?gris } Ejemplos de un DBMS orientado a columnas: Vertica, Paraccel (Actian Matrix y Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise y Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid y kdb+.
Los diferentes pedidos para almacenar datos se adaptan mejor a diferentes escenarios. El escenario de acceso a datos se refiere a qué consultas se realizan, con qué frecuencia y en qué proporción; cuántos datos se leen para cada tipo de consulta: filas, columnas y bytes; la relación entre la lectura y la actualización de datos; el tamaño de trabajo de los datos y cómo se utilizan localmente; si se utilizan las transacciones y qué tan aisladas están; Different orders for storing data are better suited to different scenarios. The data access scenario refers to what queries are made, how often, and in what proportion; how much data is read for each type of query rows, columns, and bytes; the relationship between reading and updating data; the working size of the data and how locally it is used; whether transactions are used, and how isolated they are; requirements for data replication and logical integrity; requirements for latency and throughput for each type of query, and so on.
Cuanto mayor sea la carga en el sistema, más importante es personalizar el sistema configurado para que coincida con los requisitos del escenario de uso, y más fino será esta personalización. No existe un sistema que sea igualmente adecuado para escenarios significativamente diferentes. Si un sistema es adaptable a un amplio conjunto de escenarios, bajo una carga alta, el sistema manejará todos los escenarios igualmente mal, o funcionará bien para solo uno o algunos de los escenarios posibles. Cuanto mayor sea la carga en el sistema, más importante es personalizar el sistema configurado para que coincida con los requisitos del escenario de uso, y más fino será esta personalización. No existe un sistema que sea igualmente adecuado para escenarios significativamente diferentes. Si un sistema es adaptable a un amplio conjunto de escenarios, bajo una carga alta, el sistema manejará todos los escenarios igualmente mal, o funcionará bien para solo uno o algunos de los escenarios posibles.
@ -43,7 +46,7 @@ Cuanto mayor sea la carga en el sistema, más importante es personalizar el sist
- Los datos se actualizan en lotes bastante grandes (\> 1000 filas), no por filas individuales; o no se actualiza en absoluto. - Los datos se actualizan en lotes bastante grandes (\> 1000 filas), no por filas individuales; o no se actualiza en absoluto.
- Los datos se agregan a la base de datos pero no se modifican. - Los datos se agregan a la base de datos pero no se modifican.
- Para las lecturas, se extrae un número bastante grande de filas de la base de datos, pero solo un pequeño subconjunto de columnas. - Para las lecturas, se extrae un número bastante grande de filas de la base de datos, pero solo un pequeño subconjunto de columnas.
- Las tablas hijo “wide,” lo que significa que contienen un gran número de columnas. - Las tablas son “wide,” lo que significa que contienen un gran número de columnas.
- Las consultas son relativamente raras (generalmente cientos de consultas por servidor o menos por segundo). - Las consultas son relativamente raras (generalmente cientos de consultas por servidor o menos por segundo).
- Para consultas simples, se permiten latencias de alrededor de 50 ms. - Para consultas simples, se permiten latencias de alrededor de 50 ms.
- Los valores de columna son bastante pequeños: números y cadenas cortas (por ejemplo, 60 bytes por URL). - Los valores de columna son bastante pequeños: números y cadenas cortas (por ejemplo, 60 bytes por URL).
@ -51,7 +54,7 @@ Cuanto mayor sea la carga en el sistema, más importante es personalizar el sist
- Las transacciones no son necesarias. - Las transacciones no son necesarias.
- Bajos requisitos para la coherencia de los datos. - Bajos requisitos para la coherencia de los datos.
- Hay una tabla grande por consulta. Todas las mesas son pequeñas, excepto una. - Hay una tabla grande por consulta. Todas las mesas son pequeñas, excepto una.
- Un resultado de consulta es significativamente menor que los datos de origen. En otras palabras, los datos se filtran o se agregan, por lo que el resultado se ajusta a la memoria RAM de un solo servidor. - Un resultado de consulta es significativamente menor que los datos de origen. En otras palabras, los datos se filtran o se agregan, por lo que el resultado se ajusta a la RAM de un solo servidor.
Es fácil ver que el escenario OLAP es muy diferente de otros escenarios populares (como el acceso OLTP o Key-Value). Por lo tanto, no tiene sentido intentar usar OLTP o una base de datos de valor clave para procesar consultas analíticas si desea obtener un rendimiento decente. Por ejemplo, si intenta usar MongoDB o Redis para análisis, obtendrá un rendimiento muy bajo en comparación con las bases de datos OLAP. Es fácil ver que el escenario OLAP es muy diferente de otros escenarios populares (como el acceso OLTP o Key-Value). Por lo tanto, no tiene sentido intentar usar OLTP o una base de datos de valor clave para procesar consultas analíticas si desea obtener un rendimiento decente. Por ejemplo, si intenta usar MongoDB o Redis para análisis, obtendrá un rendimiento muy bajo en comparación con las bases de datos OLAP.
@ -75,7 +78,7 @@ Ver la diferencia?
2. Dado que los datos se leen en paquetes, es más fácil de comprimir. Los datos en columnas también son más fáciles de comprimir. Esto reduce aún más el volumen de E/S. 2. Dado que los datos se leen en paquetes, es más fácil de comprimir. Los datos en columnas también son más fáciles de comprimir. Esto reduce aún más el volumen de E/S.
3. Debido a la reducción de E / S, más datos se ajustan a la memoria caché del sistema. 3. Debido a la reducción de E / S, más datos se ajustan a la memoria caché del sistema.
Por ejemplo, la consulta “count the number of records for each advertising platform” más caliente “advertising platform ID” columna, que ocupa 1 byte sin comprimir. Si la mayor parte del tráfico no proviene de plataformas publicitarias, puede esperar al menos una compresión de 10 veces de esta columna. Cuando se utiliza un algoritmo de compresión rápida, la descompresión de datos es posible a una velocidad de al menos varios gigabytes de datos sin comprimir por segundo. En otras palabras, esta consulta se puede procesar a una velocidad de aproximadamente varios miles de millones de filas por segundo en un único servidor. Esta velocidad se logra realmente en la práctica. Por ejemplo, la consulta “count the number of records for each advertising platform” requiere leer uno “advertising platform ID” columna, que ocupa 1 byte sin comprimir. Si la mayor parte del tráfico no proviene de plataformas publicitarias, puede esperar al menos una compresión de 10 veces de esta columna. Cuando se utiliza un algoritmo de compresión rápida, la descompresión de datos es posible a una velocidad de al menos varios gigabytes de datos sin comprimir por segundo. En otras palabras, esta consulta se puede procesar a una velocidad de aproximadamente varios miles de millones de filas por segundo en un único servidor. Esta velocidad se logra realmente en la práctica.
<details markdown="1"> <details markdown="1">
@ -121,11 +124,11 @@ SELECT CounterID, count() FROM hits GROUP BY CounterID ORDER BY count() DESC LIM
### CPU {#cpu} ### CPU {#cpu}
Dado que la ejecución de una consulta requiere procesar un gran número de filas, ayuda enviar todas las operaciones para vectores completos en lugar de para filas separadas, o implementar el motor de consultas para que casi no haya costo de envío. Si no lo hace, con cualquier subsistema de disco medio decente, el intérprete de consultas inevitablemente detiene la CPU. Tiene sentido almacenar datos en columnas y procesarlos, cuando sea posible, por columnas. Dado que la ejecución de una consulta requiere procesar un gran número de filas, ayuda enviar todas las operaciones para vectores completos en lugar de para filas separadas, o implementar el motor de consultas para que casi no haya costo de envío. Si no hace esto, con cualquier subsistema de disco medio decente, el intérprete de consultas inevitablemente detiene la CPU. Tiene sentido almacenar datos en columnas y procesarlos, cuando sea posible, por columnas.
Hay dos formas de hacer esto: Hay dos formas de hacer esto:
1. Un vector motor. Todas las operaciones se escriben para vectores, en lugar de para valores separados. Esto significa que no es necesario llamar a las operaciones muy a menudo, y los costos de envío son insignificantes. El código de operación contiene un ciclo interno optimizado. 1. Un vector motor. Todas las operaciones se escriben para vectores, en lugar de para valores separados. Esto significa que no necesita llamar a las operaciones con mucha frecuencia, y los costos de envío son insignificantes. El código de operación contiene un ciclo interno optimizado.
2. Generación de código. El código generado para la consulta tiene todas las llamadas indirectas. 2. Generación de código. El código generado para la consulta tiene todas las llamadas indirectas.
@ -133,4 +136,4 @@ Esto no se hace en “normal” bases de datos, porque no tiene sentido cuando s
Tenga en cuenta que para la eficiencia de la CPU, el lenguaje de consulta debe ser declarativo (SQL o MDX), o al menos un vector (J, K). La consulta solo debe contener bucles implícitos, lo que permite la optimización. Tenga en cuenta que para la eficiencia de la CPU, el lenguaje de consulta debe ser declarativo (SQL o MDX), o al menos un vector (J, K). La consulta solo debe contener bucles implícitos, lo que permite la optimización.
[Artículo Original](https://clickhouse.tech/docs/es/) <!--hide--> {## [Artículo Original](https://clickhouse.tech/docs/en/) ##}

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 17
toc_title: "Cliente de l\xEDnea de comandos"
--- ---
# Cliente de línea de comandos {#command-line-client} # Cliente de línea de comandos {#command-line-client}
@ -86,7 +89,7 @@ Formatee una consulta como de costumbre, luego coloque los valores que desea pas
``` ```
- `name` — Placeholder identifier. In the console client it should be used in app parameters as `--param_<name> = value`. - `name` — Placeholder identifier. In the console client it should be used in app parameters as `--param_<name> = value`.
- `data type` — [Tipo de datos](../data_types/index.md) del valor del parámetro de la aplicación. Por ejemplo, una estructura de datos como `(integer, ('string', integer))` puede tener el `Tuple(UInt8, Tuple(String, UInt8))` tipo de datos (también puede usar otro [Entero](../data_types/int_uint.md) tipo). - `data type` — [Tipo de datos](../sql_reference/data_types/index.md) del valor del parámetro de la aplicación. Por ejemplo, una estructura de datos como `(integer, ('string', integer))` puede tener el `Tuple(UInt8, Tuple(String, UInt8))` tipo de datos (también puede usar otro [entero](../sql_reference/data_types/int_uint.md) tipo).
#### Ejemplo {#example} #### Ejemplo {#example}
@ -143,4 +146,4 @@ Ejemplo de un archivo de configuración:
</config> </config>
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/cli/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/interfaces/cli/) <!--hide-->

View File

@ -1,9 +1,12 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 24
toc_title: Biblioteca de clientes de C++
--- ---
# Biblioteca de clientes de C++ {#c-client-library} # Biblioteca de clientes de C++ {#c-client-library}
Ver README en [Bienvenidos](https://github.com/ClickHouse/clickhouse-cpp) repositorio. Ver README en [Bienvenidos](https://github.com/ClickHouse/clickhouse-cpp) repositorio.
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/cpp/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/interfaces/cpp/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 21
toc_title: Formatos de entrada y salida
--- ---
# Formatos para datos de entrada y salida {#formats} # Formatos para datos de entrada y salida {#formats}
@ -107,9 +110,9 @@ Solo se escapa un pequeño conjunto de símbolos. Puede tropezar fácilmente con
Las matrices se escriben como una lista de valores separados por comas entre corchetes. Los elementos numéricos de la matriz tienen el formato normal. `Date` y `DateTime` están escritos entre comillas simples. Las cadenas se escriben entre comillas simples con las mismas reglas de escape que las anteriores. Las matrices se escriben como una lista de valores separados por comas entre corchetes. Los elementos numéricos de la matriz tienen el formato normal. `Date` y `DateTime` están escritos entre comillas simples. Las cadenas se escriben entre comillas simples con las mismas reglas de escape que las anteriores.
[NULL](../query_language/syntax.md) se formatea como `\N`. [NULL](../sql_reference/syntax.md) se formatea como `\N`.
Cada elemento de [Anidar](../data_types/nested_data_structures/nested.md) estructuras se representa como una matriz. Cada elemento de [Anidar](../sql_reference/data_types/nested_data_structures/nested.md) estructuras se representa como una matriz.
Por ejemplo: Por ejemplo:
@ -314,7 +317,7 @@ format_template_resultset = '/some/path/resultset.format', format_template_row =
## TSKV {#tskv} ## TSKV {#tskv}
Similar a TabSeparated , pero genera un valor en formato name=value . Los nombres se escapan de la misma manera que en el formato TabSeparated, y el símbolo = también se escapa. Similar a TabSeparated, pero las salidas de un valor en nombre=valor de formato. Los nombres se escapó de la misma manera como en TabSeparated formato, y el símbolo = es también escapó.
``` text ``` text
SearchPhrase= count()=8267016 SearchPhrase= count()=8267016
@ -329,7 +332,7 @@ SearchPhrase=curtain designs count()=1064
SearchPhrase=baku count()=1000 SearchPhrase=baku count()=1000
``` ```
[NULL](../query_language/syntax.md) se formatea como `\N`. [NULL](../sql_reference/syntax.md) se formatea como `\N`.
``` sql ``` sql
SELECT * FROM t_null FORMAT TSKV SELECT * FROM t_null FORMAT TSKV
@ -461,7 +464,7 @@ Si la consulta contiene GROUP BY, rows\_before\_limit\_at\_least es el número e
Este formato solo es apropiado para generar un resultado de consulta, pero no para analizar (recuperar datos para insertar en una tabla). Este formato solo es apropiado para generar un resultado de consulta, pero no para analizar (recuperar datos para insertar en una tabla).
Soporta ClickHouse [NULL](../query_language/syntax.md), que se muestra como `null` en la salida JSON. Soporta ClickHouse [NULL](../sql_reference/syntax.md), que se muestra como `null` en la salida JSON.
Ver también el [JSONEachRow](#jsoneachrow) formato. Ver también el [JSONEachRow](#jsoneachrow) formato.
@ -538,7 +541,7 @@ ClickHouse ignora los espacios entre los elementos y las comas después de los o
**Procesamiento de valores omitidos** **Procesamiento de valores omitidos**
ClickHouse sustituye los valores omitidos por los valores predeterminados para el [tipos de datos](../data_types/index.md). ClickHouse sustituye los valores omitidos por los valores predeterminados para el [tipos de datos](../sql_reference/data_types/index.md).
Si `DEFAULT expr` se especifica, ClickHouse utiliza diferentes reglas de sustitución dependiendo de la [Entrada\_format\_defaults\_for\_omitted\_fields](../operations/settings/settings.md#session_settings-input_format_defaults_for_omitted_fields) configuración. Si `DEFAULT expr` se especifica, ClickHouse utiliza diferentes reglas de sustitución dependiendo de la [Entrada\_format\_defaults\_for\_omitted\_fields](../operations/settings/settings.md#session_settings-input_format_defaults_for_omitted_fields) configuración.
@ -583,7 +586,7 @@ A diferencia de la [JSON](#json) formato, no hay sustitución de secuencias UTF-
### Uso de estructuras anidadas {#jsoneachrow-nested} ### Uso de estructuras anidadas {#jsoneachrow-nested}
Si tienes una mesa con [Anidar](../data_types/nested_data_structures/nested.md) columnas de tipo de datos, puede insertar datos JSON con la misma estructura. Habilite esta función con el [Entrada\_format\_import\_nested\_json](../operations/settings/settings.md#settings-input_format_import_nested_json) configuración. Si tienes una mesa con [Anidar](../sql_reference/data_types/nested_data_structures/nested.md) columnas de tipo de datos, puede insertar datos JSON con la misma estructura. Habilite esta función con el [Entrada\_format\_import\_nested\_json](../operations/settings/settings.md#settings-input_format_import_nested_json) configuración.
Por ejemplo, considere la siguiente tabla: Por ejemplo, considere la siguiente tabla:
@ -657,7 +660,7 @@ Salidas de datos como tablas de arte Unicode, también utilizando secuencias de
Se dibuja una cuadrícula completa de la tabla, y cada fila ocupa dos líneas en la terminal. Se dibuja una cuadrícula completa de la tabla, y cada fila ocupa dos líneas en la terminal.
Cada bloque de resultados se muestra como una tabla separada. Esto es necesario para que los bloques se puedan generar sin resultados de almacenamiento en búfer (el almacenamiento en búfer sería necesario para calcular previamente el ancho visible de todos los valores). Cada bloque de resultados se muestra como una tabla separada. Esto es necesario para que los bloques se puedan generar sin resultados de almacenamiento en búfer (el almacenamiento en búfer sería necesario para calcular previamente el ancho visible de todos los valores).
[NULL](../query_language/syntax.md) se emite como `ᴺᵁᴸᴸ`. [NULL](../sql_reference/syntax.md) se emite como `ᴺᵁᴸᴸ`.
Ejemplo (mostrado para el [PrettyCompact](#prettycompact) formato): Ejemplo (mostrado para el [PrettyCompact](#prettycompact) formato):
@ -761,7 +764,7 @@ FixedString se representa simplemente como una secuencia de bytes.
La matriz se representa como una longitud varint (sin signo [LEB128](https://en.wikipedia.org/wiki/LEB128)), seguido de elementos sucesivos de la matriz. La matriz se representa como una longitud varint (sin signo [LEB128](https://en.wikipedia.org/wiki/LEB128)), seguido de elementos sucesivos de la matriz.
Para [NULL](../query_language/syntax.md#null-literal) soporte, se añade un byte adicional que contiene 1 o 0 antes de cada [NULL](../data_types/nullable.md) valor. Si 1, entonces el valor es `NULL` y este byte se interpreta como un valor separado. Si es 0, el valor después del byte no es `NULL`. Para [NULL](../sql_reference/syntax.md#null-literal) soporte, se añade un byte adicional que contiene 1 o 0 antes de cada [NULL](../sql_reference/data_types/nullable.md) valor. Si 1, entonces el valor es `NULL` y este byte se interpreta como un valor separado. Si es 0, el valor después del byte no es `NULL`.
## RowBinaryWithNamesAndTypes {#rowbinarywithnamesandtypes} ## RowBinaryWithNamesAndTypes {#rowbinarywithnamesandtypes}
@ -773,7 +776,7 @@ Similar a [RowBinary](#rowbinary), pero con encabezado añadido:
## Valor {#data-format-values} ## Valor {#data-format-values}
Imprime cada fila entre paréntesis. Las filas están separadas por comas. No hay coma después de la última fila. Los valores dentro de los corchetes también están separados por comas. Los números se emiten en formato decimal sin comillas. Las matrices se emiten entre corchetes. Las cadenas, fechas y fechas con horas se generan entre comillas. Las reglas de escape y el análisis son similares a las [TabSeparated](#tabseparated) formato. Durante el formateo, los espacios adicionales no se insertan, pero durante el análisis, se permiten y omiten (excepto los espacios dentro de los valores de la matriz, que no están permitidos). [NULL](../query_language/syntax.md) se representa como `NULL`. Imprime cada fila entre paréntesis. Las filas están separadas por comas. No hay coma después de la última fila. Los valores dentro de los corchetes también están separados por comas. Los números se emiten en formato decimal sin comillas. Las matrices se emiten entre corchetes. Las cadenas, fechas y fechas con horas se generan entre comillas. Las reglas de escape y el análisis son similares a las [TabSeparated](#tabseparated) formato. Durante el formateo, los espacios adicionales no se insertan, pero durante el análisis, se permiten y omiten (excepto los espacios dentro de los valores de la matriz, que no están permitidos). [NULL](../sql_reference/syntax.md) se representa como `NULL`.
The minimum set of characters that you need to escape when passing data in Values format: single quotes and backslashes. The minimum set of characters that you need to escape when passing data in Values format: single quotes and backslashes.
@ -783,9 +786,9 @@ Ver también: [input\_format\_values\_interpret\_expressions](../operations/sett
## Vertical {#vertical} ## Vertical {#vertical}
Imprime cada valor en una línea independiente con el nombre de columna especificado. Este formato es conveniente para imprimir solo una o varias filas si cada fila consta de un gran número de columnas. Imprime cada valor en una línea independiente con el nombre de la columna especificada. Este formato es conveniente para imprimir solo una o varias filas si cada fila consta de un gran número de columnas.
[NULL](../query_language/syntax.md) se emite como `ᴺᵁᴸᴸ`. [NULL](../sql_reference/syntax.md) se emite como `ᴺᵁᴸᴸ`.
Ejemplo: Ejemplo:
@ -964,7 +967,7 @@ message MessageType {
``` ```
ClickHouse intenta encontrar una columna llamada `x.y.z` (o `x_y_z` o `X.y_Z` y así sucesivamente). ClickHouse intenta encontrar una columna llamada `x.y.z` (o `x_y_z` o `X.y_Z` y así sucesivamente).
Los mensajes anidados son adecuados para [estructuras de datos anidados](../data_types/nested_data_structures/nested.md). Los mensajes anidados son adecuados para [estructuras de datos anidados](../sql_reference/data_types/nested_data_structures/nested.md).
Valores predeterminados definidos en un esquema protobuf como este Valores predeterminados definidos en un esquema protobuf como este
@ -976,7 +979,7 @@ message MessageType {
} }
``` ```
no se aplican; el [valores predeterminados de la tabla](../query_language/create.md#create-default-values) se utilizan en lugar de ellos. no se aplican; el [valores predeterminados de la tabla](../sql_reference/statements/create.md#create-default-values) se utilizan en lugar de ellos.
ClickHouse entra y emite mensajes protobuf en el `length-delimited` formato. ClickHouse entra y emite mensajes protobuf en el `length-delimited` formato.
Significa que antes de cada mensaje debe escribirse su longitud como un [varint](https://developers.google.com/protocol-buffers/docs/encoding#varints). Significa que antes de cada mensaje debe escribirse su longitud como un [varint](https://developers.google.com/protocol-buffers/docs/encoding#varints).
@ -990,23 +993,23 @@ El formato ClickHouse Avro admite lectura y escritura [Archivos de datos Avro](h
### Coincidencia de tipos de datos {#data_types-matching} ### Coincidencia de tipos de datos {#data_types-matching}
La siguiente tabla muestra los tipos de datos admitidos y cómo coinciden con ClickHouse [tipos de datos](../data_types/index.md) en `INSERT` y `SELECT` consulta. La siguiente tabla muestra los tipos de datos admitidos y cómo coinciden con ClickHouse [tipos de datos](../sql_reference/data_types/index.md) en `INSERT` y `SELECT` consulta.
| Tipo de datos Avro `INSERT` | Tipo de datos ClickHouse | Tipo de datos Avro `SELECT` | | Tipo de datos Avro `INSERT` | Tipo de datos ClickHouse | Tipo de datos Avro `SELECT` |
|---------------------------------------------|---------------------------------------------------------------------------------------------|------------------------------| |---------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|------------------------------|
| `boolean`, `int`, `long`, `float`, `double` | [¿Cómo funciona?)](../data_types/int_uint.md), [UInt(8\|16\|32)](../data_types/int_uint.md) | `int` | | `boolean`, `int`, `long`, `float`, `double` | [¿cómo funciona?)](../sql_reference/data_types/int_uint.md), [UInt(8\|16\|32)](../sql_reference/data_types/int_uint.md) | `int` |
| `boolean`, `int`, `long`, `float`, `double` | [Int64](../data_types/int_uint.md), [UInt64](../data_types/int_uint.md) | `long` | | `boolean`, `int`, `long`, `float`, `double` | [Int64](../sql_reference/data_types/int_uint.md), [UInt64](../sql_reference/data_types/int_uint.md) | `long` |
| `boolean`, `int`, `long`, `float`, `double` | [Float32](../data_types/float.md) | `float` | | `boolean`, `int`, `long`, `float`, `double` | [Float32](../sql_reference/data_types/float.md) | `float` |
| `boolean`, `int`, `long`, `float`, `double` | [Float64](../data_types/float.md) | `double` | | `boolean`, `int`, `long`, `float`, `double` | [Float64](../sql_reference/data_types/float.md) | `double` |
| `bytes`, `string`, `fixed`, `enum` | [Cadena](../data_types/string.md) | `bytes` | | `bytes`, `string`, `fixed`, `enum` | [Cadena](../sql_reference/data_types/string.md) | `bytes` |
| `bytes`, `string`, `fixed` | [Cadena fija (N)](../data_types/fixedstring.md) | `fixed(N)` | | `bytes`, `string`, `fixed` | [Cadena fija (N)](../sql_reference/data_types/fixedstring.md) | `fixed(N)` |
| `enum` | [Enum (8\|16)](../data_types/enum.md) | `enum` | | `enum` | [Enum (8\|16)](../sql_reference/data_types/enum.md) | `enum` |
| `array(T)` | [Matriz (T)](../data_types/array.md) | `array(T)` | | `array(T)` | [Matriz (T)](../sql_reference/data_types/array.md) | `array(T)` |
| `union(null, T)`, `union(T, null)` | [Nivel de Cifrado WEP)](../data_types/date.md) | `union(null, T)` | | `union(null, T)`, `union(T, null)` | [Nivel de Cifrado WEP)](../sql_reference/data_types/date.md) | `union(null, T)` |
| `null` | [Nullable (nada)](../data_types/special_data_types/nothing.md) | `null` | | `null` | [Nullable (nada)](../sql_reference/data_types/special_data_types/nothing.md) | `null` |
| `int (date)` \* | [Fecha](../data_types/date.md) | `int (date)` \* | | `int (date)` \* | [Fecha](../sql_reference/data_types/date.md) | `int (date)` \* |
| `long (timestamp-millis)` \* | [¿Qué puedes encontrar en Neodigit)](../data_types/datetime.md) | `long (timestamp-millis)` \* | | `long (timestamp-millis)` \* | [¿qué puedes encontrar en neodigit)](../sql_reference/data_types/datetime.md) | `long (timestamp-millis)` \* |
| `long (timestamp-micros)` \* | [Cómo hacer esto?)](../data_types/datetime.md) | `long (timestamp-micros)` \* | | `long (timestamp-micros)` \* | [Cómo hacer esto?)](../sql_reference/data_types/datetime.md) | `long (timestamp-micros)` \* |
\* [Tipos lógicos Avro](http://avro.apache.org/docs/current/spec.html#Logical+Types) \* [Tipos lógicos Avro](http://avro.apache.org/docs/current/spec.html#Logical+Types)
@ -1060,7 +1063,7 @@ Lo mismo que [Avro](#data-format-avro)
### Uso {#usage} ### Uso {#usage}
Para verificar rápidamente la resolución del esquema, puede usar [Método de codificación de datos:](https://github.com/edenhill/kafkacat) con [Sistema abierto.](../operations/utils/clickhouse-local.md): Para verificar rápidamente la resolución del esquema, puede usar [Método de codificación de datos:](https://github.com/edenhill/kafkacat) con [Sistema abierto.](../operations/utilities/clickhouse-local.md):
``` bash ``` bash
$ kafkacat -b kafka-broker -C -t topic1 -o beginning -f '%s' -c 3 | clickhouse-local --input-format AvroConfluent --format_avro_schema_registry_url 'http://schema-registry' -S "field1 Int64, field2 String" -q 'select * from table' $ kafkacat -b kafka-broker -C -t topic1 -o beginning -f '%s' -c 3 | clickhouse-local --input-format AvroConfluent --format_avro_schema_registry_url 'http://schema-registry' -S "field1 Int64, field2 String" -q 'select * from table'
@ -1069,7 +1072,7 @@ $ kafkacat -b kafka-broker -C -t topic1 -o beginning -f '%s' -c 3 | clickhouse-
3 c 3 c
``` ```
Utilizar `AvroConfluent` con [Kafka](../operations/table_engines/kafka.md): Utilizar `AvroConfluent` con [Kafka](../engines/table_engines/integrations/kafka.md):
``` sql ``` sql
CREATE TABLE topic1_stream CREATE TABLE topic1_stream
@ -1098,25 +1101,25 @@ SELECT * FROM topic1_stream;
### Coincidencia de tipos de datos {#data_types-matching-2} ### Coincidencia de tipos de datos {#data_types-matching-2}
La siguiente tabla muestra los tipos de datos admitidos y cómo coinciden con ClickHouse [tipos de datos](../data_types/index.md) en `INSERT` y `SELECT` consulta. La siguiente tabla muestra los tipos de datos admitidos y cómo coinciden con ClickHouse [tipos de datos](../sql_reference/data_types/index.md) en `INSERT` y `SELECT` consulta.
| Tipo de datos de parquet (`INSERT`) | Tipo de datos ClickHouse | Tipo de datos de parquet (`SELECT`) | | Tipo de datos de parquet (`INSERT`) | Tipo de datos ClickHouse | Tipo de datos de parquet (`SELECT`) |
|-------------------------------------|---------------------------------------------|-------------------------------------| |-------------------------------------|-----------------------------------------------------------|-------------------------------------|
| `UINT8`, `BOOL` | [UInt8](../data_types/int_uint.md) | `UINT8` | | `UINT8`, `BOOL` | [UInt8](../sql_reference/data_types/int_uint.md) | `UINT8` |
| `INT8` | [Int8](../data_types/int_uint.md) | `INT8` | | `INT8` | [Int8](../sql_reference/data_types/int_uint.md) | `INT8` |
| `UINT16` | [UInt16](../data_types/int_uint.md) | `UINT16` | | `UINT16` | [UInt16](../sql_reference/data_types/int_uint.md) | `UINT16` |
| `INT16` | [Int16](../data_types/int_uint.md) | `INT16` | | `INT16` | [Int16](../sql_reference/data_types/int_uint.md) | `INT16` |
| `UINT32` | [UInt32](../data_types/int_uint.md) | `UINT32` | | `UINT32` | [UInt32](../sql_reference/data_types/int_uint.md) | `UINT32` |
| `INT32` | [Int32](../data_types/int_uint.md) | `INT32` | | `INT32` | [Int32](../sql_reference/data_types/int_uint.md) | `INT32` |
| `UINT64` | [UInt64](../data_types/int_uint.md) | `UINT64` | | `UINT64` | [UInt64](../sql_reference/data_types/int_uint.md) | `UINT64` |
| `INT64` | [Int64](../data_types/int_uint.md) | `INT64` | | `INT64` | [Int64](../sql_reference/data_types/int_uint.md) | `INT64` |
| `FLOAT`, `HALF_FLOAT` | [Float32](../data_types/float.md) | `FLOAT` | | `FLOAT`, `HALF_FLOAT` | [Float32](../sql_reference/data_types/float.md) | `FLOAT` |
| `DOUBLE` | [Float64](../data_types/float.md) | `DOUBLE` | | `DOUBLE` | [Float64](../sql_reference/data_types/float.md) | `DOUBLE` |
| `DATE32` | [Fecha](../data_types/date.md) | `UINT16` | | `DATE32` | [Fecha](../sql_reference/data_types/date.md) | `UINT16` |
| `DATE64`, `TIMESTAMP` | [FechaHora](../data_types/datetime.md) | `UINT32` | | `DATE64`, `TIMESTAMP` | [FechaHora](../sql_reference/data_types/datetime.md) | `UINT32` |
| `STRING`, `BINARY` | [Cadena](../data_types/string.md) | `STRING` | | `STRING`, `BINARY` | [Cadena](../sql_reference/data_types/string.md) | `STRING` |
| — | [Cadena fija](../data_types/fixedstring.md) | `STRING` | | — | [Cadena fija](../sql_reference/data_types/fixedstring.md) | `STRING` |
| `DECIMAL` | [Decimal](../data_types/decimal.md) | `DECIMAL` | | `DECIMAL` | [Decimal](../sql_reference/data_types/decimal.md) | `DECIMAL` |
ClickHouse admite una precisión configurable de `Decimal` tipo. El `INSERT` consulta trata el Parquet `DECIMAL` tipo como el ClickHouse `Decimal128` tipo. ClickHouse admite una precisión configurable de `Decimal` tipo. El `INSERT` consulta trata el Parquet `DECIMAL` tipo como el ClickHouse `Decimal128` tipo.
@ -1138,7 +1141,7 @@ Puede seleccionar datos de una tabla ClickHouse y guardarlos en algún archivo e
$ clickhouse-client --query="SELECT * FROM {some_table} FORMAT Parquet" > {some_file.pq} $ clickhouse-client --query="SELECT * FROM {some_table} FORMAT Parquet" > {some_file.pq}
``` ```
Para intercambiar datos con Hadoop, puede usar [Motor de mesa HDFS](../operations/table_engines/hdfs.md). Para intercambiar datos con Hadoop, puede usar [Motor de mesa HDFS](../engines/table_engines/integrations/hdfs.md).
## ORC {#data-format-orc} ## ORC {#data-format-orc}
@ -1146,24 +1149,24 @@ Para intercambiar datos con Hadoop, puede usar [Motor de mesa HDFS](../operation
### Coincidencia de tipos de datos {#data_types-matching-3} ### Coincidencia de tipos de datos {#data_types-matching-3}
La siguiente tabla muestra los tipos de datos admitidos y cómo coinciden con ClickHouse [tipos de datos](../data_types/index.md) en `INSERT` consulta. La siguiente tabla muestra los tipos de datos admitidos y cómo coinciden con ClickHouse [tipos de datos](../sql_reference/data_types/index.md) en `INSERT` consulta.
| Tipo de datos ORC (`INSERT`) | Tipo de datos ClickHouse | | Tipo de datos ORC (`INSERT`) | Tipo de datos ClickHouse |
|------------------------------|----------------------------------------| |------------------------------|------------------------------------------------------|
| `UINT8`, `BOOL` | [UInt8](../data_types/int_uint.md) | | `UINT8`, `BOOL` | [UInt8](../sql_reference/data_types/int_uint.md) |
| `INT8` | [Int8](../data_types/int_uint.md) | | `INT8` | [Int8](../sql_reference/data_types/int_uint.md) |
| `UINT16` | [UInt16](../data_types/int_uint.md) | | `UINT16` | [UInt16](../sql_reference/data_types/int_uint.md) |
| `INT16` | [Int16](../data_types/int_uint.md) | | `INT16` | [Int16](../sql_reference/data_types/int_uint.md) |
| `UINT32` | [UInt32](../data_types/int_uint.md) | | `UINT32` | [UInt32](../sql_reference/data_types/int_uint.md) |
| `INT32` | [Int32](../data_types/int_uint.md) | | `INT32` | [Int32](../sql_reference/data_types/int_uint.md) |
| `UINT64` | [UInt64](../data_types/int_uint.md) | | `UINT64` | [UInt64](../sql_reference/data_types/int_uint.md) |
| `INT64` | [Int64](../data_types/int_uint.md) | | `INT64` | [Int64](../sql_reference/data_types/int_uint.md) |
| `FLOAT`, `HALF_FLOAT` | [Float32](../data_types/float.md) | | `FLOAT`, `HALF_FLOAT` | [Float32](../sql_reference/data_types/float.md) |
| `DOUBLE` | [Float64](../data_types/float.md) | | `DOUBLE` | [Float64](../sql_reference/data_types/float.md) |
| `DATE32` | [Fecha](../data_types/date.md) | | `DATE32` | [Fecha](../sql_reference/data_types/date.md) |
| `DATE64`, `TIMESTAMP` | [FechaHora](../data_types/datetime.md) | | `DATE64`, `TIMESTAMP` | [FechaHora](../sql_reference/data_types/datetime.md) |
| `STRING`, `BINARY` | [Cadena](../data_types/string.md) | | `STRING`, `BINARY` | [Cadena](../sql_reference/data_types/string.md) |
| `DECIMAL` | [Decimal](../data_types/decimal.md) | | `DECIMAL` | [Decimal](../sql_reference/data_types/decimal.md) |
ClickHouse soporta la precisión configurable de la `Decimal` tipo. El `INSERT` consulta trata el ORC `DECIMAL` tipo como el ClickHouse `Decimal128` tipo. ClickHouse soporta la precisión configurable de la `Decimal` tipo. El `INSERT` consulta trata el ORC `DECIMAL` tipo como el ClickHouse `Decimal128` tipo.
@ -1179,7 +1182,7 @@ Puede insertar datos ORC de un archivo en la tabla ClickHouse mediante el siguie
$ cat filename.orc | clickhouse-client --query="INSERT INTO some_table FORMAT ORC" $ cat filename.orc | clickhouse-client --query="INSERT INTO some_table FORMAT ORC"
``` ```
Para intercambiar datos con Hadoop, puede usar [Motor de mesa HDFS](../operations/table_engines/hdfs.md). Para intercambiar datos con Hadoop, puede usar [Motor de mesa HDFS](../engines/table_engines/integrations/hdfs.md).
## Esquema de formato {#formatschema} ## Esquema de formato {#formatschema}
@ -1191,11 +1194,11 @@ Si el archivo tiene la extensión estándar para el formato (por ejemplo, `.prot
se puede omitir y en este caso, el esquema de formato se ve así `schemafile:MessageType`. se puede omitir y en este caso, el esquema de formato se ve así `schemafile:MessageType`.
Si introduce o emite datos a través del [cliente](../interfaces/cli.md) en el [modo interactivo](../interfaces/cli.md#cli_usage), el nombre de archivo especificado en el esquema de formato Si introduce o emite datos a través del [cliente](../interfaces/cli.md) en el [modo interactivo](../interfaces/cli.md#cli_usage), el nombre de archivo especificado en el esquema de formato
puede contener una ruta absoluta o una ruta relativa al directorio actual en el cliente. puede contener una ruta de acceso absoluta o una ruta relativa al directorio actual en el cliente.
Si utiliza el cliente en el [modo por lotes](../interfaces/cli.md#cli_usage), la ruta de acceso al esquema debe ser relativa por razones de seguridad. Si utiliza el cliente en el [modo por lotes](../interfaces/cli.md#cli_usage), la ruta de acceso al esquema debe ser relativa por razones de seguridad.
Si introduce o emite datos a través del [Interfaz HTTP](../interfaces/http.md) el nombre de archivo especificado en el esquema de formato Si introduce o emite datos a través del [Interfaz HTTP](../interfaces/http.md) el nombre de archivo especificado en el esquema de formato
debe estar ubicado en el directorio especificado en [format\_schema\_path](../operations/server_settings/settings.md#server_settings-format_schema_path) debe estar ubicado en el directorio especificado en [format\_schema\_path](../operations/server_configuration_parameters/settings.md#server_configuration_parameters-format_schema_path)
en la configuración del servidor. en la configuración del servidor.
## Salto de errores {#skippingerrors} ## Salto de errores {#skippingerrors}

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 19
toc_title: Interfaz HTTP
--- ---
# Interfaz HTTP {#http-interface} # Interfaz HTTP {#http-interface}
@ -8,7 +11,7 @@ La interfaz HTTP le permite usar ClickHouse en cualquier plataforma desde cualqu
De forma predeterminada, clickhouse-server escucha HTTP en el puerto 8123 (esto se puede cambiar en la configuración). De forma predeterminada, clickhouse-server escucha HTTP en el puerto 8123 (esto se puede cambiar en la configuración).
Si realiza una solicitud GET / sin parámetros, devuelve 200 códigos de respuesta y la cadena que definió en [http\_server\_default\_response](../operations/server_settings/settings.md#server_settings-http_server_default_response) valor predeterminado “Ok.” (con un avance de línea al final) Si realiza una solicitud GET / sin parámetros, devuelve 200 códigos de respuesta y la cadena que definió en [http\_server\_default\_response](../operations/server_configuration_parameters/settings.md#server_configuration_parameters-http_server_default_response) valor predeterminado “Ok.” (con un avance de línea al final)
``` bash ``` bash
$ curl 'http://localhost:8123/' $ curl 'http://localhost:8123/'
@ -149,7 +152,7 @@ Puede utilizar el formato interno de compresión ClickHouse al transmitir datos.
Si ha especificado `compress=1` en la URL, el servidor comprime los datos que le envía. Si ha especificado `compress=1` en la URL, el servidor comprime los datos que le envía.
Si ha especificado `decompress=1` en la dirección URL, el servidor descomprime los mismos datos que `POST` método. Si ha especificado `decompress=1` en la dirección URL, el servidor descomprime los mismos datos que `POST` método.
También puede optar por utilizar [Compresión HTTP](https://en.wikipedia.org/wiki/HTTP_compression). Para enviar un `POST` solicitud, agregue el encabezado de solicitud `Content-Encoding: compression_method`. Para que ClickHouse comprima la respuesta, debe agregar `Accept-Encoding: compression_method`. Soporte ClickHouse `gzip`, `br`, y `deflate` [métodos de compresión](https://en.wikipedia.org/wiki/HTTP_compression#Content-Encoding_tokens). Para habilitar la compresión HTTP, debe usar ClickHouse [enable\_http\_compression](../operations/settings/settings.md#settings-enable_http_compression) configuración. Puede configurar el nivel de compresión de datos [http\_zlib\_compression\_level](#settings-http_zlib_compression_level) para todos los métodos de compresión. También puede optar por utilizar [Compresión HTTP](https://en.wikipedia.org/wiki/HTTP_compression). Para enviar un `POST` solicitud, agregue el encabezado de solicitud `Content-Encoding: compression_method`. Para que ClickHouse comprima la respuesta, debe agregar `Accept-Encoding: compression_method`. Soporta ClickHouse `gzip`, `br`, y `deflate` [métodos de compresión](https://en.wikipedia.org/wiki/HTTP_compression#Content-Encoding_tokens). Para habilitar la compresión HTTP, debe usar ClickHouse [enable\_http\_compression](../operations/settings/settings.md#settings-enable_http_compression) configuración. Puede configurar el nivel de compresión de datos [http\_zlib\_compression\_level](#settings-http_zlib_compression_level) para todos los métodos de compresión.
Puede usar esto para reducir el tráfico de red al transmitir una gran cantidad de datos o para crear volcados que se comprimen inmediatamente. Puede usar esto para reducir el tráfico de red al transmitir una gran cantidad de datos o para crear volcados que se comprimen inmediatamente.
@ -243,11 +246,11 @@ X-ClickHouse-Progress: {"read_rows":"8783786","read_bytes":"819092887","total_ro
Posibles campos de encabezado: Posibles campos de encabezado:
- `read_rows` — Número de filas leídas. - `read_rows` — Number of rows read.
- `read_bytes` — Volumen de datos leídos en bytes. - `read_bytes` — Volume of data read in bytes.
- `total_rows_to_read`Número total de filas a leer. - `total_rows_to_read`Total number of rows to be read.
- `written_rows` — Número de filas escritas. - `written_rows` — Number of rows written.
- `written_bytes` — Volumen de datos escritos en bytes. - `written_bytes` — Volume of data written in bytes.
Las solicitudes en ejecución no se detienen automáticamente si se pierde la conexión HTTP. El análisis y el formato de datos se realizan en el lado del servidor, y el uso de la red puede ser ineficaz. Las solicitudes en ejecución no se detienen automáticamente si se pierde la conexión HTTP. El análisis y el formato de datos se realizan en el lado del servidor, y el uso de la red puede ser ineficaz.
Opcional query\_id parámetro se puede pasar como el ID de consulta (cualquier cadena). Para obtener más información, consulte la sección “Settings, replace\_running\_query”. Opcional query\_id parámetro se puede pasar como el ID de consulta (cualquier cadena). Para obtener más información, consulte la sección “Settings, replace\_running\_query”.
@ -282,4 +285,227 @@ Puede crear una consulta con parámetros y pasar valores para ellos desde los pa
$ curl -sS "<address>?param_id=2&param_phrase=test" -d "SELECT * FROM table WHERE int_column = {id:UInt8} and string_column = {phrase:String}" $ curl -sS "<address>?param_id=2&param_phrase=test" -d "SELECT * FROM table WHERE int_column = {id:UInt8} and string_column = {phrase:String}"
``` ```
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/http_interface/) <!--hide--> ## Interfaz HTTP predefinida {#predefined_http_interface}
ClickHouse admite consultas específicas a través de la interfaz HTTP. Por ejemplo, puede escribir datos en una tabla de la siguiente manera:
``` bash
$ echo '(4),(5),(6)' | curl 'http://localhost:8123/?query=INSERT%20INTO%20t%20VALUES' --data-binary @-
```
ClickHouse también es compatible con la interfaz HTTP predefinida que puede ayudarle a una integración más fácil con herramientas de terceros como [Prometheus exportador](https://github.com/percona-lab/clickhouse_exporter).
Ejemplo:
- En primer lugar, agregue esta sección al archivo de configuración del servidor:
<!-- -->
``` xml
<http_handlers>
<predefine_query_handler>
<url>/metrics</url>
<method>GET</method>
<queries>
<query>SELECT * FROM system.metrics LIMIT 5 FORMAT Template SETTINGS format_template_resultset = 'prometheus_template_output_format_resultset', format_template_row = 'prometheus_template_output_format_row', format_template_rows_between_delimiter = '\n'</query>
</queries>
</predefine_query_handler>
</http_handlers>
```
- Ahora puede solicitar la url directamente para los datos en el formato Prometheus:
<!-- -->
``` bash
curl -vvv 'http://localhost:8123/metrics'
* Trying ::1...
* Connected to localhost (::1) port 8123 (#0)
> GET /metrics HTTP/1.1
> Host: localhost:8123
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Wed, 27 Nov 2019 08:54:25 GMT
< Connection: Keep-Alive
< Content-Type: text/plain; charset=UTF-8
< X-ClickHouse-Server-Display-Name: i-tl62qd0o
< Transfer-Encoding: chunked
< X-ClickHouse-Query-Id: f39235f6-6ed7-488c-ae07-c7ceafb960f6
< Keep-Alive: timeout=3
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
<
# HELP "Query" "Number of executing queries"
# TYPE "Query" counter
"Query" 1
# HELP "Merge" "Number of executing background merges"
# TYPE "Merge" counter
"Merge" 0
# HELP "PartMutation" "Number of mutations (ALTER DELETE/UPDATE)"
# TYPE "PartMutation" counter
"PartMutation" 0
# HELP "ReplicatedFetch" "Number of data parts being fetched from replica"
# TYPE "ReplicatedFetch" counter
"ReplicatedFetch" 0
# HELP "ReplicatedSend" "Number of data parts being sent to replicas"
# TYPE "ReplicatedSend" counter
"ReplicatedSend" 0
* Connection #0 to host localhost left intact
```
Como puede ver en el ejemplo, si `<http_handlers>` está configurado en la configuración.archivo xml, ClickHouse coincidirá con las solicitudes HTTP recibidas con el tipo predefinido en `<http_handlers>`, entonces ClickHouse ejecutará la consulta predefinida correspondiente si la coincidencia es exitosa.
Ahora `<http_handlers>` puede configurar `<root_handler>`, `<ping_handler>`, `<replicas_status_handler>`, `<dynamic_query_handler>` y `<no_handler_description>` .
## root\_handler {#root_handler}
`<root_handler>` devuelve el contenido especificado para la solicitud de ruta de acceso raíz. El contenido devuelto específico se configura mediante `http_server_default_response` en la configuración.XML. si no se especifica, devolver **Ok.**
`http_server_default_response` no está definido y se envía una solicitud HTTP a ClickHouse. El resultado es el siguiente:
``` xml
<http_handlers>
<root_handler/>
</http_handlers>
```
$ curl 'http://localhost:8123'
Ok.
`http_server_default_response` se define y se envía una solicitud HTTP a ClickHouse. El resultado es el siguiente:
``` xml
<http_server_default_response><![CDATA[<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>]]></http_server_default_response>
<http_handlers>
<root_handler/>
</http_handlers>
```
$ curl 'http://localhost:8123'
<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>%
## Método de codificación de datos: {#ping_handler}
`<ping_handler>` se puede utilizar para sondear el estado del servidor ClickHouse actual. Cuando el servidor HTTP ClickHouse es normal, acceder a ClickHouse a través de `<ping_handler>` volverá **Ok.**.
Ejemplo:
``` xml
<http_handlers>
<ping_handler>/ping</ping_handler>
</http_handlers>
```
``` bash
$ curl 'http://localhost:8123/ping'
Ok.
```
## Sistema abierto. {#replicas_status_handler}
`<replicas_status_handler>` se utiliza para detectar el estado de la réplica y el nodo de retorno **Ok.** si el nodo de réplica no tiene retraso. Si hay un retraso, devuelva el retraso específico. El valor de `<replicas_status_handler>` admite personalización. Si no especifica `<replicas_status_handler>`, Configuración predeterminada de ClickHouse `<replicas_status_handler>` ser **/replicas\_status**.
Ejemplo:
``` xml
<http_handlers>
<replicas_status_handler>/replicas_status</replicas_status_handler>
</http_handlers>
```
Ningún caso del retraso:
``` bash
$ curl 'http://localhost:8123/replicas_status'
Ok.
```
Caso retrasado:
``` bash
$ curl 'http://localhost:8123/replicas_status'
db.stats: Absolute delay: 22. Relative delay: 22.
```
## Dirección de correo electrónico {#predefined_query_handler}
Puede configurar `<method>`, `<headers>`, `<url>` y `<queries>` en `<predefined_query_handler>`.
`<method>` es responsable de hacer coincidir la parte del método de la solicitud HTTP. `<method>` se ajusta plenamente a la definición de [método](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) en el protocolo HTTP. Es una configuración opcional. Si no está definido en el archivo de configuración, no coincide con la parte del método de la solicitud HTTP
`<url>` es responsable de hacer coincidir la parte url de la solicitud HTTP. Es compatible con [RE2](https://github.com/google/re2)expresiones regulares. Es una configuración opcional. Si no está definido en el archivo de configuración, no coincide con la parte url de la solicitud HTTP
`<headers>` es responsable de hacer coincidir la parte del encabezado de la solicitud HTTP. Es compatible con las expresiones regulares de RE2. Es una configuración opcional. Si no está definido en el archivo de configuración, no coincide con la parte de encabezado de la solicitud HTTP
`<queries>` valor es una consulta predefinida de `<predefined_query_handler>`, que es ejecutado por ClickHouse cuando se hace coincidir una solicitud HTTP y se devuelve el resultado de la consulta. Es una configuración imprescindible.
`<predefined_query_handler>` admite la configuración de valores Settings y query\_params.
En el ejemplo siguiente se definen los valores de `max_threads` y `max_alter_threads` configuración, a continuación, consulta la tabla del sistema para comprobar si estos ajustes se han establecido correctamente.
Ejemplo:
``` xml
<root_handlers>
<predefined_query_handler>
<method>GET</method>
<headers>
<XXX>TEST_HEADER_VALUE</XXX>
<PARAMS_XXX><![CDATA[(?P<name_1>[^/]+)(/(?P<name_2>[^/]+))?]]></PARAMS_XXX>
</headers>
<url><![CDATA[/query_param_with_url/\w+/(?P<name_1>[^/]+)(/(?P<name_2>[^/]+))?]]></url>
<queries>
<query>SELECT value FROM system.settings WHERE name = {name_1:String}</query>
<query>SELECT name, value FROM system.settings WHERE name = {name_2:String}</query>
</queries>
</predefined_query_handler>
</root_handlers>
```
``` bash
$ curl -H 'XXX:TEST_HEADER_VALUE' -H 'PARAMS_XXX:max_threads' 'http://localhost:8123/query_param_with_url/1/max_threads/max_alter_threads?max_threads=1&max_alter_threads=2'
1
max_alter_threads 2
```
!!! note "Nota"
En uno `<predefined_query_handler>`, una `<queries>` sólo es compatible con uno `<query>` de un tipo de plaquita.
## Nombre de la red inalámbrica (SSID): {#dynamic_query_handler}
`<dynamic_query_handler>` que `<predefined_query_handler>` aumentar `<query_param_name>` .
ClickHouse extrae y ejecuta el valor correspondiente al `<query_param_name>` valor en la url de la petición HTTP.
Configuración predeterminada de ClickHouse `<query_param_name>` ser `/query` . Es una configuración opcional. Si no hay una definición en el archivo de configuración, el parámetro no se pasa.
Para experimentar con esta funcionalidad, el ejemplo define los valores de max\_threads y max\_alter\_threads y consulta si la configuración se estableció correctamente.
La diferencia es que en `<predefined_query_handler>`, consulta se escribe en el archivo de configuración. Pero en `<dynamic_query_handler>`, consulta se escribe en forma de param de la solicitud HTTP.
Ejemplo:
``` xml
<root_handlers>
<dynamic_query_handler>
<headers>
<XXX>TEST_HEADER_VALUE_DYNAMIC</XXX>
<PARAMS_XXX><![CDATA[(?P<param_name_1>[^/]+)(/(?P<param_name_2>[^/]+))?]]></PARAMS_XXX>
</headers>
<query_param_name>query_param</query_param_name>
</dynamic_query_handler>
</root_handlers>
```
``` bash
$ curl -H 'XXX:TEST_HEADER_VALUE_DYNAMIC' -H 'PARAMS_XXX:max_threads' 'http://localhost:8123/?query_param=SELECT%20value%20FROM%20system.settings%20where%20name%20=%20%7Bname_1:String%7D%20OR%20name%20=%20%7Bname_2:String%7D&max_threads=1&max_alter_threads=2&param_name_2=max_alter_threads'
1
2
```
[Artículo Original](https://clickhouse.tech/docs/en/interfaces/http_interface/) <!--hide-->

View File

@ -1,5 +1,9 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Interfaces
toc_priority: 14
toc_title: "Implantaci\xF3n"
--- ---
# Interfaz {#interfaces} # Interfaz {#interfaces}
@ -22,4 +26,4 @@ También hay una amplia gama de bibliotecas de terceros para trabajar con ClickH
- [Integración](third-party/integrations.md) - [Integración](third-party/integrations.md)
- [Interfaces visuales](third-party/gui.md) - [Interfaces visuales](third-party/gui.md)
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/interfaces/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 22
toc_title: Controlador JDBC
--- ---
# Controlador JDBC {#jdbc-driver} # Controlador JDBC {#jdbc-driver}
@ -9,4 +12,4 @@ machine_translated: true
- [Sistema abierto.](https://github.com/housepower/ClickHouse-Native-JDBC) - [Sistema abierto.](https://github.com/housepower/ClickHouse-Native-JDBC)
- [Método de codificación de datos:](https://github.com/blynkkk/clickhouse4j) - [Método de codificación de datos:](https://github.com/blynkkk/clickhouse4j)
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/jdbc/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/interfaces/jdbc/) <!--hide-->

View File

@ -1,10 +1,13 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 20
toc_title: Interfaz MySQL
--- ---
# Interfaz de MySQL {#mysql-interface} # Interfaz de MySQL {#mysql-interface}
ClickHouse soporta el protocolo de cable MySQL. Puede ser habilitado por [mysql\_port](../operations/server_settings/settings.md#server_settings-mysql_port) configuración en el archivo de configuración: ClickHouse soporta el protocolo de cable MySQL. Puede ser habilitado por [mysql\_port](../operations/server_configuration_parameters/settings.md#server_configuration_parameters-mysql_port) configuración en el archivo de configuración:
``` xml ``` xml
<mysql_port>9004</mysql_port> <mysql_port>9004</mysql_port>
@ -34,7 +37,7 @@ Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> mysql>
``` ```
Para la compatibilidad con todos los clientes MySQL, se recomienda especificar la contraseña de usuario con [Doble SHA1](../operations/settings/settings_users.md#password_double_sha1_hex) en el archivo de configuración. Para la compatibilidad con todos los clientes MySQL, se recomienda especificar la contraseña de usuario con [doble SHA1](../operations/settings/settings_users.md#password_double_sha1_hex) en el archivo de configuración.
Si la contraseña de usuario se especifica usando [SHA256](../operations/settings/settings_users.md#password_sha256_hex), algunos clientes no podrán autenticarse (mysqljs y versiones antiguas de la herramienta de línea de comandos mysql). Si la contraseña de usuario se especifica usando [SHA256](../operations/settings/settings_users.md#password_sha256_hex), algunos clientes no podrán autenticarse (mysqljs y versiones antiguas de la herramienta de línea de comandos mysql).
Restricción: Restricción:
@ -43,4 +46,4 @@ Restricción:
- algunos tipos de datos se envían como cadenas - algunos tipos de datos se envían como cadenas
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/mysql/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/interfaces/mysql/) <!--hide-->

View File

@ -1,9 +1,12 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 23
toc_title: Conductor ODBC
--- ---
# Conductor ODBC {#odbc-driver} # Conductor ODBC {#odbc-driver}
- [Conductor oficial](https://github.com/ClickHouse/clickhouse-odbc). - [Conductor oficial](https://github.com/ClickHouse/clickhouse-odbc).
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/odbc/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/interfaces/odbc/) <!--hide-->

View File

@ -1,9 +1,12 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 18
toc_title: Interfaz nativa (TCP)
--- ---
# Interfaz nativa (TCP) {#native-interface-tcp} # Interfaz nativa (TCP) {#native-interface-tcp}
El protocolo nativo se utiliza en el [cliente de línea de comandos](cli.md), para la comunicación entre servidores durante el procesamiento de consultas distribuidas, y también en otros programas de C, Desafortunadamente, el protocolo nativo de ClickHouse aún no tiene especificaciones formales, pero puede ser diseñado de manera inversa desde el código fuente de ClickHouse (comenzando [por aquí](https://github.com/ClickHouse/ClickHouse/tree/master/src/Client)) y/o mediante la interceptación y el análisis del tráfico TCP. El protocolo nativo se utiliza en el [cliente de línea de comandos](cli.md), para la comunicación entre servidores durante el procesamiento de consultas distribuidas, y también en otros programas de C, Desafortunadamente, el protocolo nativo de ClickHouse aún no tiene especificaciones formales, pero puede ser diseñado de manera inversa desde el código fuente de ClickHouse (comenzando [por aquí](https://github.com/ClickHouse/ClickHouse/tree/master/src/Client)) y/o mediante la interceptación y el análisis del tráfico TCP.
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/tcp/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/interfaces/tcp/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 26
toc_title: Bibliotecas de clientes
--- ---
# Bibliotecas de clientes de desarrolladores de terceros {#client-libraries-from-third-party-developers} # Bibliotecas de clientes de desarrolladores de terceros {#client-libraries-from-third-party-developers}
@ -13,12 +16,12 @@ machine_translated: true
- [Casa de clics-cliente](https://github.com/yurial/clickhouse-client) - [Casa de clics-cliente](https://github.com/yurial/clickhouse-client)
- [Aiochclient](https://github.com/maximdanilchenko/aiochclient) - [Aiochclient](https://github.com/maximdanilchenko/aiochclient)
- PHP - PHP
- [smi2/phpclickhouse](https://packagist.org/packages/smi2/phpClickHouse) - [Método de codificación de datos:](https://packagist.org/packages/smi2/phpClickHouse)
- [8bitov/clickhouse-php-client](https://packagist.org/packages/8bitov/clickhouse-php-client) - [Sistema abierto.](https://packagist.org/packages/8bitov/clickhouse-php-client)
- [bozerkins/clickhouse-client](https://packagist.org/packages/bozerkins/clickhouse-client) - [Sistema abierto.](https://packagist.org/packages/bozerkins/clickhouse-client)
- [simpod/clickhouse-client](https://packagist.org/packages/simpod/clickhouse-client) - [Sistema abierto.](https://packagist.org/packages/simpod/clickhouse-client)
- [seva-code/php-click-house-client](https://packagist.org/packages/seva-code/php-click-house-client) - [Seva-code/php-click-house-cliente](https://packagist.org/packages/seva-code/php-click-house-client)
- [SeasClick C++ client](https://github.com/SeasX/SeasClick) - [Cliente de SeasClick C++](https://github.com/SeasX/SeasClick)
- Ve - Ve
- [Casa de clics](https://github.com/kshvakov/clickhouse/) - [Casa de clics](https://github.com/kshvakov/clickhouse/)
- [Sistema abierto.](https://github.com/roistat/go-clickhouse) - [Sistema abierto.](https://github.com/roistat/go-clickhouse)
@ -52,4 +55,4 @@ machine_translated: true
- Nim - Nim
- [Bienvenidos al Portal de Licitación Electrónica de Licitación Electrónica](https://github.com/leonardoce/nim-clickhouse) - [Bienvenidos al Portal de Licitación Electrónica de Licitación Electrónica](https://github.com/leonardoce/nim-clickhouse)
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/third-party/client_libraries/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/interfaces/third-party/client_libraries/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 28
toc_title: Interfaces Visuales
--- ---
# Interfaces visuales de desarrolladores de terceros {#visual-interfaces-from-third-party-developers} # Interfaces visuales de desarrolladores de terceros {#visual-interfaces-from-third-party-developers}
@ -88,7 +91,7 @@ Función:
### Sistema abierto. {#clickhouse-flamegraph} ### Sistema abierto. {#clickhouse-flamegraph}
[Sistema abierto.](https://github.com/Slach/clickhouse-flamegraph) es una herramienta especializada para visualizar el `system.trace_log` como [Gráfico de llamas](http://www.brendangregg.com/flamegraphs.html). [Sistema abierto.](https://github.com/Slach/clickhouse-flamegraph) es una herramienta especializada para visualizar el `system.trace_log` como [Flamegraph](http://www.brendangregg.com/flamegraphs.html).
## Comercial {#commercial} ## Comercial {#commercial}
@ -123,7 +126,7 @@ Nivel de Cifrado WEP [disponible de forma gratuita](https://cloud.yandex.com/doc
### Software de Holística {#holistics-software} ### Software de Holística {#holistics-software}
[Holística](https://www.holistics.io/) Este es una plataforma de datos de pila completa y una herramienta de inteligencia de negocios. [Holística](https://www.holistics.io/) es una plataforma de datos de pila completa y una herramienta de inteligencia de negocios.
Función: Función:
@ -146,4 +149,4 @@ Función:
[Cómo configurar ClickHouse en Looker.](https://docs.looker.com/setup-and-management/database-config/clickhouse) [Cómo configurar ClickHouse en Looker.](https://docs.looker.com/setup-and-management/database-config/clickhouse)
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/third-party/gui/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/interfaces/third-party/gui/) <!--hide-->

View File

@ -0,0 +1,8 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Third-Party
toc_priority: 24
---

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 27
toc_title: "Integraci\xF3n"
--- ---
# Bibliotecas de integración de desarrolladores externos {#integration-libraries-from-third-party-developers} # Bibliotecas de integración de desarrolladores externos {#integration-libraries-from-third-party-developers}
@ -39,7 +42,7 @@ machine_translated: true
- [graphouse](https://github.com/yandex/graphouse) - [graphouse](https://github.com/yandex/graphouse)
- [de carbono-clickhouse](https://github.com/lomik/carbon-clickhouse) + - [de carbono-clickhouse](https://github.com/lomik/carbon-clickhouse) +
- [Sistema abierto.](https://github.com/lomik/graphite-clickhouse) - [Sistema abierto.](https://github.com/lomik/graphite-clickhouse)
- [Grafito-ch-optimizador](https://github.com/innogames/graphite-ch-optimizer) - optimiza las particiones [\*GraphiteMergeTree](../../operations/table_engines/graphitemergetree.md#graphitemergetree) reglas de [Configuración de rollup](../../operations/table_engines/graphitemergetree.md#rollup-configuration) podría ser aplicado - [Grafito-ch-optimizador](https://github.com/innogames/graphite-ch-optimizer) - optimiza las particiones [\*GraphiteMergeTree](../../engines/table_engines/mergetree_family/graphitemergetree.md#graphitemergetree) reglas de [Configuración de rollup](../../engines/table_engines/mergetree_family/graphitemergetree.md#rollup-configuration) podría ser aplicado
- [Grafana](https://grafana.com/) - [Grafana](https://grafana.com/)
- [Bienvenidos al Portal de Licitación Electrónica de Licitación Electrónica](https://github.com/Vertamedia/clickhouse-grafana) - [Bienvenidos al Portal de Licitación Electrónica de Licitación Electrónica](https://github.com/Vertamedia/clickhouse-grafana)
- [Prometeo](https://prometheus.io/) - [Prometeo](https://prometheus.io/)
@ -48,7 +51,7 @@ machine_translated: true
- [Sistema abierto.](https://github.com/hot-wifi/clickhouse_exporter) (utilizar [Ir cliente](https://github.com/kshvakov/clickhouse/)) - [Sistema abierto.](https://github.com/hot-wifi/clickhouse_exporter) (utilizar [Ir cliente](https://github.com/kshvakov/clickhouse/))
- [Nagios](https://www.nagios.org/) - [Nagios](https://www.nagios.org/)
- [Bienvenidos al Portal de Licitación Electrónica de Licitación Electrónica](https://github.com/exogroup/check_clickhouse/) - [Bienvenidos al Portal de Licitación Electrónica de Licitación Electrónica](https://github.com/exogroup/check_clickhouse/)
- [check\_clickhouse.py](https://github.com/innogames/igmonplugins/blob/master/src/check_clickhouse.py) - [Inicio](https://github.com/innogames/igmonplugins/blob/master/src/check_clickhouse.py)
- [Zabbix](https://www.zabbix.com) - [Zabbix](https://www.zabbix.com)
- [Sistema abierto.](https://github.com/Altinity/clickhouse-zabbix-template) - [Sistema abierto.](https://github.com/Altinity/clickhouse-zabbix-template)
- [Sematext](https://sematext.com/) - [Sematext](https://sematext.com/)
@ -57,7 +60,7 @@ machine_translated: true
- [rsyslog](https://www.rsyslog.com/) - [rsyslog](https://www.rsyslog.com/)
- [Bienvenidos al Portal de Licitación Electrónica de Licitación Electrónica](https://www.rsyslog.com/doc/master/configuration/modules/omclickhouse.html) - [Bienvenidos al Portal de Licitación Electrónica de Licitación Electrónica](https://www.rsyslog.com/doc/master/configuration/modules/omclickhouse.html)
- [fluentd](https://www.fluentd.org) - [fluentd](https://www.fluentd.org)
- [Casa de campo](https://github.com/flant/loghouse) (para [Kubernetes](https://kubernetes.io)) - [casa de campo](https://github.com/flant/loghouse) (para [Kubernetes](https://kubernetes.io))
- [Información](https://www.sematext.com/logagent) - [Información](https://www.sematext.com/logagent)
- [Sistema de tabiquería interior y exterior](https://sematext.com/docs/logagent/output-plugin-clickhouse/) - [Sistema de tabiquería interior y exterior](https://sematext.com/docs/logagent/output-plugin-clickhouse/)
- Geo - Geo
@ -70,18 +73,18 @@ machine_translated: true
- [SQLAlchemy](https://www.sqlalchemy.org) - [SQLAlchemy](https://www.sqlalchemy.org)
- [sqlalchemy-clickhouse](https://github.com/cloudflare/sqlalchemy-clickhouse) (utilizar [InformaciónSistema abierto.](https://github.com/Infinidat/infi.clickhouse_orm)) - [sqlalchemy-clickhouse](https://github.com/cloudflare/sqlalchemy-clickhouse) (utilizar [InformaciónSistema abierto.](https://github.com/Infinidat/infi.clickhouse_orm))
- [pandas](https://pandas.pydata.org) - [pandas](https://pandas.pydata.org)
- [Nuestros Servicios](https://github.com/kszucs/pandahouse) - [Pandahouse](https://github.com/kszucs/pandahouse)
- R - R
- [Dplyr](https://db.rstudio.com/dplyr/) - [Dplyr](https://db.rstudio.com/dplyr/)
- [Bienvenidos al Portal de Licitación Electrónica de Licitación Electrónica](https://github.com/IMSMWU/RClickhouse) (utilizar [Bienvenidos](https://github.com/artpaul/clickhouse-cpp)) - [Bienvenidos al Portal de Licitación Electrónica de Licitación Electrónica](https://github.com/IMSMWU/RClickhouse) (utilizar [Bienvenidos](https://github.com/artpaul/clickhouse-cpp))
- Java - Java
- [Hadoop](http://hadoop.apache.org) - [Hadoop](http://hadoop.apache.org)
- [Sistema abierto.](https://github.com/jaykelin/clickhouse-hdfs-loader) (utilizar [JDBC](../../query_language/table_functions/jdbc.md)) - [Sistema abierto.](https://github.com/jaykelin/clickhouse-hdfs-loader) (utilizar [JDBC](../../sql_reference/table_functions/jdbc.md))
- Ciudad - Ciudad
- [Akka](https://akka.io) - [Akka](https://akka.io)
- [Sistema abierto.](https://github.com/crobox/clickhouse-scala-client) - [Sistema abierto.](https://github.com/crobox/clickhouse-scala-client)
- C\# - C\#
- [Nivel de Cifrado WEP](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ado-net-overview) - [ADO.NET](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ado-net-overview)
- [Sistema abierto.Ado](https://github.com/killwort/ClickHouse-Net) - [Sistema abierto.Ado](https://github.com/killwort/ClickHouse-Net)
- [Sistema abierto.Cliente](https://github.com/DarkWanderer/ClickHouse.Client) - [Sistema abierto.Cliente](https://github.com/DarkWanderer/ClickHouse.Client)
- [Sistema abierto.](https://github.com/ilyabreev/ClickHouse.Net) - [Sistema abierto.](https://github.com/ilyabreev/ClickHouse.Net)
@ -90,4 +93,4 @@ machine_translated: true
- [Ecto](https://github.com/elixir-ecto/ecto) - [Ecto](https://github.com/elixir-ecto/ecto)
- [Método de codificación de datos:](https://github.com/appodeal/clickhouse_ecto) - [Método de codificación de datos:](https://github.com/appodeal/clickhouse_ecto)
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/third-party/integrations/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/interfaces/third-party/integrations/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 29
toc_title: Proxy
--- ---
# Servidores proxy de desarrolladores de terceros {#proxy-servers-from-third-party-developers} # Servidores proxy de desarrolladores de terceros {#proxy-servers-from-third-party-developers}
@ -40,4 +43,4 @@ Función:
Implementado en Go. Implementado en Go.
[Artículo Original](https://clickhouse.tech/docs/es/interfaces/third-party/proxy/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/interfaces/third-party/proxy/) <!--hide-->

View File

@ -1,11 +1,14 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 8
toc_title: Adoptante
--- ---
# Adoptadores de ClickHouse {#clickhouse-adopters} # Adoptadores de ClickHouse {#clickhouse-adopters}
!!! warning "Descargo" !!! warning "Descargo"
La siguiente lista de empresas que utilizan ClickHouse y sus historias de éxito se recopila a partir de fuentes públicas, por lo que podría diferir de la realidad actual. Realmente agradeceríamos que compartiera la historia de adoptar ClickHouse en su empresa y [agregarlo a la lista](https://github.com/ClickHouse/ClickHouse/edit/master/docs/es/introduction/adopters.md), pero por favor asegúrese de que usted no tendrá ningunos problemas de NDA haciendo así. Proporcionar actualizaciones con publicaciones de otras compañías también es útil. La siguiente lista de empresas que utilizan ClickHouse y sus historias de éxito se recopila a partir de fuentes públicas, por lo que podría diferir de la realidad actual. Le agradeceríamos que compartiera la historia de adoptar ClickHouse en su empresa y [agregarlo a la lista](https://github.com/ClickHouse/ClickHouse/edit/master/docs/en/introduction/adopters.md), pero por favor asegúrese de que usted no tendrá ningunos problemas de NDA haciendo así. Proporcionar actualizaciones con publicaciones de otras compañías también es útil.
| Empresa | Industria | Usecase | Tamaño de clúster | (Un)Tamaño de datos comprimidos<abbr title="of single replica"><sup>\*</sup></abbr> | Referencia | | Empresa | Industria | Usecase | Tamaño de clúster | (Un)Tamaño de datos comprimidos<abbr title="of single replica"><sup>\*</sup></abbr> | Referencia |
|--------------------------------------------------------------------------------------------|------------------------------------|-----------------------------|------------------------------------------------------------------|-------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |--------------------------------------------------------------------------------------------|------------------------------------|-----------------------------|------------------------------------------------------------------|-------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@ -21,9 +24,9 @@ machine_translated: true
| `Dataliance/UltraPower` | Telecomunicaciones | Analítica | — | — | [Diapositivas en chino, enero 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup12/telecom.pdf) | | `Dataliance/UltraPower` | Telecomunicaciones | Analítica | — | — | [Diapositivas en chino, enero 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup12/telecom.pdf) |
| [CARTO](https://carto.com/) | Inteligencia de negocios | Análisis geográfico | — | — | [Procesamiento geoespacial con Clickhouse](https://carto.com/blog/geospatial-processing-with-clickhouse/) | | [CARTO](https://carto.com/) | Inteligencia de negocios | Análisis geográfico | — | — | [Procesamiento geoespacial con Clickhouse](https://carto.com/blog/geospatial-processing-with-clickhouse/) |
| [CERN](http://public.web.cern.ch/public/) | Investigación | Experimento | — | — | [Comunicado de prensa, abril de 2012](https://www.yandex.com/company/press_center/press_releases/2012/2012-04-10/) | | [CERN](http://public.web.cern.ch/public/) | Investigación | Experimento | — | — | [Comunicado de prensa, abril de 2012](https://www.yandex.com/company/press_center/press_releases/2012/2012-04-10/) |
| [Cisco](http://cisco.com/) | Rojo | Análisis de tráfico | — | — | [Charla relámpago, octubre 2019](https://youtu.be/-hI1vDR2oPY?t=5057) | | [Cisco](http://cisco.com/) | Red | Análisis de tráfico | — | — | [Charla relámpago, octubre 2019](https://youtu.be/-hI1vDR2oPY?t=5057) |
| [Valores de la ciudadela](https://www.citadelsecurities.com/) | Financiación | — | — | — | [Contribución, marzo 2019](https://github.com/ClickHouse/ClickHouse/pull/4774) | | [Valores de la ciudadela](https://www.citadelsecurities.com/) | Financiación | — | — | — | [Contribución, marzo 2019](https://github.com/ClickHouse/ClickHouse/pull/4774) |
| [Más información](https://city-mobil.ru) | Taxi | Analítica | — | — | [Entrada de Blog en ruso, marzo de 2020](https://habr.com/en/company/citymobil/blog/490660/) | | [Más información](https://city-mobil.ru) | Taxi | Analítica | — | — | [Blog Post en ruso, marzo 2020](https://habr.com/en/company/citymobil/blog/490660/) |
| [ContentSquare](https://contentsquare.com) | Análisis web | Producto principal | — | — | [Publicación de blog en francés, noviembre 2018](http://souslecapot.net/2018/11/21/patrick-chatain-vp-engineering-chez-contentsquare-penser-davantage-amelioration-continue-que-revolution-constante/) | | [ContentSquare](https://contentsquare.com) | Análisis web | Producto principal | — | — | [Publicación de blog en francés, noviembre 2018](http://souslecapot.net/2018/11/21/patrick-chatain-vp-engineering-chez-contentsquare-penser-davantage-amelioration-continue-que-revolution-constante/) |
| [Cloudflare](https://cloudflare.com) | CDN | Análisis de tráfico | 36 servidores | — | [Mensaje del blog, Mayo 2017](https://blog.cloudflare.com/how-cloudflare-analyzes-1m-dns-queries-per-second/), [Mensaje del blog, marzo 2018](https://blog.cloudflare.com/http-analytics-for-6m-requests-per-second-using-clickhouse/) | | [Cloudflare](https://cloudflare.com) | CDN | Análisis de tráfico | 36 servidores | — | [Mensaje del blog, Mayo 2017](https://blog.cloudflare.com/how-cloudflare-analyzes-1m-dns-queries-per-second/), [Mensaje del blog, marzo 2018](https://blog.cloudflare.com/http-analytics-for-6m-requests-per-second-using-clickhouse/) |
| [Corunet](https://coru.net/) | Analítica | Producto principal | — | — | [Diapositivas en español, Abril 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup21/predictive_models.pdf) | | [Corunet](https://coru.net/) | Analítica | Producto principal | — | — | [Diapositivas en español, Abril 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup21/predictive_models.pdf) |
@ -32,26 +35,26 @@ machine_translated: true
| [Banco de Deutsche](https://db.com) | Financiación | BI Analytics | — | — | [Diapositivas en español, octubre 2019](https://bigdatadays.ru/wp-content/uploads/2019/10/D2-H3-3_Yakunin-Goihburg.pdf) | | [Banco de Deutsche](https://db.com) | Financiación | BI Analytics | — | — | [Diapositivas en español, octubre 2019](https://bigdatadays.ru/wp-content/uploads/2019/10/D2-H3-3_Yakunin-Goihburg.pdf) |
| [Diva-e](https://www.diva-e.com) | Consultoría digital | Producto principal | — | — | [Diapositivas en español, septiembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup29/ClickHouse-MeetUp-Unusual-Applications-sd-2019-09-17.pdf) | | [Diva-e](https://www.diva-e.com) | Consultoría digital | Producto principal | — | — | [Diapositivas en español, septiembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup29/ClickHouse-MeetUp-Unusual-Applications-sd-2019-09-17.pdf) |
| [Exness](https://www.exness.com) | Comercio | Métricas, Registro | — | — | [Charla en ruso, mayo 2019](https://youtu.be/_rpU-TvSfZ8?t=3215) | | [Exness](https://www.exness.com) | Comercio | Métricas, Registro | — | — | [Charla en ruso, mayo 2019](https://youtu.be/_rpU-TvSfZ8?t=3215) |
| [Sistema abierto.](https://geniee.co.jp) | Anuncio rojo | Producto principal | — | — | [Publicación de blog en japonés, julio 2017](https://tech.geniee.co.jp/entry/2017/07/20/160100) | | [Sistema abierto.](https://geniee.co.jp) | Red Ad | Producto principal | — | — | [Publicación de blog en japonés, julio 2017](https://tech.geniee.co.jp/entry/2017/07/20/160100) |
| [HUYA](https://www.huya.com/) | Video Streaming | Analítica | — | — | [Diapositivas en chino, octubre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/7.%20ClickHouse万亿数据分析实践%20李本旺(sundy-li)%20虎牙.pdf) | | [HUYA](https://www.huya.com/) | Video Streaming | Analítica | — | — | [Diapositivas en chino, octubre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/7.%20ClickHouse万亿数据分析实践%20李本旺(sundy-li)%20虎牙.pdf) |
| [Idealista](https://www.idealista.com) | Inmobiliario | Analítica | — | — | [Blog Post en Inglés, Abril 2019](https://clickhouse.yandex/blog/en/clickhouse-meetup-in-madrid-on-april-2-2019) | | [Idealista](https://www.idealista.com) | Inmobiliario | Analítica | — | — | [Blog Post en Inglés, Abril 2019](https://clickhouse.yandex/blog/en/clickhouse-meetup-in-madrid-on-april-2-2019) |
| [Infovista](https://www.infovista.com/) | Rojo | Analítica | — | — | [Diapositivas en español, octubre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup30/infovista.pdf) | | [Infovista](https://www.infovista.com/) | Red | Analítica | — | — | [Diapositivas en español, octubre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup30/infovista.pdf) |
| [InnoGames](https://www.innogames.com) | Juego | Métricas, Registro | — | — | [Diapositivas en ruso, septiembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup28/graphite_and_clickHouse.pdf) | | [InnoGames](https://www.innogames.com) | Juego | Métricas, Registro | — | — | [Diapositivas en ruso, septiembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup28/graphite_and_clickHouse.pdf) |
| [Integros](https://integros.com) | Plataforma para servicios de video | Analítica | — | — | [Diapositivas en ruso, mayo 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup22/strategies.pdf) | | [Integros](https://integros.com) | Plataforma para servicios de video | Analítica | — | — | [Diapositivas en ruso, mayo 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup22/strategies.pdf) |
| [Datos de Kodiak](https://www.kodiakdata.com/) | Nube | Producto principal | — | — | [Diapositivas en Engish, Abril 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup13/kodiak_data.pdf) | | [Datos de Kodiak](https://www.kodiakdata.com/) | Nube | Producto principal | — | — | [Diapositivas en Engish, Abril 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup13/kodiak_data.pdf) |
| [Kontur](https://kontur.ru) | Desarrollo de software | Métricas | — | — | [Charla en ruso, noviembre 2018](https://www.youtube.com/watch?v=U4u4Bd0FtrY) | | [Kontur](https://kontur.ru) | Desarrollo de software | Métricas | — | — | [Charla en ruso, noviembre 2018](https://www.youtube.com/watch?v=U4u4Bd0FtrY) |
| [Sistema abierto.](https://lifestreet.com/) | Anuncio rojo | Producto principal | 75 servidores (3 réplicas) | 5.27 PiB | [Publicación de blog en ruso, febrero 2017](https://habr.com/en/post/322620/) | | [Sistema abierto.](https://lifestreet.com/) | Red Ad | Producto principal | 75 servidores (3 réplicas) | 5.27 PiB | [Publicación de blog en ruso, febrero 2017](https://habr.com/en/post/322620/) |
| [Soluciones en la nube de Mail.ru](https://mcs.mail.ru/) | Servicios en la nube | Producto principal | — | — | [Ejecución de ClickHouse Instance, en ruso](https://mcs.mail.ru/help/db-create/clickhouse#) | | [Soluciones en la nube de Mail.ru](https://mcs.mail.ru/) | Servicios en la nube | Producto principal | — | — | [Ejecución de ClickHouse Instance, en ruso](https://mcs.mail.ru/help/db-create/clickhouse#) |
| [Mensaje de pájaro](https://www.messagebird.com) | Telecomunicaciones | Estadísticas | — | — | [Diapositivas en español, noviembre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup20/messagebird.pdf) | | [Mensaje de pájaro](https://www.messagebird.com) | Telecomunicaciones | Estadísticas | — | — | [Diapositivas en español, noviembre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup20/messagebird.pdf) |
| [MGID](https://www.mgid.com/) | Anuncio rojo | Analítica Web | — | — | [Nuestra experiencia en la implementación analítica DBMS ClickHouse, en ruso](http://gs-studio.com/news-about-it/32777----clickhouse---c) | | [MGID](https://www.mgid.com/) | Red Ad | Analítica Web | — | — | [Nuestra experiencia en la implementación analítica DBMS ClickHouse, en ruso](http://gs-studio.com/news-about-it/32777----clickhouse---c) |
| [UnoAPM](https://www.oneapm.com/) | Supervisión y análisis de datos | Producto principal | — | — | [Diapositivas en chino, octubre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/8.%20clickhouse在OneAPM的应用%20杜龙.pdf) | | [UnoAPM](https://www.oneapm.com/) | Supervisión y análisis de datos | Producto principal | — | — | [Diapositivas en chino, octubre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/8.%20clickhouse在OneAPM的应用%20杜龙.pdf) |
| [Pragma Innovación](http://www.pragma-innovation.fr/) | Telemetría y Análisis de Big Data | Producto principal | — | — | [Diapositivas en español, octubre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup18/4_pragma_innovation.pdf) | | [Pragma Innovación](http://www.pragma-innovation.fr/) | Telemetría y Análisis de Big Data | Producto principal | — | — | [Diapositivas en español, octubre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup18/4_pragma_innovation.pdf) |
| [QINGCLOUD](https://www.qingcloud.com/) | Servicios en la nube | Producto principal | — | — | [Diapositivas en chino, octubre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/4.%20Cloud%20%2B%20TSDB%20for%20ClickHouse%20张健%20QingCloud.pdf) | | [QINGCLOUD](https://www.qingcloud.com/) | Servicios en la nube | Producto principal | — | — | [Diapositivas en chino, octubre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/4.%20Cloud%20%2B%20TSDB%20for%20ClickHouse%20张健%20QingCloud.pdf) |
| [Qrator](https://qrator.net) | Protección DDoS | Producto principal | — | — | [Mensaje del blog, marzo 2019](https://blog.qrator.net/en/clickhouse-ddos-mitigation_37/) | | [Qrator](https://qrator.net) | Protección DDoS | Producto principal | — | — | [Blog Post, marzo 2019](https://blog.qrator.net/en/clickhouse-ddos-mitigation_37/) |
| [Tecnología de la información del PORCIMIENTO de Pekín Co., Ltd.](https://www.percent.cn/) | Analítica | Producto principal | — | — | [Diapositivas en chino, junio 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup24/4.%20ClickHouse万亿数据双中心的设计与实践%20.pdf) | | [Tecnología de la información del PORCIMIENTO de Pekín Co., Ltd.](https://www.percent.cn/) | Analítica | Producto principal | — | — | [Diapositivas en chino, junio 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup24/4.%20ClickHouse万亿数据双中心的设计与实践%20.pdf) |
| [Rambler](https://rambler.ru) | Servicios de Internet | Analítica | — | — | [Charla en ruso, abril 2018](https://medium.com/@ramblertop/разработка-api-clickhouse-для-рамблер-топ-100-f4c7e56f3141) | | [Rambler](https://rambler.ru) | Servicios de Internet | Analítica | — | — | [Charla en ruso, abril 2018](https://medium.com/@ramblertop/разработка-api-clickhouse-для-рамблер-топ-100-f4c7e56f3141) |
| [Tencent](https://www.tencent.com) | Mensajería | Tala | — | — | [Charla en chino, noviembre 2019](https://youtu.be/T-iVQRuw-QY?t=5050) | | [Tencent](https://www.tencent.com) | Mensajería | Tala | — | — | [Charla en chino, noviembre 2019](https://youtu.be/T-iVQRuw-QY?t=5050) |
| [Estrellas de tráfico](https://trafficstars.com/) | Anuncio rojo | — | — | — | [Diapositivas en ruso, mayo 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup15/lightning/ninja.pdf) | | [Estrellas de tráfico](https://trafficstars.com/) | Red AD | — | — | — | [Diapositivas en ruso, mayo 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup15/lightning/ninja.pdf) |
| [S7 Aerolíneas](https://www.s7.ru) | Aérea | Métricas, Registro | — | — | [Charla en ruso, marzo 2019](https://www.youtube.com/watch?v=nwG68klRpPg&t=15s) | | [S7 Aerolíneas](https://www.s7.ru) | Aérea | Métricas, Registro | — | — | [Charla en ruso, marzo 2019](https://www.youtube.com/watch?v=nwG68klRpPg&t=15s) |
| [SEMrush](https://www.semrush.com/) | Marketing | Producto principal | — | — | [Diapositivas en ruso, agosto 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup17/5_semrush.pdf) | | [SEMrush](https://www.semrush.com/) | Marketing | Producto principal | — | — | [Diapositivas en ruso, agosto 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup17/5_semrush.pdf) |
| [Inicio](https://www.scireum.de/) | Comercio electrónico | Producto principal | — | — | [Charla en alemán, febrero de 2020](https://www.youtube.com/watch?v=7QWAn5RbyR4) | | [Inicio](https://www.scireum.de/) | Comercio electrónico | Producto principal | — | — | [Charla en alemán, febrero de 2020](https://www.youtube.com/watch?v=7QWAn5RbyR4) |
@ -63,7 +66,7 @@ machine_translated: true
| [Salto](https://www.splunk.com/) | Análisis de negocios | Producto principal | — | — | [Diapositivas en español, enero 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup12/splunk.pdf) | | [Salto](https://www.splunk.com/) | Análisis de negocios | Producto principal | — | — | [Diapositivas en español, enero 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup12/splunk.pdf) |
| [Spotify](https://www.spotify.com) | Sica | Experimentación | — | — | [Diapositivas, julio 2018](https://www.slideshare.net/glebus/using-clickhouse-for-experimentation-104247173) | | [Spotify](https://www.spotify.com) | Sica | Experimentación | — | — | [Diapositivas, julio 2018](https://www.slideshare.net/glebus/using-clickhouse-for-experimentation-104247173) |
| [Tencent](https://www.tencent.com) | Grandes Datos | Procesamiento de datos | — | — | [Diapositivas en chino, octubre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/5.%20ClickHouse大数据集群应用_李俊飞腾讯网媒事业部.pdf) | | [Tencent](https://www.tencent.com) | Grandes Datos | Procesamiento de datos | — | — | [Diapositivas en chino, octubre 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/5.%20ClickHouse大数据集群应用_李俊飞腾讯网媒事业部.pdf) |
| [Más información](https://www.uber.com) | Taxi | Tala | — | — | [Diapositivas, febrero de 2020](https://presentations.clickhouse.tech/meetup40/ml.pdf) | | [Más información](https://www.uber.com) | Taxi | Tala | — | — | [Diapositivas, febrero de 2020](https://presentations.clickhouse.tech/meetup40/uber.pdf) |
| [VKontakte](https://vk.com) | Red social | Estadísticas, Registro | — | — | [Diapositivas en ruso, agosto 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup17/3_vk.pdf) | | [VKontakte](https://vk.com) | Red social | Estadísticas, Registro | — | — | [Diapositivas en ruso, agosto 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup17/3_vk.pdf) |
| [Método de codificación de datos:](https://wisebits.com/) | Soluciones de TI | Analítica | — | — | [Diapositivas en ruso, mayo 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup22/strategies.pdf) | | [Método de codificación de datos:](https://wisebits.com/) | Soluciones de TI | Analítica | — | — | [Diapositivas en ruso, mayo 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup22/strategies.pdf) |
| [Tecnología de Xiaoxin.](https://www.xiaoheiban.cn/) | Educación | Propósito común | — | — | [Diapositivas en español, noviembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup33/sync-clickhouse-with-mysql-mongodb.pptx) | | [Tecnología de Xiaoxin.](https://www.xiaoheiban.cn/) | Educación | Propósito común | — | — | [Diapositivas en español, noviembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup33/sync-clickhouse-with-mysql-mongodb.pptx) |
@ -72,8 +75,8 @@ machine_translated: true
| [Yandex DataLens](https://cloud.yandex.ru/services/datalens) | Inteligencia de negocios | Producto principal | — | — | [Diapositivas en ruso, diciembre 2019](https://presentations.clickhouse.tech/meetup38/datalens.pdf) | | [Yandex DataLens](https://cloud.yandex.ru/services/datalens) | Inteligencia de negocios | Producto principal | — | — | [Diapositivas en ruso, diciembre 2019](https://presentations.clickhouse.tech/meetup38/datalens.pdf) |
| [Mercado de Yandex](https://market.yandex.ru/) | Comercio electrónico | Métricas, Registro | — | — | [Charla en ruso, enero 2019](https://youtu.be/_l1qP0DyBcA?t=478) | | [Mercado de Yandex](https://market.yandex.ru/) | Comercio electrónico | Métricas, Registro | — | — | [Charla en ruso, enero 2019](https://youtu.be/_l1qP0DyBcA?t=478) |
| [Yandex Metrica](https://metrica.yandex.com) | Análisis web | Producto principal | 360 servidores en un clúster, 1862 servidores en un departamento | 66.41 PiB / 5.68 PiB | [Diapositivas, febrero de 2020](https://presentations.clickhouse.tech/meetup40/introduction/#13) | | [Yandex Metrica](https://metrica.yandex.com) | Análisis web | Producto principal | 360 servidores en un clúster, 1862 servidores en un departamento | 66.41 PiB / 5.68 PiB | [Diapositivas, febrero de 2020](https://presentations.clickhouse.tech/meetup40/introduction/#13) |
| [Método de codificación de datos:](https://htc-cs.ru/) | Desarrollo de software | Métricas, Registro | — | — | [Blog Post, marzo 2019, en ruso](https://vc.ru/dev/62715-kak-my-stroili-monitoring-na-prometheus-clickhouse-i-elk) | | [ЦВТ](https://htc-cs.ru/) | Desarrollo de software | Métricas, Registro | — | — | [Blog Post, marzo 2019, en ruso](https://vc.ru/dev/62715-kak-my-stroili-monitoring-na-prometheus-clickhouse-i-elk) |
| [МКБ](https://mkb.ru/) | Banco | Supervisión del sistema web | — | — | [Diapositivas en ruso, septiembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup28/mkb.pdf) | | [МКБ](https://mkb.ru/) | Banco | Supervisión del sistema web | — | — | [Diapositivas en ruso, septiembre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup28/mkb.pdf) |
| [Método de codificación de datos:](https://jinshuju.net) | BI Analytics | Producto principal | — | — | [Diapositivas en chino, octubre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup24/3.%20金数据数据架构调整方案Public.pdf) | | [金数据](https://jinshuju.net) | BI Analytics | Producto principal | — | — | [Diapositivas en chino, octubre 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup24/3.%20金数据数据架构调整方案Public.pdf) |
[Artículo Original](https://clickhouse.tech/docs/es/introduction/adopters/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/introduction/adopters/) <!--hide-->

View File

@ -1,16 +1,19 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 4
toc_title: "Caracter\xEDsticas distintivas"
--- ---
# Características distintivas de ClickHouse {#distinctive-features-of-clickhouse} # Características distintivas de ClickHouse {#distinctive-features-of-clickhouse}
## DBMS orientado a columnas verdaderas {#true-column-oriented-dbms} ## DBMS orientado a columnas verdaderas {#true-column-oriented-dbms}
En un verdadero DBMS orientado a columnas, no se almacenan datos adicionales con los valores. Entre otras cosas, esto significa que los valores de longitud constante deben ser compatibles, para evitar almacenar su longitud “number” al lado de los valores. Como ejemplo, mil millones de valores de tipo UInt8 deberían consumir alrededor de 1 GB sin comprimir, o esto afectará fuertemente el uso de la CPU. Es muy importante almacenar los datos de forma compacta (sin “garbage”) incluso sin comprimir, ya que la velocidad de descompresión (uso de CPU) depende principalmente del volumen de datos sin comprimir. En un verdadero DBMS orientado a columnas, no se almacenan datos adicionales con los valores. Entre otras cosas, esto significa que los valores de longitud constante deben ser compatibles, para evitar almacenar su longitud “number” al lado de los valores. Como ejemplo, mil millones de valores de tipo UInt8 deberían consumir alrededor de 1 GB sin comprimir, o esto afecta fuertemente el uso de la CPU. Es esencial almacenar los datos de forma compacta (sin “garbage”) incluso sin comprimir, ya que la velocidad de descompresión (uso de CPU) depende principalmente del volumen de datos sin comprimir.
Esto vale la pena señalar porque hay sistemas que pueden almacenar valores de diferentes columnas por separado, pero que no pueden procesar eficazmente las consultas analíticas debido a su optimización para otros escenarios. Los ejemplos son HBase, BigTable, Cassandra e HyperTable. En estos sistemas, obtendrá un rendimiento de alrededor de cien mil filas por segundo, pero no cientos de millones de filas por segundo. Vale la pena señalar porque hay sistemas que pueden almacenar valores de diferentes columnas por separado, pero que no pueden procesar efectivamente las consultas analíticas debido a su optimización para otros escenarios. Los ejemplos son HBase, BigTable, Cassandra e HyperTable. En estos sistemas, obtendría un rendimiento de alrededor de cien mil filas por segundo, pero no cientos de millones de filas por segundo.
También vale la pena señalar que ClickHouse es un sistema de gestión de bases de datos, no una sola base de datos. ClickHouse permite crear tablas y bases de datos en tiempo de ejecución, cargar datos y ejecutar consultas sin volver a configurar y reiniciar el servidor. También vale la pena señalar que ClickHouse es un sistema de administración de bases de datos, no una sola base de datos. ClickHouse permite crear tablas y bases de datos en tiempo de ejecución, cargar datos y ejecutar consultas sin volver a configurar y reiniciar el servidor.
## Compresión de datos {#data-compression} ## Compresión de datos {#data-compression}
@ -18,16 +21,16 @@ Algunos DBMS orientados a columnas (InfiniDB CE y MonetDB) no utilizan la compre
## Almacenamiento en disco de datos {#disk-storage-of-data} ## Almacenamiento en disco de datos {#disk-storage-of-data}
Mantener los datos físicamente ordenados por clave principal permite extraer datos para sus valores específicos o rangos de valores con baja latencia, menos de pocas docenas de milisegundos. Algunos DBMS orientados a columnas (como SAP HANA y Google PowerDrill) solo pueden funcionar en RAM. Este enfoque fomenta la asignación de un presupuesto de hardware más grande que el realmente necesario para el análisis en tiempo real. ClickHouse está diseñado para funcionar en discos duros normales, lo que significa que el costo por GB de almacenamiento de datos es bajo, pero SSD y RAM adicional también se utilizan completamente si están disponibles. Mantener los datos físicamente ordenados por clave principal permite extraer datos para sus valores específicos o rangos de valores con baja latencia, menos de unas pocas docenas de milisegundos. Algunos DBMS orientados a columnas (como SAP HANA y Google PowerDrill) solo pueden funcionar en RAM. Este enfoque fomenta la asignación de un presupuesto de hardware más grande que el necesario para el análisis en tiempo real. ClickHouse está diseñado para funcionar en discos duros normales, lo que significa que el costo por GB de almacenamiento de datos es bajo, pero SSD y RAM adicional también se utilizan completamente si están disponibles.
## Procesamiento paralelo en varios núcleos {#parallel-processing-on-multiple-cores} ## Procesamiento paralelo en varios núcleos {#parallel-processing-on-multiple-cores}
Las consultas de gran tamaño se paralelizan de forma natural, tomando todos los recursos necesarios que estén disponibles en el servidor actual. Las consultas grandes se paralelizan naturalmente, tomando todos los recursos necesarios disponibles en el servidor actual.
## Procesamiento distribuido en varios servidores {#distributed-processing-on-multiple-servers} ## Procesamiento distribuido en varios servidores {#distributed-processing-on-multiple-servers}
Casi ninguno de los DBMS columnar mencionados anteriormente tiene soporte para el procesamiento de consultas distribuidas. Casi ninguno de los DBMS columnar mencionados anteriormente tiene soporte para el procesamiento de consultas distribuidas.
En ClickHouse, los datos pueden residir en diferentes fragmentos. Cada fragmento puede ser un grupo de réplicas que se utilizan para la tolerancia a errores. La consulta se procesa en todos los fragmentos en paralelo. Esto es transparente para el usuario. En ClickHouse, los datos pueden residir en diferentes fragmentos. Cada fragmento puede ser un grupo de réplicas utilizadas para la tolerancia a errores. Todos los fragmentos se utilizan para ejecutar una consulta en paralelo, de forma transparente para el usuario.
## Soporte SQL {#sql-support} ## Soporte SQL {#sql-support}
@ -37,19 +40,19 @@ No se admiten subconsultas y funciones de ventana dependientes.
## Motor del vector {#vector-engine} ## Motor del vector {#vector-engine}
Los datos no solo se almacenan mediante columnas, sino que se procesan mediante vectores (partes de columnas). Esto nos permite lograr una alta eficiencia de CPU. Los datos no solo se almacenan mediante columnas, sino que se procesan mediante vectores (partes de columnas), lo que permite lograr una alta eficiencia de CPU.
## Actualizaciones de datos en tiempo real {#real-time-data-updates} ## Actualizaciones de datos en tiempo real {#real-time-data-updates}
ClickHouse admite tablas con una clave principal. Para realizar consultas rápidamente en el rango de la clave principal, los datos se ordenan incrementalmente utilizando el árbol de combinación. Debido a esto, los datos se pueden agregar continuamente a la tabla. No se toman bloqueos cuando se ingieren nuevos datos. ClickHouse admite tablas con una clave principal. Para realizar consultas rápidamente en el rango de la clave principal, los datos se ordenan de forma incremental utilizando el árbol de combinación. Debido a esto, los datos se pueden agregar continuamente a la tabla. No se toman bloqueos cuando se ingieren nuevos datos.
## Indice {#index} ## Indice {#index}
Tener un dato ordenado físicamente por clave principal hace posible extraer datos para sus valores específicos o rangos de valores con baja latencia, menos de pocas docenas de milisegundos. Tener un dato ordenado físicamente por clave principal permite extraer datos para sus valores específicos o rangos de valores con baja latencia, menos de unas pocas docenas de milisegundos.
## Adecuado para consultas en línea {#suitable-for-online-queries} ## Adecuado para consultas en línea {#suitable-for-online-queries}
La baja latencia significa que las consultas se pueden procesar sin demora y sin intentar preparar la respuesta con anticipación, justo en el mismo momento mientras se carga la página de la interfaz de usuario. En otras palabras, en línea. La baja latencia significa que las consultas se pueden procesar sin demora y sin intentar preparar una respuesta por adelantado, justo en el mismo momento mientras se carga la página de la interfaz de usuario. En otras palabras, en línea.
## Soporte para cálculos aproximados {#support-for-approximated-calculations} ## Soporte para cálculos aproximados {#support-for-approximated-calculations}
@ -61,8 +64,8 @@ ClickHouse proporciona varias formas de intercambiar precisión por rendimiento:
## Replicación de datos y soporte de integridad de datos {#data-replication-and-data-integrity-support} ## Replicación de datos y soporte de integridad de datos {#data-replication-and-data-integrity-support}
Utiliza la replicación multimaster asincrónica. Después de escribir en cualquier réplica disponible, los datos se distribuyen a todas las réplicas restantes en segundo plano. El sistema mantiene datos idénticos en diferentes réplicas. La recuperación después de la mayoría de las fallas se realiza automáticamente, y en casos complejos, semiautomáticamente. ClickHouse utiliza la replicación multi-maestro asincrónica. Después de escribir en cualquier réplica disponible, todas las réplicas restantes recuperan su copia en segundo plano. El sistema mantiene datos idénticos en diferentes réplicas. La recuperación después de la mayoría de las fallas se realiza automáticamente, o semiautomáticamente en casos complejos.
Para obtener más información, consulte la sección [Replicación de datos](../operations/table_engines/replication.md). Para obtener más información, consulte la sección [Replicación de datos](../engines/table_engines/mergetree_family/replication.md).
[Artículo Original](https://clickhouse.tech/docs/es/introduction/distinctive_features/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/introduction/distinctive_features/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 5
toc_title: "Caracter\xEDsticas de ClickHouse que pueden considerarse desventajas"
--- ---
# Características de ClickHouse que pueden considerarse desventajas {#clickhouse-features-that-can-be-considered-disadvantages} # Características de ClickHouse que pueden considerarse desventajas {#clickhouse-features-that-can-be-considered-disadvantages}
@ -8,4 +11,4 @@ machine_translated: true
2. Falta de capacidad para modificar o eliminar datos ya insertados con alta tasa y baja latencia. Hay eliminaciones y actualizaciones por lotes disponibles para limpiar o modificar datos, por ejemplo, para cumplir con [GDPR](https://gdpr-info.eu). 2. Falta de capacidad para modificar o eliminar datos ya insertados con alta tasa y baja latencia. Hay eliminaciones y actualizaciones por lotes disponibles para limpiar o modificar datos, por ejemplo, para cumplir con [GDPR](https://gdpr-info.eu).
3. El índice disperso hace que ClickHouse no sea tan adecuado para consultas de puntos que recuperan filas individuales por sus claves. 3. El índice disperso hace que ClickHouse no sea tan adecuado para consultas de puntos que recuperan filas individuales por sus claves.
[Artículo Original](https://clickhouse.tech/docs/es/introduction/features_considered_disadvantages/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/introduction/features_considered_disadvantages/) <!--hide-->

View File

@ -1,21 +1,24 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 7
toc_title: Historia
--- ---
# Historial de ClickHouse {#clickhouse-history} # Historial de ClickHouse {#clickhouse-history}
ClickHouse fue desarrollado originalmente para alimentar [El Yandex.Métrica](https://metrica.yandex.com/), [la segunda plataforma de análisis web más grande del mundo](http://w3techs.com/technologies/overview/traffic_analysis/all), y sigue siendo el componente central de este sistema. Con más de 13 billones de registros en la base de datos y más de 20 mil millones de eventos diarios, ClickHouse permite generar informes personalizados sobre la marcha directamente a partir de datos no agregados. Este artículo cubre brevemente los objetivos de ClickHouse en las primeras etapas de su desarrollo. ClickHouse se ha desarrollado inicialmente para alimentar [El Yandex.Métrica](https://metrica.yandex.com/), [la segunda plataforma de análisis web más grande del mundo](http://w3techs.com/technologies/overview/traffic_analysis/all), y sigue siendo el componente central de este sistema. Con más de 13 billones de registros en la base de datos y más de 20 mil millones de eventos diarios, ClickHouse permite generar informes personalizados sobre la marcha directamente a partir de datos no agregados. Este artículo cubre brevemente los objetivos de ClickHouse en las primeras etapas de su desarrollo.
El Yandex.Metrica construye informes personalizados sobre la marcha basados en hits y sesiones, con segmentos arbitrarios definidos por el usuario. Esto a menudo requiere la creación de agregados complejos, como el número de usuarios únicos. Los nuevos datos para crear un informe se reciben en tiempo real. El Yandex.Metrica construye informes personalizados sobre la marcha basados en hits y sesiones, con segmentos arbitrarios definidos por el usuario. Hacerlo a menudo requiere construir agregados complejos, como el número de usuarios únicos. Los nuevos datos para crear un informe llegan en tiempo real.
A partir de abril de 2014, Yandex.Metrica estaba rastreando alrededor de 12 mil millones de eventos (vistas de páginas y clics) diariamente. Todos estos eventos deben almacenarse para crear informes personalizados. Una sola consulta puede requerir escanear millones de filas en unos pocos cientos de milisegundos, o cientos de millones de filas en solo unos segundos. A partir de abril de 2014, Yandex.Metrica estaba rastreando alrededor de 12 mil millones de eventos (vistas de páginas y clics) diariamente. Todos estos eventos deben almacenarse para crear informes personalizados. Una sola consulta puede requerir escanear millones de filas en unos pocos cientos de milisegundos, o cientos de millones de filas en solo unos segundos.
## Uso en el Yandex.Metrica y otros servicios de Yandex {#usage-in-yandex-metrica-and-other-yandex-services} ## Uso en Yandex.Metrica y otros servicios de Yandex {#usage-in-yandex-metrica-and-other-yandex-services}
ClickHouse se utiliza para múltiples propósitos en Yandex.Métrica. ClickHouse sirve para múltiples propósitos en Yandex.Métrica.
Su tarea principal es crear informes en modo en línea utilizando datos no agregados. Utiliza un clúster de 374 servidores, que almacenan más de 20,3 billones de filas en la base de datos. El volumen de datos comprimidos, sin contar la duplicación y la replicación, es de aproximadamente 2 PB. El volumen de datos sin comprimir (en formato TSV) sería de aproximadamente 17 PB. Su tarea principal es crear informes en modo en línea utilizando datos no agregados. Utiliza un clúster de 374 servidores, que almacenan más de 20,3 billones de filas en la base de datos. El volumen de datos comprimidos es de aproximadamente 2 PB, sin tener en cuenta duplicados y réplicas. El volumen de datos sin comprimir (en formato TSV) sería de aproximadamente 17 PB.
ClickHouse también se utiliza para: ClickHouse también juega un papel clave en los siguientes procesos:
- Almacenamiento de datos para Session Replay de Yandex.Métrica. - Almacenamiento de datos para Session Replay de Yandex.Métrica.
- Procesamiento de datos intermedios. - Procesamiento de datos intermedios.
@ -23,17 +26,17 @@ ClickHouse también se utiliza para:
- Ejecutar consultas para depurar el Yandex.Motor Metrica. - Ejecutar consultas para depurar el Yandex.Motor Metrica.
- Análisis de registros desde la API y la interfaz de usuario. - Análisis de registros desde la API y la interfaz de usuario.
ClickHouse tiene al menos una docena de instalaciones en otros servicios de Yandex: en verticales de búsqueda, Market, Direct, análisis de negocios, desarrollo móvil, AdFox, servicios personales y otros. Hoy en día, hay varias docenas de instalaciones de ClickHouse en otros servicios y departamentos de Yandex: verticales de búsqueda, comercio electrónico, publicidad, análisis de negocios, desarrollo móvil, servicios personales y otros.
## Datos agregados y no agregados {#aggregated-and-non-aggregated-data} ## Datos agregados y no agregados {#aggregated-and-non-aggregated-data}
Existe una opinión popular de que para calcular efectivamente las estadísticas, debe agregar datos ya que esto reduce el volumen de datos. Existe una opinión generalizada de que para calcular las estadísticas de manera efectiva, debe agregar datos ya que esto reduce el volumen de datos.
Pero la agregación de datos es una solución muy limitada, por las siguientes razones: Pero la agregación de datos viene con muchas limitaciones:
- Debe tener una lista predefinida de informes que el usuario necesitará. - Debe tener una lista predefinida de los informes necesarios.
- El usuario no puede hacer informes personalizados. - El usuario no puede hacer informes personalizados.
- Al agregar una gran cantidad de claves, el volumen de datos no se reduce y la agregación es inútil. - Al agregar sobre un gran número de claves distintas, el volumen de datos apenas se reduce, por lo que la agregación es inútil.
- Para un gran número de informes, hay demasiadas variaciones de agregación (explosión combinatoria). - Para un gran número de informes, hay demasiadas variaciones de agregación (explosión combinatoria).
- Al agregar claves con alta cardinalidad (como las URL), el volumen de datos no se reduce en mucho (menos del doble). - Al agregar claves con alta cardinalidad (como las URL), el volumen de datos no se reduce en mucho (menos del doble).
- Por esta razón, el volumen de datos con agregación podría crecer en lugar de reducirse. - Por esta razón, el volumen de datos con agregación podría crecer en lugar de reducirse.
@ -44,10 +47,10 @@ Si no agregamos nada y trabajamos con datos no agregados, esto podría reducir e
Sin embargo, con la agregación, una parte significativa del trabajo se desconecta y se completa con relativa calma. Por el contrario, los cálculos en línea requieren calcular lo más rápido posible, ya que el usuario está esperando el resultado. Sin embargo, con la agregación, una parte significativa del trabajo se desconecta y se completa con relativa calma. Por el contrario, los cálculos en línea requieren calcular lo más rápido posible, ya que el usuario está esperando el resultado.
El Yandex.Metrica tiene un sistema especializado para agregar datos llamado Metrage, que se utiliza para la mayoría de los informes. El Yandex.Metrica tiene un sistema especializado para agregar datos llamado Metrage, que se utilizó para la mayoría de los informes.
A partir de 2009, Yandex.Metrica también utilizó una base de datos OLAP especializada para datos no agregados llamada OLAPServer, que anteriormente se usaba para el generador de informes. A partir de 2009, Yandex.Metrica también utilizó una base de datos OLAP especializada para datos no agregados llamada OLAPServer, que anteriormente se usaba para el generador de informes.
OLAPServer funcionó bien para datos no agregados, pero tenía muchas restricciones que no permitían que se utilizara para todos los informes según lo deseado. Estos incluyeron la falta de soporte para tipos de datos (solo números) y la incapacidad de actualizar datos de forma incremental en tiempo real (solo se podía hacer reescribiendo datos diariamente). OLAPServer no es un DBMS, sino una base de datos especializada. OLAPServer funcionó bien para datos no agregados, pero tenía muchas restricciones que no permitían que se utilizara para todos los informes según lo deseado. Estos incluyeron la falta de soporte para tipos de datos (solo números) y la incapacidad de actualizar datos de forma incremental en tiempo real (solo se podía hacer reescribiendo datos diariamente). OLAPServer no es un DBMS, sino una base de datos especializada.
Para eliminar las limitaciones de OLAPServer y resolver el problema de trabajar con datos no agregados para todos los informes, desarrollamos el DBMS ClickHouse. El objetivo inicial de ClickHouse era eliminar las limitaciones de OLAPServer y resolver el problema de trabajar con datos no agregados para todos los informes, pero a lo largo de los años, se ha convertido en un sistema de gestión de bases de datos de propósito general adecuado para una amplia gama de tareas analíticas.
[Artículo Original](https://clickhouse.tech/docs/es/introduction/history/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/introduction/history/) <!--hide-->

View File

@ -0,0 +1,8 @@
---
machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_folder_title: Introduction
toc_priority: 1
---

View File

@ -1,22 +1,25 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 6
toc_title: Rendimiento
--- ---
# Rendimiento {#performance} # Rendimiento {#performance}
De acuerdo con los resultados de las pruebas internas en Yandex, ClickHouse muestra el mejor rendimiento (tanto el mayor rendimiento para consultas largas como la menor latencia en consultas cortas) para escenarios operativos comparables entre los sistemas de su clase que estaban disponibles para pruebas. Puede ver los resultados de la prueba en un [página separada](https://clickhouse.tech/benchmark.html). De acuerdo con los resultados de las pruebas internas en Yandex, ClickHouse muestra el mejor rendimiento (tanto el mayor rendimiento para consultas largas como la menor latencia en consultas cortas) para escenarios operativos comparables entre los sistemas de su clase que estaban disponibles para pruebas. Puede ver los resultados de la prueba en un [página separada](https://clickhouse.tech/benchmark.html).
Esto también ha sido confirmado por numerosos puntos de referencia independientes. No son difíciles de encontrar mediante una búsqueda en Internet, o se puede ver [nuestra pequeña colección de enlaces relacionados](https://clickhouse.tech/#independent-benchmarks). Numerosos puntos de referencia independientes llegaron a conclusiones similares. No son difíciles de encontrar mediante una búsqueda en Internet, o se puede ver [nuestra pequeña colección de enlaces relacionados](https://clickhouse.tech/#independent-benchmarks).
## Rendimiento para una única consulta grande {#throughput-for-a-single-large-query} ## Rendimiento para una única consulta grande {#throughput-for-a-single-large-query}
El rendimiento se puede medir en filas por segundo o en megabytes por segundo. Si los datos se colocan en la caché de la página, una consulta que no es demasiado compleja se procesa en hardware moderno a una velocidad de aproximadamente 2-10 GB / s de datos sin comprimir en un solo servidor (para los casos más simples, la velocidad puede alcanzar los 30 GB / s). Si los datos no se colocan en la memoria caché de la página, la velocidad depende del subsistema de disco y la velocidad de compresión de datos. Por ejemplo, si el subsistema de disco permite leer datos a 400 MB/s y la tasa de compresión de datos es de 3, la velocidad será de aproximadamente 1,2 GB/s. Para obtener la velocidad en filas por segundo, divida la velocidad en bytes por segundo por el tamaño total de las columnas utilizadas en la consulta. Por ejemplo, si se extraen 10 bytes de columnas, la velocidad será de alrededor de 100-200 millones de filas por segundo. El rendimiento se puede medir en filas por segundo o megabytes por segundo. Si los datos se colocan en la caché de la página, una consulta que no es demasiado compleja se procesa en hardware moderno a una velocidad de aproximadamente 2-10 GB / s de datos sin comprimir en un solo servidor (para los casos más sencillos, la velocidad puede alcanzar 30 GB / s). Si los datos no se colocan en la memoria caché de la página, la velocidad depende del subsistema de disco y la velocidad de compresión de datos. Por ejemplo, si el subsistema de disco permite leer datos a 400 MB/s y la tasa de compresión de datos es 3, se espera que la velocidad sea de alrededor de 1,2 GB/s. Para obtener la velocidad en filas por segundo, divida la velocidad en bytes por segundo por el tamaño total de las columnas utilizadas en la consulta. Por ejemplo, si se extraen 10 bytes de columnas, se espera que la velocidad sea de alrededor de 100-200 millones de filas por segundo.
La velocidad de procesamiento aumenta casi linealmente para el procesamiento distribuido, pero solo si el número de filas resultantes de la agregación o la clasificación no es demasiado grande. La velocidad de procesamiento aumenta casi linealmente para el procesamiento distribuido, pero solo si el número de filas resultantes de la agregación o la clasificación no es demasiado grande.
## Latencia al procesar consultas cortas {#latency-when-processing-short-queries} ## Latencia al procesar consultas cortas {#latency-when-processing-short-queries}
Si una consulta usa una clave principal y no selecciona demasiadas filas para procesar (cientos de miles) y no usa demasiadas columnas, podemos esperar menos de 50 milisegundos de latencia (dígitos individuales de milisegundos en el mejor de los casos) si los datos se colocan en la caché de la página. De lo contrario, la latencia se calcula a partir del número de búsquedas. Si utiliza unidades giratorias, para un sistema que no está sobrecargado, la latencia se calcula mediante esta fórmula: tiempo de búsqueda (10 ms) \* número de columnas consultadas \* número de partes de datos. Si una consulta usa una clave principal y no selecciona demasiadas columnas y filas para procesar (cientos de miles), puede esperar menos de 50 milisegundos de latencia (dígitos individuales de milisegundos en el mejor de los casos) si los datos se colocan en la memoria caché de la página. De lo contrario, la latencia está dominada principalmente por el número de búsquedas. Si utiliza unidades de disco giratorias, para un sistema que no está sobrecargado, la latencia se puede estimar con esta fórmula: `seek time (10 ms) * count of columns queried * count of data parts`.
## Rendimiento al procesar una gran cantidad de consultas cortas {#throughput-when-processing-a-large-quantity-of-short-queries} ## Rendimiento al procesar una gran cantidad de consultas cortas {#throughput-when-processing-a-large-quantity-of-short-queries}
@ -24,6 +27,6 @@ En las mismas condiciones, ClickHouse puede manejar varios cientos de consultas
## Rendimiento al insertar datos {#performance-when-inserting-data} ## Rendimiento al insertar datos {#performance-when-inserting-data}
Recomendamos insertar datos en paquetes de al menos 1000 filas o no más de una sola solicitud por segundo. Al insertar en una tabla MergeTree desde un volcado separado por tabuladores, la velocidad de inserción será de 50 a 200 MB / s. Si las filas insertadas tienen un tamaño de aproximadamente 1 Kb, la velocidad será de 50,000 a 200,000 filas por segundo. Si las filas son pequeñas, el rendimiento será mayor en filas por segundo (en los datos del sistema Banner -`>` 500.000 filas por segundo; en datos de grafito -`>` 1.000.000 de filas por segundo). Para mejorar el rendimiento, puede realizar varias consultas INSERT en paralelo, y el rendimiento aumentará linealmente. Recomendamos insertar datos en paquetes de al menos 1000 filas o no más de una sola solicitud por segundo. Al insertar en una tabla MergeTree desde un volcado separado por tabuladores, la velocidad de inserción puede ser de 50 a 200 MB/s. Si las filas insertadas tienen alrededor de 1 Kb de tamaño, la velocidad será de 50,000 a 200,000 filas por segundo. Si las filas son pequeñas, el rendimiento puede ser mayor en filas por segundo (en los datos del sistema Banner -`>` 500.000 filas por segundo; en datos de grafito -`>` 1.000.000 de filas por segundo). Para mejorar el rendimiento, puede realizar varias consultas INSERT en paralelo, que se escala linealmente.
[Artículo Original](https://clickhouse.tech/docs/es/introduction/performance/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/introduction/performance/) <!--hide-->

View File

@ -1,5 +1,8 @@
--- ---
machine_translated: true machine_translated: true
machine_translated_rev: 3e185d24c9fe772c7cf03d5475247fb829a21dfa
toc_priority: 48
toc_title: Derechos de acceso
--- ---
# Derechos de acceso {#access-rights} # Derechos de acceso {#access-rights}
@ -69,11 +72,11 @@ Los usuarios se registran en el `users` apartado. Aquí hay un fragmento de la `
Puede ver una declaración de dos usuarios: `default`y`web`. Hemos añadido el `web` usuario por separado. Puede ver una declaración de dos usuarios: `default`y`web`. Hemos añadido el `web` usuario por separado.
El `default` usuario se elige en los casos en que no se pasa el nombre de usuario. El `default` usuario también se utiliza para el procesamiento de consultas distribuidas, si la configuración del servidor o clúster no `user` y `password` (véase la sección sobre el [Distribuido](../operations/table_engines/distributed.md) motor). El `default` usuario se elige en los casos en que no se pasa el nombre de usuario. El `default` usuario también se utiliza para el procesamiento de consultas distribuidas, si la configuración del servidor o clúster no `user` y `password` (véase la sección sobre el [Distribuido](../engines/table_engines/special/distributed.md) motor).
El usuario que se utiliza para intercambiar información entre servidores combinados en un clúster no debe tener restricciones o cuotas sustanciales; de lo contrario, las consultas distribuidas fallarán. The user that is used for exchanging information between servers combined in a cluster must not have substantial restrictions or quotas otherwise, distributed queries will fail.
La contraseña se especifica en texto sin cifrar (no recomendado) o en SHA-256. El hash no es salado. En este sentido, no debe considerar estas contraseñas como proporcionar seguridad contra posibles ataques maliciosos. Más bien, son necesarios para la protección de los empleados. La contraseña se especifica en texto sin cifrar (no recomendado) o en SHA-256. El hash no es salado. En este sentido, no debe considerar estas contraseñas como proporcionar seguridad contra posibles ataques maliciosos. Más bien, son necesarios para la protección de los empleados.
Se especifica una lista de redes desde las que se permite el acceso. En este ejemplo, la lista de redes para ambos usuarios se carga desde un archivo independiente (`/etc/metrika.xml`) que contiene el `networks` sustitución. Aquí hay un fragmento de eso: Se especifica una lista de redes desde las que se permite el acceso. En este ejemplo, la lista de redes para ambos usuarios se carga desde un archivo independiente (`/etc/metrika.xml`) que contiene el `networks` sustitución. Aquí hay un fragmento de eso:
@ -95,7 +98,7 @@ La configuración incluye comentarios que explican cómo abrir el acceso desde t
Para su uso en producción, sólo especifique `ip` elementos (direcciones IP y sus máscaras), ya que usan `host` y `hoost_regexp` podría causar latencia adicional. Para su uso en producción, sólo especifique `ip` elementos (direcciones IP y sus máscaras), ya que usan `host` y `hoost_regexp` podría causar latencia adicional.
A continuación se especifica el perfil de configuración de usuario (consulte la sección “[Perfiles de configuración](settings/settings_profiles.md)”. Puede especificar el perfil predeterminado, `default'`. El perfil puede tener cualquier nombre. Puede especificar el mismo perfil para diferentes usuarios. Lo más importante que puede escribir en el perfil de configuración es `readonly=1`, que asegura el acceso de sólo lectura. A continuación, especifique la cuota que se utilizará (consulte la sección “[Cuota](quotas.md#quotas)”). Puede especificar la cuota predeterminada: `default`. Se establece en la configuración de forma predeterminada para contar solo el uso de recursos, sin restringirlo. La cuota puede tener cualquier nombre. Puede especificar la misma cuota para diferentes usuarios; en este caso, el uso de recursos se calcula para cada usuario individualmente. A continuación se especifica el perfil de configuración de usuario (consulte la sección “[Perfiles de configuración](settings/settings_profiles.md)”. Puede especificar el perfil predeterminado, `default'`. El perfil puede tener cualquier nombre. Puede especificar el mismo perfil para diferentes usuarios. Lo más importante que puede escribir en el perfil de configuración es `readonly=1`, que asegura el acceso de sólo lectura. A continuación, especifique la cuota que se utilizará (consulte la sección “[Cuota](quotas.md#quotas)”). Puede especificar la cuota predeterminada: `default`. It is set in the config by default to only count resource usage, without restricting it. The quota can have any name. You can specify the same quota for different users in this case, resource usage is calculated for each user individually.
En el opcional `<allow_databases>` sección, también puede especificar una lista de bases de datos a las que el usuario puede acceder. De forma predeterminada, todas las bases de datos están disponibles para el usuario. Puede especificar el `default` base. En este caso, el usuario recibirá acceso a la base de datos de forma predeterminada. En el opcional `<allow_databases>` sección, también puede especificar una lista de bases de datos a las que el usuario puede acceder. De forma predeterminada, todas las bases de datos están disponibles para el usuario. Puede especificar el `default` base. En este caso, el usuario recibirá acceso a la base de datos de forma predeterminada.
@ -103,8 +106,8 @@ En el opcional `<allow_dictionaries>` sección, también puede especificar una l
Acceso a la `system` base de datos siempre está permitida (ya que esta base de datos se utiliza para procesar consultas). Acceso a la `system` base de datos siempre está permitida (ya que esta base de datos se utiliza para procesar consultas).
El usuario puede obtener una lista de todas las bases de datos y tablas en ellos mediante el uso de `SHOW` Consultas o tablas del sistema, incluso si no se permite el acceso a bases de datos individuales. El usuario puede obtener una lista de todas las bases de datos y tablas en ellos mediante el uso de `SHOW` consultas o tablas del sistema, incluso si no se permite el acceso a bases de datos individuales.
El acceso a la base de datos no está [sólo lectura](settings/permissions_for_queries.md#settings_readonly) configuración. No puede conceder acceso completo a una base de datos y `readonly` acceso a otro. El acceso a la base de datos no está [sólo lectura](settings/permissions_for_queries.md#settings_readonly) configuración. No puede conceder acceso completo a una base de datos y `readonly` acceso a otro.
[Artículo Original](https://clickhouse.tech/docs/es/operations/access_rights/) <!--hide--> [Artículo Original](https://clickhouse.tech/docs/en/operations/access_rights/) <!--hide-->

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