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

A aceleração de consultas suporta uma linguagem semelhante a UM SQL anSI para expressar consultas através de conteúdos de blobs. O dialeto SQL de aceleração de consultas é 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 sobre formatos de dados semiestruturados hierárquicos, como JSON.

Selecionar Sintaxe

A única instrução SQL suportada pela aceleração de consultas é a instrução SELECT. Este exemplo devolve cada linha para a qual a expressão devolve verdadeiro.

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

Para dados formatados em CSV, a tabela tem de ser BlobStorage. Isto significa que a consulta será executada em relação ao blob especificado na chamada REST. Para dados formatados com JSON, a tabela é um "descritor de tabela". Veja a secção Descritores de Tabela deste artigo.

No exemplo seguinte, para cada linha para a qual a expressão WHERE devolve verdadeiro, esta instrução devolverá 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]

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

Nota

O número máximo de colunas específicas que pode utilizar na expressão SELECT é 49. Se precisar que a instrução SELECT devolva mais de 49 colunas, utilize um caráter universal (*) para a expressão SELECT (por exemplo: SELECT *).

O exemplo seguinte devolve um cálculo agregado (por exemplo: o valor médio de uma determinada coluna) sobre cada uma das linhas para as quais a expressão devolve verdadeiro.

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

O exemplo seguinte devolve desvios adequados para dividir um blob formatado em CSV. Veja a secção Sys.Split deste artigo.

SELECT sys.split(split_size)FROM BlobStorage

Tipos de Dados

Tipo de Dados Descrição
INT Número inteiro assinado de 64 bits.
FLOAT Vírgula flutuante de 64 bits ("precisão dupla").
CADEIA Cadeia Unicode de comprimento variável.
CARIMBO DE DATA/HORA Um ponto no tempo.
BOOLEANO True ou false.

Ao ler valores de dados formatados em CSV, todos os valores são lidos como cadeias. Os valores de cadeia podem ser convertidos noutros tipos com expressões CAST. Os valores podem ser implicitamente convertidos noutros tipos, consoante o contexto. para obter mais informações, veja Precedência do tipo de dados (Transact-SQL).

Expressions (Expressões)

Referenciar campos

Para dados formatados em JSON ou dados formatados em CSV com uma linha de cabeçalho, os campos podem ser referenciados por nome. Os nomes dos campos podem ser citados ou não citados. Os nomes de campos citados estão entre carateres de aspas duplas ("), podem conter espaços e são sensíveis às maiúsculas e minúsculas. Os nomes de campo não listados não são sensíveis a maiúsculas e minúsculas e podem não conter carateres especiais.

Nos dados formatados em CSV, os campos também podem ser referenciados por ordinal, com um caráter de sublinhado (_). Por exemplo, o primeiro campo pode ser referenciado como _1ou o décimo primeiro campo pode ser referenciado como _11. Referenciar campos por ordinal é útil para dados formatados em CSV que não contenham uma linha de cabeçalho, caso em que a única forma de referenciar um determinado campo é por ordinal.

Operadores

São suportados 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 para não igual a (um operador de comparação).
< Compara duas expressões para menor que (um operador de comparação).
<= Compara duas expressões para menor ou igual (um operador de comparação).
> Compara duas expressões para maior que (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 resto de um número dividido por outro.
AND Executa uma operação E 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, traduzidos para expressões binárias nas instruções Transact-SQL.
NOT Nega uma entrada booleana.
CAST Converte uma expressão de um tipo de dados noutra expressão.
BETWEEN Especifica um intervalo a testar.
IN Determina se um valor especificado corresponde a qualquer valor numa subconsulta ou numa lista.
NULLIF Devolve um valor nulo se as duas expressões especificadas forem iguais.
COALESCE Avalia os argumentos por ordem e devolve o valor atual da primeira expressão que inicialmente não é avaliado como NULL.

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

A linguagem SQL de aceleração de consultas suporta apenas um subconjunto muito pequeno dos tipos de dados abordados nesse artigo. Veja a secção Tipos de Dados deste artigo.

Moldes

A linguagem SQL de aceleração de consultas suporta o operador CAST, de acordo com as regras aqui: Conversão de tipo de dados (Motor de Base de Dados).

A linguagem SQL de aceleração de consultas suporta apenas um pequeno subconjunto dos tipos de dados abordados nesse artigo. Veja a secção Tipos de Dados deste artigo.

Funções de cadeia

A linguagem SQL de aceleração de consultas suporta as seguintes funções de cadeia de SQL padrão:

Função Descrição
CHAR_LENGTH Devolve o comprimento em carateres da expressão de cadeia, se a expressão de cadeia for de um tipo de dados de caráter; caso contrário, devolve o comprimento em bytes da expressão de cadeia (o menor número inteiro não menor do que o número de bits dividido por 8). (Esta função é igual à função CHARACTER_LENGTH.)
CHARACTER_LENGTH Devolve o comprimento em carateres da expressão de cadeia, se a expressão de cadeia for de um tipo de dados de caráter; caso contrário, devolve o comprimento em bytes da expressão de cadeia (o menor número inteiro não menor do que o número de bits dividido por 8). (Esta função é igual à função CHAR_LENGTH
LOWER Devolve uma expressão de carateres depois de converter dados de carateres em maiúsculas em minúsculas.
UPPER Devolve uma expressão de carateres com dados de carateres em minúsculas convertidos em maiúsculas.
SUBCADEIA Devolve parte de um caráter, binário, texto ou expressão de imagem no SQL Server.
TRIM Remove o caráter de espaço caráter (32) ou outros carateres especificados do início e fim de uma cadeia.
À ESQUERDA Remove o caráter de espaço caráter (32) ou outros carateres especificados do início de uma cadeia.
À DIREITA Remove o caráter de espaço caráter (32) ou outros carateres especificados do fim de uma cadeia.

Eis alguns exemplos:

Função Exemplo Result
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

São suportadas 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 IS08601 padrão são convertidos.

função DATE_ADD

A linguagem SQL de aceleração de consultas 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 consultas 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 EXTRACT

Para EXTRAÇÃO que não seja a parte de data suportada para a DATE_ADD função, a linguagem SQL de aceleração de consultas suporta timezone_hour e timezone_minute 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 as cadeias que pode utilizar para especificar o formato de saída da TO_STRING função.

Cadeia de formato Saída
yy Ano em formato de 2 dígitos - 1999 como '99'
y Ano no formato de 4 dígitos
yyyy Ano no formato de 4 dígitos
M Mês do ano - 1
MM Zero mês acolchoado - 01
MMM Abbr. mês do Ano - JAN
MMMM Mês completo - maio
d Dia do mês (1-31)
dd Dia zero acolchoado do Mês (01-31)
um AM ou PM
h Hora do dia (1-12)
hh Zero dia de od horas acolchoadas (01-12)
H Hora do dia (0-23)
HH Zero Hora Acolchoada do Dia (00-23)
m Minuto de hora (0-59)
mm Zero minutos acolchoados (00-59)
t Segundo de 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 Deslocamento em Horas
XX ou XXXX Desvio em horas e minutos (+0430)
XXX ou XXXXX Desvio em horas e minutos (-07:00)
x Desvio em horas (7)
xx ou xxxx Desvio em hora e minuto (+0530)
Xxx ou xxxxx Desvio em hora e minuto (+05:30)

função TO_TIMESTAMP

Apenas os formatos IS08601 são suportados.

Exemplos:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

Nota

Também pode utilizar a UTCNOW função 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. São suportadas as seguintes expressões de agregação:

Expressão Descrição
CONTAR(*) Devolve o número de registos que correspondem à expressão predicado.
CONTAR(expressão) Devolve o número de registos 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) Devolve o valor mínimo não nulo da expressão.
MAX(expressão) Devolve o valor máximo não nulo da expressão.
SOMA(expressão) Devolve a soma de todos os valores não nulos de expressão.

EM FALTA

O IS MISSING operador é o único não padrão suportado pela linguagem SQL de aceleração de consultas. Para dados JSON, se um campo estiver em falta num determinado registo de entrada, o campo IS MISSING de expressão será avaliado como verdadeiro valor booleano.

Descritores de Tabela

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

SELECT * FROM BlobStorage

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

SELECT * FROM BlobStorage[*].path

Isto permite consultas em subconjunto dos dados JSON.

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

Vamos dar um exemplo para compreender isto mais detalhadamente.

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

Poderá estar interessado apenas no warehouses objeto JSON dos dados acima. O warehouses objeto é um tipo de matriz JSON, pelo que pode mencioná-lo na cláusula FROM. A sua consulta de exemplo pode ter um aspeto semelhante a este.

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

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

Se quisesse aceder apenas ao valor do dimensions objeto JSON, poderia utilizar esse objeto na consulta. Por exemplo:

SELECT length FROM BlobStorage[*].dimensions

Isto também limita o acesso aos membros do dimensions objeto. Se quiser aceder a outros membros de campos JSON e valores internos de objetos JSON, poderá utilizar uma consulta, tal como mostrado no exemplo seguinte:

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

Nota

BlobStorage e BlobStorage[*] referem-se a todo o objeto. No entanto, se tiver um caminho na cláusula FROM, terá de utilizar 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

Utilize esta instrução nos casos em que pretende transferir e, em seguida, processe registos de dados CSV em lotes. Desta forma, pode processar registos em paralelo em vez de ter de transferir todos os registos de uma só vez. Esta instrução não devolve registos do ficheiro CSV. Em vez disso, devolve uma coleção de tamanhos de lote. Em seguida, pode utilizar cada tamanho de lote para obter um lote de registos de dados.

Utilize o parâmetro split_size para especificar o número de bytes que pretende que cada lote contenha. Por exemplo, se quiser processar apenas 10 MB de dados de cada vez, a instrução terá o seguinte aspeto: SELECT sys.split(10485760)FROM BlobStorage porque 10 MB é igual a 10 485 760 bytes. Cada lote irá conter o máximo de registos que puder caber nesses 10 MB.

Na maioria dos casos, o tamanho de cada lote será ligeiramente superior ao número especificado. Isto acontece porque um lote não pode conter um registo parcial. Se o último registo num lote começar antes do fim do limiar, o lote será maior para que possa conter o registo completo. O tamanho do último lote será provavelmente menor do que o tamanho especificado.

Nota

O split_size tem de ter, pelo menos, 10 MB (10485760).

Ver também