InfluxDB:将具有相同时间戳的行分组

时间:2018-12-04 07:08:19

标签: influxdb influxql

假定具有以下数据记录的数据库:

{
    "Parameters": {
      "AccessControlAllowOrigin": {
        "Type": "String",
        "Default": "*"
      }
    },
    "Resources": {
      "ConfigApi": {
        "Type": "AWS::ApiGateway::RestApi",
        "Properties": {
          "Body": {
            "swagger": "2.0",
            "tags": [
              {
                "name": "users",
                "description": "secure user calls"
              }
            ],
            "schemes": [
              "https"
            ],
            "paths": {
              "/user/{uid}/cart": {
                "parameters": [
                  {
                    "name": "uid",
                    "in": "path",
                    "description": "user id",
                    "required": true,
                    "type": "string",
                    "format": "uuid"
                  }
                ],
                "put": {
                  "tags": [
                    "users",
                    "cart"
                  ],
                  "summary": "When called, this endpoint completes the user cart and puts their cart into their library",
                  "operationId": "completeusercart",
                  "description": "Completes the user cart\n",
                  "produces": [
                    "application/json"
                  ],
                  "responses": {
                    "200": {
                      "description": "the user identifier",
                      "headers": {
                        "Access-Control-Allow-Origin": {
                          "type": "string"
                        },
                        "Access-Control-Allow-Headers": {
                          "type": "string"
                        }
                      },
                      "schema": {
                        "type": "string"
                      }
                    }
                  },
                  "x-amazon-apigateway-integration": {
                    "uri": "http://${stageVariables.httpHost}/user/{uid}/cart",
                    "contentHandling": "CONVERT_TO_TEXT",
                    "timeoutInMillis": 29000,
                    "connectionType": "INTERNET",
                    "httpMethod": "PUT",
                    "passthroughBehavior": "WHEN_NO_MATCH",
                    "type": "HTTP_PROXY",
                    "requestParameters": {
                      "integration.request.path.uid" : "method.request.path.uid"
                    },
                    "responses": {
                      "default": {
                        "responseModels": {
                          "application/json": "Empty"
                        },
                        "responseParameters": {
                          "method.response.header.Access-Control-Allow-Origin": {
                            "Fn::Sub": "'${AccessControlAllowOrigin}'"
                          },
                          "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
                        },
                        "statusCode": "200"
                      }
                    }
                  }
                },
                "options": {
                  "consumes": [
                    "application/json"
                  ],
                  "produces": [
                    "application/json"
                  ],
                  "responses": {
                    "200": {
                      "description": "200 response",
                      "schema": {
                        "$ref": "#/definitions/Empty"
                      },
                      "headers": {
                        "Access-Control-Allow-Origin": {
                          "type": "string"
                        },
                        "Access-Control-Allow-Methods": {
                          "type": "string"
                        },
                        "Access-Control-Allow-Headers": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "x-amazon-apigateway-integration": {
                    "httpMethod": "OPTIONS",
                    "passthroughBehavior": "WHEN_NO_MATCH",
                    "requestTemplates": {
                      "application/json": "{\"statusCode\": 200}"
                    },
                    "type": "MOCK",
                    "timeoutInMillis": 29000,
                    "responses": {
                      "2\\d{2}": {
                        "responseParameters": {
                          "method.response.header.Access-Control-Allow-Origin": {
                            "Fn::Sub": "'${AccessControlAllowOrigin}'"
                          },
                          "method.response.header.Access-Control-Allow-Methods": "'PUT,OPTIONS'",
                          "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
                        },
                        "statusCode": "200"
                      },
                      "4\\d{2}": {
                        "statusCode": "403"
                      },
                      "5\\d{2}": {
                        "statusCode": "403"
                      }
                    }
                  }
                }
              }
            },
            "definitions": {
              "Empty": {
                "type": "object",
                "title": "Empty Schema"
              }
            }
          }
        }
      },
      "ConfigApiStage": {
        "Type": "AWS::ApiGateway::Stage",
        "Properties": {
          "DeploymentId": {
            "Ref": "ApiDeployment"
          },
          "MethodSettings": [
            {
              "DataTraceEnabled": true,
              "HttpMethod": "*",
              "LoggingLevel": "INFO",
              "ResourcePath": "/*"
            }
          ],
          "RestApiId": {
            "Ref": "ConfigApi"
          },
          "Variables": {
            "httpHost": "0.0.0.0"
          },

          "StageName": "LATEST"
        }
      },
      "ApiDeployment": {
        "Type": "AWS::ApiGateway::Deployment",
        "Properties": {
          "RestApiId": {
            "Ref": "ConfigApi"
          },
          "StageName": "DummyStage"
        }
      }
    }
}

有一个称为2018-04-12T00:00:00Z value=1000 [series=distance] 2018-04-12T00:00:00Z value=10 [series=signal_quality] 2018-04-12T00:01:00Z value=1100 [series=distance] 2018-04-12T00:01:00Z value=0 [series=signal_quality] 的字段。方括号表示标记(省略了其他标记)。如您所见,数据是在不同数据记录中捕获的,而不是在相同记录中使用多个字段。

基于上述结构,如何查询经过信号质量过滤的距离的时间序列?目标是仅在信号质量高于固定阈值(例如5)。

1 个答案:

答案 0 :(得分:2)

“鉴于上述结构”,在普通的InfluxDB中无法做到这一点。

请记住-尽管查询语言看起来很熟悉,但Influx并不是关系数据库的一部分。

再次给出给定的结构-如前所述,您可以继续使用Kapacitor。

但是我强烈建议您重新考虑结构,如果可以的话,如果您能够控制度量标准的收集方式。

如果这不是一种选择,那就是这样:方法是:在Kapacitor中旋转一个简单的作业,该作业将根据时间点(check this out for how将两个点合并为一个,然后将其放入新的度量中。

数据点如下所示:

DistanceQualityTogether,tag1=if,tag2=you,tag2=need,tag4=em distance=1000,signal_quality=10 2018-04-12T00:00:00Z

其余的都忽略了这种测量。

但是同样,如果您可以配置指标以这种方式发送-最好这样做。