pivot

行と列のグループフィールドを指定してレコードをピボットテーブル形式で集計します。

コマンドプロパティ

項目説明
コマンドタイプ加工クエリ
必要な権限なし
ライセンス使用量該当なし
並列実行対応
分散実行制御ノードで実行(reducer)

構文

pivot [parallel=BOOL] AGG_FUNC [as ALIAS], ... {rows|by} FIELD, ... {cols|for} FIELD, ...

オプション

parallel=BOOL
並列集計を使用するかどうか。t または f を指定します。

ターゲット

AGG_FUNC [as ALIAS], ...
集計関数とオプションのエイリアス。複数の集計関数はカンマ(,)で区切ります。
{rows|by} FIELD, ...
行グループフィールド。rows または by キーワードを使用します。複数のフィールドはカンマ(,)で区切ります。
{cols|for} FIELD, ...
列グループフィールド。cols または for キーワードを使用します。複数のフィールドはカンマ(,)で区切ります。

エラーコード

パースエラー
エラーコードメッセージ説明
21800フィールドを入力してください。集計関数が指定されていない場合
ランタイムエラー

該当なし

説明

pivot コマンドは、入力レコードを行と列のグループフィールドの組み合わせでグループ化し、各グループに集計関数を適用します。列グループフィールドの固有値が出力フィールド名になり、ピボットテーブル形式の結果を生成します。

列グループフィールドの固有値の数が 1,000 を超えるとエラーが発生します。

rowsbycolsfor はそれぞれ同等のキーワードです。順序は自由に指定できます。

分散環境では、最終集計は制御ノードで実行されます。

pivotコマンドは、入力レコードを受信する間、メモリ内バッファに集計結果を蓄積します。バッファサイズのデフォルト値は列グループフィールドがある場合は50,000件、ない場合は100,000件であり、この閾値を超えると中間集計結果をディスクにフラッシュします。この値はシステムプロパティaraqne.logdb.aggregate_flush_size列あり:列なしの形式で変更できます。集計が完了した結果は2,000件単位でまとめて出力します。

使用例

  1. 行と列でピボット

    table duration=1d web_logs
    | pivot count rows method cols status
    

    HTTP メソッド(行)とステータスコード(列)の組み合わせごとのリクエスト数をピボットテーブルとして出力します。

  2. byfor キーワードを使用

    table duration=1d web_logs
    | pivot sum(bytes) as total_bytes by method for status
    

    byfor キーワードを使用して、HTTP メソッドとステータスコードごとの合計転送バイト数をピボットテーブルとして出力します。

  3. インラインデータをピボット

    json "[{'dept': 'sales', 'quarter': 'Q1', 'amount': 100}, {'dept': 'sales', 'quarter': 'Q2', 'amount': 200}, {'dept': 'dev', 'quarter': 'Q1', 'amount': 150}, {'dept': 'dev', 'quarter': 'Q2', 'amount': 180}]"
    | pivot sum(amount) rows dept cols quarter
    

    部門(行)と四半期(列)の組み合わせごとの合計金額をピボットテーブルとして出力します。

  4. 複数の集計関数を使用

    table duration=1d web_logs
    | pivot count, avg(bytes) as avg_bytes rows method cols status
    

    HTTP メソッド(行)とステータスコード(列)の組み合わせごとのリクエスト数と平均バイト数をピボットテーブルとして出力します。