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 _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 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).