Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 _1
o 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 BlobStorage
es . 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).