Druid入门指南 数据更新


本教程将演示如何对已有数据进行更新操作。同时将演示覆盖(Overwrite)和追加(Append)这两个相关操作。

1 数据更新——覆盖

1.1 加载初始数据

本节教程使用的任务摄取规范位于quickstart/tutorial/updates-init-index.json,本规范从quickstart/tutorial/updates-data.json输入文件创建一个名称为updates-tutorial的数据源

提交任务:

bin/post-index-task --file quickstart/tutorial/updates-init-index.json --url http://localhost:8081

我们有三个包含“动物”维度和“数字”指标的初始行:

dsql> select * from "updates-tutorial";
┌──────────────────────────┬──────────┬───────┬────────┐
│ __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 │
└──────────────────────────┴──────────┴───────┴────────┘
Retrieved 3 rows in 1.42s.

1.2 覆盖初始数据

为了覆盖这些数据,我们可以在相同的时间间隔内提交另一个任务,但是使用不同的输入数据。

quickstart/tutorial/updates-overwrite-index.json规范将会对updates-tutorial数据进行数据重写。

注意:此任务从quickstart/tutorial/updates-data2.json读取输入,appendToExisting设置为false(表示这是一个覆盖)

提交任务:

bin/post-index-task --file quickstart/tutorial/updates-overwrite-index.json --url http://localhost:8081

当Druid从这个覆盖任务加载完新的段时,“tiger”行现在有了值“lion”,“aardvark”行有了不同的编号,“giraffe”行已经被替换。更改可能需要几分钟才能生效:

dsql> select * from "updates-tutorial";
┌──────────────────────────┬──────────┬───────┬────────┐
│ __time                   │ animal   │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T01:01:00.000Z │ lion     │     1 │    100 │
│ 2018-01-01T03:01:00.000Z │ aardvark │     1 │   9999 │
│ 2018-01-01T04:01:00.000Z │ bear     │     1 │    111 │
└──────────────────────────┴──────────┴───────┴────────┘
Retrieved 3 rows in 0.02s.

2 数据更新——合并覆盖

现在我们尝试在updates-tutorial数据源追加一些新的数据,我们将从quickstart/tutorial/updates-data3.json增加新的数据

quickstart/tutorial/updates-append-index.json任务规范配置为从现有的updates-tutorial数据源和quickstart/tutorial/updates-data3.json文件读取数据,该任务将组合来自两个输入源的数据,然后用新的组合数据覆盖原始数据。

提交任务:

bin/post-index-task --file quickstart/tutorial/updates-append-index.json --url http://localhost:8081

当Druid完成从这个覆盖任务加载新段时,新行将被添加到数据源中。请注意,“Lion”行发生了roll up:

dsql> select * from "updates-tutorial";
┌──────────────────────────┬──────────┬───────┬────────┐
│ __time                   │ animal   │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T01:01:00.000Z │ lion     │     2 │    400 │
│ 2018-01-01T03:01:00.000Z │ aardvark │     1 │   9999 │
│ 2018-01-01T04:01:00.000Z │ bear     │     1 │    111 │
│ 2018-01-01T05:01:00.000Z │ mongoose │     1 │    737 │
│ 2018-01-01T06:01:00.000Z │ snake    │     1 │   1234 │
│ 2018-01-01T07:01:00.000Z │ octopus  │     1 │    115 │
└──────────────────────────┴──────────┴───────┴────────┘
Retrieved 6 rows in 0.02s.

3 数据更新——追加数据

现在尝试另一种追加数据的方式

quickstart/tutorial/updates-append-index2.json任务规范从quickstart/tutorial/updates-data4.json文件读取数据,然后追加到updates-tutorial数据源。注意到在规范中appendToExisting设置为true

提交任务:

bin/post-index-task --file quickstart/tutorial/updates-append-index2.json --url http://localhost:8081

加载新数据后,我们可以看到“octopus”后面额外的两行。请注意,编号为222的新“bear”行尚未与现有的bear-111行合并,因为新数据保存在单独的段中。

dsql> select * from "updates-tutorial";
┌──────────────────────────┬──────────┬───────┬────────┐
│ __time                   │ animal   │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T01:01:00.000Z │ lion     │     2 │    400 │
│ 2018-01-01T03:01:00.000Z │ aardvark │     1 │   9999 │
│ 2018-01-01T04:01:00.000Z │ bear     │     1 │    111 │
│ 2018-01-01T05:01:00.000Z │ mongoose │     1 │    737 │
│ 2018-01-01T06:01:00.000Z │ snake    │     1 │   1234 │
│ 2018-01-01T07:01:00.000Z │ octopus  │     1 │    115 │
│ 2018-01-01T04:01:00.000Z │ bear     │     1 │    222 │
│ 2018-01-01T09:01:00.000Z │ falcon   │     1 │   1241 │
└──────────────────────────┴──────────┴───────┴────────┘
Retrieved 8 rows in 0.02s.

当我们执行一个GroupBy查询而非Select *,我们看到“beer”行将在查询时聚合在一起:

dsql> select __time, animal, SUM("count"), SUM("number") from "updates-tutorial" group by __time, animal;
┌──────────────────────────┬──────────┬────────┬────────┐
│ __time                   │ animal   │ EXPR$2 │ EXPR$3 │
├──────────────────────────┼──────────┼────────┼────────┤
│ 2018-01-01T01:01:00.000Z │ lion     │      2 │    400 │
│ 2018-01-01T03:01:00.000Z │ aardvark │      1 │   9999 │
│ 2018-01-01T04:01:00.000Z │ bear     │      2 │    333 │
│ 2018-01-01T05:01:00.000Z │ mongoose │      1 │    737 │
│ 2018-01-01T06:01:00.000Z │ snake    │      1 │   1234 │
│ 2018-01-01T07:01:00.000Z │ octopus  │      1 │    115 │
│ 2018-01-01T09:01:00.000Z │ falcon   │      1 │   1241 │
└──────────────────────────┴──────────┴────────┴────────┘
Retrieved 7 rows in 0.23s.