字符串数据类型

string 数据类型表示零个或多个 Unicode 字符的序列。

备注

  • 在内部,字符串以 UTF-8 编码。
  • Kusto 没有与单个字符等效的数据类型。 单个字符表示为长度为 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) 不能在不用引号括起来的情况下作为字符串文字的一部分。 另请参阅多行字符串文本

逐字字符串文本

也支持逐字字符串文本。 在这种形式中,反斜杠字符 (\) 代表它自己,而不是转义字符。

  • 括在双引号中 ("):@"This is a verbatim string literal that ends with a backslash\"
  • 括在单引号中 ('):@'This is a verbatim string literal that ends with a backslash\'

备注

换行符 (\n) 和回车符 (\r) 不能在不用引号括起来的情况下作为字符串文字的一部分。 另请参阅多行字符串文本

拼接字符串文本

如果两个或多个字符串文本之间没有任何内容,或者它们之间仅用空格和注释分隔,则这些文本会自动联接起来,在查询中形成新的字符串文本。
例如,以下表达式均产生长度为 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) 不需要转义的字符串文字。

  • 多行字符串文本总是出现在两次出现的“三个反引号弦”(```) 之间。

备注

  • 多行字符串文本不支持转义字符。 与逐字字符串文本类似,多行字符串文本允许换行符和回车符。
  • 多行字符串文本不支持模糊处理。

示例

// 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.chinacloudapi.cn/container/blob.txt?"
  h'sv=2012-02-12&se=2013-04-13T0...'