Tipo di dati stringa

Il string tipo di dati rappresenta una sequenza di zero o più caratteri Unicode .

Nota

  • Internamente, le stringhe vengono codificate in UTF-8. I caratteri non validi (non UTF8) vengono sostituiti con caratteri di sostituzione Unicode U+FFFD al momento dell'inserimento.
  • Kusto non dispone di alcun tipo di dati equivalente a un singolo carattere. Un singolo carattere è rappresentato come stringa di lunghezza 1.
  • Quando si inserisce il string tipo di dati, se un singolo valore stringa in un record supera 1 MB (misurato usando la codifica UTF-8), il valore viene troncato e l'inserimento ha esito positivo. Se un singolo valore stringa in un record o l'intero record supera il limite di dati consentito di 64 MB, l'inserimento ha esito negativo.

Valori letterali di stringa

Esistono diversi modi per codificare valori letterali del string tipo di dati in un testo di query:

  • Racchiudere la stringa tra virgolette doppie ("): "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 rovesciata (\) indica l'escape. La barra rovesciata viene utilizzata per eseguire l'escape tra virgolette, caratteri tabulazioni (\t), caratteri di nuova riga () e se stesso (\n\\).

Nota

Il carattere di nuova riga (\n) e il carattere restituito (\r) non possono essere inclusi come parte del valore letterale stringa senza virgolette. Vedere anche valori letterali stringa a più righe.

Valori letterali di stringa verbatim

Sono supportati anche valori letterali stringa verbatim. In questo formato, il carattere barra rovesciata (\) è l'acronimo di se stesso e non come carattere di escape.

  • Racchiudere tra virgolette doppie ("): @"This is a verbatim string literal that ends with a backslash\. Double quote characters (") are escaped by a double quote (")."
  • Racchiudere tra virgolette singole ('): @'This is a verbatim string literal that ends with a backslash\. Single quote characters (') are escaped by a single quote (').'

Nota

Il carattere di nuova riga (\n) e il carattere restituito (\r) non possono essere inclusi come parte del valore letterale stringa senza virgolette. Vedere anche valori letterali stringa a più righe.

Splicing di valori letterali stringa

Due o più valori letterali stringa vengono aggiunti automaticamente per formare un nuovo valore letterale stringa nella query se non hanno nulla tra di essi o sono separati solo da spazi vuoti e commenti.
Ad esempio, tutte le espressioni seguenti producono 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

I valori letterali stringa a più righe sono valori letterali stringa per i quali i caratteri di nuova riga (\n) e restituiti (\r) non richiedono l'escape.

  • I valori letterali stringa a più righe vengono sempre visualizzati tra due occorrenze del "triplo accordo backtick" (''').

Nota

  • I valori letterali stringa a più righe non supportano caratteri di escape. Analogamente ai valori letterali stringa verbatim, i valori letterali stringa a più righe consentono caratteri di nuova riga e restituiti.
  • I valori letterali stringa a più righe non supportano l'offuscamento.

Esempio

// 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ò notare, quando una stringa è racchiusa tra virgolette doppie ("), il carattere a virgoletta singola (') non richiede l'escape e anche l'altra strada. Questo metodo semplifica la citazione delle stringhe in base al contesto.

Valori letterali stringa offuscati

Il sistema tiene traccia delle query e li archivia 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, ad esempio password, potrebbero essere perse informazioni che devono essere mantenute private. Per evitare che si verifichi una perdita di questo tipo, l'autore della query può contrassegnare valori letterali stringa specifici come valori letterali stringa offuscati. Tali valori letterali nel testo della query vengono sostituiti automaticamente da un numero di caratteri star (*), in modo che non siano disponibili per un'analisi successiva.

Importante

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 anteponendo un h carattere o H davanti a esso.

Ad esempio:

h'hello'
h@'world'
h"hello"

Nota

In molti casi, solo una parte del valore letterale stringa è segreta. In questi casi, suddividere il valore letterale in una parte non segreta e una parte segreta. Contrassegnare quindi solo la parte privata come offuscata.

Ad esempio:

print x="https://contoso.blob.core.windows.net/container/blob.txt?"
  h'sv=2012-02-12&se=2013-04-13T0...'