Condividi tramite


Informazioni di riferimento sul linguaggio SQL per l'accelerazione delle query

L'accelerazione delle query supporta un linguaggio simile a ANSI SQL per esprimere le query sul contenuto del BLOB. Il dialetto SQL di accelerazione della query è un subset di SQL ANSI, con un set limitato di tipi di dati supportati, operatori e così via, ma si espande anche su ANSI SQL per supportare query su formati di dati semistrutturati gerarchici, ad esempio JSON.

Sintassi SELECT

L'unica istruzione SQL supportata dall'accelerazione delle query è l'istruzione SELECT. Questo esempio restituisce ogni riga per cui l'espressione restituisce true.

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

Per i dati formattati in CSV, la tabella deve essere BlobStorage. Ciò significa che la query verrà eseguita su qualsiasi BLOB specificato nella chiamata REST. Per i dati formattati JSON, la tabella è un descrittore di tabella. Vedere la sezione Descrittori 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.

Nota

Il numero massimo di colonne specifiche che è possibile usare nell'espressione SELECT è 49. Se è necessaria l'istruzione SELECT per restituire più di 49 colonne, usare un carattere jolly () per l'espressione SELECT (*ad esempio: SELECT *).

Nell'esempio seguente viene restituito un calcolo aggregato , ad esempio il valore medio di una colonna specifica, 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 appropriati per la suddivisione di un BLOB formattato 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.
FLOAT 64 bit ("precisione doppia") a virgola mobile.
STRING Stringa Unicode a lunghezza variabile.
timestamp Un punto nel tempo.
BOOLEAN True o false.

Durante la lettura dei valori dai dati formattati csv, tutti i valori vengono letti come stringhe. I valori stringa possono essere convertiti in altri tipi usando espressioni CAST. I valori possono essere cast implicitamente in altri tipi a seconda del contesto. per altre informazioni, vedere Precedenza del tipo di dati (Transact-SQL).

Espressioni

Campi di riferimento

Per i dati formattati JSON o i dati formattati in FORMATO CSV con una riga di intestazione, i campi possono essere a cui si fa riferimento per nome. I nomi dei campi possono essere virgolette o senza virgolette. I nomi dei campi virgolette sono racchiusi tra virgolette doppie ("), possono contenere spazi e sono distinzione tra maiuscole e minuscole. I nomi dei campi senza virgolette sono senza distinzione tra maiuscole e minuscole e potrebbero non contenere caratteri speciali.

Nei dati formattati in CSV, i campi possono anche essere a cui si fa riferimento per ordinale, preceduto da un carattere di sottolineatura (_). Ad esempio, il primo campo può essere fatto riferimento a _1, o il campo di undici può essere fatto riferimento a _11. I campi di riferimento per ordinale sono utili per i dati formattati csv che non contengono una riga di intestazione, nel qual caso l'unico modo per fare riferimento a un determinato campo è ordinale.

Operatori

Sono supportati gli operatori SQL standard seguenti:

Operatore Descrizione
= Esegue un confronto per determinare se due espressioni sono uguali (operatore di confronto).
!= Verifica se un'espressione è diversa da un'altra espressione (operatore di confronto).
<> Confronta due espressioni per non uguali a (un operatore di confronto).
< Confronta due espressioni per minore di (un operatore di confronto).
<= Confronta due espressioni per minore o uguale (un operatore di confronto).
> Confronta due espressioni per maggiore di (operatore di confronto).
>= Confronta due espressioni e verifica la presenza di valori maggiori o uguali (operatore di confronto).
+ Esegue la somma di due numeri. Questo operatore aritmetico di addizione consente inoltre di aggiungere un numero, espresso in giorni, a una data.
- Sottrae due numeri (operatore aritmetico di sottrazione).
/ Divide un numero per un altro (operatore aritmetico di divisione).
* Moltiplica due espressioni (operatore aritmetico di moltiplicazione).
% Viene restituito il resto di una divisione.
AND Esegue un'operazione con AND logico bit per bit tra due valori integer.
OR Esegue un'operazione con OR logico bit per bit tra i due valori interi specificati convertiti in espressioni binarie in istruzioni Transact-SQL.
NOT Nega un input booleano.
CAST Converte un'espressione da un tipo di dati a un altro.
BETWEEN Specifica un intervallo da testare.
IN Determina se il valore specificato corrisponde a un 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 corrente 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 query supporta solo un subset molto piccolo dei tipi di dati descritti in tale 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 per i valori stringa

Il linguaggio SQL di accelerazione query supporta le funzioni di stringa SQL standard seguenti:

Funzione Descrizione
CHAR_LENGTH Restituisce la lunghezza in caratteri dell'espressione stringa, se l'espressione stringa è di un tipo di dati di carattere; in caso contrario, restituisce la lunghezza in byte dell'espressione stringa (il numero intero più piccolo non minore del numero di bit divisi da 8). Questa funzione è uguale alla funzione CHARACTER_LENGTH.
CHARACTER_LENGTH Restituisce la lunghezza in caratteri dell'espressione stringa, se l'espressione stringa è di un tipo di dati di carattere; in caso contrario, restituisce la lunghezza in byte dell'espressione stringa (il numero intero più piccolo non minore del numero di bit divisi da 8). Questa funzione è la stessa della funzione CHAR_LENGTH
LOWER Restituisce un'espressione di caratteri dopo aver convertito i caratteri maiuscoli in caratteri minuscoli.
UPPER Restituisce un'espressione di caratteri con dati di tipo carattere minuscoli convertiti in maiuscolo.
SUBSTRING Restituisce parte di un'espressione di tipo carattere, binario, testo o immagine in SQL Server.
TRIM Rimuove il carattere di spazio char(32) o altri caratteri specificati dall'inizio e dalla fine di una stringa.
LEADING Rimuove il carattere di spazio char(32) o altri caratteri specificati dall'inizio di una stringa.
TRAILING 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
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

Funzioni di data

Sono supportate le funzioni di data SQL standard seguenti:

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

Attualmente vengono convertiti tutti i formati di data dello standard IS08601 .

funzione 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 diverso dalla parte data supportata per la DATE_ADD funzione, il linguaggio SQL di accelerazione query supporta timezone_hour e timezone_minute come parte 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 Output
yy Anno in formato a 2 cifre - 1999 come '99'
y Anno in formato a 4 cifre
aaaa Anno in formato a 4 cifre
M Mese dell'anno - 1
MM Zero padded Month - 01
MMM Abbr. mese dell'anno - JAN
MMMM Mese completo - Maggio
d Giorno del mese (1-31)
gg Zero padded day of Month (01-31)
a AM o PM
h Ora del giorno (1-12)
hh Zero padded Hours od day (01-12)
H Ora del giorno (0-23)
HH Ora di riempimento zero del giorno (00-23)
m Minuto di ora (0-59)
MM Minuto riempito zero (00-59)
s Secondo minuto (0-59)
ss Zero padded Seconds (00-59)
S Frazione di secondi (0,1-0,9)
SS Frazione di secondi (0,01-0,99)
SSS Frazione di secondi (0,001-0,999)
X Offset in ore
XX o XXXX Offset in ore e minuti (+0430)
XXX o XXXXX Offset in ore e minuti (-07:00)
x Offset in ore (7)
xx o xxxx Offset in ora e minuto (+0530)
Xxx o xxxxx Offset in ora e minuto (+05:30)

funzione TO_TIMESTAMP

Sono supportati solo i formati IS08601.

Esempi:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

Nota

È 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:

Expression Descrizione
COUNT(*) Restituisce il numero di record corrispondenti all'espressione del predicato.
COUNT(expression) Restituisce il numero di record per cui expression è diverso da Null.
AVG(expression) Restituisce la media dei valori non Null 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 un campo manca da un determinato record di input, il campo IS MISSING dell'espressione valuterà il valore booleano true.

Descrittori di tabella

Per i dati CSV, il nome della tabella è sempre BlobStorage. Ad esempio:

SELECT * FROM BlobStorage

Per i dati JSON sono disponibili opzioni aggiuntive:

SELECT * FROM BlobStorage[*].path

Ciò consente query sui subset dei 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 matrice JSON e Object.

Si supponga di prendere un esempio per comprendere questo aspetto in modo più dettagliato.

Si tratta dei 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 essere interessati solo all'oggetto warehouses JSON dai dati precedenti. L'oggetto warehouses è un tipo di matrice JSON, quindi è possibile menzionare questo oggetto nella clausola FROM. La query di esempio può essere simile a questa.

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. Ad esempio:

SELECT length FROM BlobStorage[*].dimensions

Ciò limita anche l'accesso ai membri dell'oggetto dimensions . Se si desidera 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[*]

Nota

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 formattati 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 anziché dover scaricare tutti i record alla volta. Questa istruzione non restituisce record dal file CSV. Restituisce invece una raccolta di dimensioni batch. È quindi possibile usare ogni dimensione 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 al seguente: SELECT sys.split(10485760)FROM BlobStorage perché 10 MB è uguale a 10.485.760 byte. Ogni batch conterrà il numero massimo di record che possono essere inseriti in tali 10 MB.

Nella maggior parte dei casi, le dimensioni di ogni batch saranno leggermente superiori al numero specificato. Questo perché 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.

Nota

Il split_size deve essere almeno 10 MB (10485760).

Vedi anche