Azure Data Explorer (Kusto)

まとめ

Item 説明
リリース状態 一般公開
製品 Excel
Power BI (データセット)
Power BI (データフロー)
Power Apps (データフロー)
Dynamics 365 Customer Insights
サポートされている認証の種類 組織アカウント
関数リファレンス ドキュメント

注意

デプロイ スケジュールにより、またホスト固有の機能があることにより、ある製品に存在する機能が他の製品にはない場合があります。

前提条件

サポートされる機能

  • [インポート]
  • DirectQuery (Power BI のみ)
  • [詳細オプション]
    • クエリ結果のレコード数を制限する
    • クエリ結果のデータ サイズをバイト単位で制限する
    • 結果セットの切り詰めを無効にする
    • 追加の SET ステートメント

Power Query Desktop から Azure Data Explorerに接続する

Power Query Desktop から Azure Data Explorerに接続するには:

  1. [データの取得] で、Azure>Data Explorer (Kusto) を選択し、[接続] を選択します。 詳細情報: データを取得する場所

    [データの取得] ページのスクリーンショット。Azure カテゴリが選択されており、Azure Data Explorer強調されています。

  2. Azure Data Explorer (Kusto) で、Azure Data Explorer クラスターの名前を指定します。 この例では、サンプル ヘルプ クラスターにアクセスするために使用 https://help.kusto.windows.net します。 その他のクラスターの場合、URL は https:// <ClusterName という形式です><Region.kusto.windows.net>

    接続しているクラスターでホストされているデータベースと、データベース内のテーブルの 1 つ、または次のような StormEvents | take 1000クエリを選択することもできます。

  3. 事前オプションを使用する場合は、オプションを選択し、そのオプションで使用するデータを入力します。 詳細情報: 詳細オプションを使用して接続する

    注意

    すべての詳細オプションとデータ接続の選択を表示するには、下にスクロールする必要がある場合があります。

  4. [インポート] または [DirectQuery] のデータ接続モードを選択します (Power BI Desktop のみ)。 詳細情報: インポートまたは直接クエリ モードを使用する場合

  5. [OK] を選択して続行します。

    Azure Data Explorer (Kusto) ダイアログ ボックスのスクリーンショット。クラスターの URL が入力されています。

  6. クラスターへの接続がまだない場合は、[ サインイン] を選択します。 組織アカウントでサインインし、 [接続] を選択します。

    Azure Data Explorer のサインイン ダイアログ ボックスのスクリーンショット。組織アカウントはサインインする準備ができています。

  7. ナビゲーターで、目的のデータベース情報を選択し、[読み込み] を選択してデータを読み込むか、[データの変換] を選択して、Power Query エディターでデータの変換を続行します。 この例では、StormEvents が Samples データベースで選択されています。

    サンプル データベース内の StormEvents からのデータを含むナビゲーターのスクリーンショット。

Power Query Online から Azure Data Explorerに接続する

Power Query Online から Azure Data Explorerに接続するには:

  1. [データ ソースの選択] から Azure Data Explorer (Kusto) オプションを選択します。 詳細情報: データを取得する場所

  2. [データ ソースへの接続] で、Azure Data Explorer クラスターの名前を指定します。 この例では、サンプル ヘルプ クラスターにアクセスするために使用 https://help.kusto.windows.net します。 その他のクラスターの場合、URL は https:// <ClusterName という形式です><Region.kusto.windows.net>

    接続しているクラスターでホストされているデータベースと、データベース内のテーブルの 1 つ、または次のような StormEvents | take 1000クエリを選択することもできます。

    クラスターの URL が入力された Azure Data Explorer (Kusto) の [データ ソースの選択] ページのスクリーンショット。

  3. 事前オプションを使用する場合は、オプションを選択し、そのオプションで使用するデータを入力します。 詳細情報: 詳細オプションを使用して接続する

  4. 必要に応じて、 [データ ゲートウェイ] でオンプレミス データ ゲートウェイを選択します。

  5. クラスターへの接続がまだない場合は、[ サインイン] を選択します。 組織のアカウントでサインインします。

  6. 正常にサインインしたら、[ 次へ] を選択します。

  7. [データの選択] ページで目的のデータベース情報を選択し、[データの変換] または [次へ] を選択して、Power Query エディターでデータの変換を続行します。 この例では、StormEvents が Samples データベースで選択されています。

    サンプル データベースの StormEvents のデータを含む [データの選択] ページのスクリーンショット。

詳細オプションを使用して接続する

Power Query Desktop と Power Query Online のどちらにも、必要に応じてクエリに追加できる一連の詳細オプションが用意されています。

次の表に、Power Query Desktop と Power Query Online で設定できるすべての詳細オプションを示します。

詳細オプション 説明
クエリ結果のレコード数を制限する 結果で返されるレコードの最大数。
クエリ結果のデータ サイズをバイト単位で制限する 結果で返される最大データ サイズ (バイト単位)。
結果セットの切り詰めを無効にする 要求オプションを使用して、結果の notruncation 切り捨てを有効または無効にします。
その他の Set ステートメント クエリの実行中のクエリ オプションを設定します。 クエリ オプションは、クエリの実行方法とクエリが結果を返す方法を制御します。 複数の Set ステートメントはセミコロンで区切ることができます。

Power Query UI で使用できないその他の詳細オプションについては、「M クエリでの Azure Data Explorer コネクタ オプションの構成」を参照してください。

インポートまたは直接クエリ モードを使用する場合

Import モードでは、データは Power BI に移行されます。 DirectQuery モードでは、クラスターからデータのクエリが直接実行されます。

次の場合は Import モードを使用します。

  • データ セットが小さい。
  • ほぼリアルタイムのデータが必要ない。
  • データは既に集計されているか、Kusto で集計を実行します。

次の場合は DirectQuery モードを使用します。

  • データ セットが非常に大きい。
  • ほぼリアルタイムのデータが必要。

DirectQuery の使用の詳細については、「 Power BI での DirectQuery の使用について」を参照してください。

Azure Data Explorer コネクタを使用してデータを照会するためのヒント

次のセクションでは、kusto クエリ言語と Power Query を使用するためのヒントとテクニックについて説明します。

Power BI での複雑なクエリ

複雑なクエリは、Kusto でのほうが Power Query よりも簡単に表現できます。 これらは Kusto 関数として実装し、Power BI で呼び出す必要があります。 この方法は、Kusto クエリの let ステートメントと共に DirectQuery を使用する場合に必要です。 Power BI は 2 つのクエリを結合し let 、ステートメントを演算子で join 使用できないため、構文エラーが発生する可能性があります。 したがって、結合の各部分を Kusto 関数として保存し、Power BI でこれら 2 つの関数を結合できるようにします。

相対 date-time 演算子をシミュレートする方法

Power Queryには、のようなago()相対日時演算子が含まれません。 シミュレートago()するには、DateTime.FixedLocalNow 関数と #duration Power Query M 関数の組み合わせを使用します。

このクエリではなく、ago() 演算子を使用します。

    StormEvents | where StartTime > (now()-5d)
    StormEvents | where StartTime > ago(5d)

次の同等のクエリを使用します。

let
    Source = AzureDataExplorer.Contents("help", "Samples", "StormEvents", []),
    #"Filtered Rows" = Table.SelectRows(Source, each [StartTime] > (DateTime.FixedLocalNow()-#duration(5,0,0,0)))
in
    #"Filtered Rows"

M クエリでの Azure Data Explorer コネクタ オプションの構成

Azure Data Explorer コネクタのオプションは、M クエリ言語のPower Query詳細エディターから構成できます。 これらのオプションを使用して、Azure Data Explorer クラスターに送信される、生成されたクエリを制御できます。

let
    Source = AzureDataExplorer.Contents("help", "Samples", "StormEvents", [<options>])
in
    Source

M クエリで、次のすべてのオプションを使用できます。

オプション サンプル 説明
MaxRows [MaxRows=300000] set truncationmaxrecords ステートメントをクエリに追加します。 クエリが呼び出し元に返すことができるレコードの既定の最大数をオーバーライドします (切り捨て)。
MaxSize [MaxSize=4194304] set truncationmaxsize ステートメントをクエリに追加します。 クエリが呼び出し元に返すことのできる既定の最大データ サイズをオーバーライドします (切り詰め)。
NoTruncate [NoTruncate=true] set notruncation ステートメントをクエリに追加します。 呼び出し元に返されるクエリ結果の切り詰めの抑制を有効にします。
AdditionalSetStatements [AdditionalSetStatements="set query_datascope=hotcache"] 指定した set ステートメントをクエリに追加します。 これらのステートメントは、クエリの実行中にクエリ オプションを設定するために使用されます。 クエリ オプションは、クエリの実行方法とクエリが結果を返す方法を制御します。
CaseInsensitive [CaseInsensitive=true] コネクタで大文字と小文字を区別しないクエリを生成します。クエリでは、値を =~ 比較するときに演算子の == 代わりに演算子を使用します。
ForceUseContains [ForceUseContains=true] テキスト フィールドを操作するときに、既定の has ではなく contains を使用するクエリがコネクタによって生成されるようにします。 has は、はるかにパフォーマンスに優れていますが、部分文字列は処理されません。 2 つの演算子の違いの詳細については、 文字列演算子を参照してください。
タイムアウト [Timeout=#duration(0,10,0,0)] クエリに対するクライアントとサーバー両方のタイムアウトを、指定された期間に構成します。
ClientRequestIdPrefix [ClientRequestIdPrefix="MyReport"] コネクタによって送信されるすべてのクエリに対して ClientRequestId プレフィックスを構成します。 これにより、特定のレポートやデータ ソースからのクエリをクラスター内で識別できるようになります。

注意

複数のオプションを組み合わせて、必要な動作に到達できます。 [NoTruncate=true, CaseInsensitive=true]

Kusto クエリの制限に達する

Kusto クエリからは、既定で最大 500,000 行または 64 MB が返されます。詳細についてはクエリの制限に関する記事を参照してください。 これらの既定値をオーバーライドするには、Azure Data Explorer (Kusto) 接続ウィンドウで [詳細オプション] を使用します。

詳細オプション。

これらのオプションでは、クエリと共に SET ステートメントが発行され、既定のクエリ制限が変更されます。

  • [クエリ結果のレコード数を制限する]set truncationmaxrecords が生成されます。
  • [クエリ結果のデータ サイズを制限する (バイト単位)]set truncationmaxsize が生成されます。
  • [結果セットの切り詰めを無効にする]set notruncation が生成されます。

大文字小文字の区別

既定では、コネクタによって生成されるクエリでは、文字列値を比較するときに、大文字と小文字を区別する == 演算子が使用されます。 データで大文字と小文字が区別されない場合、これは望ましい動作ではありません。 生成されるクエリを変更するには、CaseInsensitive コネクタ オプションを使用します。

let
    Source = AzureDataExplorer.Contents("help", "Samples", "StormEvents", [CaseInsensitive=true]),
    #"Filtered Rows" = Table.SelectRows(Source, each [State] == "aLaBama")
in
    #"Filtered Rows"

クエリ パラメーターの使用

クエリ パラメーターを使用して、クエリを動的に変更できます。

クエリ ステップでクエリ パラメーターを使用する

クエリ パラメーターは、それをサポートする任意のクエリ ステップで使用できます。 たとえば、パラメーターの値に基づいて結果をフィルター処理します。 この例では、Power Query エディターで列のState右側にあるドロップダウン メニューを選択し、[テキスト フィルター>が等しい] を選択し、[行を保持する ][状態] の下の [アラバマ] を選択します。

パラメーターを使用して結果をフィルター処理します。

ADX 関数にパラメーターを指定する

Kusto 関数は、複雑なKusto 照会言語 (KQL) クエリを維持するための優れた方法です。 Power Queryに KQL を埋め込む代わりに関数を使用することをお勧めします。 関数を使用する主な利点は、ロジックを作成およびテストしやすい環境で 1 回保持することです。

関数はパラメーターを受け取ることもできます。そのため、Power BI ユーザーに多くの柔軟性が追加されます。 Power BI には、データをスライスする多くの方法があります。 ただし、すべてのフィルターとスライサーは元の KQL の後に追加され、多くの場合、クエリの初期段階でフィルター処理を使用する必要があります。 関数と動的パラメーターを使用すると、最終的なクエリをカスタマイズする非常に効果的な方法です。

関数の作成

空きクラスターを含め、アクセスできる任意の ADX クラスターに次の関数を作成できます。 この関数はヘルプ クラスターからテーブル SalesTable を返し、レポート ユーザーが指定した数値より大きいか小さい売上トランザクションに対してフィルター処理されます。

.create-or-alter  function LargeOrSmallSales(Cutoff:long,Op:string=">")
{
    cluster("help").database("ContosoSales").SalesTable
    | where  (Op==">" and SalesAmount >= Cutoff) or (Op=="<"  and SalesAmount <= Cutoff)
}

関数を作成したら、次を使用してテストできます。

LargeOrSmallSales(2000,">")
| summarize Sales=tolong(sum(SalesAmount)) by Country

次を使用してテストすることもできます。

LargeOrSmallSales(20,"<")
| summarize Sales=tolong(sum(SalesAmount)) by Country
Power BI での関数の使用
  1. 関数を作成したクラスターに接続します。

  2. Power Query ナビゲーターで、オブジェクトの一覧から関数を選択します。 コネクタはパラメーターを分析し、ナビゲーターの右側にあるデータの上に表示します。

    ナビゲーターのデータの上に [カットオフ] パラメーターと [Op] パラメーターが表示されたスクリーンショット。

  3. パラメーターに値を追加し、[ 適用] を選択します。

  4. プレビューが表示されたら、[ データの変換] を選択します。

  5. Power Query エディターで、カットオフ値用と演算子用の 2 つのパラメーターを作成します。

  6. クエリにLargeOrSmallSales戻るし、値を数式バーのクエリ パラメーターに置き換えます。

    LargeOrSmallSales 関数のスクリーンショット。数式バーのCutoff_ParamパラメーターとOp_Paramパラメーターに重点が置かれています。

  7. エディターから、2 つの静的テーブル (データの入力) を作成して、2 つのパラメーターのオプションを指定します。 カットオフの場合、10、50、100、200、500、1000、2000 などの値を持つテーブルを作成できます。 の場合は Op、2 つのテキスト値 < を持つテーブルと >.

  8. テーブル内の 2 つの列は、パラメーターの選択にバインドを使用してクエリ パラメーターにバインドする 必要があります。

    op がOp_Param パラメーターにバインドされているスクリーンショット。

最後のレポートには、2 つの静的テーブルのスライサーと、サマリー売上のビジュアルが含まれます。

表の横に [カットオフ] と [Op] の値の選択項目が表示されている Power BI のスクリーンショット。

ベース テーブルは最初にフィルター処理され、次に集計されます。

接続の詳細でのクエリ パラメーターの使用

クエリ パラメーターを使用して、クエリの情報をフィルター処理し、クエリのパフォーマンスを最適化します。

詳細エディター:

  1. クエリの次のセクションを探します。

    Source = AzureDataExplorer.Contents("<Cluster>", "<Database>", "<Query>", [])

    次に例を示します。

    Source = AzureDataExplorer.Contents("Help", "Samples", "StormEvents | where State == 'ALABAMA' | take 100", [])
    
  2. Kusto 照会言語 (KQL) クエリにクエリ パラメーターを挿入します。

    接続ダイアログに KQL クエリを直接貼り付けると、クエリはPower Queryのソース ステップの一部になります。 高度なエディターを使用するか、数式バーでソース ステートメントを編集するときに、クエリの一部としてパラメーターを埋め込むことができます。 クエリの例を次に示します StormEvents | where State == ' " & State & " ' | take 100State はパラメーターであり、実行時にクエリは次のようになります。

    StormEvents | where State == 'ALABAMA' | take 100

  3. クエリに引用符が含まれている場合は、それらを適切にエンコードします。 たとえば、KQL の次のクエリです。

    "StormEvents | where State == "ALABAMA" | take 100"
    

    これは、次のように 2 つの引用符を使用して詳細エディターに表示されます。

     "StormEvents | where State == ""ALABAMA"" | take 100"
    

    などの Stateパラメーターを使用している場合は、3 つの引用符を含む次のクエリに置き換える必要があります。

    "StormEvents | where State == """ & State & """ | take 100"
    

Azure Data Explorer の機能に対して Value.NativeQuery を使用する

Power Queryでサポートされていない Azure Data Explorer機能を使用するには、Power Query M の Value.NativeQuery メソッドを使用します。このメソッドは、生成されたクエリ内にKusto 照会言語 フラグメントを挿入し、実行されたクエリをより詳細に制御するために使用することもできます。

次の例では、Azure Data Explorer で percentiles 関数を使用する方法を示します。

let
    StormEvents = AzureDataExplorer.Contents(DefaultCluster, DefaultDatabase){[Name = DefaultTable]}[Data],
    Percentiles = Value.NativeQuery(StormEvents, "| summarize percentiles(DamageProperty, 50, 90, 95) by State")
in
    Percentiles

Kusto に制御コマンドを発行するために Power BI データ更新スケジューラを使用しない

Power BI には、データ ソースに対して定期的にクエリを発行できるデータ更新スケジューラが用意されています。 Power BI では、すべてのクエリが読み取り専用であると想定されているため、このメカニズムを使用して Kusto に対して制御コマンドをスケジュールすることはできません。