Typ danych łańcuchowych
Typ danych string reprezentuje sekwencję znaków Unicode o zerowej lub większej.
- Wewnętrznie łańcuchy są kodowane w UTF-8. Niepoprawne znaki (non-UTF8) są zastępowane znakami zastępczym U + FFFD w czasie spożyciu.
- KQL nie ma typu danych, który jest równoważny z pojedynczym znakiem. Pojedynczy znak jest reprezentowany jako łańcuch o długości 1.
- Podczas gdy sam typ danych
stringnie ma predefiniowanego limitu długości łańcucha, rzeczywiste implementacje mogą ograniczać poszczególne wartości. Zwykle łańcuchy są ograniczone do 1MB (mierzone przy użyciu kodowania UTF-8 ).
Literały łańcuchowe
Istnieje kilka sposobów kodowania literałów typu danych string w tekście zapytania:
- Łańcuch należy ująć w cudzysłów (
"):"This is a string literal. Single quote characters (') don't require escaping. Double quote characters (") are escaped by a backslash (\)." - Łańcuch należy ująć w pojedynczy cudzysłów (
'):'Another string literal. Single quote characters (') require escaping by a backslash (\). Double quote characters (") do not require escaping.'
W dwóch powyższych reprezentacjach znak ukośnika odwrotnego (\) oznacza wyznaczenie znaku zmiany znaczenia. Ukośnik odwrotny jest używany do zmiany znaków cudzysłowu, znaków tabulacji (\t), znaków nowego wiersza (\n) i samego siebie (\\).
Znak nowego wiersza (\n) i znak powrotu (\r) nie mogą być dołączane jako część literału łańcuchowego, nie będąc w nim cytowane. Patrz także wielowierszowe literały łańcuchowe.
Literały łańcuchowe Verbatim-obecnie nieobsługiwane
Obsługiwane są również literały łańcuchowe Verbatim. W takiej postaci znak ukośnika odwrotnego (\) oznacza sam siebie, a nie jako znak zmiany znaczenia.
- Enclose w cudzysłowie (
"):@"This is a verbatim string literal that ends with a backslash\." - Enclose w apostrofach (
'):@'This is a verbatim string literal that ends with a backslash\.'
Znak nowego wiersza (\n) i znak powrotu (\r) nie mogą być dołączane jako część literału łańcuchowego, nie będąc w nim cytowane. Patrz także wielowierszowe literały łańcuchowe.
Rozdzielające literały łańcuchowe-Obecnie nieobsługiwane
Dwa lub więcej literałów łańcuchowych jest automatycznie łączonych w celu utworzenia nowego literału łańcuchowego w zapytaniu, jeśli nie mają one nic między nimi, albo są one oddzielone tylko białymi znakami i komentarzami.
Na przykład następujące wyrażenia zwracają łańcuch o długości 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
Literały łańcuchowe wielowierszowe-obecnie nieobsługiwane
Literały łańcuchowe wielowierszowe są literałami łańcuchowymi, dla których znaki nowego wiersza (\n) i powrotu (\r) nie wymagają zmiany znaczenia.
- Literały łańcuchowe wielowierszowe zawsze pojawiają się między dwoma wystąpieniach akordu "triple-backtick chord" (` ` `).
- Literały łańcuchowe wielowierszowe nie obsługują znaków zmiany znaczenia. Podobnie jak w przypadku literałów łańcuchowych werbatimliterały łańcuchowe wielowierszowe umożliwiają znak nowego wiersza i zwracanie znaków.
- Literały łańcuchowe wielowierszowe nie obsługują zaciemnienia.
Przykłady
// 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!");
}
}```
Jak widać, gdy łańcuch jest ujęty w podwójne cudzysłowy ("), znak pojedynczego cudzysłowu (') nie wymaga ucieczki, a także w drugą stronę. Ta metoda ułatwia cytowanie łańcuchów zgodnie z kontekstem.
Zaciemnione literały łańcuchowe-obecnie nieobsługiwane
System śledzi zapytania i zapisuje je w celach telemetrycznych i analitycznych. Na przykład tekst zapytania może być udostępniony właścicielowi klastra. Jeśli tekst zapytania zawiera tajne informacje, takie jak hasła, może to być informacje o przecieku, które powinny być przechowywane jako prywatne. Aby zapobiec takim wyciekowi, autor zapytania może oznaczyć konkretne literały łańcuchowe jako obfuscated string literals(obfuscated string literals). Takie literały w tekście zapytania są automatycznie zastępowane przez pewną liczbę znaków gwiazdowych (*), tak aby nie były one dostępne do późniejszej analizy.
Uwaga
Oznacz wszystkie literały łańcuchowe, które zawierają tajne informacje, jako zaciemnione literały łańcuchowe.
Nieuwierzytelniony literał łańcuchowy może zostać utworzony przez zastosowanie "regularnego" literału łańcuchowego, a przed nim do czasu oczekiwania na znak h lub znak H .
Na przykład:
h'hello'
h@'world'
h"hello"
W wielu przypadkach tylko część literału łańcuchowego jest niejawna. W takich przypadkach podziel literał na część nietajną i część tajną. Następnie zaznacz tylko część tajną jako zaciemniona.
Na przykład:
print x="https://contoso.blob.core.windows.net/container/blob.txt?"
h'sv=2012-02-12&se=2013-04-13T0...'