Tipos de datos SQL Databricks

Para ver las reglas que rigen cómo se resuelven los conflictos entre tipos de datos, vea Databricks SQL de tipos .

Tipos de datos admitidos

Databricks SQL admite los siguientes tipos de datos:

Tipo de datos Descripción
BIGINT Representa números enteros con signo de 8 bytes.
BINARY Representa valores de secuencia de bytes.
BOOLEAN Representa valores booleanos.
DATE Representa valores que comprenden valores de campos año, mes y día, sin una zona horaria.
DECIMAL(p,s) Representa números con precisión máxima p y escala s fija.
DOUBLE Representa números de punto flotante de precisión doble de 8 bytes.
FLOAT Representa números de punto flotante de precisión sencilla de 4 bytes.
INT Representa números enteros con signo de 4 bytes.
INTERVAL intervalQualifier Representa intervalos de tiempo en una escala de segundos o meses.
NULL Representa el valor NULL sin tipo.
SMALLINT Representa números enteros con signo de 4 bytes.
CADENA Representa valores de cadena de caracteres.
TIMESTAMP Representa valores que comprenden valores de campos año, mes, día, hora, minuto y segundo, con la zona horaria local de la sesión.
TINYINT Representa números enteros con signo de 1 byte.
MATRIZ Representa valores que componen una secuencia de elementos con el tipo de elementType .
MAP<keyType,valueType> Representa valores que componen un conjunto de pares clave-valor.
STRUCT<[fieldName:fieldType [NOT NULL][COMMENT str][, ...]] > Representa valores con la estructura descrita por una secuencia de campos.

Clasificación de tipos de datos

Los tipos de datos se agrupan en las clases siguientes:

  • Los tipos numéricos enteros representan números enteros:
  • Los tipos numéricos exactos representan números base 10:
  • Los tipos de punto flotante binario usan exponentes y una representación binaria para cubrir un gran intervalo de números:
  • Los tipos numéricos representan todos los tipos de datos numéricos:
    • Tipos numéricos exactos
    • Tipos de punto flotante binarios
  • Los tipos de fecha y hora representan componentes de fecha y hora:
  • Los tipos de datos simples son tipos definidos al contener valores singleton:
  • Los tipos complejos son tipos compuestos por varios componentes de tipos complejos o simples:

Valores de punto flotante especiales

Varios valores de punto flotante especiales se tratan sin tener en cuenta las mayúsculas y minúsculas:

  • Inf, +Inf, Infinity, +Infinity: infinito positivo
  • -Inf, -Infinity: infinito negativo
  • NaN: no es un número

Semántica de infinito positivo y negativo

El infinito positivo y negativo tiene la semántica siguiente:

  • Infinito positivo multiplicado por cualquier valor positivo devuelve infinito positivo.
  • Infinito negativo multiplicado por cualquier valor positivo devuelve infinito negativo.
  • Infinito positivo multiplicado por cualquier valor negativo devuelve infinito negativo.
  • Infinito negativo multiplicado por cualquier valor negativo devuelve infinito positivo.
  • Infinito positivo o negativo multiplicado por 0 devuelve NaN.
  • El infinito positivo o negativo es igual a sí mismo.
  • En las agregaciones, todos los valores infinitos positivos se agrupan. De forma similar, todos los valores infinitos negativos se agrupan.
  • El infinito positivo y el infinito negativo se tratan como valores normales en las claves de combinación.
  • El infinito positivo se ordena por debajo de NaN y mayor que cualquier otro valor.
  • El infinito negativo se ordena por debajo de cualquier otro valor.

Semántica de NaN

Cuando se trabaja con tipos o que no coinciden exactamente con la semántica de float double punto flotante estándar, NaN tiene la semántica siguiente:

  • NaN = NaN devuelve true.
  • En las agregaciones, todos los valores NaN se agrupan.
  • NaN se trata como un valor normal en las claves de combinación.
  • Los valores NaN son los últimos cuando están en orden ascendente, más grandes que cualquier otro valor numérico.

Ejemplos

> SELECT double('infinity');
 Infinity

> SELECT float('-inf');
 -Infinity

> SELECT float('NaN');
 NaN

> SELECT double('infinity') * 0;
 NaN

> SELECT double('-infinity') * (-1234567);
 Infinity

> SELECT double('infinity') < double('NaN');
 true

> SELECT double('NaN') = double('NaN');
 true

> SELECT double('inf') = double('infinity');
 true

> SELECT COUNT(*), c2
    FROM VALUES (1, double('infinity')),
                (2, double('infinity')),
                (3, double('inf')),
                (4, double('-inf')),
                (5, double('NaN')),
                (6, double('NaN')),
                (7, double('-infinity'))
        AS test(c1, c2)
    GROUP BY c2;
        2       NaN
        2 -Infinity
        3  Infinity