api/proto/banyandb/model/v1/query.proto (107 lines of code) (raw):

// Licensed to Apache Software Foundation (ASF) under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Apache Software Foundation (ASF) licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. syntax = "proto3"; package banyandb.model.v1; import "banyandb/model/v1/common.proto"; import "google/protobuf/timestamp.proto"; option go_package = "github.com/apache/skywalking-banyandb/api/proto/banyandb/model/v1"; option java_package = "org.apache.skywalking.banyandb.model.v1"; // Pair is the building block of a record which is equivalent to a key-value pair. // In the context of Trace, it could be metadata of a trace such as service_name, service_instance, etc. // Besides, other tags are organized in key-value pair in the underlying storage layer. // One should notice that the values can be a multi-value. message Tag { string key = 1; TagValue value = 2; } message TagFamily { string name = 1; repeated Tag tags = 2; } // Condition consists of the query condition with a single binary operator to be imposed // For 1:1 BinaryOp, values in condition must be an array with length = 1, // while for 1:N BinaryOp, values can be an array with length >= 1. message Condition { // BinaryOp specifies the operation imposed to the given query condition // For EQ, NE, LT, GT, LE and GE, only one operand should be given, i.e. one-to-one relationship. // HAVING and NOT_HAVING allow multi-value to be the operand such as array/vector, i.e. one-to-many relationship. // For example, "keyA" contains "valueA" **and** "valueB" // MATCH performances a full-text search if the tag is analyzed. // The string value applies to the same analyzer as the tag, but string array value does not. // Each item in a string array is seen as a token instead of a query expression. enum BinaryOp { BINARY_OP_UNSPECIFIED = 0; BINARY_OP_EQ = 1; BINARY_OP_NE = 2; BINARY_OP_LT = 3; BINARY_OP_GT = 4; BINARY_OP_LE = 5; BINARY_OP_GE = 6; BINARY_OP_HAVING = 7; BINARY_OP_NOT_HAVING = 8; BINARY_OP_IN = 9; BINARY_OP_NOT_IN = 10; BINARY_OP_MATCH = 11; } string name = 1; BinaryOp op = 2; TagValue value = 3; } // tag_families are indexed. message Criteria { oneof exp { LogicalExpression le = 1; Condition condition = 2; } } // LogicalExpression supports logical operation message LogicalExpression { enum LogicalOp { LOGICAL_OP_UNSPECIFIED = 0; LOGICAL_OP_AND = 1; LOGICAL_OP_OR = 2; } // op is a logical operation LogicalOp op = 1; Criteria left = 2; Criteria right = 3; } enum Sort { SORT_UNSPECIFIED = 0; SORT_DESC = 1; SORT_ASC = 2; } // QueryOrder means a Sort operation to be done for a given index rule. // The index_rule_name refers to the name of a index rule bound to the subject. message QueryOrder { string index_rule_name = 1; Sort sort = 2; } // TagProjection is used to select the names of keys to be returned. message TagProjection { message TagFamily { string name = 1; repeated string tags = 2; } repeated TagFamily tag_families = 1; } // TimeRange is a range query for uint64, // the range here follows left-inclusive and right-exclusive rule, i.e. [begin, end) if both edges exist message TimeRange { google.protobuf.Timestamp begin = 1; google.protobuf.Timestamp end = 2; }