Il tipo di dati stringa
Il tipo di dati string rappresenta una sequenza di zero o più caratteri Unicode .
- Internamente, le stringhe sono codificate in UTF-8. I caratteri non validi (non-UTF8) vengono sostituiti con i caratteri di sostituzione Unicode U + FFFD al momento dell'inserimento.
- KQL non ha un tipo di dati equivalente a un singolo carattere. Un singolo carattere è rappresentato come una stringa di lunghezza 1.
- Mentre il tipo di dati
stringnon ha un limite predefinito sulla lunghezza della stringa, le implementazioni effettive sono libere di limitare i singoli valori. Di solito, le stringhe sono limitate a 1MB (misurato utilizzando la codifica UTF-8 ).
Valori letterali stringa
Esistono diversi modi per codificare i valori letterali del tipo di dati string in un testo della query:
- Racchiudere la stringa tra virgolette (
"):"This is a string literal. Single quote characters (') don't require escaping. Double quote characters (") are escaped by a backslash (\)." - Racchiudere la stringa tra virgolette singole (
'):'Another string literal. Single quote characters (') require escaping by a backslash (\). Double quote characters (") do not require escaping.'
Nelle due rappresentazioni precedenti, il carattere barra retroversa (\) indica l'escape. La barra rovesciata viene utilizzata per eseguire l'escape dei caratteri virgolette, dei caratteri di tabulazione (\t), dei caratteri di nuova riga (\n) e di se stessi (\\).
Il carattere di nuova riga (\n) e il carattere di ritorno (\r) non possono essere inclusi come parte della stringa letterale senza essere racchiusi tra virgolette. Vedere anche valori letterali stringa a più righe.
Letterali stringa verbatim - Attualmente non supportati
Sono supportati anche i letterali della stringa Verbatim. In questo formato, il carattere barra retroversa (\) rappresenta se stesso e non un carattere escape.
- Racchiudere tra doppi apici (
"):@"This is a verbatim string literal that ends with a backslash\." - Racchiudere tra apici (
'):@'This is a verbatim string literal that ends with a backslash\.'
Il carattere di nuova riga (\n) e il carattere di ritorno (\r) non possono essere inclusi come parte della stringa letterale senza essere racchiusi tra virgolette. Vedere anche valori letterali stringa a più righe.
Valori letterali stringa di giunzione - Attualmente non supportati
Due o più valori letterali stringa vengono uniti automaticamente per formare un nuovo valore letterale stringa nella query se non hanno nulla tra di loro o se sono separati solo da spazi e commenti.
Ad esempio, le seguenti espressioni producono tutte una stringa di lunghezza 13:
print strlen("Hello"', '@"world!"); // Nothing between them
print strlen("Hello" ', ' @"world!"); // Separated by whitespace only
print strlen("Hello"
// Comment
', '@"world!"); // Separated by whitespace and a comment
Valori letterali stringa a più righe - Attualmente non supportati
I valori letterali di stringa a più righe sono valori letterali di stringa per cui i caratteri di nuova riga (\n) e di ritorno (\r) non richiedono l'escape.
- I valori letterali stringa a più righe appaiono sempre tra due ricorrenze dell'accordo "triplo backtick" (` ` `).
- I valori letterali di stringa a più righe non supportano caratteri escape. In modo simile ai letterali stringa letterali, i letterali stringa a più righe consentono i caratteri di nuova riga e di ritorno.
- I valori letterali stringa a più righe non supportano l'offuscamento.
Esempi
// Simple string notation
print s1 = 'some string', s2 = "some other string"
// Strings that include single or double-quotes can be defined as follows
print s1 = 'string with " (double quotes)',
s2 = "string with ' (single quotes)"
// Strings with '\' can be prefixed with '@' (as in c#)
print myPath1 = @'C:\Folder\filename.txt'
// Escaping using '\' notation
print s = '\\n.*(>|\'|=|\")[a-zA-Z0-9/+]{86}=='
// Encode a C# program in a Kusto multi-line string
print program=```
public class Program {
public static void Main() {
System.Console.WriteLine("Hello!");
}
}```
Come si può vedere, quando una stringa è racchiusa tra doppi apici ("), il carattere apice (') non richiede l'escape e anche il contrario. Questo metodo rende più semplice racchiudere tra virgolette le stringhe in base al contesto.
Letterali stringa offuscati - Attualmente non supportati
Il sistema tiene traccia delle query e le memorizza per scopi di telemetria e analisi. Ad esempio, il testo della query potrebbe essere reso disponibile al proprietario del cluster. Se il testo della query include informazioni segrete, come le password, potrebbe perdere informazioni che devono essere mantenute private. Per evitare tale perdita, l'autore della query può contrassegnare specifici valori letterali stringa come valori letterali stringa offuscati. Tali valori letterali nel testo della query vengono automaticamente sostituiti da un certo numero di caratteri asterisco (*), in modo che non siano disponibili per un'analisi successiva.
Nota
Contrassegnare tutti i valori letterali stringa che contengono informazioni segrete come valori letterali stringa offuscati.
Un valore letterale stringa offuscato può essere formato prendendo un valore letterale stringa "regolare" e anteporre un carattere h o H davanti ad esso.
Ad esempio:
h'hello'
h@'world'
h"hello"
In molti casi, solo una parte della stringa letterale è segreta. In questi casi, suddividere il letterale in una parte non segreta e in una parte segreta. Quindi, contrassegna solo la parte segreta come offuscata.
Ad esempio:
print x="https://contoso.blob.core.windows.net/container/blob.txt?"
h'sv=2012-02-12&se=2013-04-13T0...'