通过 HTTP 进行查询
This commit is contained in:
parent
f9b2199b8f
commit
3377d145fd
|
@ -181,16 +181,15 @@ Retrieved 10 rows in 0.06s.
|
||||||
|
|
||||||
### Query SQL over HTTP
|
### Query SQL over HTTP
|
||||||
|
|
||||||
|
你可以通过 HTTP 协议将你的查询直接提交给 Druid Broker 进行处理。
|
||||||
|
|
||||||
You can submit queries directly to the Druid Broker over HTTP.
|
本教程中有关将 SQL 转换为 JSON 的脚本保存在 `quickstart/tutorial/wikipedia-top-pages-sql.json` 文件中,让我们将上面的查询提交给 Druid Broker 进行处理:
|
||||||
|
|
||||||
The tutorial package includes an example file that contains the SQL query shown above at `quickstart/tutorial/wikipedia-top-pages-sql.json`. Let's submit that query to the Druid Broker:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/tutorial/wikipedia-top-pages-sql.json http://localhost:8888/druid/v2/sql
|
curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/tutorial/wikipedia-top-pages-sql.json http://localhost:8888/druid/v2/sql
|
||||||
```
|
```
|
||||||
|
|
||||||
The following results should be returned:
|
下面的结构将会显示查询执行后的返回结果:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
[
|
[
|
||||||
|
@ -246,248 +245,6 @@ See the [Queries documentation](../querying/querying.md) for more information on
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 通过控制台查询SQL
|
|
||||||
|
|
||||||
您可以通过在控制台中进行上述查询:
|
|
||||||
|
|
||||||
![](img-3/tutorial-query-01.png)
|
|
||||||
|
|
||||||
控制台查询视图通过内联文档提供自动补全功能。
|
|
||||||
|
|
||||||
![](img-3/tutorial-query-02.png)
|
|
||||||
|
|
||||||
您还可以从 `...` 选项菜单中配置要与查询一起发送的其他上下文标志。
|
|
||||||
|
|
||||||
请注意,控制台将(默认情况下)使用带Limit的SQL查询,以便可以完成诸如`SELECT * FROM wikipedia`之类的查询,您可以通过 `Smart query limit` 切换关闭此行为。
|
|
||||||
|
|
||||||
![](img-3/tutorial-query-03.png)
|
|
||||||
|
|
||||||
查询视图提供了可以为您编写和修改查询的上下文操作。
|
|
||||||
|
|
||||||
#### 通过dsql查询SQL
|
|
||||||
|
|
||||||
为方便起见,Druid软件包中包括了一个SQL命令行客户端,位于Druid根目录中的 `bin/dsql`
|
|
||||||
|
|
||||||
运行 `bin/dsql`, 可以看到如下:
|
|
||||||
```json
|
|
||||||
Welcome to dsql, the command-line client for Druid SQL.
|
|
||||||
Type "\h" for help.
|
|
||||||
dsql>
|
|
||||||
```
|
|
||||||
将SQl粘贴到 `dsql` 中提交查询:
|
|
||||||
|
|
||||||
```json
|
|
||||||
dsql> SELECT page, COUNT(*) AS Edits FROM wikipedia WHERE "__time" BETWEEN TIMESTAMP '2015-09-12 00:00:00' AND TIMESTAMP '2015-09-13 00:00:00' GROUP BY page ORDER BY Edits DESC LIMIT 10;
|
|
||||||
┌──────────────────────────────────────────────────────────┬───────┐
|
|
||||||
│ page │ Edits │
|
|
||||||
├──────────────────────────────────────────────────────────┼───────┤
|
|
||||||
│ Wikipedia:Vandalismusmeldung │ 33 │
|
|
||||||
│ User:Cyde/List of candidates for speedy deletion/Subpage │ 28 │
|
|
||||||
│ Jeremy Corbyn │ 27 │
|
|
||||||
│ Wikipedia:Administrators' noticeboard/Incidents │ 21 │
|
|
||||||
│ Flavia Pennetta │ 20 │
|
|
||||||
│ Total Drama Presents: The Ridonculous Race │ 18 │
|
|
||||||
│ User talk:Dudeperson176123 │ 18 │
|
|
||||||
│ Wikipédia:Le Bistro/12 septembre 2015 │ 18 │
|
|
||||||
│ Wikipedia:In the news/Candidates │ 17 │
|
|
||||||
│ Wikipedia:Requests for page protection │ 17 │
|
|
||||||
└──────────────────────────────────────────────────────────┴───────┘
|
|
||||||
Retrieved 10 rows in 0.06s.
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 通过HTTP查询SQL
|
|
||||||
|
|
||||||
SQL查询作为JSON通过HTTP提交
|
|
||||||
|
|
||||||
教程包括一个示例文件, 该文件`quickstart/tutorial/wikipedia-top-pages-sql.json`包含上面显示的SQL查询, 我们将该查询提交给Druid Broker。
|
|
||||||
|
|
||||||
```json
|
|
||||||
curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/tutorial/wikipedia-top-pages-sql.json http://localhost:8888/druid/v2/sql
|
|
||||||
```
|
|
||||||
结果返回如下:
|
|
||||||
|
|
||||||
```json
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"page": "Wikipedia:Vandalismusmeldung",
|
|
||||||
"Edits": 33
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"page": "User:Cyde/List of candidates for speedy deletion/Subpage",
|
|
||||||
"Edits": 28
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"page": "Jeremy Corbyn",
|
|
||||||
"Edits": 27
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"page": "Wikipedia:Administrators' noticeboard/Incidents",
|
|
||||||
"Edits": 21
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"page": "Flavia Pennetta",
|
|
||||||
"Edits": 20
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"page": "Total Drama Presents: The Ridonculous Race",
|
|
||||||
"Edits": 18
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"page": "User talk:Dudeperson176123",
|
|
||||||
"Edits": 18
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"page": "Wikipédia:Le Bistro/12 septembre 2015",
|
|
||||||
"Edits": 18
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"page": "Wikipedia:In the news/Candidates",
|
|
||||||
"Edits": 17
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"page": "Wikipedia:Requests for page protection",
|
|
||||||
"Edits": 17
|
|
||||||
}
|
|
||||||
]
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 更多Druid SQL示例
|
|
||||||
|
|
||||||
这是一组可尝试的查询:
|
|
||||||
|
|
||||||
**时间查询**
|
|
||||||
|
|
||||||
```json
|
|
||||||
SELECT FLOOR(__time to HOUR) AS HourTime, SUM(deleted) AS LinesDeleted
|
|
||||||
FROM wikipedia WHERE "__time" BETWEEN TIMESTAMP '2015-09-12 00:00:00' AND TIMESTAMP '2015-09-13 00:00:00'
|
|
||||||
GROUP BY 1
|
|
||||||
```
|
|
||||||
|
|
||||||
![](img-3/tutorial-query-03.png)
|
|
||||||
|
|
||||||
**聚合查询**
|
|
||||||
|
|
||||||
```json
|
|
||||||
SELECT channel, page, SUM(added)
|
|
||||||
FROM wikipedia WHERE "__time" BETWEEN TIMESTAMP '2015-09-12 00:00:00' AND TIMESTAMP '2015-09-13 00:00:00'
|
|
||||||
GROUP BY channel, page
|
|
||||||
ORDER BY SUM(added) DESC
|
|
||||||
```
|
|
||||||
|
|
||||||
![](img-3/tutorial-query-04.png)
|
|
||||||
|
|
||||||
**查询原始数据**
|
|
||||||
|
|
||||||
```json
|
|
||||||
SELECT user, page
|
|
||||||
FROM wikipedia WHERE "__time" BETWEEN TIMESTAMP '2015-09-12 02:00:00' AND TIMESTAMP '2015-09-12 03:00:00'
|
|
||||||
LIMIT 5
|
|
||||||
```
|
|
||||||
|
|
||||||
![](img-3/tutorial-query-05.png)
|
|
||||||
|
|
||||||
#### SQL查询计划
|
|
||||||
|
|
||||||
Druid SQL能够解释给定查询的查询计划, 在控制台中,可以通过 `...` 按钮访问此功能。
|
|
||||||
|
|
||||||
![](img-3/tutorial-query-06.png)
|
|
||||||
|
|
||||||
如果您以其他方式查询,则可以通过在Druid SQL查询之前添加 `EXPLAIN PLAN FOR` 来获得查询计划。
|
|
||||||
|
|
||||||
使用上边的一个示例:
|
|
||||||
|
|
||||||
`EXPLAIN PLAN FOR SELECT page, COUNT(*) AS Edits FROM wikipedia WHERE "__time" BETWEEN TIMESTAMP '2015-09-12 00:00:00' AND TIMESTAMP '2015-09-13 00:00:00' GROUP BY page ORDER BY Edits DESC LIMIT 10;`
|
|
||||||
|
|
||||||
```json
|
|
||||||
dsql> EXPLAIN PLAN FOR SELECT page, COUNT(*) AS Edits FROM wikipedia WHERE "__time" BETWEEN TIMESTAMP '2015-09-12 00:00:00' AND TIMESTAMP '2015-09-13 00:00:00' GROUP BY page ORDER BY Edits DESC LIMIT 10;
|
|
||||||
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
||||||
│ PLAN │
|
|
||||||
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
|
||||||
│ DruidQueryRel(query=[{"queryType":"topN","dataSource":{"type":"table","name":"wikipedia"},"virtualColumns":[],"dimension":{"type":"default","dimension":"page","outputName":"d0","outputType":"STRING"},"metric":{"type":"numeric","metric":"a0"},"threshold":10,"intervals":{"type":"intervals","intervals":["2015-09-12T00:00:00.000Z/2015-09-13T00:00:00.001Z"]},"filter":null,"granularity":{"type":"all"},"aggregations":[{"type":"count","name":"a0"}],"postAggregations":[],"context":{},"descending":false}], signature=[{d0:STRING, a0:LONG}]) │
|
|
||||||
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
||||||
Retrieved 1 row in 0.03s.
|
|
||||||
```
|
|
||||||
|
|
||||||
### 原生JSON查询
|
|
||||||
|
|
||||||
Druid的原生查询格式以JSON表示。
|
|
||||||
|
|
||||||
#### 通过控制台原生查询
|
|
||||||
|
|
||||||
您可以从控制台的"Query"视图发出原生Druid查询。
|
|
||||||
|
|
||||||
这是一个查询,可检索2015-09-12上具有最多页面编辑量的10个wikipedia页面。
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"queryType" : "topN",
|
|
||||||
"dataSource" : "wikipedia",
|
|
||||||
"intervals" : ["2015-09-12/2015-09-13"],
|
|
||||||
"granularity" : "all",
|
|
||||||
"dimension" : "page",
|
|
||||||
"metric" : "count",
|
|
||||||
"threshold" : 10,
|
|
||||||
"aggregations" : [
|
|
||||||
{
|
|
||||||
"type" : "count",
|
|
||||||
"name" : "count"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
只需将其粘贴到控制台即可将编辑器切换到JSON模式。
|
|
||||||
|
|
||||||
![](img-3/tutorial-query-07.png)
|
|
||||||
|
|
||||||
#### 通过HTTP原生查询
|
|
||||||
|
|
||||||
我们在 `quickstart/tutorial/wikipedia-top-pages.json` 文件中包括了一个示例原生TopN查询。
|
|
||||||
|
|
||||||
提交该查询到Druid:
|
|
||||||
|
|
||||||
```json
|
|
||||||
curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/tutorial/wikipedia-top-pages.json http://localhost:8888/druid/v2?pretty
|
|
||||||
```
|
|
||||||
|
|
||||||
您可以看到如下的查询结果:
|
|
||||||
|
|
||||||
```json
|
|
||||||
[ {
|
|
||||||
"timestamp" : "2015-09-12T00:46:58.771Z",
|
|
||||||
"result" : [ {
|
|
||||||
"count" : 33,
|
|
||||||
"page" : "Wikipedia:Vandalismusmeldung"
|
|
||||||
}, {
|
|
||||||
"count" : 28,
|
|
||||||
"page" : "User:Cyde/List of candidates for speedy deletion/Subpage"
|
|
||||||
}, {
|
|
||||||
"count" : 27,
|
|
||||||
"page" : "Jeremy Corbyn"
|
|
||||||
}, {
|
|
||||||
"count" : 21,
|
|
||||||
"page" : "Wikipedia:Administrators' noticeboard/Incidents"
|
|
||||||
}, {
|
|
||||||
"count" : 20,
|
|
||||||
"page" : "Flavia Pennetta"
|
|
||||||
}, {
|
|
||||||
"count" : 18,
|
|
||||||
"page" : "Total Drama Presents: The Ridonculous Race"
|
|
||||||
}, {
|
|
||||||
"count" : 18,
|
|
||||||
"page" : "User talk:Dudeperson176123"
|
|
||||||
}, {
|
|
||||||
"count" : 18,
|
|
||||||
"page" : "Wikipédia:Le Bistro/12 septembre 2015"
|
|
||||||
}, {
|
|
||||||
"count" : 17,
|
|
||||||
"page" : "Wikipedia:In the news/Candidates"
|
|
||||||
}, {
|
|
||||||
"count" : 17,
|
|
||||||
"page" : "Wikipedia:Requests for page protection"
|
|
||||||
} ]
|
|
||||||
} ]
|
|
||||||
```
|
|
||||||
|
|
||||||
### 进一步阅读
|
### 进一步阅读
|
||||||
|
|
||||||
[查询文档](../querying/makeNativeQueries.md)有更多关于Druid原生JSON查询的信息
|
[查询文档](../querying/makeNativeQueries.md)有更多关于Druid原生JSON查询的信息
|
||||||
|
|
Loading…
Reference in New Issue