Copiar dados de e para o Salesforce usando o Azure Data Factory ou o Azure Synapse Analytics

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 pipeline do Azure Data Factory e do Azure Synapse para copiar dados de e para o Salesforce. Ele amplia o artigo Visão geral da Atividade de Cópia que apresenta uma visão geral da atividade de cópia.

Importante

O novo conector do Salesforce oferece suporte nativo aprimorado ao Salesforce. Se você estiver usando o conector herdado do Salesforce em sua solução, suportado como está apenas para compatibilidade com versões anteriores, consulte o artigo Conector do Salesforce (herdado).

Funcionalidades com suporte

Há suporte para este conector do Salesforce nas seguintes funcionalidades:

Funcionalidades com suporte IR
Atividade de cópia (origem/coletor) ① ②
Atividade de pesquisa ① ②

① Runtime de integração do Azure ② Runtime de integração auto-hospedada

Para obter uma lista de armazenamentos de dados com suporte como origens ou coletores, confira a tabela Armazenamentos de dados com suporte.

Especificamente, este conector Salesforce dá suporte à:

  • Edições de Desenvolvedor, Professional, Enterprise ou Ilimitada do Salesforce.
  • Cópia de dados bidirecionalmente no domínio personalizado (o domínio personalizado pode ser configurado em ambientes de produção e de área restrita).

Você pode definir explicitamente a versão da API usada para ler/gravar dados por meio da apiVersion propriedade no serviço vinculado. Ao copiar dados para o Salesforce, o conector usa a API BULK 2.0.

Pré-requisitos

  • A permissão de API deve estar habilitada no Salesforce.

  • É necessário configurar os Aplicativos Conectados no portal da Salesforce consultando este artigo

    Importante

    • O usuário de execução deve ter o privilégio "Somente API".
    • O prazo de validade do token de acesso pode ser alterado por meio de políticas de sessão em vez do token de atualização.

Limites da API em Massa 2.0 do Salesforce

Usamos a API em Massa 2.0 do Salesforce para consultar e ingerir dados. Na API em Massa 2.0, os lotes são criados automaticamente. Você pode enviar até 15.000 lotes por um período de 24 horas. Se os lotes excederem o limite, você verá falhas.

Na API em Massa 2.0, somente os trabalhos de ingestão consomem lotes. Isso não ocorre com os trabalhos de consulta. Para obter detalhes, confira Como as solicitações são processadas na API em Massa 2.0 no Guia do Desenvolvedor.

Para obter mais informações, confira a seção “Limites gerais” em Limites do desenvolvedor Salesforce.

Introdução

Para executar a atividade de Cópia com um pipeline, será possível usar as ferramentas ou os SDKs abaixo:

Criar um serviço vinculado ao Salesforce usando a interface do usuário

Use as etapas a seguir para criar um serviço vinculado ao Salesforce na interface do usuário do portal do Azure.

  1. Navegue até a guia Gerenciar em seu workspace do Azure Data Factory ou do Synapse, selecione Serviços Vinculados e clique em Novo:

  2. Pesquise por Salesforce e selecione o conector do Salesforce.

    Screenshot of the Salesforce connector.

  3. Configure os detalhes do serviço, teste a conexão e crie o novo serviço vinculado.

    Screenshot of linked service configuration for Salesforce.

Detalhes da configuração do conector

As seções que se seguem fornecem detalhes sobre as propriedades que são usadas para definir entidades específicas ao conector do Salesforce.

Propriedades do serviço vinculado

As propriedades a seguir têm suporte para o serviço vinculado do Salesforce.

Propriedade Descrição Obrigatório
tipo A propriedade type deve ser definida para SalesforceV2. Sim
environmentUrl Especifique a URL da instância do Salesforce.
Por exemplo, especifique "https://<domainName>.my.salesforce.com" para copiar dados do domínio personalizado. Saiba como configurar ou exibir seu domínio personalizado consultando este artigo.
Sim
authenticationType Tipo de autenticação usada para conexão com o Salesforce.
O valor permitido é OAuth2ClientCredentials.
Sim
clientId Especifique a ID de cliente do Aplicativo Conectado ao OAuth 2.0 da Salesforce. Para obter mais informações, acesse este artigo Sim
clientSecret Especifique o segredo do cliente do Aplicativo Conectado ao OAuth 2.0 da Salesforce. Para obter mais informações, acesse este artigo Sim
apiVersion Especifique a versão da API Bulk 2.0 da Salesforce que será usada, por exemplo, 52.0. A API em Massa 2.0 só dá suporte à versão >= 47.0 da API. Para saber mais sobre a versão da API Bulk 2.0, consulte este artigo. Se você usar uma versão inferior da API, isso gerará em uma falha. Sim
connectVia O runtime de integração a ser usado para se conectar ao armazenamento de dados. Se não for especificado, ele usa o Integration Runtime padrão do Azure. Não

Exemplo: armazenar credenciais

{
    "name": "SalesforceLinkedService",
    "properties": {
        "type": "SalesforceV2",
        "typeProperties": {
            "environmentUrl": "<environment URL>",
            "authenticationType": "OAuth2ClientCredentials",
            "clientId": "<client ID>",
            "clientSecret": {
                "type": "SecureString",
                "value": "<client secret>"
            },
            "apiVersion": "<API Version>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemplo: Credenciais de armazenamento no Key Vault

{
    "name": "SalesforceLinkedService",
    "properties": {
        "type": "SalesforceV2",
        "typeProperties": {
            "environmentUrl": "<environment URL>",
            "authenticationType": "OAuth2ClientCredentials",
            "clientId": "<client ID>",
            "clientSecret": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of client secret in AKV>",
                "store":{
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                }
            },
            "apiVersion": "<API Version>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemplo: Armazenar credenciais no Cofre de Chaves, assim como environmentUrl e clientId

Observe que, ao fazer isso, você não conseguirá mais usar a interface do usuário para editar as configurações. A caixa de seleção Especificar conteúdo dinâmico no formato JSON será marcada e você precisará editar toda essa configuração manualmente. A vantagem é que você poderá derivar TODAS as configurações do Cofre de Chaves em vez de parametrizar qualquer coisa aqui.

{
    "name": "SalesforceLinkedService",
    "properties": {
        "type": "SalesforceV2",
        "typeProperties": {
            "environmentUrl": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of environment URL in AKV>",
                "store": {
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                },
            },
            "authenticationType": "OAuth2ClientCredentials",
            "clientId": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of client ID in AKV>",
                "store": {
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                },
            },
            "clientSecret": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of client secret in AKV>",
                "store":{
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                }
            },
            "apiVersion": "<API Version>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Propriedades do conjunto de dados

Para obter uma lista completa das seções e propriedades disponíveis para definir os conjuntos de dados, confira o artigo sobre Conjuntos de Dados. Esta seção fornece uma lista das propriedades com suporte pelo conjunto de dados do Salesforce.

Para copiar dados de e para a Salesforce, defina a propriedade type do conjunto de dados como SalesforceV2Object. Há suporte para as seguintes propriedades.

Propriedade Descrição Obrigatório
tipo A propriedade type deve ser definida como SalesforceV2Object. Sim
objectApiName O nome do objeto de Salesforce para recuperar dados. Não para fonte (se "SOQLQuery" estiver especificado na fonte), Sim para coletor
reportId O ID do relatório da Salesforce do qual recuperar dados. Não é compatível com o coletor. Observe que há limitações ao usar relatórios. Não para fonte (se "SOQLQuery" estiver especificado na fonte), não compatível com coletor

Importante

A parte "__c" do Nome da API é necessária para qualquer objeto personalizado.

Salesforce connection API Name

Exemplo:

{
    "name": "SalesforceDataset",
    "properties": {
        "type": "SalesforceV2Object",
        "typeProperties": {
            "objectApiName": "MyTable__c"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<Salesforce linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

Propriedades da atividade de cópia

Para obter uma lista completa das seções e propriedades disponíveis para definir atividades, confia o artigo Pipelines. Esta seção fornece uma lista das propriedades com suporte pela fonte e coletor do Salesforce.

Salesforce como um tipo de fonte

Para copiar dados da Salesforce, defina o tipo da fonte na atividade de cópia como SalesforceV2Source. As propriedades a seguir têm suporte na seção source da atividade de cópia.

Propriedade Descrição Obrigatório
tipo A propriedade type da fonte da atividade de cópia deve ser definida como SalesforceV2Source. Sim
SOQLQuery Utiliza a consulta personalizada para ler os dados. Só é possível usar a consulta Linguagem de Consulta Salesforce Object (SOQL) com limitações. Se a consulta não for especificada, todos os dados do objeto da Salesforce especificado em "ObjectApiName/reportId" no conjunto de dados serão recuperados. Não (se "ObjectApiName/reportId" no conjunto de dados estiver especificado)

Importante

A parte "__c" do Nome da API é necessária para qualquer objeto personalizado.

Salesforce connection API Name list

Exemplo:

"activities":[
    {
        "name": "CopyFromSalesforce",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Salesforce input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SalesforceV2Source",
                "SOQLQuery": "SELECT Col_Currency__c, Col_Date__c, Col_Email__c FROM AllDataType__c"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Salesforce como um tipo de coletor

Para copiar dados da Salesforce, defina o tipo de coletor na atividade de cópia como SalesforceV2Sink. As propriedades a seguir têm suporte na seção sink da atividade de cópia.

Propriedade Descrição Obrigatório
tipo A propriedade type do coletor da atividade de cópia deve ser definida como SalesforceV2Sink. Sim
writeBehavior O comportamento da operação de gravação.
Valores permitidos são Insert e Upsert.
Não (o padrão é Insert)
externalIdFieldName O nome do campo de ID externo para a operação upsert. O campo especificado deve ser definido como “Campo de ID Externo” no objeto Salesforce. Ele não pode ter valores nulos nos dados de entrada correspondentes. Sim para "Upsert"
writeBatchSize A contagem de linhas de dados gravados no Salesforce em cada lote. Sugira definir esse valor de 10.000 a 200.000. Poucas linhas em cada lote reduzirá o desempenho da cópia. Muitas linhas em cada lote podem causar tempo limite na API. Não (o padrão é 100.000)
ignoreNullValues Indica se deve ignorar valores NULL de dados de entrada durante a operação de gravação.
Os valores permitidos são True e False.
- True: Deixa os dados no objeto de destino inalterados quando você faz uma operação upsert ou atualização. Insira um valor padrão definido quando você faz uma operação insert.
- False: atualiza os dados no objeto de destino como NULL quando você faz uma operação upsert ou atualização. Insira um valor NULL quando você faz uma operação insert.
Não (padrão é falso)
 maxConcurrentConnections O limite superior de conexões simultâneas estabelecidas com o armazenamento de dados durante a execução da atividade. Especifique um valor somente quando desejar limitar as conexões simultâneas.  Nenhum

Exemplo: coletor Salesforce em uma atividade de cópia

"activities":[
    {
        "name": "CopyToSalesforce",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Salesforce output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SalesforceV2Sink",
                "writeBehavior": "Upsert",
                "externalIdFieldName": "CustomerId__c",
                "writeBatchSize": 10000,
                "ignoreNullValues": true
            }
        }
    }
]

Mapeamento de tipo de dados para Salesforce

Ao copiar dados do Salesforce, os seguintes mapeamentos são usados internamente dos tipos de dados do Salesforce para tipos de dados provisórios dentro do serviço. Para saber mais sobre como a atividade de cópia mapeia o tipo de dados e esquema de origem para o coletor, consulte Mapeamentos de tipo de dados e esquema.

Tipo de dados do Salesforce Tipo de dados provisório do serviço
Numeração automática String
Caixa de seleção Boolean
Moeda Decimal
Data Datetime
Data/Hora Datetime
Email String
ID String
Relação de pesquisa String
Lista de seleção múltipla String
Número Decimal
Porcentagem Decimal
Telefone String
Lista de seleção String
Texto Cadeia de caracteres
Área de texto String
Área de texto (longo) String
Área de texto (Rich) String
Texto (criptografado) String
URL String

Observação

O tipo Número do Salesforce está mapeando para o tipo Decimal nos pipelines do Azure Data Factory e do Azure Synapse como um tipo de dados provisório de serviço. O tipo Decimal segue a precisão e a escala definidas. Para dados cujas casas decimais excedem a escala definida, o valor será arredondado em dados de visualização e cópia. Para evitar a perda de precisão nos pipelines do Azure Data Factory e do Azure Synapse, aumente as casas decimais para um valor maior na medida do possível na página Edição da Definição de Campo Personalizado do Salesforce.

Pesquisar propriedades de atividade

Para saber detalhes sobre as propriedades, verifique Pesquisar atividade.

Migrar o serviço vinculado da Salesforce

A migração de seu serviço vinculado da Salesforce é altamente recomendada se você usar a versão herdada. Execute as seguintes etapas:

  1. Configure os aplicativos conectados no portal da Salesforce consultando os Pré-requisitos.

  2. Crie um novo serviço vinculado da Salesforce e configure-o consultando as Propriedades do serviço vinculado.

  3. Se você usar a consulta SQL na fonte da atividade de cópia ou na atividade de pesquisa que se refere ao serviço vinculado herdado, será necessário convertê-las na consulta SOQL. Saiba mais sobre a consulta SOQL em Salesforce como um tipo de fonte e Linguagem de Consulta da Salesforce Object (SOQL).

Para obter uma lista dos armazenamentos de dados com suporte como coletores e fontes da atividade de cópia, confira os Armazenamentos de dados com suporte.