ストリング・データ・タイプ
string データ・タイプは、ゼロ個以上の Unicode 文字のシーケンスを表します。
- 内部では、ストリングは UTF-8でエンコードされます。 無効な (non-UTF8) 文字は、取り込み時に U + FFFD Unicode 置換文字に置き換えられます。
- KQL には、単一文字に相当するデータ・タイプはありません。 単一文字は、長さが 1 のストリングとして表されます。
stringデータ・タイプ自体には、ストリングの長さに関する事前定義の制限はありませんが、実際の実装では、個々の値を自由に制限できます。 通常、ストリングは 1MB ( UTF-8 エンコードを使用して測定) に制限されます。
ストリング・リテラル
照会テキスト内の string データ・タイプのリテラルをエンコードするには、いくつかの方法があります。
- ストリングを二重引用符 (
") で囲みます。"This is a string literal. Single quote characters (') don't require escaping. Double quote characters (") are escaped by a backslash (\)." - ストリングを単一引用符 (
') で囲みます。'Another string literal. Single quote characters (') require escaping by a backslash (\). Double quote characters (") do not require escaping.'
上記の 2 つの表現では、円記号 (\) 文字はエスケープを示します。 円記号は、囲み引用符文字、タブ文字 (\t)、改行文字 (\n)、およびそれ自体 (\\) をエスケープするために使用されます。
改行文字 (\n) と戻り文字 (\r) は、引用符で囲まれない限り、ストリング・リテラルの一部として含めることはできません。 「 複数行ストリング・リテラル (multi-line string literals)」も参照。
Verbatim ストリング・リテラル-現在サポートされていません
Verbatim ストリング・リテラルもサポートされています。 この形式では、円記号 (\) はエスケープ文字ではなく、それ自体を表します。
- 二重引用符 (
") で囲みます。@"This is a verbatim string literal that ends with a backslash\." - 単一引用符で囲む (
'):@'This is a verbatim string literal that ends with a backslash\.'
改行文字 (\n) と戻り文字 (\r) は、引用符で囲まれない限り、ストリング・リテラルの一部として含めることはできません。 「 複数行ストリング・リテラル (multi-line string literals)」も参照。
ストリング・リテラルの接合-現在サポートされていません
複数のストリング・リテラルは、それらの間に何もない場合、または空白とコメントのみで区切られている場合は、自動的に結合されて新しいストリング・リテラルを形成します。
例えば、以下の式はすべて、長さ 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
複数行ストリング・リテラル-現在サポートされていません
複数行ストリング・リテラルは、改行 (\n) 文字と戻り (\r) 文字がエスケープを必要としないストリング・リテラルです。
- 複数行ストリング・リテラルは、常に「triple-backtick 弦」(` ` `) の 2 つのオカレンスの間に現れます。
- 複数行ストリング・リテラルは、エスケープ文字をサポートしません。 verbatim ストリング・リテラルと同様に、複数行ストリング・リテラルでは改行文字と戻り文字を使用できます。
- 複数行ストリング・リテラルでは、難読化はサポートされません。
例
// 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!");
}
}```
ご覧のように、ストリングを二重引用符 (") で囲むと、単一引用符 (') 文字はエスケープする必要がなく、その逆も同様です。 この方法により、コンテキストに従ってストリングを引用符で囲むことが容易になります。
難読化されたストリング・リテラル-現在サポートされていません
システムは照会を追跡し、テレメトリーおよび分析の目的でそれらを保管します。 例えば、クラスター所有者が照会テキストを使用できるようにすることができます。 照会テキストにパスワードなどの秘密情報が含まれている場合は、秘密を保持する必要がある情報が漏えいする可能性があります。 このようなリークが発生しないようにするために、照会作成者は特定のストリング・リテラルに 難読化されたストリング・リテラルのマークを付けることができます。 照会テキスト内のこのようなリテラルは、後で分析するために使用できないように、自動的にいくつかの星印 (*) 文字に置き換えられます。
注
秘密情報を含むすべてのストリング・リテラルを、難読化されたストリング・リテラルとしてマークします。
難読化されたストリング・リテラルは、「通常の」ストリング・リテラルを取り、その前に h または H 文字を付加することによって形成できます。
例:
h'hello'
h@'world'
h"hello"
多くの場合、ストリング・リテラルの一部のみがシークレットです。 そのような場合は、リテラルを非シークレット・パーツとシークレット・パーツに分割してください。 その後、秘密部分にのみ難読化のマークを付けます。
例:
print x="https://contoso.blob.core.windows.net/container/blob.txt?"
h'sv=2012-02-12&se=2013-04-13T0...'