Velocidad
Date es más rápido que DateTime en la mayoría de los casos.
El tipo Date requiere 2 bytes de almacenamiento, mientras que DateTime requiere 4. Sin embargo, durante la compresión, la diferencia de tamaño entre Date y DateTime se vuelve más significativa. Esto se debe a que los minutos y segundos de DateTime son menos compresibles. Filtrar y agregar por Date en lugar de DateTime también es más rápido.
Observaciones de uso
DateTime y a cómo se interpretan los valores especificados como cadenas ('2020-01-01 05:00:01').
En las tablas se almacena un Unix timestamp independiente de la zona horaria, y la zona horaria se utiliza para convertirlo a formato de texto o viceversa durante la importación/exportación de datos, o para realizar cálculos de calendario sobre los valores (por ejemplo, las funciones toDate, toHour, etc.). La zona horaria no se almacena en las filas de la tabla (ni en el conjunto de resultados), sino en los metadatos de la columna.
Puede encontrar una lista de las zonas horarias compatibles en la IANA Time Zone Database, y también puede consultarla con SELECT * FROM system.time_zones. La lista también está disponible en Wikipedia.
Puede establecer explícitamente una zona horaria para las columnas de tipo DateTime al crear una tabla. Ejemplo: DateTime('UTC'). Si no se establece la zona horaria, ClickHouse usa el valor del parámetro timezone en la configuración del servidor o en la configuración del sistema operativo en el momento en que se inicia el servidor de ClickHouse.
clickhouse-client aplica de forma predeterminada la zona horaria del servidor si no se establece explícitamente una zona horaria al inicializar el tipo de dato. Para usar la zona horaria del cliente, ejecute clickhouse-client con el parámetro --use_client_time_zone.
ClickHouse muestra los valores según el valor de la configuración date_time_output_format. De forma predeterminada, utiliza el formato de texto YYYY-MM-DD hh:mm:ss. Además, puede cambiar la salida con la función formatDateTime.
Al insertar datos en ClickHouse, puede usar diferentes formatos de cadenas de fecha y hora, según el valor de la configuración date_time_input_format.
Ejemplos
DateTime e insertar datos en ella:
- Al insertar datetime como número, se interpreta como Unix Timestamp (UTC) en segundos.
1546300800representa'2019-01-01 00:00:00'UTC. Sin embargo, como la columnatimestamptiene especificada la zona horariaAsia/Istanbul(UTC+3), al mostrarse como cadena el valor aparecerá como'2019-01-01 03:00:00'. También se acepta un número con parte fraccionaria o exponencial, que se trunca a segundos enteros, de forma coherente conCAST,toDateTimey el formatoValues. (Antes de la versión 26.8, dichos números con parte fraccionaria o exponencial en las rutas de entradaJSONyValues/Quoted—esta última abarca todos los formatos que analizan campos con la regla de escapeQuoted:Values,MySQLDumpyTemplate/CustomSeparated/Regexpconfigurados con escape de campoQuoted— no eran aceptados por el analizador de streaming; establezcainput_format_read_datetime_number_as_raw_value = 1para restaurar este comportamiento. En el propio formatoValues, dicho literal seguía funcionando —y continúa funcionando en el modo de compatibilidad— mediante el mecanismo alternativo de expresiones SQL, que lo lee como un número de segundos. EnJSONExtracty el tipo de datosJSON, un valor fraccionario se analiza medianteFloat64, por lo que un valor cercano al límite de un segundo entero puede redondearse al segundo adyacente, a diferencia de los formatos de entrada por filas, que truncan exactamente el texto original. Los formatos de texto con tabulaciones, CSV y otros formatos de texto con escape no se rigen por esta configuración.) - Al insertar un valor de cadena como datetime, se interpreta según la zona horaria de la columna.
'2019-01-01 00:00:00'se interpretará en la zona horariaAsia/Istanbuly se guardará como1546290000.
DateTime
DateTime se pueden filtrar mediante un valor de texto en el predicado WHERE. Este se convertirá automáticamente a DateTime:
DateTime:
Limitaciones en la compatibilidad con zonas horarias
Gestión del horario de verano (DST)
date_time_output_formatestá configurado comosimple.- Los relojes se atrasan (“Fall Back”), lo que provoca un solapamiento de una hora.
- Los relojes se adelantan (“Spring Forward”), lo que provoca un hueco de una hora.
- El 29 de octubre de 2023, a las 02:00:00, los relojes se atrasan hasta la 01:00:00 (BST → GMT).
- La hora 01:00:00 – 01:59:59 aparece dos veces (una vez en BST y otra en GMT)
- ClickHouse siempre elige la primera ocurrencia (BST), lo que provoca resultados inesperados al sumar intervalos de tiempo.
- El 26 de marzo de 2023, a las
00:59:59, los relojes se adelantan a las 02:00:00 (GMT → BST). - La hora
01:00:00–01:59:59no existe.
2023-03-26 01:30:00 hasta 2023-03-26 00:30:00.
Véase también
- Funciones de conversión de tipos
- Funciones para trabajar con fechas y horas
- Funciones para trabajar con arrays
- La configuración
date_time_input_format - La configuración
date_time_output_format - El parámetro de configuración del servidor
timezone - La configuración
session_timezone - Operadores para trabajar con fechas y horas
- El tipo de dato
Date