ClickHouse/docs/es/sql-reference/statements/select/order-by.md
Ivan Blinkov cd14f9ebcb
SQL reference refactoring (#10857)
* split up select.md

* array-join.md basic refactoring

* distinct.md basic refactoring

* format.md basic refactoring

* from.md basic refactoring

* group-by.md basic refactoring

* having.md basic refactoring

* additional index.md refactoring

* into-outfile.md basic refactoring

* join.md basic refactoring

* limit.md basic refactoring

* limit-by.md basic refactoring

* order-by.md basic refactoring

* prewhere.md basic refactoring

* adjust operators/index.md links

* adjust sample.md links

* adjust more links

* adjust operatots links

* fix some links

* adjust aggregate function article titles

* basic refactor of remaining select clauses

* absolute paths in make_links.sh

* run make_links.sh

* remove old select.md locations

* translate docs/es

* translate docs/fr

* translate docs/fa

* remove old operators.md location

* change operators.md links

* adjust links in docs/es

* adjust links in docs/es

* minor texts adjustments

* wip

* update machine translations to use new links

* fix changelog

* es build fixes

* get rid of some select.md links

* temporary adjust ru links

* temporary adjust more ru links

* improve curly brace handling

* adjust ru as well

* fa build fix

* ru link fixes

* zh link fixes

* temporary disable part of anchor checks
2020-05-15 07:34:54 +03:00

4.8 KiB

machine_translated machine_translated_rev
true 72537a2d52

ORDEN POR CLÁUSULA

El ORDER BY cláusula contiene una lista de expresiones, cada una de las cuales puede atribuirse con DESC (descendente) o ASC modificador (ascendente) que determina la dirección de clasificación. Si no se especifica la dirección, ASC se supone, por lo que generalmente se omite. La dirección de ordenación se aplica a una sola expresión, no a toda la lista. Ejemplo: ORDER BY Visits DESC, SearchPhrase

Las filas que tienen valores idénticos para la lista de expresiones de clasificación se generan en un orden arbitrario, que también puede ser no determinista (diferente cada vez). Si se omite la cláusula ORDER BY, el orden de las filas tampoco está definido, y también puede ser no determinista.

Clasificación de valores especiales

Hay dos enfoques para NaN y NULL orden de clasificación:

  • Por defecto o con el NULLS LAST modificador: primero los valores, luego NaN, entonces NULL.
  • Con el NULLS FIRST modificador: primero NULL, entonces NaN, luego otros valores.

Ejemplo

Para la mesa

┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │    2 │
│ 1 │  nan │
│ 2 │    2 │
│ 3 │    4 │
│ 5 │    6 │
│ 6 │  nan │
│ 7 │ ᴺᵁᴸᴸ │
│ 6 │    7 │
│ 8 │    9 │
└───┴──────┘

Ejecute la consulta SELECT * FROM t_null_nan ORDER BY y NULLS FIRST conseguir:

┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 7 │ ᴺᵁᴸᴸ │
│ 1 │  nan │
│ 6 │  nan │
│ 2 │    2 │
│ 2 │    2 │
│ 3 │    4 │
│ 5 │    6 │
│ 6 │    7 │
│ 8 │    9 │
└───┴──────┘

Cuando se ordenan los números de coma flotante, los NaN están separados de los otros valores. Independientemente del orden de clasificación, los NaN vienen al final. En otras palabras, para la clasificación ascendente se colocan como si fueran más grandes que todos los demás números, mientras que para la clasificación descendente se colocan como si fueran más pequeños que el resto.

Soporte de colación

Para ordenar por valores de cadena, puede especificar la intercalación (comparación). Ejemplo: ORDER BY SearchPhrase COLLATE 'tr' - para ordenar por palabra clave en orden ascendente, utilizando el alfabeto turco, insensible a mayúsculas y minúsculas, suponiendo que las cadenas están codificadas en UTF-8. COLLATE se puede especificar o no para cada expresión en ORDER BY de forma independiente. Si se especifica ASC o DESC, se especifica COLLATE después de él. Cuando se usa COLLATE, la clasificación siempre distingue entre mayúsculas y minúsculas.

Solo recomendamos usar COLLATE para la clasificación final de un pequeño número de filas, ya que la clasificación con COLLATE es menos eficiente que la clasificación normal por bytes.

Detalles de implementación

Menos RAM se utiliza si un pequeño suficiente LIMIT se especifica además ORDER BY. De lo contrario, la cantidad de memoria gastada es proporcional al volumen de datos para clasificar. Para el procesamiento de consultas distribuidas, si GROUP BY se omite, la clasificación se realiza parcialmente en servidores remotos y los resultados se fusionan en el servidor solicitante. Esto significa que para la ordenación distribuida, el volumen de datos a ordenar puede ser mayor que la cantidad de memoria en un único servidor.

Si no hay suficiente RAM, es posible realizar la clasificación en la memoria externa (creando archivos temporales en un disco). Utilice el ajuste max_bytes_before_external_sort para este propósito. Si se establece en 0 (el valor predeterminado), la ordenación externa está deshabilitada. Si está habilitada, cuando el volumen de datos a ordenar alcanza el número especificado de bytes, los datos recopilados se ordenan y se vuelcan en un archivo temporal. Después de leer todos los datos, todos los archivos ordenados se fusionan y se generan los resultados. Los archivos se escriben en el /var/lib/clickhouse/tmp/ directorio en la configuración (de forma predeterminada, pero puede usar el tmp_path parámetro para cambiar esta configuración).

La ejecución de una consulta puede usar más memoria que max_bytes_before_external_sort. Por este motivo, esta configuración debe tener un valor significativamente menor que max_memory_usage. Como ejemplo, si su servidor tiene 128 GB de RAM y necesita ejecutar una sola consulta, establezca max_memory_usage de hasta 100 GB, y max_bytes_before_external_sort para 80 GB.

La clasificación externa funciona con mucha menos eficacia que la clasificación en RAM.