すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:クエリ結果の解釈

最終更新日:Jun 23, 2026

HA3 SQL は 4 つの結果フォーマット (string、json、full_json、flatbuffers) をサポートしています。各フォーマットの設定方法と解析方法について説明します。

クエリ結果の返却フォーマット

クエリ結果は、stringjsonfull_jsonflatbuffers の 4 つのフォーマットで返却できます。フォーマットは、次のいずれかの方法で設定できます。

  • 設定ファイルでフォーマットを設定します。この設定は HA3 SQL の起動後にグローバルに適用されます。デフォルトでは、すべてのクエリがこのフォーマットで結果を返します。

  • クエリの kvpair 句でフォーマットを指定します。この設定は現在のクエリにのみ適用され、設定ファイルで指定したフォーマットを上書きします。

kvpair 句での返却フォーマットの設定

クエリの kvpair フィールドで、formatType:json または formatType:string を使用して返却フォーマットを制御できます。詳細については、「kvpair clause」をご参照ください。

query=...&&kvpair=...;formatType:{json | string | full_json | flatbuffers};...

string フォーマット結果の解析

string フォーマットには、可読性を高めるためのレイアウト整形が含まれているため、開発およびデバッグに適しています。

/ha3_develop/source_code/ha3_manual_example/sql $ ./search.sh -s "select nid, price, brand, size from phone"
+ python2.7 /ha3_develop/install_root/usr/local/lib/python/site-packages/ha_tools/search.py -a http://localhost:39341/ -s 'select nid, price, brand, size from phone'
USE_TIME: 0.025, ROW_COUNT: 10

------------------------------- TABLE INFO ---------------------------
                 nid |               price |               brand |                size |
                   1 |                3599 |              Huawei |                 5.9 |
                   2 |                4388 |              Huawei |                 5.5 |
                   3 |                 899 |              Xiaomi |                   5 |
                   4 |                2999 |                OPPO |                 5.5 |
                   5 |                1299 |               Meizu |                 5.5 |
                   6 |                 169 |               Nokia |                 1.4 |
                   7 |                3599 |               Apple |                 4.7 |
                   8 |                5998 |               Apple |                 5.5 |
                   9 |                4298 |               Apple |                 4.7 |
                  10 |                5688 |             Samsung |                 5.6 |

------------------------------- TRACE INFO ---------------------------

------------------------------- SEARCH INFO ---------------------------
scanInfos { kernelName: "ScanKernel" nodeName: "0_0" tableName: "phone" hashKey: 243934**** parallelNum: 1 totalOutputCount: 10 totalScanCount: 10 totalUseTime: 86 totalSeekTime: 29 totalEvaluateTime: 13 totalOu\
tputTime: 43 totalComputeTimes: 1 }

JSON フォーマット結果の解析

json フォーマットはプログラムでの解析を目的として設計されており、string フォーマットよりも豊富な情報を含みます。以下のセクションでは、レスポンスフィールドについて説明します。

/ha3_develop/source_code/ha3_manual_example/sql $ ./search.sh -s "select nid, price, brand, size from phone&&kvpair=formatType:json"
+ python2.7 /ha3_develop/install_root/usr/local/lib/python/site-packages/ha_tools/search.py -a http://localhost:39341/ -s 'select nid, price, brand, size from phone&&kvpair=formatType:json'
{
"error_info": // エラー情報。
  "{\"Error\": ERROR_NONE}",
"format_type":
  "json",
"row_count": // 結果数。
  10,
"search_info": // scan や sort などの演算子のメトリクスを含む、検索に関連する情報。
  "scanInfos { kernelName: \"ScanKernel\" nodeName: \"0_0\" tableName: \"phone\" hashKey: 243934**** parallelNum: 1 totalOutputCount: 10 totalScanCount: 10 totalUseTime: 81 totalSeekTime: 28 totalEvaluateTime: 1\
1 totalOutputTime: 40 totalComputeTimes: 1 }",
"sql_result": // 結果。JSON 文字列として返却されます。
  "{\"column_name\":[\"nid\",\"price\",\"brand\",\"size\"],\"column_type\":[\"uint64\",\"double\",\"multi_char\",\"double\"],\"data\":[[1,3599,\"Huawei\",5.9],[2,4388,\"Huawei\",5.5],[3,899,\"Xiaomi\",5],[4,2999\
,\"OPPO\",5.5],[5,1299,\"Meizu\",5.5],[6,169,\"Nokia\",1.4],[7,3599,\"Apple\",4.7],[8,5998,\"Apple\",5.5],[9,4298,\"Apple\",4.7],[10,5688,\"Samsung\",5.6]]}",
"total_time": // 所要時間 (秒)。
  0.024,
"trace": // トレース情報。
  [
  ]
}

full_json フォーマット結果の解析

full_json フォーマットは json フォーマットと似ています。違いは sql_result フィールドのみです。json フォーマットでは、このフィールドは文字列です。full_json フォーマットでは、このフィールドは JSON オブジェクトです。

{
        "total_time": 34.003,
        "covered_percent": 1,
        "row_count": 10 ,
        "format_type": "full_json",
        "search_info": {},
        "trace": [],
        "sql_result": {
                "data": [
                        [
                                232953260,
                                "Dicos"
                        ],
                        [
                                239745260,
                                "Ye's Brothers"
                        ],
                        [
                                240084010,
                                "Cai Lao Bao"
                        ],
                        [
                                240082260,
                                "Zhou Hei Ya"
                        ],
                        [
                                240086260,
                                "Jue Wei Ya Bo"
                        ],
                        [
                                240108260,
                                ""
                        ],
                        [
                                239256390,
                                "Everyday Life Supermarket"
                        ],
                        [
                                240079390,
                                "Meiyijia"
                        ],
                        [
                                265230260,
                                ""
                        ],
                        [
                                239313011,
                                "Da Shen Lin"
                        ]
                ],
                "column_name": [
                        "store_id",
                        "brand_name"
                ],
                "column_type": [
                        "int64",
                        "multi_char"
                ]
        },
        "error_info": {
                "ErrorCode": 0,
                "Error": "ERROR_NONE",
                "Message": ""
        }
}

sql_result の詳細

{
    "column_name":[ // 列名
        "nid",
        "price",
        "brand",
        "size"
    ],
    "column_type":[ // 列のデータ型
        "uint64",
        "double",
        "multi_char",
        "double"
    ],
    "data":[ // 各行のデータ
        [
            1,
            3599,
            "Huawei",
            5.9
        ],
        [
            2,
            4388,
            "Huawei",
            5.5
        ],
        [
            3,
            899,
            "Xiaomi",
            5
        ],
        [
            4,
            2999,
            "OPPO",
            5.5
        ],
        [
            5,
            1299,
            "Meizu",
            5.5
        ],
        [
            6,
            169,
            "Nokia",
            1.4
        ],
        [
            7,
            3599,
            "Apple",
            4.7
        ],
        [
            8,
            5998,
            "Apple",
            5.5
        ],
        [
            9,
            4298,
            "Apple",
            4.7
        ],
        [
            10,
            5688,
            "Samsung",
            5.6
        ]
    ]
}

searchInfo の詳細

searchInfo フィールドは、クエリプロセスに関する詳細なメトリクスを提供します。これは、トラブルシューティングとパフォーマンスチューニングに役立ちます。kvpair 句に searchInfo:true を追加してください。

"search_info": {
        "exchangeInfos": [
                {
                        "fillResultUseTime": 1276, // ExchangeKernel がレスポンス構造体から結果を取得する所要時間 (μs)。
                        "hashKey": 413114****, 
                        "kernelName": "ExchangeKernel", // ExchangeKernel 名。
                        "nodeName": "1", // ExchangeKernel をホストするノード名。
                        "poolSize": 472, // このクエリで ExchangeKernel のワーカーが使用したプールサイズ。
                        "rowCount": 2, // すべての列の結果をマージした後の有効な行数。
                        "searcherUseTime": 7335, // 検索リクエストの開始待機時間 (μs)。
                        "totalAccessCount": 4 // 検索リクエストを開始した列の総数。
                }
        ],
        "rpcInfos": [ // 開始したリモートプロシージャコール (RPC) リクエストの詳細。要素数は、結果が返却された列数と同じです。
                {
                        "beginTime": 1588131436272843, // ExchangeKernel 呼び出しの開始時刻 (μs)。
                        "rpcNodeInfos": [
                                {
                                        "callUseTime": 5431, // この RPC ノードの所要時間 (μs)。
                                        "isReturned": true, // レスポンスが返却されたかどうかを示します。
                                        "netLatency": 664, // ネットワーク遅延 (μs)。
                                        "rpcBegin": 1588131436272857, // RPC 呼び出しの開始タイムスタンプ (μs)。
                                        "rpcEnd": 1588131436278288, // RPC 呼び出しの終了タイムスタンプ (μs)。
                                        "rpcUseTime": 5175, // RPC 呼び出しの所要時間 (μs)。
                                        "specStr": "11.1.XX.XX:20412" // 呼び出したサーバーの IP アドレスとポート。
                                },
                                ...
                        ],
                                "totalRpcCount": 4, // 送信した RPC リクエスト数。
                                "useTime": 7335 // RPC 呼び出しの総所要時間。
                        }
                ],
                "runSqlTimeInfo": {
                        "sqlPlan2GraphTime": 174, // iquan プランを navi グラフに変換する所要時間 (μs)。
                        "sqlPlanStartTime": 1588143112640920, // iquan に送信したプランリクエストのタイムスタンプ (μs)。
                        "sqlPlanTime": 10295, // iquan にリクエストを送信してからプランを受信するまでの総所要時間 (μs)。
                        "sqlRunGraphTime": 13407 // SQL グラフを実行する総所要時間 (μs)。
                },
                "scanInfos": [
                        {
                                "hashKey": 691673167,
                                "kernelName": "ScanKernel", // カーネル名。
                                "parallelNum": 2, // scan のグローバル並列度。
                                "parallelIndex": 1, // 並列処理におけるこの ScanKernel のインデックス。値が 0 の場合は表示されません。
                                "tableName": "store", // テーブル名。
                                "totalComputeTimes": 4, // batchScan の総呼び出し回数。
                                "totalEvaluateTime": 9, // フィールド評価の総所要時間 (μs)。
                                "totalInitTime": 3758, // init フェーズの総所要時間 (μs)。
                                "totalOutputCount": 2, // 出力行の総数。
                                "totalOutputTime": 264, // テーブルへのデータ追加・削除を含む、出力データ構築の総所要時間 (μs)。
                                "totalScanCount": 2, // scan が検出したレコードの総数。
                                "totalSeekTime": 2, // シーク呼び出しの総所要時間 (μs)。
                                "totalUseTime": 4217 // ScanKernel 呼び出しの総所要時間 (μs)。
                        }
                ]
        }

flatbuffers フォーマット

flatbuffers フォーマットは、効率的なシリアル化のために flatbuffers を使用するため、高パフォーマンスが求められるシナリオに最適です。クライアントは、返却された結果を使用する前に逆シリアル化する必要があります。

SqlResult.fbs

include "TwoDimTable.fbs";

namespace isearch.fbs;

table SqlErrorResult {
    partitionId: string (id:0);
    hostName: string (id:1);
    errorCode: uint (id:2);
    errorDescription: string (id:3);
}

table SqlResult {
    processTime: double (id:0);
    rowCount: uint32 (id:1);
    errorResult: SqlErrorResult (id:2);
    sqlTable: TwoDimTable (id:3);
    searchInfo: string (id:4);
    coveredPercent: double (id:5);
}

root_type SqlResult;

TwoDimTable.fbs

include "TsdbColumn.fbs";
namespace isearch.fbs;

// 複数値
table MultiInt8   { value: [byte];   }
table MultiInt16  { value: [short];  }
table MultiInt32  { value: [int];    }
table MultiInt64  { value: [long];   }
table MultiUInt8  { value: [ubyte];  }
table MultiUInt16 { value: [ushort]; }
table MultiUInt32 { value: [uint];   }
table MultiUInt64 { value: [ulong];  }
table MultiFloat  { value: [float];  }
table MultiDouble { value: [double]; }
table MultiString { value: [string]; }

// 列指向ストレージ
table Int8Column   { value: [byte];   }
table Int16Column  { value: [short];  }
table Int32Column  { value: [int];    }
table Int64Column  { value: [long];   }
table UInt8Column  { value: [ubyte];  }
table UInt16Column { value: [ushort]; }
table UInt32Column { value: [uint];   }
table UInt64Column { value: [ulong];  }
table FloatColumn  { value: [float];  }
table DoubleColumn { value: [double]; }
table StringColumn { value: [string]; }

table MultiInt8Column   { value: [MultiInt8];   }
table MultiUInt8Column  { value: [MultiUInt8];  }
table MultiInt16Column  { value: [MultiInt16];  }
table MultiUInt16Column { value: [MultiUInt16]; }
table MultiInt32Column  { value: [MultiInt32];  }
table MultiUInt32Column { value: [MultiUInt32]; }
table MultiInt64Column  { value: [MultiInt64];  }
table MultiUInt64Column { value: [MultiUInt64]; }
table MultiFloatColumn  { value: [MultiFloat];  }
table MultiDoubleColumn { value: [MultiDouble]; }
table MultiStringColumn { value: [MultiString]; }

// 列のデータ型
union ColumnType {
      Int8Column,
      Int16Column,
      Int32Column,
      Int64Column,
      UInt8Column,
      UInt16Column,
      UInt32Column,
      UInt64Column,
      FloatColumn,
      DoubleColumn,
      StringColumn,
      MultiInt8Column,
      MultiInt16Column,
      MultiInt32Column,
      MultiInt64Column,
      MultiUInt8Column,
      MultiUInt16Column,
      MultiUInt32Column,
      MultiUInt64Column,
      MultiFloatColumn,
      MultiDoubleColumn,
      MultiStringColumn,
      TsdbDpsColumn,
}

table Column {
      name: string;
      value: ColumnType;
}

table TwoDimTable {
      rowCount: uint (id:0);
      columns: [Column] (id:1);
}

TsdbColumn.fbs

namespace isearch.fbs;

struct TsdbDataPoint {
      ts: int64 (id:0);
      value: double (id:1);
}
table TsdbDataPointSeries { points: [TsdbDataPoint]; }
table TsdbDpsColumn { value : [TsdbDataPointSeries]; }

注記

column_typemulti_ プレフィックスは、複数値型を示します。たとえば、 multi_char は複数値の文字列型です。