Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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_ADDDATE_DIFFEXTRACTTO_STRINGTO_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).