Partilhar via


Referência da linguagem SQL para aceleração de consultas

A aceleração de consulta suporta uma linguagem semelhante à SQL ANSI para expressar consultas sobre conteúdos de blobs. O dialeto SQL de aceleração de consulta é um subconjunto do ANSI SQL, com um conjunto limitado de tipos de dados suportados, operadores, etc., mas também se expande no ANSI SQL para suportar consultas em formatos de dados semiestruturados hierárquicos, como JSON.

Sintaxe SELECT

A única instrução SQL suportada pela 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 qualquer blob especificado na chamada REST. Para dados formatados em JSON, 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 que é feita a partir 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 um cálculo agregado (Por exemplo: o valor médio de uma coluna específica) 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 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 assinado de 64 bits.
FLUTUAR Ponto flutuante de 64 bits ("precisão dupla").
cadeia de caracteres Cadeia de caracteres Unicode de comprimento variável.
DATA E HORA 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 implicitamente convertidos para outros tipos, dependendo do contexto. Para obter mais informações, consulte Precedência de tipo de dados (Transact-SQL).

Expressões

Campos de referência

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 dos campos podem ser citados ou não. Os nomes de campos são colocados entre aspas duplas ("), podem conter espaços e são sensíveis a maiúsculas e minúsculas. Os nomes de campos sem aspas não são sensíveis a maiúsculas e 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. A referência a campos por ordinal é útil para dados formatados em CSV que não contêm uma linha de cabeçalho, caso em que a única maneira de fazer referência a um campo específico é por ordinal.

Operadores

Os seguintes operadores SQL padrão são suportados:

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 para verificar se não são iguais (um operador de comparação).
< Compara duas expressões usando o operador inferior a (um operador de comparação).
<= Compara duas expressões em termos de serem menores ou iguais (usando um operador de comparação).
> Compara duas expressões para verificar se uma é maior que a outra (um operador de comparação).
>= Compara duas expressões para maior ou igual (um operador de comparação).
+ Adiciona 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é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).
% Devolve o restante de um número dividido por outro.
AND Executa uma operação AND lógica bit a bit entre dois valores inteiros.
OR Executa uma operação OR lógica bit a bit entre dois valores inteiros especificados, como traduzidos para expressões binárias dentro das declarações Transact-SQL.
NOT Nega uma entrada booleana.
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 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 avalia como NULL.

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

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

Gessos

A linguagem SQL de aceleração de consulta suporta o 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 suporta apenas 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 suporta as seguintes funções de cadeia de caracteres SQL padrão:

Função Descrição
CHAR_LENGTH Retorna o comprimento em caracteres da expressão de cadeia de caracteres, se a expressão de cadeia de caracteres for de um tipo de dados de caractere; caso contrário, retorna o comprimento em bytes da expressão de cadeia de caracteres (o menor inteiro não inferior ao número de bits dividido por 8). (Esta função é a mesma que a função CHARACTER_LENGTH.)
CHARACTER_LENGTH Retorna o comprimento em caracteres da expressão de cadeia de caracteres, se a expressão de cadeia de caracteres for de um tipo de dados de caractere; caso contrário, retorna o comprimento em bytes da expressão de cadeia de caracteres (o menor inteiro não inferior ao número de bits dividido por 8). (Esta função é a mesma que a função CHAR_LENGTH
BAIXA Retorna uma expressão de caractere depois de converter dados de caracteres maiúsculos em minúsculas.
SUPERIOR Retorna uma expressão de caractere com dados de caracteres minúsculos convertidos em maiúsculas.
SUBSTRING Retorna parte de uma expressão de caractere, binário, texto ou imagem no SQL Server.
GUARNIÇÃO Remove o caractere de espaço char(32) ou outros caracteres especificados do início e do fim de uma cadeia de caracteres.
LIDERANDO 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.

Eis 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
SUBSTRATO SUBSTRING('123456789', 1, 5) 23456
GUARNIÇÃO TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

Funções de data

As seguintes funções de data SQL padrão são suportadas:

  • 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 suporta 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 suporta 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 EXTRAIR

Para EXTRACT, além da parte da data suportada para a função DATE_ADD, a linguagem SQL para aceleração de consultas suporta horário_de_verão_hora e horário_de_verão_minuto como parte da 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.

Formatar cadeia de caracteres Realização
YY Ano em formato de 2 dígitos - 1999 como '99'
y Ano em formato de 4 dígitos
AAAA Ano em formato de 4 dígitos
M Mês do ano - 1
mm Zero acolchoado Mês - 01
MMM Mês Abreviado do Ano - JAN
MMMM Mês completo - maio
d Dia do mês (1-31)
DD Zero dia acolchoado do mês (01-31)
um AM ou PM
h Hora do dia (1-12)
HH Zero horas acolchoadas do dia (01-12)
H Hora do dia (0-23)
HH Zero hora acolchoada do dia (00-23)
m Minuto da hora (0-59)
em milímetro Zero minuto acolchoado (00-59)
s Segundo dos minutos (0-59)
SS Zero segundos acolchoados (00-59)
S Fração de segundos (0,1-0,9)
SS Fração de segundos (0,01-0,99)
SSS Fração de segundos (0,001-0,999)
X Desfasamento em horas
XX ou XXXX Deslocamento em horas e minutos (+0430)
XXX ou XXXXX Diferença de horário em horas e minutos (-07:00)
x Desvio em horas (7)
xx ou xxxx Desvio em hora e minuto (+0530)
Xxx ou xxxxx Desfasamento em horas e minutos (+05:30)

Função TO_TIMESTAMP

Apenas IS08601 formatos são suportados.

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 agregadas

Uma instrução SELECT pode conter uma ou mais expressões de projeção ou uma única expressão agregada. As seguintes expressões agregadas são suportadas:

Expressão Descrição
CONTAGEM(*) Retorna o número de registros que corresponderam à expressão de predicado.
COUNT(expressão) Retorna o número de registros para os quais a expressão não é nula.
AVG(expressão) Devolve 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.
SOMA(expressão) Retorna a soma de todos os valores não nulos da expressão.

FALTAM

O IS MISSING operador é o único não-padrão que a linguagem SQL de aceleração de consulta suporta. Para dados JSON, se um campo estiver ausente de um registo de entrada específico, o campo IS MISSING será avaliado como o valor booleano 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 sobre 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 JSON Array e Object.

Vamos dar um exemplo para entender isso com mais detalhes.

Estes são os 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 exemplo pode ter esta aparência.

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

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

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

SELECT length FROM BlobStorage[*].dimensions

Isso também limita seu acesso aos membros do dimensions objeto. Se você quiser acessar outros membros de campos JSON e valores internos de objetos JSON, use uma consulta como a mostrada 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 tiveres um caminho na cláusula FROM, precisarás usar BlobStorage[*].path

Sys.Split

Esta é 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 esta instrução nos casos em que deseja baixar e, em seguida, processar registros de dados CSV em lotes. Dessa forma, você pode processar registros em paralelo, em vez de ter que baixar todos os registros de uma só vez. Esta instrução não retorna registros do arquivo CSV. Em vez disso, ele 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 de cada vez, sua instrução terá esta aparência: SELECT sys.split(10485760)FROM BlobStorage porque 10 MB é igual a 10.485.760 bytes. Cada lote conterá tantos registros quantos cabem nesses 10 MB.

Na maioria dos casos, o tamanho de cada lote será ligeiramente maior do que o número especificado. Isso porque um lote não pode conter um registro parcial. Se o último registro de um lote começar antes do final 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).

Ver também