Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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).