Type de données de chaîne
Le type de données string représente une séquence de zéro ou plusieurs caractères Unicode .
- En interne, les chaînes sont codées en UTF-8. Les caractères non valides (non-UTF8) sont remplacés par des caractères de remplacement Unicode U + FFFD lors de l'ingestion.
- KQL n'a pas de type de données équivalent à un caractère unique. Un caractère unique est représenté sous la forme d'une chaîne de longueur 1.
- Alors que le type de données
stringlui-même n'a pas de limite prédéfinie sur la longueur de la chaîne, les implémentations réelles sont libres de limiter les valeurs individuelles. Généralement, les chaînes sont limitées à 1MB (mesuré à l'aide du codage UTF-8 ).
Littéraux chaîne
Il existe plusieurs façons de coder les littéraux du type de données string dans un texte de requête:
- Placez la chaîne entre guillemets (
"):"This is a string literal. Single quote characters (') don't require escaping. Double quote characters (") are escaped by a backslash (\)." - Placez la chaîne entre apostrophes (
'):'Another string literal. Single quote characters (') require escaping by a backslash (\). Double quote characters (") do not require escaping.'
Dans les deux représentations ci-dessus, la barre oblique inversée (\) indique un échappement. La barre oblique inversée est utilisée pour mettre en échappement les guillemets, les caractères de tabulation (\t), les caractères de retour à la ligne (\n) et elle-même (\\).
Le caractère de retour à la ligne (\n) et le caractère de retour à la ligne (\r) ne peuvent pas être inclus dans le littéral chaîne sans être placés entre guillemets. Voir aussi littéraux chaîne multiligne.
Littéraux chaîne verbatim-Actuellement non pris en charge
Les littéraux chaîne verbatim sont également pris en charge. Dans cette forme, la barre oblique inversée (\) est utilisée pour elle-même et non comme caractère d'échappement.
- Entre guillemets (
"):@"This is a verbatim string literal that ends with a backslash\." - Entre guillemets simples (
'):@'This is a verbatim string literal that ends with a backslash\.'
Le caractère de retour à la ligne (\n) et le caractère de retour à la ligne (\r) ne peuvent pas être inclus dans le littéral chaîne sans être placés entre guillemets. Voir aussi littéraux chaîne multiligne.
Littéraux de chaîne d'épissage-Actuellement non pris en charge
Deux littéraux chaîne ou plus sont automatiquement joints pour former un nouveau littéral chaîne dans la requête s'ils n'ont rien entre eux ou s'ils sont séparés uniquement par des espaces et des commentaires.
Par exemple, les expressions suivantes renvoient toutes une chaîne de longueur 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
Littéraux chaîne multiligne-Actuellement non pris en charge
Les littéraux chaîne multilignes sont des littéraux chaîne pour lesquels les caractères de retour à la ligne (\n) et de retour à la ligne (\r) ne nécessitent pas d'échappement.
- Les littéraux chaîne multilignes apparaissent toujours entre deux occurrences de "triple-backtick chord" (` ` `).
- Les littéraux chaîne multiligne ne prennent pas en charge les caractères d'échappement. A l'instar des littéraux chaîne textuels, les littéraux chaîne multilignes autorisent les caractères de retour à la ligne et les caractères de retour à la ligne.
- Les littéraux chaîne multilignes ne prennent pas en charge le brouillage.
Exemples
// 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!");
}
}```
Comme on peut le voir, lorsqu'une chaîne est placée entre guillemets ("), le caractère d'apostrophe (') ne nécessite pas d'échappement, ni l'inverse. Cette méthode facilite la mise entre guillemets des chaînes en fonction du contexte.
Littéraux chaîne brouillés-Actuellement non pris en charge
Le système suit les requêtes et les stocke à des fins de télémétrie et d'analyse. Par exemple, le texte de la requête peut être mis à la disposition du propriétaire du cluster. Si le texte de la requête inclut des informations secrètes, telles que des mots de passe, il se peut qu'il y ait fuite d'informations qui doivent rester privées. Pour éviter qu'une telle fuite ne se produise, l'auteur de la requête peut marquer des littéraux de chaîne spécifiques comme littéraux de chaîne brouillés. Ces littéraux dans le texte de la requête sont automatiquement remplacés par un certain nombre de caractères en étoile (*), de sorte qu'ils ne sont pas disponibles pour une analyse ultérieure.
Important
Marquez tous les littéraux de chaîne qui contiennent des informations de secret, comme des littéraux de chaîne brouillés.
Un littéral chaîne brouillé peut être formé en prenant un littéral chaîne "normal" et en faisant précéder un caractère h ou H .
Par exemple :
h'hello'
h@'world'
h"hello"
Dans de nombreux cas, seule une partie du littéral chaîne est secrète. Dans ces cas, divisez le littéral en une partie non secrète et une partie secrète. Ensuite, ne marquer que la partie secrète comme brouillée.
Par exemple :
print x="https://contoso.blob.core.windows.net/container/blob.txt?"
h'sv=2012-02-12&se=2013-04-13T0...'