Compartilhar via


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 de ANSI SQL, com um conjunto limitado de tipos de dados, operadores etc., mas também se expande no SQL ANSI para dar suporte a consultas em formatos de dados semiestruturados hierárquicos, como JSON.

Sintaxe SELECT

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

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

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

No exemplo a seguir, para cada linha para a qual a expressão WHERE retorna true, essa instrução retornará uma nova linha feita com base na 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 coluna específica) em 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 dividir 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.
FLUTUAR Ponto flutuante de 64 bits ("precisão dupla").
CADEIA DE CARACTERES Cadeia de caracteres Unicode de comprimento variável.
TIMESTAMP Um ponto no tempo.
BOOLEANO Verdadeiro ou falso.

Ao ler valores de dados formatados em CSV, todos os valores 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 obter mais informações, consulte Precedência de tipo de dados (Transact-SQL).

Expressões

Referência a campos

Para dados formatados em JSON ou dados formatados em CSV com uma linha de cabeçalho, os campos podem ser referenciados pelo nome. Os nomes de campo podem ser citados ou não citados. 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, prefixados com um caractere de sublinhado (_). Por exemplo, o primeiro campo pode ser referenciado como _1, ou o décimo primeiro campo pode ser referenciado como _11. Referenciar 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 referenciar um campo específico é por ordinal.

Operadores

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

Operador Descrição
= Compara a igualdade de duas expressões (um 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 para maior ou igual (um operador de comparação).
+ Soma dois números. Esse operador de adição aritmética também pode somar um número de dias a uma data.
- Subtrai dois números (um operador de subtração aritmética).
/ 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 restante 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 lógica OR bit a bit entre dois valores inteiros especificados, conforme convertidos para expressões binárias dentro das instruções Transact-SQL.
NOT Nega uma entrada booliana.
CAST Converte uma expressão de um tipo de dados em outro.
BETWEEN Especifica um intervalo a ser testado.
IN Determina se um valor especificado corresponde a qualquer valor em uma subconsulta ou em 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 inicialmente não é avaliada 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 aqui: precedência de tipo de dados (Transact-SQL).

A linguagem SQL de aceleração de consulta dá suporte apenas a um subconjunto muito pequeno dos tipos de dados discutidos nesse artigo. Consulte a seção Tipos de Dados deste artigo.

Lança

A linguagem SQL de aceleração de consulta dá suporte ao operador CAST, de acordo com as regras aqui: conversão de tipo de dados (Mecanismo de Banco de Dados).

A linguagem SQL de aceleração de consulta dá suporte apenas a um pequeno subconjunto dos tipos de dados 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 é a mesma que a função CHAR_LENGTH
LOWER Retorna uma expressão de caractere depois de converter dados de caracteres maiúsculos em letras minúsculas.
upper Retorna uma expressão de caractere com dados de caracteres em letras minúsculas convertidos em maiúsculas.
SUBSEQUÊNCIA Retorna parte de uma expressão de caractere, binária, de texto ou de 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 de caracteres.
ENTRELINHA Remove o caractere de espaço char(32) ou outros caracteres especificados do início de uma cadeia de caracteres.
ATRÁS Remove o caractere de espaço char(32) ou outros caracteres especificados do final de uma cadeia de caracteres.

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
BAIXO SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
SUPERIOR SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
SUBSEQUÊNCIA SUBSTRING('123456789', 1, 5) 23456
APARAR 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 do padrão ISO 8601 são convertidos.

Função DATE_ADD

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

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 dá suporte a ano, mês, dia, hora, minuto, segundo para a DATE_DIFF função.

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 cadeias de caracteres que você pode usar para especificar o formato de saída da TO_STRING função.

Cadeia de formato Saída
aa Ano em formato de dois dígitos - 1999 como '99'
y Ano em formato de 4 dígitos
yyyyy Ano em formato de 4 dígitos
M Mês do ano - 1
MILÍMETRO Mês preenchido com zero – 01
MMM Mês abreviado do ano - JAN
MMMM Mês completo - Maio
d Dia do mês (1 a 31)
Dd Zero dia acolchoado do mês (01-31)
um AM ou PM
h Hora do dia (1 a 12)
Hh Zero horas acolchoados do dia (01 a 12)
H Hora do dia (0-23)
HH Zero hora acolchoado do dia (00-23)
m Minuto da hora (0 a 59)
milímetro Minuto preenchido com zero (00 a 59)
s Segundo de minutos (0-59)
ß Zero segundos acolchoados (00-59)
S Fração de segundos (0,1-0,9)
ß Fração de segundos (0,01-0,99)
SSS Fração de segundos (0,001-0,999)
X Deslocamento em horas
XX ou XXXX Deslocamento em horas e minutos (+0430)
XXX ou XXXXX Deslocamento de fuso horário em horas e minutos (-07:00)
x Deslocamento em horas (7)
xx ou xxxx Deslocamento em hora e minuto (+0530)
Xxx ou xxxxx Diferença de tempo em horas e minutos (+05:30)

Função TO_TIMESTAMP

Há suporte apenas para formatos IS08601.

Exemplos:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

Observação

Você também pode usar a UTCNOW função para obter o tempo 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:

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

DESAPARECIDO

O IS MISSING operador é o único não padrão compatível com 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 IS MISSING de expressão será avaliado como o valor booliano verdadeiro.

Descritores de tabela

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

SELECT * FROM BlobStorage

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

SELECT * FROM BlobStorage[*].path

Isso permite consultas em subconjuntos dos dados JSON.

Para consultas JSON, você pode mencionar o caminho em parte da cláusula FROM. Esses caminhos ajudarão a analisar o subconjunto de dados JSON. Esses caminhos podem fazer referência aos valores de Matriz JSON e Objeto.

Vamos dar um exemplo para entender isso com mais detalhes.

Estes são nossos dados de exemplo:

{
  "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 apenas no warehouses objeto JSON dos dados acima. O warehouses objeto é um tipo de matriz JSON, portanto, você pode mencionar isso 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.

Se você quisesse acessar apenas o valor do dimensions objeto JSON, poderia usar a referência a esse objeto em sua consulta. Por exemplo:

SELECT length FROM BlobStorage[*].dimensions

Isso também limita o acesso aos membros do dimensions objeto. Se você quiser acessar outros membros de campos JSON e valores internos de objetos JSON, poderá usar uma consulta, como mostrado no exemplo a seguir:

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

Observação

BlobStorage e BlobStorage[*] referem-se ao objeto inteiro. No entanto, se você tiver um caminho na cláusula FROM, use BlobStorage[*].path

Sys.Split

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

SELECT sys.split(split_size) FROM BlobStorage

Use essa instrução nos casos em que você deseja baixar e processar registros de dados CSV em lotes. Dessa forma, você pode processar registros em paralelo em vez de ter que baixar todos os registros ao mesmo tempo. Essa instrução não retorna registros do arquivo CSV. Em vez disso, ela retorna uma coleção de tamanhos de lote. Em seguida, 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, se você quiser processar apenas 10 MB de dados por vez, sua instrução será semelhante a esta: SELECT sys.split(10485760)FROM BlobStorage porque 10 MB é igual a 10.485.760 bytes. Cada lote conterá o máximo de registros que puder caber nesses 10 MB.

Na maioria dos casos, o tamanho de cada lote será ligeiramente 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).

Consulte também