Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'accelerazione delle query supporta un linguaggio simile a quello di SQL ANSI per esprimere le query sul contenuto dei blob. Il dialetto SQL di accelerazione delle query è un subset di SQL ANSI, con un set limitato di tipi di dati, operatori e così via supportati, ma si espande anche in ANSI SQL per supportare query su formati di dati semistrutturati gerarchici, ad esempio JSON.
Sintassi di SELECT SQL
L'unica istruzione SQL supportata dall'accelerazione query è l'istruzione SELECT. In questo esempio viene restituita ogni riga per cui l'espressione restituisce true.
SELECT * FROM table [WHERE expression] [LIMIT limit]
Per i dati in formato CSV, la tabella deve essere BlobStorage. Ciò significa che la query verrà eseguita su qualsiasi BLOB specificato nella chiamata REST. Per i dati in formato JSON, la tabella è un descrittore di tabella. Vedere la sezione Descrittori di tabella di questo articolo.
Nell'esempio seguente, per ogni riga per cui l'espressione WHERE restituisce true, questa istruzione restituirà una nuova riga creata dalla valutazione di ognuna delle espressioni di proiezione.
SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]
È possibile specificare una o più colonne specifiche come parte dell'espressione SELECT , ad esempio SELECT Title, Author, ISBN.
Annotazioni
Il numero massimo di colonne specifiche che è possibile usare nell'espressione SELECT è 49. Se hai bisogno che la query SELECT restituisca più di 49 colonne, puoi utilizzare un carattere jolly (*) nell'espressione SELECT (ad esempio: SELECT *).
Nell'esempio seguente viene restituito un calcolo aggregato , ad esempio il valore medio di una determinata colonna, su ognuna delle righe per cui l'espressione restituisce true.
SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]
Nell'esempio seguente vengono restituiti offset adatti per la suddivisione di un BLOB in formato CSV. Vedere la sezione Sys.Split di questo articolo.
SELECT sys.split(split_size)FROM BlobStorage
Tipi di dati
| Tipo di dati | Descrizione |
|---|---|
| INT | Intero con segno a 64 bit. |
| Galleggiare | Numero in virgola mobile a 64 bit (precisione doppia). |
| filo | Stringa Unicode a lunghezza variabile. |
| TIMESTAMP | Un punto nel tempo. |
| BOOLEANO | Vero o falso. |
Durante la lettura di valori da dati in formato CSV, tutti i valori vengono letti come stringhe. I valori stringa possono essere convertiti in altri tipi usando espressioni CAST. I valori possono essere convertiti implicitamente ad altri tipi a seconda del contesto. Per altre informazioni, vedere Precedenza del tipo di dati (Transact-SQL).
Espressioni
Riferimenti ai campi
Per i dati in formato JSON o i dati in formato CSV con una riga di intestazione, è possibile fare riferimento ai campi in base al nome. I nomi dei campi possono essere racchiusi tra virgolette o senza virgolette. I nomi dei campi racchiusi tra caratteri di doppia virgoletta (") possono contenere spazi e sono sensibili a maiuscole e minuscole. I nomi di campo senza virgolette non fanno distinzione tra maiuscole e minuscole e potrebbero non contenere caratteri speciali.
Nei dati in formato CSV, i campi possono anche essere referenziati da ordinali, preceduti da un carattere di sottolineatura (_). Ad esempio, è possibile fare riferimento al primo campo come _1o all'undicesimo campo può essere fatto riferimento come _11. Fare riferimento ai campi per ordinale è utile per i dati in formato CSV che non contengono una riga di intestazione, nel qual caso l'unico modo per fare riferimento a un determinato campo è per ordinale.
Operatori
Sono supportati gli operatori SQL standard seguenti:
| Operatore | Descrizione |
|---|---|
= |
Confronta l'uguaglianza di due espressioni (un operatore di confronto). |
!= |
Verifica se un'espressione non è uguale a un'altra espressione (un operatore di confronto). |
<> |
Confronta due espressioni per non uguale a (un operatore di confronto). |
< |
Confronta due espressioni per verificare quale è minore (operatore di confronto). |
<= |
Confronta due espressioni per minore o uguale a (operatore di confronto). |
> |
Confronta due espressioni con l'operatore "maggiore di" (operatore di confronto). |
>= |
Confronta due espressioni utilizzando l'operatore di confronto "maggiore o uguale a". |
+ |
Esegue la somma di due numeri. Questo operatore aritmetico di addizione può anche aggiungere un numero, in giorni, a una data. |
- |
Sottrae due numeri (un operatore di sottrazione aritmetica). |
/ |
Divide un numero per un altro (operatore di divisione aritmetica). |
* |
Moltiplica due espressioni (un operatore di moltiplicazione aritmetica). |
% |
Restituisce il resto di un numero diviso per un altro. |
AND |
Esegue un'operazione con AND logico bit per bit tra due valori integer. |
OR |
Esegue un'operazione OR logica bit per bit tra due valori integer specificati come convertiti in espressioni binarie all'interno di istruzioni Transact-SQL. |
NOT |
Nega un input booleano. |
CAST |
Converte un'espressione di un tipo di dati in un'altra. |
BETWEEN |
Specifica un intervallo da testare. |
IN |
Determina se un valore specificato corrisponde a qualsiasi valore in una sottoquery o in un elenco. |
NULLIF |
Restituisce un valore Null se le due espressioni specificate sono uguali. |
COALESCE |
Valuta gli argomenti in ordine e restituisce il valore attuale della prima espressione che inizialmente non restituisce NULL. |
Se i tipi di dati a sinistra e a destra di un operatore sono diversi, la conversione automatica verrà eseguita in base alle regole specificate qui: Precedenza del tipo di dati (Transact-SQL).
Il linguaggio SQL di accelerazione delle query supporta solo un subset molto piccolo dei tipi di dati descritti in questo articolo. Vedere la sezione Tipi di dati di questo articolo.
Cast
Il linguaggio SQL di accelerazione query supporta l'operatore CAST, in base alle regole riportate di seguito: Conversione del tipo di dati (motore di database).
Il linguaggio SQL di accelerazione query supporta solo un piccolo subset dei tipi di dati descritti in tale articolo. Vedere la sezione Tipi di dati di questo articolo.
Funzioni di stringa
Il linguaggio SQL per l'accelerazione delle query supporta le seguenti funzioni stringa standard di SQL.
| Funzione | Descrizione |
|---|---|
| lunghezza del carattere | Restituisce la lunghezza in caratteri dell'espressione stringa, se l'espressione stringa è di un tipo di dati carattere; in caso contrario, restituisce la lunghezza in byte dell'espressione stringa (l'intero più piccolo non minore del numero di bit diviso per 8). Questa funzione è la stessa della funzione CHARACTER_LENGTH. |
| CHARACTER_LENGTH | Restituisce la lunghezza in caratteri dell'espressione stringa, se l'espressione stringa è di un tipo di dati carattere; in caso contrario, restituisce la lunghezza in byte dell'espressione stringa (l'intero più piccolo non minore del numero di bit diviso per 8). Questa funzione è la stessa della funzione CHAR_LENGTH |
| LOWER | Restituisce un'espressione di caratteri dopo la conversione dei dati di caratteri maiuscoli in lettere minuscole. |
| UPPER | Restituisce un'espressione di caratteri con dati di caratteri minuscoli convertiti in lettere maiuscole. |
| SOTTOSTRINGA | Restituisce parte di un'espressione di tipo carattere, binario, testo o immagine in SQL Server. |
| TAGLIARE | Rimuove il carattere di spazio char(32) o altri caratteri specificati dall'inizio e dalla fine di una stringa. |
| DI PRIMO PIANO | Rimuove il carattere di spazio char(32) o altri caratteri specificati dall'inizio di una stringa. |
| Seguente | Rimuove il carattere di spazio char(32) o altri caratteri specificati dalla fine di una stringa. |
Ecco alcuni esempi:
| Funzione | Esempio | Risultato |
|---|---|---|
| CHARACTER_LENGTH | SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage |
7 |
| lunghezza del carattere | SELECT CHAR_LENGTH(_1) from BlobStorage |
1 |
| BASSO | SELECT LOWER('AbCdEfG') from BlobStorage |
abcdefg |
| PARTE SUPERIORE | SELECT UPPER('AbCdEfG') from BlobStorage |
ABCDEFG |
| SOTTOSTRINGA | SUBSTRING('123456789', 1, 5) |
23456 |
| TAGLIARE | TRIM(BOTH '123' FROM '1112211Microsoft22211122') |
Microsoft |
Funzioni di data e ora
Sono supportate le funzioni di data SQL standard seguenti:
DATE_ADDDATE_DIFFEXTRACTTO_STRINGTO_TIMESTAMP
Attualmente, tutti i formati di data dei IS08601 standard vengono convertiti.
Funzione di DATE_ADD
Il linguaggio SQL di accelerazione query supporta anno, mese, giorno, ora, minuto, secondo per la DATE_ADD funzione.
Esempi:
DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)
funzione DATE_DIFF
Il linguaggio SQL di accelerazione query supporta anno, mese, giorno, ora, minuto, secondo per la DATE_DIFF funzione.
DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00')
Funzione EXTRACT
Per EXTRACT, a parte le funzioni relative alle date supportate da DATE_ADD, il linguaggio SQL per accelerazione delle query supporta timezone_hour e timezone_minute come parti della data.
Esempi:
EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')
funzione TO_STRING
Esempi:
TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP), 'MMMM d, y')
Questa tabella descrive le stringhe che è possibile usare per specificare il formato di output della TO_STRING funzione.
| Stringa di formato | Risultato |
|---|---|
| Aa | Anno in formato a 2 cifre - 1999 come '99' |
| y | Anno in formato a 4 cifre |
| yyyy | Anno in formato a 4 cifre |
| M | Mese dell'anno - 1 |
| MILLIMETRO | Mese con zero iniziale - 01 |
| MMM | Mese abbreviato dell'anno - JAN |
| MMMM | Mese completo - Maggio |
| d | Giorno del mese (1-31) |
| Dd | Zero giorno riempito del mese (01-31) |
| un | AM o PM |
| h | Ora del giorno (1-12) |
| Hh | Ore di riempimento zero del giorno (01-12) |
| H | Ora del giorno (0-23) |
| HH | Ora del giorno con zero iniziale (00-23) |
| m | Minuto dell'ora (0-59) |
| millimetro | Minuto riempito zero (00-59) |
| s | Secondo dei minuti (0-59) |
| ß | Zero secondi riempiti (00-59) |
| S | Frazione di secondi (0,1-0,9) |
| ß | Frazione di secondi (0,01-0,99) |
| SSS | Frazione di secondi (0,001-0,999) |
| X | Offset orario |
| XX o XXXX | Offset in ore e minuti (+0430) |
| XXX o XXXXX | Differenza di orario in ore e minuti (-07:00) |
| x | Differenza di ore (7) |
| xx o xxxx | Fuso orario in ore e minuti (+0530) |
| Xxx o xxxxx | Offset in ora e minuto (+05:30) |
funzione TO_TIMESTAMP
Sono supportati solo formati ISO8601.
Esempi:
TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')
Annotazioni
È anche possibile usare la UTCNOW funzione per ottenere l'ora di sistema.
Espressioni di aggregazione
Un'istruzione SELECT può contenere una o più espressioni di proiezione o una singola espressione di aggregazione. Sono supportate le espressioni di aggregazione seguenti:
| Espressione | Descrizione |
|---|---|
| COUNT(*) | Restituisce il numero di record corrispondenti all'espressione del predicato. |
| COUNT(expression) | Restituisce il numero di record per cui l'espressione non è nulla. |
| AVG(expression) | Restituisce la media dei valori non nulli dell'espressione. |
| MIN(expression) | Restituisce il valore minimo non Null dell'espressione. |
| MAX(expression) | Restituisce il valore massimo non Null dell'espressione. |
| SUM(expression) | Restituisce la somma di tutti i valori non Null dell'espressione. |
MANCANTE
L'operatore IS MISSING è l'unico non standard supportato dal linguaggio SQL di accelerazione query. Per i dati JSON, se manca un campo da un record di input specifico, il campo IS MISSING dell'espressione restituirà il valore booleano true.
Descrittori di tabella
Per i dati CSV, il nome della tabella è sempre BlobStorage. Per esempio:
SELECT * FROM BlobStorage
Per i dati JSON, sono disponibili opzioni aggiuntive:
SELECT * FROM BlobStorage[*].path
In questo modo è possibile eseguire query su subset di dati JSON.
Per le query JSON, è possibile menzionare il percorso nella parte della clausola FROM. Questi percorsi consentono di analizzare il subset di dati JSON. Questi percorsi possono fare riferimento ai valori di matrice e oggetto JSON.
Di seguito è riportato un esempio per comprenderlo in modo più dettagliato.
Ecco i dati di esempio:
{
"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
}
]
}
È possibile che si sia interessati solo all'oggetto warehouses JSON dei dati precedenti. L'oggetto warehouses è un tipo di matrice JSON, quindi è possibile menzionare questo oggetto nella clausola FROM. La query di esempio può avere un aspetto simile al seguente.
SELECT latitude FROM BlobStorage[*].warehouses[*]
La query ottiene tutti i campi, ma seleziona solo la latitudine.
Se si vuole accedere solo al valore dell'oggetto dimensions JSON, è possibile usare il riferimento a tale oggetto nella query. Per esempio:
SELECT length FROM BlobStorage[*].dimensions
Ciò limita anche l'accesso ai membri dell'oggetto dimensions . Se si vuole accedere ad altri membri di campi JSON e valori interni di oggetti JSON, è possibile usare una query come illustrato nell'esempio seguente:
SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]
Annotazioni
BlobStorage e BlobStorage[*] fanno entrambi riferimento all'intero oggetto. Tuttavia, se si dispone di un percorso nella clausola FROM, sarà necessario usare BlobStorage[*].path
Sys.Split
Si tratta di una forma speciale dell'istruzione SELECT, disponibile solo per i dati in formato CSV.
SELECT sys.split(split_size) FROM BlobStorage
Usare questa istruzione nei casi in cui si vuole scaricare e quindi elaborare i record di dati CSV in batch. In questo modo è possibile elaborare i record in parallelo invece di dover scaricare tutti i record contemporaneamente. Questa istruzione non restituisce record dal file CSV. Restituisce invece una raccolta di dimensioni dei lotti. È quindi possibile usare ogni dimensione del batch per recuperare un batch di record di dati.
Usare il parametro split_size per specificare il numero di byte che si desidera che ogni batch contenga. Ad esempio, se si desidera elaborare solo 10 MB di dati alla volta, l'istruzione sarà simile alla seguente: SELECT sys.split(10485760)FROM BlobStorage perché 10 MB è uguale a 10.485.760 byte. Ogni batch conterrà il numero di record che possono rientrare in tali 10 MB.
Nella maggior parte dei casi, le dimensioni di ogni batch saranno leggermente superiori al numero specificato. Ciò è dovuto al fatto che un batch non può contenere un record parziale. Se l'ultimo record in un batch inizia prima della fine della soglia, il batch sarà più grande in modo che possa contenere il record completo. Le dimensioni dell'ultimo batch saranno probabilmente inferiori alle dimensioni specificate.
Annotazioni
Il split_size deve essere di almeno 10 MB (10485760).