Referência da linguagem SQL de aceleração de consulta

A aceleração de consulta dá suporte a uma linguagem do tipo ANSI SQL para expressar consultas em conteúdos de blobs. O dialeto SQL de aceleração de consulta é um subconjunto do ANSI SQL que dá suporte a um conjunto limitado de tipos de dados, operadores etc., mas que também pode ser expandido no ANSI SQL para dar suporte a consultas em formatos de dados semiestruturados hierárquicos, como JSON.

Sintaxe SELECT

A única instrução SQL com suporte da aceleração de consulta é a SELECT. Este exemplo retorna todas as linhas para as quais o retorno da expressão é true.

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

Para dados formatados em CSV, a tabela deve ser . Isso significa que a consulta será executada em qualquer blob especificado na chamada REST. Para dados formatados com JSON, a tabela é um "descritor de tabela". COnfira a seção Descritores de Tabela deste artigo.

No exemplo a seguir, no caso de cada linha para a qual o retorno da expressão WHERE é true, a instrução retorna uma nova linha como resultado da avaliação de cada uma das expressões de projeção.

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

Você pode especificar uma ou mais colunas específicas como parte da expressão SELECT (por exemplo, SELECT Title, Author, ISBN).

Observação

O número máximo de colunas específicas que você pode usar na expressão SELECT é 49. Se você precisar que sua instrução SELECT retorne mais de 49 colunas, use um caractere curinga (*) para a expressão SELECT (por exemplo: SELECT *).

O exemplo a seguir retorna uma computação de agregação (por exemplo: o valor médio de uma determinada coluna) sobre cada uma das linhas para as quais a expressão retorna true.

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

O exemplo a seguir retorna deslocamentos adequados para a divisão de um blob formatado em CSV. Consulte a seção Sys.Split deste artigo.

SELECT sys.split(split_size)FROM BlobStorage

Tipos de dados

Tipo de Dados Descrição
INT Inteiro com sinal de 64 bits.
FLOAT Um ponto flutuante de 64 bits ("precisão dupla").
STRING Cadeia de caracteres Unicode de comprimento variável.
timestamp Um momento específico.
BOOLEAN True ou false.

Todos os valores de dados formatados em CSV são lidos como cadeias de caracteres. Os valores de cadeia de caracteres podem ser convertidos em outros tipos usando expressões CAST. Os valores podem ser convertidos implicitamente em outros tipos, dependendo do contexto. Para saber mais, consulte Precedência de tipo de dados (Transact-SQL).

Expressões

Referência a campos

Para dados formatados em JSON ou em CSV com uma linha de cabeçalho, os campos podem ser referenciados por nome. Esses nomes podem ser colocados entre aspas ou não. Os nomes de campo entre aspas são colocados entre caracteres de aspas duplas ("), podem conter espaços e diferenciam maiúsculas de minúsculas. Os nomes de campos sem aspas não diferenciam maiúsculas de minúsculas e não podem conter caracteres especiais.

Em dados formatados em CSV, os campos também podem ser referenciados por ordinal, prefixado com um caractere de sublinhado (_). Por exemplo, o primeiro campo pode ser referenciado como _1 ou o décimo primeiro como _11. A referência dos campos por ordinal é útil para dados formatados em CSV que não contêm uma linha de cabeçalho. Nesse caso, a única maneira de fazer referências a um determinado campo é por ordinal.

Operadores

Há suporte para os seguintes operadores SQL padrão:

Operador Descrição
= Compara a igualdade de duas expressões (operador de comparação).
!= Testa se uma expressão não é igual a outra expressão (um operador de comparação).
<> Compara duas expressões com relação a "não igual a" (um operador de comparação).
< Compara duas expressões com relação a "menor que" (um operador de comparação).
<= Compara duas expressões com relação a "menor ou igual a" (um operador de comparação).
> Compara duas expressões com relação a "maior que" (um operador de comparação).
>= Compara duas expressões por maior ou igual a (um operador de comparação).
+ Soma dois números. Este operador aritmético de adição também pode adicionar um número, em dias, a uma data.
- Subtrai dois números (um operador de subtração aritmético).
/ Divide um número por outro (um operador de divisão aritmética).
* Multiplica duas expressões (um operador de multiplicação aritmética).
% Retorna o resto de um número dividido por outro.
AND Executa uma operação lógica AND bit a bit entre dois valores inteiros.
OR Executa uma operação OR lógica bit a bit entre dois valores inteiros especificados, conforme convertidos em expressões binárias, nas instruções Transact-SQL.
NOT Nega uma entrada booliana.
CAST Converte uma expressão de um tipo de dados para outro.
BETWEEN Especifica um intervalo a ser testado.
IN Determina se um valor especificado corresponde a qualquer valor em uma subconsulta ou uma lista.
NULLIF Retorna um valor nulo se as duas expressões especificadas forem iguais.
COALESCE Avalia os argumentos em ordem e retorna o valor atual da primeira expressão que não é avaliada inicialmente como NULL.

Se os tipos de dados à esquerda e à direita de um operador forem diferentes, a conversão automática será executada de acordo com as regras especificadas em Precedência de tipo de dados (Transact-SQL).

A linguagem SQL de aceleração de consulta dá suporte a um subconjunto muito pequeno de tipos de dados que são discutidos neste artigo. Consulte a seção Tipos de dados deste artigo.

Conversões

A linguagem SQL de aceleração de consulta dá suporte ao operador CAST, de acordo com as regras em Conversão de tipo de dados (mecanismo de banco de dados).

Ela também fornece suporte a um subconjunto muito pequeno de tipos de dados que são discutidos nesse artigo. Consulte a seção Tipos de dados deste artigo.

Funções de cadeia de caracteres

A linguagem SQL de aceleração de consulta dá suporte às seguintes funções de cadeia de caracteres SQL padrão:

Função Descrição
CHAR_LENGTH Retornará o comprimento da expressão de cadeia de caracteres em caracteres se ela for do tipo de dados de caractere, caso contrário, retornará o comprimento da expressão em bytes (o menor número inteiro não menor que o número de bits dividido por 8). (Essa função é igual à função CHARACTER_LENGTH.)
CHARACTER_LENGTH Retornará o comprimento da expressão de cadeia de caracteres em caracteres se ela for do tipo de dados de caractere, caso contrário, retornará o comprimento da expressão em bytes (o menor número inteiro não menor que o número de bits dividido por 8). (Essa função é igual à função CHAR_LENGTH.)
LOWER Retorna uma expressão de caractere depois de converter para minúsculas os dados de caracteres em maiúsculas.
UPPER Retorna uma expressão de caractere com dados de caractere em minúsculas convertidos em maiúsculas.
SUBSTRING Retorna parte de uma expressão de caractere, binário, texto ou imagem no SQL Server.
TRIM Remove o caractere de espaço char(32) ou outros caracteres especificados do início e do final de uma cadeia.
LEADING Remove o caractere de espaço char(32) ou outros caracteres especificados do início de uma cadeia.
TRAILING Remove o caractere de espaço char(32) ou outros caracteres especificados do final de uma cadeia.

Veja a seguir alguns exemplos:

Função Exemplo Resultado
CHARACTER_LENGTH SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
CHAR_LENGTH SELECT CHAR_LENGTH(_1) from BlobStorage 1
LOWER SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
UPPER SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
SUBSTRING SUBSTRING('123456789', 1, 5) 23456
TRIM TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

Funções de data

Há suporte para as seguintes funções de data SQL padrão:

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

Atualmente, todos os formatos de data de IS08601 padrão são convertidos.

Função DATE_ADD

A linguagem SQL de aceleração de consulta fornece suporte de ano, mês, dia, hora, minuto e segundo para a função DATE_ADD.

Exemplos:

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

Função DATE_DIFF

A linguagem SQL de aceleração de consulta fornece suporte de ano, mês, dia, hora, minuto e segundo para a função DATE_DIFF.

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

Função EXTRACT

Para aplicar EXTRACT em uma parte diferente da de data com suporte para a função DATE_ADD, a linguagem SQL de aceleração de consulta fornece suporte a timezone_hour e timezone_minute como parte de data.

Exemplos:

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

Função TO_STRING

Exemplos:

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

Esta tabela descreve as cadeias de caracteres que você pode usar para especificar o formato de saída da função TO_STRING.

Cadeia de formato Saída
yy Ano no formato de dois dígitos - 1999 como '99'
a Ano no formato de quatro dígitos
yyyy Ano no formato de quatro dígitos
M Mês do ano – 1
MM Mês preenchido com zero – 01
MMM Abr. mês do ano – JAN
MMMM Mês inteiro – Maio
d Dia do mês (1 a 31)
dd Dia do mês preenchido com zero (01 a 31)
um AM ou PM
h Hora do dia (1 a 12)
hh Horas do dia preenchidas com zero (01 a 12)
H Hora do dia (0 a 23)
HH Hora do dia preenchida com zero (00 a 23)
m Minuto de hora (0 a 59)
MM Minuto preenchido com zero (00 a 59)
s Segundo de minutos (0 a 59)
ss Segundos preenchidos com zero (00 a 59)
S Fração de segundos (0,1 a 0,9)
SS Fração de segundos (0,01 a 0,99)
SSS Fração de segundos (0,001 a 0,999)
X Deslocamento em horas
XX ou XXXX Deslocamento em horas e minutos (+0430)
XXX ou XXXXX Deslocamento em horas e minutos (-07:00)
x Deslocamento em horas (7)
xx ou xxxx Deslocamento em hora e minuto (+0530)
Xxx ou xxxxx Deslocamento em hora e minuto (+05:30)

Função TO_TIMESTAMP

Somente os formatos IS08601 são suportados.

Exemplos:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

Observação

Você também pode usar a função UTCNOW para obter a hora do sistema.

Expressões de agregação

Uma instrução SELECT pode conter uma ou mais expressões de projeção ou uma única expressão de agregação. Há suporte para as seguintes expressões de agregação:

Expression Descrição
COUNT(*) Retorna o número de registros que corresponderam à expressão de predicado.
COUNT(expression) Retorna o número de registros para os quais a expressão não é nula.
AVG(expression) Retorna a média dos valores não nulos da expressão.
MIN(expression) Retorna o valor mínimo não nulo da expressão.
MAX(expression Retorna o valor máximo não nulo da expressão.
SUM(expression) Retorna a soma de todos os valores não nulos da expressão.

MISSING

O operador IS MISSING é o único não padrão com suporte para a linguagem SQL de aceleração de consulta. Para dados JSON, se um campo estiver ausente de um registro de entrada específico, o campo de expressão IS MISSING será avaliado com relação ao valor booleano true.

Descritores de tabela

Para dados CSV, o nome da tabela é sempre BlobStorage. Por exemplo:

SELECT * FROM BlobStorage

Para os dados JSON, estão disponíveis opções adicionais:

SELECT * FROM BlobStorage[*].path

Isso permite consultas em subconjuntos de dados JSON.

Para essas consultas, você pode mencionar o caminho em parte da cláusula FROM. Ele o ajudará a analisar o subconjunto de dados JSON. O caminho também pode fazer referência a valores de objeto e matriz JSON.

Veja o exemplo a seguir para entender o que foi mencionado acima com mais detalhes.

Estes são os dados de amostra:

{
  "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
    }
  ]
}

Você pode estar interessado somente no objeto JSON warehouses dos dados acima. O objeto warehouses é um tipo de matriz JSON, portanto, você pode mencioná-lo na cláusula FROM. Sua consulta de amostra pode ser semelhante à seguinte.

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

A consulta obtém todos os campos, mas seleciona apenas a latitude.

Para acessar somente o valor do objeto JSON dimensions, escolha esse objeto como referência em sua consulta. Por exemplo:

SELECT length FROM BlobStorage[*].dimensions

Isso também limita seu acesso aos membros do objeto dimensions. Use uma consulta para acessar outros membros de campos JSON e valores internos de objetos JSON, como mostrado no exemplo a seguir:

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

Observação

BlobStorage e BlobStorage[*] fazem referência a todo o objeto. No entanto, se você tiver um caminho na cláusula FROM, use BlobStorage[*].path

Sys.Split

Esta é uma forma especial da instrução SELECT, que está disponível somente para dados formatados em CSV.

SELECT sys.split(split_size) FROM BlobStorage

Use-a nos casos em que você deseja baixar e processar registros de dados CSV em lotes. Dessa forma, você processa registros em paralelo em vez de ter de baixar todos os registros de uma só vez. Essa instrução não retorna registros do arquivo CSV. Em vez disso, ela retorna uma coleção de tamanhos de lote. Você pode usar cada tamanho de lote para recuperar um lote de registros de dados.

Use o parâmetro split_size para especificar o número de bytes que você deseja que cada lote contenha. Por exemplo, para processar apenas 10 MB de dados por vez, a instrução será semelhante a SELECT sys.split(10485760)FROM BlobStorage porque 10 MB é igual a 10.485.760 bytes. Cada lote conterá os registros que couberem nesses 10 MB de espaço.

Na maioria dos casos, o tamanho de cada lote será um pouco maior do que o número especificado. Isso ocorre porque um lote não pode conter um registro parcial. Se o último registro em um lote iniciar antes do fim do limite, o lote será maior para que possa conter o registro completo. O tamanho do último lote provavelmente será menor do que o tamanho especificado.

Observação

O split_size deve ter pelo menos 10 MB (10485760).

Confira também