文字列データ型

データ型 string は、0 個以上の Unicode 文字のシーケンスを表します。

文字列クエリ演算子の詳細については、「 文字列演算子」を参照してください。

Note

  • 内部的には、文字列は UTF-8 でエンコードされます。 無効な (UTF8 以外の) 文字は、インジェスト時に U+FFFD Unicode 置換文字に置き換えられます。
  • Kusto には、1 つの文字と等価なデータ型がありません。 1 つの文字は、長さ 1 の文字列として表されます。
  • string データ型を取り込むときに、レコード内の 1 つの文字列値が 1 MB を超える場合 (UTF-8 エンコードを使用して測定)、値は切り詰められ、取り込みは成功します。 レコードまたはレコード全体の 1 つの文字列値が、許可されるデータ制限の 64 MB を超えた場合、インジェストは失敗します。

string リテラル

二重引用符または単一引用符を使用して、クエリ テキスト内の文字列リテラルをエンコードできます。 二重引用符を使用する場合は、入れ子になった二重引用符を円記号 (\) でエスケープする必要があります。 単一引用符では、入れ子になった単一引用符文字をエスケープする必要があり、二重引用符をエスケープする必要はありません。

円記号を使用して、囲み引用符文字、タブ文字 ()、改行文字 (\t)、円記号自体 (\n\\) をエスケープします。

注意

改行文字 (\n) と戻り文字 (\r) は、 複数行の文字列リテラルを使用しない限り、引用符で囲む必要があります。

Verbatim 文字列リテラル

逐語的文字列リテラルもサポートされています。 この形式では、円記号 (\) はそれ自体を表し、エスケープ文字ではありません。 文字列リテラルの @ 前に文字を追加すると、逐語的な識別子として機能します。 逐語的な文字列リテラルでは、二重引用符は二重引用符でエスケープされ、一重引用符は一重引用符でエスケープされます。

例については、「 逐語的な文字列」を参照してください。

注意

改行文字 (\n) と戻り文字 (\r) は、 複数行の文字列リテラルを使用しない限り、引用符で囲む必要があります。

複数行の文字列リテラル

リテラルの先頭と末尾に "トリプル バックティック コード" (''') で複数行の文字列リテラルを示します。

例については、「 複数行文字列リテラル」を参照してください。

注意

  • 複数行の文字列リテラルは、改行 () と戻り (\n\r) 文字をサポートします。
  • 複数行の文字列リテラルは、エスケープ文字をサポートしていません。 逐語的な文字列リテラルに似ています
  • 複数行の文字列リテラルでは、 難読化はサポートされていません。

区切り文字列リテラルの連結

Kusto クエリでは、2 つ以上の隣接する文字列リテラルの間に分離がない場合は、自動的に結合されて新しい文字列リテラルが形成されます。 同様に、文字列リテラルが空白またはコメントのみで区切られている場合は、新しい文字列リテラルを形成するためにも結合されます。

例については、「 連結された文字列リテラル」を参照してください。

難読化文字列リテラル

クエリは、テレメトリと分析のために格納されます。 パスワードやシークレットなどの機密情報を保護するために、文字列を 難読化された文字列リテラルとしてマークできます。 これらのマークされた文字列は、クエリ テキストのアスタリスク (*) に置き換えられます。

難読化された文字列リテラルは、標準または逐語的なH文字列リテラルの前にある または 文字を前に置hくことで作成されます。

例については、「 難読化された文字列リテラル」を参照してください。

重要

シークレット情報を含むすべての文字列リテラルを、難読化された文字列リテラルとしてマークします。

ヒント

状況によっては、文字列リテラルの一部にのみシークレット情報が含まれます。 このような場合は、リテラルをシークレット以外の部分とシークレット部分に分割します。 次に、シークレット部分のみを難読化としてラベル付けします。

引用符で囲まれた文字列リテラル

次の例では、単一引用符と二重引用符で囲まれた文字列リテラル内で引用符を使用する方法を示します。 詳細については、「 文字列リテラル」を参照してください。

print
    s1 = 'string with "double quotes"',
    s2 = "string with 'single quotes'"

出力

s1 s2
"二重引用符" を含む文字列 '単一引用符' の文字列

円記号エスケープを含む文字列リテラル

次の例では、円記号を使用して特殊文字をエスケープする正規表現パターンを作成します。 詳細については、「 文字列リテラル」を参照してください。

print pattern = '\\n.*(>|\'|=|\")[a-zA-Z0-9/+]{86}=='

出力

pattern
\n.*(>|'|=|")[a-zA-Z0-9/+]{86}=

Unicode を使用した文字列リテラル

次の例は、文字列リテラルに Unicode 文字を含めるために円記号が必要であることを示しています。

print space = "Hello\u00A0World"

出力

空白
Hello World

逐語的文字列リテラル

次の例では、円記号がエスケープ文字ではなくパスの一部であるパスを作成します。 これを行うには、文字列の先頭に文字列 @ 記号が付加され、 逐語的な文字列リテラルが作成されます。

print myPath = @'C:\Folder\filename.txt'

出力

Mypath
C:\Folder\filename.txt

複数行の文字列リテラル

次の例は、改行とタブを使用してコード ブロックのスタイルを設定する複数行文字列リテラルの構文を示しています。 詳細については、「 複数行の文字列リテラル」を参照してください。

print program = ```
  public class Program {
    public static void Main() {
      System.Console.WriteLine("Hello!");
    }
  }```

出力

プログラム
public クラス Program { public static void Main() { System.Console.WriteLine("Hello!"); } } }

連結された文字列リテラル

次の式はすべて、長さ 13 の文字列を生成します。 詳細については、「 区切り文字列リテラルの連結」を参照してください。

print 
    none = strlen("Hello"', '@"world!"),
    whitespace = strlen("Hello" ', ' @"world!"),
    whitespaceAndComment = strlen("Hello" 
        // Comment
        ', '@"world!"
    );

出力

なし whitespace whitespaceAndComment
13 13 13

難読化された文字列リテラル

次のクエリ出力では、文字列が h 表示されます。 ただし、トレースまたはテレメトリでは、 h 文字列はアスタリスクで置き換えされます。 詳細については、「 難読化された文字列リテラル」を参照してください。

print blob="https://contoso.blob.core.windows.net/container/blob.txt?"
    h'sv=2012-02-12&se=2013-04-13T0...'

出力

blob (blob)
https://contoso.blob.core.windows.net/container/blob.txt?sv=2012-02-12&se=2013-04-13T0...