Data Explorer の埋め込みURLから元のクエリを取り出す


概要

Azure Data Explorer (Kusto とも呼びます) は超高速に検索できる強力なデータストアです。お客様と、あるいはチーム内でクエリをシェアするのは、ちょうど数式と解答を一緒に見るのに似ていてとても有用です。

Data Explorer でリンクをシェアすると以下のようなURLがクリップボードに送られます。

https://dataexplorer.azure.com/clusters/クラスタ名.リージョン/databases/データストア名?query=エンコードされた Kusto クエリ

このURLを開くと、ポータルで Kusto クエリが実行されて結果が表示されます。便利。

クエリ文字列をデコードするコード

URLのクエリ文字列中に埋め込まれた Kusto クエリ(ややこしい)は、元の Kusto クエリを ZIP 圧縮したビット列を BASE64 にエンコードしたものです。この部分を取り出して、元の Kusto クエリを取り出すコードを書いてみます。あまり使うことはないとは思いますが。

簡単なので LINQPad でさっくりと。

var s = "<EMBEDDED QUERY GOES HERE>";

var base64 = HttpUtility.UrlDecode(s);
var buffer = new byte[1024];
string queryString = string.Empty;
var e = Convert.FromBase64String(base64);
using (var gz = new GZipStream(new MemoryStream(e), CompressionMode.Decompress))
{
    while (true)
    {
        var len = gz.Read(buffer, 0, buffer.Length);
        queryString += Encoding.UTF8.GetString(buffer, 0, len);

        if (len < buffer.Length)
        {
            break;
        }
    }
}

queryString.Dump();

おわりに

誰得な TIPS を書いてしまった。