Copiar e transformar dados de e para um ponto de extremidade REST usando o Azure Data Factory
APLICA-SE A: Azure Data Factory Azure Synapse Analytics
Dica
Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange desde movimentação de dados até ciência de dados, análise em tempo real, business intelligence e relatórios. Saiba como iniciar uma avaliação gratuita!
Este artigo descreve como usar a Atividade de Cópia no Azure Data Factory para copiar dados de e para um ponto de extremidade REST. O artigo baseia-se em Atividade de Cópia no Azure Data Factory, que apresenta uma visão geral da Atividade de Cópia.
As diferenças entre o conector REST, o conector HTTP e o conector de tabela da Web são:
- O conector REST oferece suporte especificamente à cópia de dados de APIs RESTful.
- O conector HTTP é genérico e recupera dados de qualquer ponto de extremidade HTTP, por exemplo, fazendo o download de um arquivo. Antes do conector REST, você pode ter usado o conector HTTP para copiar dados das APIs RESTful, que tem suporte mas é menos funcional em comparação ao conector REST.
- O conector da tabela da Web extrai o conteúdo da tabela de uma página da Web em HTML.
Funcionalidades com suporte
Há suporte para este conector do REST nas seguintes funcionalidades:
Funcionalidades com suporte | IR |
---|---|
Atividade de cópia (origem/coletor) | ① ② |
Fluxo de dados de mapeamento (origem/coletor) | ① |
① Runtime de integração do Azure ② Runtime de integração auto-hospedada
Para obter uma lista de armazenamentos de dados com suporte como origens/coletores, consulte Armazenamentos de dados com suporte.
Especificamente, esse conector REST genérico dá suporte para:
- Copiar dados de um ponto de extremidade REST usando os métodos GET ou POST e copiar dados para um ponto de extremidade REST usando os métodos POST, PUT ou PATCH.
- Copiar dados usando uma das seguintes autenticações: Anônimo, Básico, Entidade de Serviço, Credencial de Cliente OAuth2, Identidade Gerenciada Atribuída pelo Sistema e Identidade Gerenciada Atribuída pelo Usuário.
- Paginação no APIs REST.
- No caso do REST como origem, copiar a resposta JSON do REST como está ou analisá-la usando um mapeamento de esquema. Somente o conteúdo de resposta na JSON tem suporte.
Dica
Para testar uma solicitação para recuperação de dados antes de configurar o conector REST no Data Factory, saiba mais sobre a especificação da API para os requisitos de cabeçalho e corpo. É possível usar as ferramentas como o Visual Studio, o Invoke-RestMethod do PowerShell ou um navegador da Web para validar.
Pré-requisitos
Se o armazenamento de dados estiver localizado dentro de uma rede local, em uma rede virtual do Azure ou na Amazon Virtual Private Cloud, você precisará configurar um runtime de integração auto-hospedada para se conectar a ele.
Se o armazenamento de dados for um serviço de dados de nuvem gerenciado, você poderá usar o Azure Integration Runtime. Se o acesso for restrito aos IPs que estão aprovados nas regras de firewall, você poderá adicionar IPs do Azure Integration Runtime à lista de permissões.
Você também pode usar o recurso de runtime de integração da rede virtual gerenciada no Azure Data Factory para acessar a rede local sem instalar e configurar um runtime de integração auto-hospedada.
Para obter mais informações sobre os mecanismos de segurança de rede e as opções compatíveis com o Data Factory, consulte Estratégias de acesso a dados.
Introdução
Para executar a atividade de Cópia com um pipeline, será possível usar as ferramentas ou os SDKs abaixo:
- A ferramenta Copiar Dados
- O portal do Azure
- O SDK do .NET
- O SDK do Python
- PowerShell do Azure
- A API REST
- O modelo do Azure Resource Manager
Criar um serviço vinculado REST usando a interface do usuário
Use as etapas a seguir para criar um serviço vinculado ao REST na interface do usuário do portal do Microsoft Azure.
Navegue até a guia Gerenciar no workspace do Azure Data Factory ou do Synapse e selecione Serviços Vinculados. Depois, selecione Novo:
Pesquise por REST e selecione o conector REST.
Configure os detalhes do serviço, teste a conexão e crie o novo serviço vinculado.
Detalhes da configuração do conector
As seções a seguir fornecem detalhes sobre propriedades que você pode usar para definir entidades do Data Factory específicas do conector REST.
Propriedades do serviço vinculado
As seguintes propriedades são suportadas para o serviço vinculado REST:
Propriedade | Descrição | Obrigatório |
---|---|---|
type | A propriedade type deve ser definida como RestService. | Sim |
url | A URL base do serviço REST. | Sim |
enableServerCertificateValidation | Validar ou não o certificado TLS/SSL no lado do servidor ao se conectar ao ponto de extremidade. | Não (o padrão é verdadeiro) |
authenticationType | Tipo de autenticação usado para se conectar ao serviço REST. Os valores permitidos são Anônimo, Básico, AadServicePrincipal, OAuth2ClientCredential e ManagedServiceIdentity. Também é possível configurar cabeçalhos de autenticação na propriedade authHeaders . Consulte respectivamente as seções correspondentes abaixo em mais propriedades e exemplos. |
Sim |
authHeaders | Cabeçalhos de solicitação HTTP adicionais para autenticação. Por exemplo, para usar a autenticação de chave de API, você poderá selecionar o tipo de autenticação como “Anônimo” e especificar a chave de API no cabeçalho. |
Não |
connectVia | O runtime de integração a ser usado para se conectar ao armazenamento de dados. Saiba mais na seção Pré-requisitos. Se não especificado, essa propriedade usará o Azure Integration Runtime padrão. | Não |
Para diferentes tipos de autenticação, consulte as seções correspondentes para obter detalhes.
- Autenticação Básica
- Autenticação de entidade de serviço
- Autenticação de credencial do cliente OAuth2
- Autenticação de identidade gerenciada atribuída pelo sistema
- Autenticação de identidade gerenciada atribuída pelo usuário
- Autenticação anônima
Usar autenticação básica
Defina a authenticationType na propriedade Básico. Além das propriedades genéricas descritas na seção anterior, especifique as seguintes propriedades:
Propriedade | Descrição | Obrigatório |
---|---|---|
userName | O nome de usuário a ser usado para acessar o ponto de extremidade REST. | Sim |
password | A senha do usuário (o nome de usuário valor). Marque esse campo como um tipo SecureString para armazená-lo com segurança no Data Factory. Você também pode referenciar um segredo armazenado no Cofre de Chaves do Azure. | Sim |
Exemplo
{
"name": "RESTLinkedService",
"properties": {
"type": "RestService",
"typeProperties": {
"authenticationType": "Basic",
"url" : "<REST endpoint>",
"userName": "<user name>",
"password": {
"type": "SecureString",
"value": "<password>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Usar a autenticação de Entidade de Serviço
Defina a authenticationType na propriedade AadServicePrincipal. Além das propriedades genéricas descritas na seção anterior, especifique as seguintes propriedades:
Propriedade | Descrição | Obrigatório |
---|---|---|
servicePrincipalId | Especifique a ID do cliente do aplicativo do Microsoft Entra. | Sim |
servicePrincipalCredentialType | Especifique o tipo de credencial a ser usada para autenticação da entidade de serviço. Os valores permitidos são ServicePrincipalKey e ServicePrincipalCert . |
Não |
Para ServicePrincipalKey | ||
servicePrincipalKey | Especifique a chave do aplicativo do Microsoft Entra. Marque esse campo como SecureString para armazená-lo com segurança no Data Factory ou referencie um segredo armazenado no Cofre de Chaves do Azure. | Não |
Para ServicePrincipalCert | ||
servicePrincipalEmbeddedCert | Especifique o certificado codificado em base64 do aplicativo registrado no Microsoft Entra ID e cerifique-se de que o tipo de conteúdo do certificado é PKCS #12. Marque esse campo como SecureString para armazená-lo com segurança ou referencie um segredo armazenado no Azure Key Vault. Vá para esta seção para saber como salvar o certificado no Azure Key Vault. | Não |
servicePrincipalEmbeddedCertPassword | Especifique a senha de seu certificado se o certificado for protegido por senha. Marque esse campo como SecureString para armazená-lo com segurança ou referencie um segredo armazenado no Azure Key Vault. | Não |
locatário | Especifique as informações de locatário (domínio nome ou ID do Locatário) em que o aplicativo reside. Para recuperá-lo, passe o mouse no canto superior direito do portal do Azure. | Sim |
aadResourceId | Especifique o recurso do Microsoft Entra para o qual você está solicitando autorização, por exemplo, https://management.core.windows.net . |
Sim |
azureCloudType | Para autenticação da Entidade de Serviço, especifique o tipo de ambiente de nuvem do Azure no qual o aplicativo do Microsoft Entra está registrado. Os valores permitidos são AzurePublic, AzureChina, AzureUsGovernment e AzureGermany. Por padrão, o ambiente de nuvem do data factory é usado. |
Não |
Exemplo 1: Usando autenticação de chave principal de serviço
{
"name": "RESTLinkedService",
"properties": {
"type": "RestService",
"typeProperties": {
"url": "<REST endpoint e.g. https://www.example.com/>",
"authenticationType": "AadServicePrincipal",
"servicePrincipalId": "<service principal id>",
"servicePrincipalCredentialType": "ServicePrincipalKey",
"servicePrincipalKey": {
"value": "<service principal key>",
"type": "SecureString"
},
"tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>",
"aadResourceId": "<Azure AD resource URL e.g. https://management.core.windows.net>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Exemplo 2: Usando autenticação de certificado de entidade de serviço
{
"name": "RESTLinkedService",
"properties": {
"type": "RestService",
"typeProperties": {
"url": "<REST endpoint e.g. https://www.example.com/>",
"authenticationType": "AadServicePrincipal",
"servicePrincipalId": "<service principal id>",
"servicePrincipalCredentialType": "ServicePrincipalCert",
"servicePrincipalEmbeddedCert": {
"type": "SecureString",
"value": "<the base64 encoded certificate of your application registered in Microsoft Entra ID>"
},
"servicePrincipalEmbeddedCertPassword": {
"type": "SecureString",
"value": "<password of your certificate>"
},
"tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>",
"aadResourceId": "<Azure AD resource URL e.g. https://management.core.windows.net>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
O certificado da entidade de serviço do Azure Key Vault
Você tem duas opções para salvar o certificado da entidade de serviço no Azure Key Vault:
Opção 1
Converta o certificado da entidade de serviço em uma cadeia de caracteres base64. Saiba maisdeste artigo.
Salve a cadeia de caracteres base64 como um segredo no Azure Key Vault.
Opção 2
Se você não conseguir baixar o certificado do Azure Key Vault, poderá usar este modelo para salvar o certificado da entidade de serviço convertida como um segredo no Azure Key Vault.
Usar a autenticação de credencial do cliente OAuth2
Defina o authenticationType na propriedade OAuth2ClientCredential. Além das propriedades genéricas descritas na seção anterior, especifique as seguintes propriedades:
Propriedade | Descrição | Obrigatório |
---|---|---|
tokenEndpoint | O ponto de extremidade de token do servidor de autorização para adquirir o token de acesso. | Sim |
clientId | A ID de cliente associada ao seu aplicativo. | Sim |
clientSecret | O segredo de cliente associado ao seu aplicativo. Marque esse campo como um tipo SecureString para armazená-lo com segurança no Data Factory. Você também pode referenciar um segredo armazenado no Cofre de Chaves do Azure. | Sim |
scope | O escopo do acesso necessário. Ele descreve que tipo de acesso será solicitado. | No |
recurso | O serviço de destino ou o recurso ao qual o acesso será solicitado. | Não |
Exemplo
{
"name": "RESTLinkedService",
"properties": {
"type": "RestService",
"typeProperties": {
"url": "<REST endpoint e.g. https://www.example.com/>",
"enableServerCertificateValidation": true,
"authenticationType": "OAuth2ClientCredential",
"clientId": "<client ID>",
"clientSecret": {
"type": "SecureString",
"value": "<client secret>"
},
"tokenEndpoint": "<token endpoint>",
"scope": "<scope>",
"resource": "<resource>"
}
}
}
Usar a autenticação de identidade gerenciada atribuída pelo sistema
Defina a authenticationType na propriedade ManagedServiceIdentity. Além das propriedades genéricas descritas na seção anterior, especifique as seguintes propriedades:
Propriedade | Descrição | Obrigatório |
---|---|---|
aadResourceId | Especifique o recurso do Microsoft Entra para o qual você está solicitando autorização, por exemplo, https://management.core.windows.net . |
Sim |
Exemplo
{
"name": "RESTLinkedService",
"properties": {
"type": "RestService",
"typeProperties": {
"url": "<REST endpoint e.g. https://www.example.com/>",
"authenticationType": "ManagedServiceIdentity",
"aadResourceId": "<AAD resource URL e.g. https://management.core.windows.net>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Usar a autenticação de identidade gerenciada atribuída pelo usuário
Defina a authenticationType na propriedade ManagedServiceIdentity. Além das propriedades genéricas descritas na seção anterior, especifique as seguintes propriedades:
Propriedade | Descrição | Obrigatório |
---|---|---|
aadResourceId | Especifique o recurso do Microsoft Entra para o qual você está solicitando autorização, por exemplo, https://management.core.windows.net . |
Sim |
credenciais | Especifique a identidade gerenciada atribuída pelo usuário como o objeto da credencial. | Sim |
Exemplo
{
"name": "RESTLinkedService",
"properties": {
"type": "RestService",
"typeProperties": {
"url": "<REST endpoint e.g. https://www.example.com/>",
"authenticationType": "ManagedServiceIdentity",
"aadResourceId": "<Azure AD resource URL e.g. https://management.core.windows.net>",
"credential": {
"referenceName": "credential1",
"type": "CredentialReference"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Usar cabeçalhos de autenticação
Também é possível configurar cabeçalhos de solicitação para autenticação junto com os tipos de autenticação internos.
Exemplo: Usar a autenticação de chave de API
{
"name": "RESTLinkedService",
"properties": {
"type": "RestService",
"typeProperties": {
"url": "<REST endpoint>",
"authenticationType": "Anonymous",
"authHeaders": {
"x-api-key": {
"type": "SecureString",
"value": "<API key>"
}
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Propriedades do conjunto de dados
Esta seção fornece uma lista de propriedades que o conjunto de dados REST suporta.
Para obter uma lista completa de seções e propriedades disponíveis para definição de conjuntos de dados, consulte Conjuntos de dados e serviços vinculados.
Para copiar dados do REST, há suporte para as seguintes propriedades:
Propriedade | Descrição | Obrigatório |
---|---|---|
type | A propriedade tipo do conjunto de dados deve ser definida comoRestResource. | Sim |
relativeUrl | Uma URL relativa para o recurso que contém os dados. Quando essa propriedade não é especificada, somente o URL especificado na definição de serviço vinculada é usado. O conector HTTP copia os dados da URL combinada: [URL specified in linked service]/[relative URL specified in dataset] . |
Não |
Se você estiver definindo requestMethod
, additionalHeaders
, requestBody
e paginationRules
no conjunto de dados, ainda há suporte para eles no estado em que se encontram, mas, de agora em diante, recomendamos usar o novo modelo em atividade.
Exemplo:
{
"name": "RESTDataset",
"properties": {
"type": "RestResource",
"typeProperties": {
"relativeUrl": "<relative url>"
},
"schema": [],
"linkedServiceName": {
"referenceName": "<REST linked service name>",
"type": "LinkedServiceReference"
}
}
}
Propriedades da Atividade de Cópia
Esta seção fornece uma lista das propriedades com suporte da origem e do coletor REST.
Para obter uma lista completa de seções e propriedades que estão disponíveis para definir atividades, consulte Pipelines.
REST como fonte
As propriedades a seguir têm suporte na seção source da atividade de cópia:
Propriedade | Descrição | Obrigatório |
---|---|---|
type | O tipo de propriedade da fonte da atividade de cópia deve ser definida como: RestSource. | Sim |
requestMethod | O método HTTP. Os valores permitidos são GET (padrão) e POST. | Não |
additionalHeaders | Cabeçalhos de solicitação HTTP adicionais. | Não |
requestBody | O corpo da solicitação HTTP. | Não |
paginationRules | As regras de paginação para compor as próximas solicitações de página. Consulte a seção suporte à paginação em detalhes. | Não |
httpRequestTimeout | O tempo limite (o valor TimeSpan) para a solicitação HTTP para obter uma resposta. Esse valor é o tempo limite para obter uma resposta, não o tempo limite para ler os dados da resposta. O valor padrão é 01:00:40. | Não |
requestInterval | O tempo de espera antes de enviar a solicitação para a próxima página. O valor padrão é 00:00:01 | Não |
Observação
O conector REST ignora qualquer cabeçalho "Accept" especificado em additionalHeaders
. Como o conector REST só dá suporte à resposta em JSON, ele gerará automaticamente um cabeçalho de Accept: application/json
.
A matriz de objeto como corpo da resposta não é suportada na paginação.
Exemplo 1: Usando o método Get com paginação
"activities":[
{
"name": "CopyFromREST",
"type": "Copy",
"inputs": [
{
"referenceName": "<REST input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "RestSource",
"additionalHeaders": {
"x-user-defined": "helloworld"
},
"paginationRules": {
"AbsoluteUrl": "$.paging.next"
},
"httpRequestTimeout": "00:01:00"
},
"sink": {
"type": "<sink type>"
}
}
}
]
Exemplo 2: Usando o método Post
"activities":[
{
"name": "CopyFromREST",
"type": "Copy",
"inputs": [
{
"referenceName": "<REST input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "RestSource",
"requestMethod": "Post",
"requestBody": "<body for POST REST request>",
"httpRequestTimeout": "00:01:00"
},
"sink": {
"type": "<sink type>"
}
}
}
]
REST como coletor
As propriedades a seguir têm suporte na seção sink da atividade de cópia:
Propriedade | Descrição | Obrigatório |
---|---|---|
type | A propriedade type do coletor da atividade de cópia deve ser definida como RestSink. | Sim |
requestMethod | O método HTTP. Os valores permitidos são POST (padrão), PUTe PATCH. | Não |
additionalHeaders | Cabeçalhos de solicitação HTTP adicionais. | Não |
httpRequestTimeout | O tempo limite (o valor TimeSpan) para a solicitação HTTP para obter uma resposta. Esse valor é o tempo limite para obter uma resposta, não o tempo limite para gravar os dados. O valor padrão é 01:00:40. | Não |
requestInterval | O intervalo entre diferentes solicitações em milissegundos. O valor do intervalo de solicitação deve ser um número entre [10, 60000]. | Não |
httpCompressionType | Tipo de compactação HTTP a ser usada ao enviar dados com o Nível de Compactação Ideal. Os valores permitidos são nenhum e gzip. | Não |
writeBatchSize | Número de registros a gravar no coletor REST por lote. O valor padrão é 10000. | Não |
O conector REST como coletor funciona com as APIs REST que aceitam JSON. Os dados serão enviados em JSON com o padrão a seguir. Conforme necessário, você pode usar o mapeamento de esquema da atividade de cópia para remodelar os dados de origem para que estejam em conformidade com a carga esperada pela API REST.
[
{ <data object> },
{ <data object> },
...
]
Exemplo:
"activities":[
{
"name": "CopyToREST",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<REST output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "RestSink",
"requestMethod": "POST",
"httpRequestTimeout": "00:01:40",
"requestInterval": 10,
"writeBatchSize": 10000,
"httpCompressionType": "none",
},
}
}
]
Propriedades do fluxo de dados de mapeamento
Há suporte para REST em fluxos de dados de conjuntos de dado de integração e conjuntos de dados embutidos.
Transformação de origem
Propriedade | Descrição | Obrigatório |
---|---|---|
requestMethod | O método HTTP. Valores permitidos são Obtenha e POST. | Sim |
relativeUrl | Uma URL relativa para o recurso que contém os dados. Quando essa propriedade não é especificada, somente o URL especificado na definição de serviço vinculada é usado. O conector HTTP copia os dados da URL combinada: [URL specified in linked service]/[relative URL specified in dataset] . |
Não |
additionalHeaders | Cabeçalhos de solicitação HTTP adicionais. | Não |
httpRequestTimeout | O tempo limite (o valor TimeSpan) para a solicitação HTTP para obter uma resposta. Esse valor é o tempo limite para obter uma resposta, não o tempo limite para gravar os dados. O valor padrão é 01:00:40. | Não |
requestInterval | O intervalo entre diferentes solicitações em milissegundos. O valor do intervalo de solicitação deve ser um número entre [10, 60000]. | Não |
QueryParameters.request_query_parameter OU QueryParameters['request_query_parameter'] | O "request_query_parameter" é definido pelo usuário e faz referência a um nome de parâmetro de consulta na URL da próxima solicitação HTTP. | No |
Transformação de coletor
Propriedade | Descrição | Obrigatório |
---|---|---|
additionalHeaders | Cabeçalhos de solicitação HTTP adicionais. | Não |
httpRequestTimeout | O tempo limite (o valor TimeSpan) para a solicitação HTTP para obter uma resposta. Esse valor é o tempo limite para obter uma resposta, não o tempo limite para gravar os dados. O valor padrão é 01:00:40. | Não |
requestInterval | O intervalo entre diferentes solicitações em milissegundos. O valor do intervalo de solicitação deve ser um número entre [10, 60000]. | Não |
httpCompressionType | Tipo de compactação HTTP a ser usada ao enviar dados com o Nível de Compactação Ideal. Os valores permitidos são nenhum e gzip. | Não |
writeBatchSize | Número de registros a gravar no coletor REST por lote. O valor padrão é 10000. | Não |
Você pode definir os métodos excluir, inserir, atualizar e executar upsert, bem como os dados de linha relativos para enviar ao coletor REST para operações CRUD.
Script de fluxo de dados de amostra
Observe o uso de uma transformação de alteração de linha antes do coletor instruir o Azure Data Factory sobre que tipo de ação deve ser tomada com seu coletor REST. Por exemplo, inserir, atualizar, executar upsert, excluir.
AlterRow1 sink(allowSchemaDrift: true,
validateSchema: false,
deletable:true,
insertable:true,
updateable:true,
upsertable:true,
rowRelativeUrl: 'periods',
insertHttpMethod: 'PUT',
deleteHttpMethod: 'DELETE',
upsertHttpMethod: 'PUT',
updateHttpMethod: 'PATCH',
timeout: 30,
requestFormat: ['type' -> 'json'],
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true) ~> sink1
Suporte à paginação
Quando você copia os dados, a API REST normalmente limita o tamanho do conteúdo da resposta de uma única solicitação a um número razoável; por outro lado, ao retornar uma grande quantidade de dados, a API REST divide o resultado em várias páginas e requer que os chamadores enviem solicitações consecutivas para obter a próxima página do resultado. Geralmente, a solicitação para uma página é dinâmica e composta por informações retornadas da resposta de página anterior.
Esse conector genérico REST suporta os seguintes padrões de paginação:
- URL absoluta ou relativa da próxima solicitação = valor de propriedade no corpo de resposta atual
- Próxima solicitação de URL absoluta = valor de cabeçalho nos cabeçalhos de resposta atuais
- Próxima solicitação de consulta de parâmetro = valor de propriedade no corpo de resposta atual
- Próxima solicitação de consulta de parâmetro = valor de cabeçalho nos cabeçalhos de resposta atuais
- Próxima solicitação de cabeçalho = valor de propriedade no corpo de resposta atual
- Próxima solicitação de cabeçalho = valor de cabeçalho nos cabeçalhos de resposta atuais
As Regras de paginação são definidas como um dicionário no conjunto de dados, que contém um ou mais pares de chave-valor que diferenciam maiúsculas de minúsculas. A configuração será usada para gerar a solicitação a partir da segunda página. O conector irá interromper a iteração quando obtiver o código de status HTTP 204 (sem conteúdo) ou quando qualquer uma das expressões JSONPath em "paginationRules" retornar nula.
O Suporte para chaves nas regras de paginação:
Chave | Descrição |
---|---|
AbsoluteUrl | Indica a URL para emitir a próxima solicitação. Pode ser uma URL absoluta ou uma URL relativa. |
QueryParameters.request_query_parameter OU QueryParameters['request_query_parameter'] | O "request_query_parameter" é definido pelo usuário e faz referência a um nome de parâmetro de consulta na URL da próxima solicitação HTTP. |
Headers.request_header OU Headers['request_header'] | O "request_header" é definido pelo usuário e faz referência a um nome de parâmetro de cabeçalho da próxima solicitação HTTP. |
EndCondition:end_condition | "end_condition" é definido pelo usuário, que indica a condição que encerrará o loop de paginação na próxima solicitação HTTP. |
MaxRequestNumber | Indica o número máximo de solicitações de paginação. Deixar como vazio significa sem limite. |
SupportRFC5988 | Por padrão, isso será definido como true se nenhuma regra de paginação for definida. Você pode desabilitar essa regra definindo supportRFC5988 como false ou remova essa propriedade do script. |
Os Valores com suporte nas regras de paginação:
Valor | Descrição |
---|---|
Headers.response_header OU Headers['response_header'] | O "response_header" é definido pelo usuário e faz referência a um nome de cabeçalho na resposta HTTP atual, valor que será usado para emitir a próxima solicitação. |
Uma expressão JSONPath começando com "$" (que representa a raiz do corpo da resposta) | O corpo da resposta deve conter apenas um objeto JSON e a matriz do objeto, pois o corpo da resposta não é compatível. A expressão JSONPath deve retornar um único valor primitivo, que será usado para emitir a próxima solicitação. |
Observação
As regras de paginação nos fluxos de dados de mapeamento são diferentes disso na atividade de cópia nos seguintes aspectos:
- Não há suporte para intervalo em fluxos de dados de mapeamento.
- Não há suporte para
['']
em fluxos de dados de mapeamento. Em vez disso, use{}
para escapar de caracteres especiais. Por exemplo,body.{@odata.nextLink}
, cujo nó de JSON@odata.nextLink
contém o caractere especial.
. - A condição final tem suporte em fluxos de dados de mapeamento, mas a sintaxe de condição é diferente dela na atividade de cópia.
body
é usado para indicar o corpo da resposta em vez de$
.header
é usado para indicar o cabeçalho da resposta em vez deheaders
. Seguem dois exemplos que mostram essa diferença:- Exemplo 1:
Atividade Copy: "EndCondition:$.data": "Empty"
Fluxos de dados de mapeamento: "EndCondition:body.data": "Empty" - Exemplo 2:
Atividade Copy: "EndCondition:headers.complete": "Exist"
Fluxos de dados de mapeamento: "EndCondition:header.complete": "Exist"
- Exemplo 1:
Exemplos de regras de paginação
Esta seção fornece uma lista de exemplos para configurações de regras de paginação.
Exemplo 1: variáveis em QueryParameters
Este exemplo fornece as etapas de configuração para enviar várias solicitações cujas variáveis estão em QueryParameters.
Várias solicitações:
baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=0,
baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=1000,
......
baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=10000
Etapa 1: dntrada sysparm_offset={offset}
na URL base ou na URL relativa, conforme mostrado nas capturas de tela a seguir:
ou
Etapa 2: definir Regras de paginação como a opção 1 ou a opção 2:
Option1: "QueryParameters.{offset}" : "RANGE:0:10000:1000"
Option2: "AbsoluteUrl.{offset}" : "RANGE:0:10000:1000"
Exemplo 2: variáveis em AbsoluteUrl
Este exemplo fornece as etapas de configuração para enviar várias solicitações cujas variáveis estão em AbsoluteUrl.
Várias solicitações:
BaseUrl/api/now/table/t1
BaseUrl/api/now/table/t2
......
BaseUrl/api/now/table/t100
Etapa 1: entrada {id}
na URL base na página de configuração de serviço vinculado ou na URL relativa no painel de conexão do conjuntos de dados.
ou
Etapa 2: definir Regras de paginação como "AbsoluteUrl.{id}" :"RANGE:1:100:1".
Exemplo 3: variáveis em Headers
Este exemplo fornece as etapas de configuração para enviar várias solicitações cujas variáveis estão em Headers.
Várias solicitações:
RequestUrl: https://example/table
Solicitação 1: Header(id->0)
Solicitação 2: Header(id->10)
......
Solicitação 100: Header(id->100)
Etapa 1: entrada {id}
em Cabeçalhos adicionais.
Etapa 2: definir Regras de paginação como "Headers.{id}" : "RANGE:0:100:10".
Exemplo 4: as variáveis estão em AbsoluteUrl/QueryParameters/Headers, a variável final não é predefinida e a condição de término é baseada na resposta
Este exemplo fornece etapas de configuração para enviar várias solicitações cujas variáveis estejam em AbsoluteUrl/QueryParameters/Headers, mas a variável final não esteja definida. Para respostas diferentes, diferentes configurações de regra de condição final são mostradas no Exemplo 4.1-4.6.
Várias solicitações:
Request 1: baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=0,
Request 2: baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=1000,
Request 3: baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=2000,
......
Duas respostas encontradas neste exemplo:
Resposta 1:
{
Data: [
{key1: val1, key2: val2
},
{key1: val3, key2: val4
}
]
}
Resposta 2:
{
Data: [
{key1: val5, key2: val6
},
{key1: val7, key2: val8
}
]
}
Etapa 1: definir o intervalo de Regras de paginação como Exemplo 1 e deixar o final do intervalo vazio como "AbsoluteUrl.{offset}": "RANGE:0::1000".
Etapa 2: definir regras de condição de término diferentes de acordo com as últimas respostas diferentes. Veja os exemplos a seguir:
Exemplo 4.1: a paginação termina quando o valor do nó específico em resposta está vazio
A API REST retorna a última resposta na seguinte estrutura:
{ Data: [] }
Definir a regra de condição final como "EndCondition:$.data": "Empty" para encerrar a paginação quando o valor do nó específico em resposta estiver vazio.
Exemplo 4.2: a paginação termina quando o valor do nó específico em resposta não existir
A API REST retorna a última resposta na seguinte estrutura:
{}
Definir a regra de condição final como "EndCondition:$.data": "NonExist" para encerrar a paginação quando o valor do nó específico em resposta não existir.
Exemplo 4.3: a paginação termina quando o valor do nó específico em resposta existe
A API REST retorna a última resposta na seguinte estrutura:
{ Data: [ {key1: val991, key2: val992 }, {key1: val993, key2: val994 } ], Complete: true }
Definir a regra de condição final como "EndCondition:$.Complete": "Exist" para encerrar a paginação quando o valor do nó específico em resposta existir.
Exemplo 4.4: a paginação termina quando o valor do nó específico em resposta for um valor const definido pelo usuário
A API REST retorna a resposta na seguinte estrutura:
{ Data: [ {key1: val1, key2: val2 }, {key1: val3, key2: val4 } ], Complete: false }
......
E a última resposta está na seguinte estrutura:
{ Data: [ {key1: val991, key2: val992 }, {key1: val993, key2: val994 } ], Complete: true }
Definir a regra de condição final como "EndCondition:$.Complete": "Const:true" para encerrar a paginação quando o valor do nó específico em resposta for um valor const definido pelo usuário.
Exemplo 4.5: a paginação termina quando o valor da chave do cabeçalho em resposta for igual a um valor const definido pelo usuário
As chaves de cabeçalho nas respostas da API REST são mostradas na estrutura abaixo:
Cabeçalho de resposta 1:
header(Complete->0)
......
Último cabeçalho de resposta:header(Complete->1)
Definir a regra de condição final como "EndCondition:headers.Complete": "Const:1" para encerrar a paginação quando o valor da chave do cabeçalho em resposta for igual a um valor const definido pelo usuário.
Exemplo 4.6: a paginação termina quando a chave existir no cabeçalho de resposta
As chaves de cabeçalho nas respostas da API REST são mostradas na estrutura abaixo:
Cabeçalho de resposta 1:
header()
......
Último cabeçalho de resposta:header(CompleteTime->20220920)
Defina a regra de condição final como "EndCondition:headers.completeTime": "Exist" para encerrar a paginação quando a chave existir no cabeçalho de resposta.
Exemplo 5: definir a condição de término para evitar solicitações infinitas quando a regra de intervalo não estiver definida
Este exemplo fornece as etapas de configuração para enviar várias solicitações quando a regra de intervalo não for usada. A condição final pode ser definida. Consulte o exemplo 4.1-4.6 para evitar solicitações infinitas. A API REST retorna a resposta na próxima estrutura, em cada casa a URL da próxima página é representada por paging.next.
{
"data": [
{
"created_time": "2017-12-12T14:12:20+0000",
"name": "album1",
"id": "1809938745705498_1809939942372045"
},
{
"created_time": "2017-12-12T14:14:03+0000",
"name": "album2",
"id": "1809938745705498_1809941802371859"
},
{
"created_time": "2017-12-12T14:14:11+0000",
"name": "album3",
"id": "1809938745705498_1809941879038518"
}
],
"paging": {
"cursors": {
"after": "MTAxNTExOTQ1MjAwNzI5NDE=",
"before": "NDMyNzQyODI3OTQw"
},
"previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw",
"next": "https://graph.facebook.com/me/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
}
}
...
A última resposta é:
{
"data": [],
"paging": {
"cursors": {
"after": "MTAxNTExOTQ1MjAwNzI5NDE=",
"before": "NDMyNzQyODI3OTQw"
},
"previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw",
"next": "Same with Last Request URL"
}
}
Etapa 1: definir Regras de paginação como "AbsoluteUrl": "$.paging.next".
Etapa 2: se next
na última resposta for sempre o mesmo com a última URL de solicitação e não estiver vazia, solicitações infinitas serão enviadas. A condição final pode ser usada para evitar solicitações infinitas. Portanto, defina a regra de condição final. Consulte o exemplo 4.1-4.6.
Exemplo 6: definir o número máximo de solicitações para evitar solicitações infinitas
Defina MaxRequestNumber para evitar solicitações infinitas, conforme mostrado na seguinte captura de tela:
Exemplo 7: a regra de paginação RFC 5988 tem suporte por padrão
O back-end receberá automaticamente a próxima URL com base nos links de estilo RFC 5988 no cabeçalho.
Dica
Se não quiser habilitar essa regra de paginação padrão, você poderá definir supportRFC5988
como false
ou apenas excluí-lo no script.
Exemplo 8: a próxima URL de solicitação é do corpo da resposta ao usar a paginação no fluxo de dados de mapeamento
Este exemplo informa como definir a regra de paginação e a regra de condição final no fluxo de dados de mapeamento quando a próxima URL de solicitação for do corpo da resposta.
O esquema de resposta é mostrado abaixo:
As regras de paginação devem ser definidas como a captura de tela a seguir:
Por padrão, a paginação irá parar quando body.{@odata.nextLink}** for nulo ou estiver vazio.
Mas se o valor de @odata.nextLink no corpo da última resposta for igual à última URL de solicitação, ele levará ao loop infinito. Para evitar essa condição, defina regras de condição final.
Se o Valor na última resposta estiver Vazio, a regra de condição final poderá ser definida como abaixo:
Se o valor da chave completa no cabeçalho de resposta for igual a true, isto indica o final da paginação e, em seguida, a regra de condição final poderá ser definida como abaixo:
Exemplo 9: o formato da resposta é XML e a próxima URL de solicitação é do corpo da resposta ao usar a paginação no fluxo de dados de mapeamento
Este exemplo informa como definir a regra de paginação nos fluxos de dados de mapeamento quando o formato da resposta for XML e a próxima URL de solicitação for do corpo da resposta. Conforme mostrado na captura de tela a seguir, o primeiro URL é https://<user>.dfs.core.windows.NET/bugfix/test/movie_1.xml
O esquema de resposta é mostrado abaixo:
A sintaxe da regra de paginação é a mesma do exemplo 8 e deve ser definida como abaixo neste exemplo:
Exportar a resposta JSON como ela aparece
Você pode usar esse conector REST para exportar a resposta JSON de API REST como ela aparece para vários armazenamentos baseados em arquivo. Para efetuar essa cópia independente de esquema, ignore a seção da "estrutura" (também chamada de esquema) no conjunto de dados e mapeamento de esquema na atividade de cópia.
Mapeamento de esquema
Para copiar dados do ponto de extremidade REST para o coletor de tabela, confira o mapeamento do esquema.
Conteúdo relacionado
Para obter uma lista de armazenamentos de dados que o Copy Activity suporta como fontes e coletores no Azure Data Factory, consulte Armazenamentos e formatos de dados compatíveis.