В настоящее время я использую версию druid-Incubating-0.16.0. Как указано в https://druid.apache.org/docs/latest/tutorials/tutorial-update-data.html, мы можем использовать объединение пожарных шлангов для обновления и объединения данных для источника данных.
Шаг: 1 Я использую те же образцы данных с исходной структурой, что и
┌──────────────────────────┬──────────┬───────┬────────┐
│ __time │ animal │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T01:01:00.000Z │ tiger │ 1 │ 100 │
│ 2018-01-01T03:01:00.000Z │ aardvark │ 1 │ 42 │
│ 2018-01-01T03:01:00.000Z │ giraffe │ 1 │ 14124 │
└──────────────────────────┴──────────┴───────┴────────┘
Шаг 2. Я обновил данные для тигра с помощью {"timestamp": "2018-01-01T01: 01: 35Z", "animal": "tiger", "number": 30} с appendToExisting = false и rollUp = true и нашел результат
┌──────────────────────────┬──────────┬───────┬────────┐
│ __time │ animal │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T01:01:00.000Z │ tiger │ 2 │ 130 │
│ 2018-01-01T03:01:00.000Z │ aardvark │ 1 │ 42 │
│ 2018-01-01T03:01:00.000Z │ giraffe │ 1 │ 14124 │
└──────────────────────────┴──────────┴───────┴────────┘
Шаг 3. Теперь я обновляю жирафа с помощью {"timestamp": "2018-01-01T03: 01: 35Z", "animal": "giraffe", "number": 30} с appendToExisting = false и rollUp = true и получаю следующий результат
┌──────────────────────────┬──────────┬───────┬────────┐
│ __time │ animal │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T01:01:00.000Z │ tiger │ 1 │ 130 │
│ 2018-01-01T03:01:00.000Z │ aardvark │ 1 │ 42 │
│ 2018-01-01T03:01:00.000Z │ giraffe │ 2 │ 14154 │
└──────────────────────────┴──────────┴───────┴────────┘
Я сомневаюсь, что на шаге 3 количество тигров уменьшается на 1, но я думаю, что его не следует изменять, поскольку на шаге 3 нет изменений для тигра, а также нет изменения номера
FYI, count и number - это metricSpec и count и longSum соответственно. Просьба уточнить.
при использовании шланга ingestSegment с исходными данными типа
┌──────────────────────────┬──────────┬───────┬────────┐
│ __time │ animal │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T00:00:00.000Z │ aardvark │ 1 │ 9999 │
│ 2018-01-01T00:00:00.000Z │ bear │ 1 │ 111 │
│ 2018-01-01T00:00:00.000Z │ lion │ 2 │ 200 │
└──────────────────────────┴──────────┴───────┴────────┘
при добавлении новых данных {"timestamp": "2018-01-01T03: 01: 35Z", "animal": "giraffe", "number": 30} с appendToExisting = true, я получаю
┌──────────────────────────┬──────────┬───────┬────────┐
│ __time │ animal │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T00:00:00.000Z │ aardvark │ 1 │ 9999 │
│ 2018-01-01T00:00:00.000Z │ bear │ 1 │ 111 │
│ 2018-01-01T00:00:00.000Z │ lion │ 2 │ 200 │
│ 2018-01-01T00:00:00.000Z │ aardvark │ 1 │ 9999 │
│ 2018-01-01T00:00:00.000Z │ bear │ 1 │ 111 │
│ 2018-01-01T00:00:00.000Z │ giraffe │ 1 │ 30 │
│ 2018-01-01T00:00:00.000Z │ lion │ 1 │ 200 │
└──────────────────────────┴──────────┴───────┴────────┘
это правильный и ожидаемый результат? почему сворачивания не произошло?