#azure-data-factory-2
Вопрос:
Я работаю с вызовом API REST POST и ADFv2, пытаясь заставить работать разбиение на страницы. Я использую вызов API поиска контактов HubSpot V3 https://developers.hubspot.com/docs/api/crm/contacts который использует параметр, вызываемый after
в теле запроса, чтобы сообщить серверу, какую страницу данных необходимо получить.
Я не уверен, как настроить следующее в ADFv2 Действие копирования данных в источнике:
- Тело запроса — параметр «после» должен ли это быть динамический контент?
- Правила разбиения на страницы — Какими должны быть Имя и значение?
Я думаю, что ответ кроется в этих двух полях, но я даже не могу привести в действие правила разбиения на страницы. Я продолжаю получать эту ошибку Failure happened on 'Source' side. ErrorCode=UserErrorInvalidPaginationRule,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Invalid PaginationRule, RuleKey=after, RuleValue=$.page.next.after,Source=Microsoft.DataTransfer.ClientLibrary,'
Для этого кода
"name": "For StackOverflow",
"properties": {
"activities": [
{
"name": "Copy HubSpot Contact Data to Staging table",
"description": "Using manual mappingsnUses Rest V3 API from HubSpot",
"type": "Copy",
"dependsOn": [],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"source": {
"type": "RestSource",
"httpRequestTimeout": "00:01:40",
"requestInterval": "00.00:00:00.010",
"requestMethod": "POST",
"requestBody": {
"value": "@concat('{n "filterGroups":[n {n "filters":[n {n "propertyName": "lastmodifieddate",n "operator": "GTE",n "value": "', pipeline().parameters.lastmodifieddate,'"n }n ]n }n ],n"properties": [ "firstname","lastname"],n "limit": 100,n "after": 0n }')",
"type": "Expression"
},
"additionalHeaders": {
"Content-Type": "application/json"
},
"paginationRules": {
"after": "$.page.next.after"
}
},
"sink": {
"type": "SqlMISink",
"preCopyScript": "IF OBJECT_ID(N'ELT.Testing', N'U') IS NOT NULL BEGIN TRUNCATE TABLE [ELT].[Testing]; END",
"tableOption": "autoCreate"
},
"enableStaging": false,
"translator": {
"type": "TabularTranslator",
"mappings": [
{
"source": {
"path": "['id']"
},
"sink": {
"name": "id",
"type": "Int32"
}
},
{
"source": {
"path": "['properties']['firstname']"
},
"sink": {
"name": "firstname",
"type": "String"
}
},
{
"source": {
"path": "['properties']['lastmodifieddate']"
},
"sink": {
"name": "lastmodifieddate",
"type": "DateTime"
}
},
{
"source": {
"path": "['properties']['lastname']"
},
"sink": {
"name": "lastname",
"type": "String"
}
}
],
"collectionReference": "$['results']"
}
},
"inputs": [
{
"referenceName": "HubSpot_Contact_Search_REST_API_V3",
"type": "DatasetReference",
"parameters": {
"hapikey": {
"value": "@pipeline().parameters.hapikey",
"type": "Expression"
}
}
}
],
"outputs": [
{
"referenceName": "jcl_bi_mi_JCBIFactory_db",
"type": "DatasetReference",
"parameters": {
"schema": "ELT",
"tableName": "Testing"
}
}
]
}
],
"parameters": {
"hapikey": {
"type": "string",
"defaultValue": "demo"
},
"lastmodifieddate": {
"type": "string",
"defaultValue": "1633016608963"
}
},
"folder": {
"name": "HubSpot"
},
"annotations": []
}
}```