【发布时间】:2021-04-07 18:00:14
【问题描述】:
在开发将使用 Elasticsearch 作为来源的管道期间,我遇到了与分页相关的问题。我正在使用 SQL Elasticsearch API。基本上,我已经开始在邮递员中提出请求并且效果很好。请求正文如下所示:
{
"query":"SELECT Id,name,ownership,modifiedDate FROM \"core\" ORDER BY Id",
"fetch_size": 20,
"cursor" : ""
}
在响应正文中第一次运行后,它包含指向下一页的光标字符串。如果在邮递员中我发送请求并提供上一个请求中的光标值,它将返回第二页的数据,依此类推。我正在尝试在 Azure 数据工厂中存档相同的结果。为此,我使用了复制活动,它存储对 Azure blob 的响应。源设置如下。 copy activity source configuration
这是身体的表达
{
"query": "SELECT Id,name,ownership,modifiedDate FROM \"@{variables('TableName')}\" WHERE ORDER BY Id","fetch_size": @{variables('Rows')}, "cursor": ""
}
我不知道如何正确设置分页规则。管道正常工作,但仅适用于第一个请求。我尝试设置 Headers.cursor 和表达式 $.cursor 但此设置会导致无限循环并且管道因 Elasticsearch 限制而失败。
我也尝试阅读https://docs.microsoft.com/en-us/azure/data-factory/connector-rest#pagination-support 的文档,但它似乎在使用示例方面非常有限且难以理解。
光标响应如下:
{
"columns": [
{
"name": "companyId",
"type": "integer"
},
{
"name": "name",
"type": "text"
},
{
"name": "ownership",
"type": "keyword"
},
{
"name": "modifiedDate",
"type": "datetime"
}
],
"rows": [
[
2,
"mic Inc.",
"manufacture",
"2021-03-31T12:57:51.000Z"
]
],
"cursor": "g/WuAwFaAXNoRG5GMVpYSjVWR2hsYmtabGRHTm9BZ0FBQUFBRUp6VGxGbUpIZWxWaVMzcGhVWEJITUhkbmJsRlhlUzFtWjNjQUFBQUFCQ2MwNWhaaVIzcFZZa3Q2WVZGd1J6QjNaMjVSVjNrdFptZDP/////DwQBZgljb21wYW55SWQBCWNvbXBhbnlJZAEHaW50ZWdlcgAAAAFmBG5hbWUBBG5hbWUBBHRleHQAAAABZglvd25lcnNoaXABCW93bmVyc2hpcAEHa2V5d29yZAEAAAFmDG1vZGlmaWVkRGF0ZQEMbW9kaWZpZWREYXRlAQhkYXRldGltZQEAAAEP"
}
【问题讨论】:
-
服务器返回的响应是包含下一页的绝对地址还是相对地址?微软官方教程是直接发送下一页请求的绝对地址。
-
不,很遗憾,响应只包含光标。如果我在请求正文中传递此光标,则响应将包含来自下一页的数据。
-
光标是否包含下一页的信息?你能在光标上显示一些 sn-ps 吗?
-
当然。对不起。我会把它添加到问题中
标签: elasticsearch azure-data-factory rest