Compartir a través de


Referencia del lenguaje SQL de aceleración de consultas

La aceleración de consultas admite un lenguaje similar a ANSI SQL para expresar consultas sobre el contenido del blob. El dialecto SQL de aceleración de consultas es un subconjunto de ANSI SQL, con un conjunto limitado de tipos de datos admitidos, operadores, etc., pero también se expande en ANSI SQL para admitir consultas sobre formatos de datos semiestructurados jerárquicos, como JSON.

Sintaxis SELECT

La única instrucción SQL admitida por la aceleración de consultas es la instrucción SELECT. En este ejemplo se devuelve cada fila para la que la expresión devuelve true.

SELECT * FROM table [WHERE expression] [LIMIT limit]

Para los datos con formato CSV, la tabla debe ser BlobStorage. Esto significa que la consulta se ejecutará en cualquier blob especificado en la llamada REST. En el caso de los datos con formato JSON, la tabla es un "descriptor de tabla". Consulte la sección Descriptores de tabla de este artículo.

En el ejemplo siguiente, para cada fila para la que la expresión WHERE devuelve true, esta instrucción devolverá una nueva fila que se realiza a partir de evaluar cada una de las expresiones de proyección.

SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]

Puede especificar una o varias columnas específicas como parte de la expresión SELECT (por ejemplo, SELECT Title, Author, ISBN).

Nota:

El número máximo de columnas específicas que puede usar en la expresión SELECT es 49. Si necesita la instrucción SELECT para devolver más de 49 columnas, use un carácter comodín (*) para la expresión SELECT (por ejemplo: SELECT *).

En el ejemplo siguiente se devuelve un cálculo agregado (por ejemplo: el valor medio de una columna determinada) en cada una de las filas para las que la expresión devuelve true.

SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]

En el ejemplo siguiente se devuelven desplazamientos adecuados para dividir un blob con formato CSV. Consulte la sección Sys.Split de este artículo.

SELECT sys.split(split_size)FROM BlobStorage

Tipos de datos

Tipo de datos Descripción
INT Entero de 64 bits con signo.
FLOTAR Punto flotante de 64 bits ("precisión doble").
CUERDA Cadena Unicode de longitud variable.
TIMESTAMP Un momento dado.
BOOLEANO Verdadero o falso.

Al leer valores de datos con formato CSV, todos los valores se leen como cadenas. Los valores de cadena se pueden convertir a otros tipos mediante expresiones CAST. Los valores se pueden convertir implícitamente a otros tipos en función del contexto. Para obtener más información, consulte Precedencia de tipo de datos (Transact-SQL).

Expresiones

Hacer referencia a campos

En el caso de los datos con formato JSON o los datos con formato CSV con una fila de encabezado, se puede hacer referencia a los campos por nombre. Los nombres de campo se pueden citar o sin comillas. Los nombres de campo entre comillas se incluyen entre comillas dobles ("), pueden contener espacios y distinguen mayúsculas de minúsculas. Los nombres de campo sin comillas no distinguen mayúsculas de minúsculas y pueden no contener caracteres especiales.

En los datos con formato CSV, los campos también pueden ser referenciados por ordinal, prefijo con un carácter de subrayado (_). Por ejemplo, se puede hacer referencia al primer campo como _1o se puede hacer referencia al undécimo campo como _11. Hacer referencia a campos por ordinal es útil para los datos con formato CSV que no contienen una fila de encabezado, en cuyo caso la única manera de hacer referencia a un campo determinado es por ordinal.

Operadores

Se admiten los siguientes operadores SQL estándar:

Operador Descripción
= Compara la igualdad de dos expresiones (un operador de comparación).
!= Comprueba si una expresión no es igual a otra expresión (un operador de comparación).
<> Compara dos expresiones para no ser iguales a (un operador de comparación).
< Compara dos expresiones para menor que (un operador de comparación).
<= Compara dos expresiones para un operador de comparación menor o igual que .
> Compara dos expresiones para mayor que (un operador de comparación).
>= Compara dos expresiones para mayor o igual que (un operador de comparación).
+ Suma dos números. Este operador aritmético adicional también puede agregar un número, en días, a una fecha.
- Resta dos números (un operador de resta aritmética).
/ Divide un número por otro (un operador de división aritmética).
* Multiplica dos expresiones (un operador de multiplicación aritmética).
% Devuelve el resto de un número dividido por otro.
AND Realiza una operación lógica AND bit a bit entre dos valores enteros.
OR Realiza una operación OR lógica bit a bit entre dos valores enteros especificados como traducidos a expresiones binarias dentro de instrucciones Transact-SQL.
NOT Niega una entrada booleana.
CAST Convierte una expresión de un tipo de datos en otro.
BETWEEN Especifica un intervalo que se va a probar.
IN Determina si un valor especificado coincide con cualquier valor de una subconsulta o una lista.
NULLIF Devuelve un valor NULL si las dos expresiones especificadas son iguales.
COALESCE Evalúa los argumentos en orden y devuelve el valor actual de la primera expresión que inicialmente no se evalúa como NULL.

Si los tipos de datos de la izquierda y la derecha de un operador son diferentes, la conversión automática se realizará según las reglas especificadas aquí: Precedencia de tipo de datos (Transact-SQL).

El lenguaje SQL de aceleración de consultas solo admite un subconjunto muy pequeño de los tipos de datos descritos en ese artículo. Consulte la sección Tipos de datos de este artículo.

Conversiones

El lenguaje SQL de aceleración de consultas admite el operador CAST, según las reglas aquí: Conversión de tipos de datos (motor de base de datos).

El lenguaje SQL de aceleración de consultas solo admite un pequeño subconjunto de los tipos de datos descritos en ese artículo. Consulte la sección Tipos de datos de este artículo.

Funciones de cadena

El lenguaje SQL de aceleración de consultas admite las siguientes funciones de cadena SQL estándar:

Función Descripción
CHAR_LENGTH Devuelve la longitud en caracteres de la expresión de cadena, si la expresión de cadena es de un tipo de datos de caracteres; de lo contrario, devuelve la longitud en bytes de la expresión de cadena (el entero más pequeño no es menor que el número de bits dividido entre 8). (Esta función es igual que la función CHARACTER_LENGTH).
CHARACTER_LENGTH Devuelve la longitud en caracteres de la expresión de cadena, si la expresión de cadena es de un tipo de datos de caracteres; de lo contrario, devuelve la longitud en bytes de la expresión de cadena (el entero más pequeño no es menor que el número de bits dividido entre 8). (Esta función es la misma que la función CHAR_LENGTH
BAJAR Devuelve una expresión de caracteres después de convertir los datos de caracteres en mayúsculas en minúsculas.
upper Devuelve una expresión de caracteres con datos de caracteres en minúsculas convertidos en mayúsculas.
SUBCADENA Devuelve parte de una expresión de caracteres, binaria, de texto o de imagen en SQL Server.
RECORTAR Quita el carácter de espacio char(32) u otros caracteres especificados del inicio y el final de una cadena.
Líder Quita el carácter de espacio char(32) u otros caracteres especificados del inicio de una cadena.
REZAGADO Quita el carácter de espacio char(32) u otros caracteres especificados del final de una cadena.

Estos son algunos ejemplos:

Función Ejemplo Resultado
CHARACTER_LENGTH SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
CHAR_LENGTH SELECT CHAR_LENGTH(_1) from BlobStorage 1
BAJAR SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
SUPERIOR SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
SUBCADENA SUBSTRING('123456789', 1, 5) 23456
RECORTAR TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

Funciones de fecha

Se admiten las siguientes funciones de fecha de SQL estándar:

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

Actualmente, se convierten todos los formatos de fecha de IS08601 estándar .

función DATE_ADD

El lenguaje SQL de aceleración de consultas admite year, month, day, hour, minute, second para la DATE_ADD función.

Ejemplos:

DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)

función DATE_DIFF

El lenguaje SQL de aceleración de consultas admite year, month, day, hour, minute, second para la DATE_DIFF función.

DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00') 

Función EXTRACT

Para EXTRACT que no sea la parte de fecha admitida para la DATE_ADD función, el lenguaje SQL de aceleración de consultas admite timezone_hour y timezone_minute como parte de fecha.

Ejemplos:

EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')

función TO_STRING

Ejemplos:

TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP),  'MMMM d, y')

En esta tabla se describen las cadenas que puede usar para especificar el formato de salida de la TO_STRING función.

Cadena de formato Salida
Yy Año en formato de 2 dígitos: 1999 como '99'
y Año en formato de 4 dígitos
aaaa Año en formato de 4 dígitos
M Mes del año - 1
MILÍMETRO Mes rellenado cero - 01
MMM Mes abreviado del año - JAN
MMMM Mes completo : mayo
d Día del mes (1-31)
Dd Día rellenado cero del mes (01-31)
un AM o PM
h Hora del día (1-12)
Hh Cero horas rellenadas del día (01-12)
H Hora del día (0-23)
HH Hora rellenada cero del día (00-23)
m Minuto de la hora (0-59)
MM Minuto rellenado cero (00-59)
s Segundo de minutos (0-59)
Ss Cero segundos rellenados (00-59)
S Fracción de segundos (0,1-0,9)
SS Fracción de segundos (0,01-0,99)
SSS Fracción de segundos (0,001-0,999)
X Desplazamiento en horas
XX o XXXX Desplazamiento en horas y minutos (+0430)
XXX o XXXXX Desplazamiento en horas y minutos (-07:00)
x Desplazamiento en horas (7)
xx o xxxx Desplazamiento en hora y minuto (+0530)
Xxx o xxxxx Desplazamiento en hora y minuto (+05:30)

función TO_TIMESTAMP

Solo se admiten los formatos IS08601.

Ejemplos:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

Nota:

También puede usar la UTCNOW función para obtener la hora del sistema.

Expresiones de agregado

Una instrucción SELECT puede contener una o varias expresiones de proyección o una expresión de agregado única. Se admiten las siguientes expresiones de agregado:

Expresión Descripción
COUNT(*) Devuelve el número de registros que coinciden con la expresión de predicado.
COUNT(expression) Devuelve el número de registros para los que la expresión no es NULL.
AVG(expression) Devuelve el promedio de los valores que no son NULL de la expresión.
MIN(expression) Devuelve el valor mínimo no NULL de la expresión.
MAX(expression) Devuelve el valor máximo no NULL de la expresión.
SUM(expression) Devuelve la suma de todos los valores que no son NULL de la expresión.

DESAPARECIDO

El IS MISSING operador es el único no estándar que admite el lenguaje SQL de aceleración de consultas. En el caso de los datos JSON, si falta un campo de un registro de entrada determinado, el campo IS MISSING de expresión se evaluará como el valor booleano true.

Descriptores de tabla

En el caso de los datos CSV, el nombre de la tabla siempre BlobStoragees . Por ejemplo:

SELECT * FROM BlobStorage

Para los datos JSON, hay disponibles opciones adicionales:

SELECT * FROM BlobStorage[*].path

Esto permite realizar consultas en subconjuntos de los datos JSON.

En el caso de las consultas JSON, puede mencionar la ruta de acceso en parte de la cláusula FROM. Estas rutas de acceso le ayudarán a analizar el subconjunto de datos JSON. Estas rutas de acceso pueden hacer referencia a valores json Array y Object.

Veamos un ejemplo para comprender esto con más detalle.

Estos son nuestros datos de ejemplo:

{
  "id": 1,
  "name": "mouse",
  "price": 12.5,
  "tags": [
    "wireless",
    "accessory"
  ],
  "dimensions": {
    "length": 3,
    "width": 2,
    "height": 2
  },
  "weight": 0.2,
  "warehouses": [
    {
      "latitude": 41.8,
      "longitude": -87.6
    }
  ]
}

Es posible que solo le interese el warehouses objeto JSON de los datos anteriores. El warehouses objeto es un tipo de matriz JSON, por lo que puede mencionarlo en la cláusula FROM. La consulta de ejemplo puede tener un aspecto similar al siguiente.

SELECT latitude FROM BlobStorage[*].warehouses[*]

La consulta obtiene todos los campos, pero selecciona solo la latitud.

Si desea tener acceso solo al valor del dimensions objeto JSON, puede usar para hacer referencia a ese objeto en la consulta. Por ejemplo:

SELECT length FROM BlobStorage[*].dimensions

Esto también limita el acceso a los miembros del dimensions objeto. Si desea acceder a otros miembros de campos JSON y valores internos de objetos JSON, puede usar una consulta como se muestra en el ejemplo siguiente:

SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]

Nota:

BlobStorage y BlobStorage[*] hacen referencia al objeto completo. Sin embargo, si tiene una ruta de acceso en la cláusula FROM, deberá usar BlobStorage[*].path.

Sys.Split

Se trata de una forma especial de la instrucción SELECT, que solo está disponible para los datos con formato CSV.

SELECT sys.split(split_size) FROM BlobStorage

Use esta instrucción en casos en los que quiera descargar y, a continuación, procesar registros de datos CSV en lotes. De este modo, puede procesar registros en paralelo en lugar de tener que descargar todos los registros a la vez. Esta instrucción no devuelve registros del archivo CSV. En su lugar, devuelve una colección de tamaños de lote. A continuación, puede usar cada tamaño de lote para recuperar un lote de registros de datos.

Use el parámetro split_size para especificar el número de bytes que desea que contenga cada lote. Por ejemplo, si desea procesar solo 10 MB de datos a la vez, la instrucción tendría este aspecto: SELECT sys.split(10485760)FROM BlobStorage porque 10 MB es igual a 10 485 760 bytes. Cada lote contendrá tantos registros como pueda caber en esos 10 MB.

En la mayoría de los casos, el tamaño de cada lote será ligeramente mayor que el número que especifique. Esto se debe a que un lote no puede contener un registro parcial. Si el último registro de un lote se inicia antes del final del umbral, el lote será mayor para que pueda contener el registro completo. Es probable que el tamaño del último lote sea menor que el tamaño que especifique.

Nota:

El split_size debe tener al menos 10 MB (10485760).

Consulte también