GitHub在 GitHub中添加内容: 在线编辑

字符串数据类型

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.'

在上述两种表示法中,反斜杠 (\) 字符指示转义。 反斜杠用于对括起来的引号字符,制表符 (\t) ,换行符 (\n) 和自身 (\\) 进行转义。

不能将换行符 (\n) 和返回字符 (\r) 包含为字符串文字的一部分而不使用引号。 另请参阅 多行字符串文字 (multi-line string literals)

逐字串文字-当前不受支持

还支持逐字串文字。 在此格式中,反斜杠字符 (\) 代表自身,而不是转义字符。

  • 用双引号 (") 括起: @"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 弦" (` ` `) 的两次出现之间。

  • 多行字符串字面值不支持转义字符。 与 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!");
    }
    }```

可以看到,当用双引号 (") 括起字符串时,单引号 (') 字符不需要转义,也不需要转义。 此方法使根据上下文对字符串进行引号变得更容易。

模糊处理的字符串字面值-当前不受支持

系统会跟踪查询并将其存储以进行遥测和分析。 例如,查询文本可能可供集群所有者使用。 如果查询文本包含密码之类的秘密信息,那么可能会泄露应保持为私有的信息。 为了防止发生此类泄漏,查询作者可以将特定字符串字面值标记为 模糊化字符串字面值。 查询文本中的此类字面值将自动替换为多个星型 (*) 字符,因此这些字面值不可用于后续分析。

注意

将包含私钥信息的所有字符串字面值标记为模糊字符串字面值。

模糊化字符串字面值可以通过采用 "常规" 字符串字面值并在其前面添加 hH 字符来构成。

例如:

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...'