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 na sua solução, atualize o conector do Salesforce antes de 11 de outubro de 2024. Consulte esta seção para obter detalhes sobre a diferença entre a versão herdada e a versão mais recente.

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.
  • Copiar dados de e para um domínio personalizado (o domínio personalizado pode ser configurado em ambientes de produção e á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. Quando você copia dados para o Salesforce, o conector usa a API BULK 2.0.

Pré-requisitos

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

  • Você precisa configurar os Aplicativos Conectados no portal do Salesforce, referindo-se a este documento oficial ou à nossa diretriz passo a passo na recomendação deste 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ê encontrará 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.

    Captura de tela do conector do Salesforce.

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

    Captura de tela da configuração do serviço vinculado para o 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. O uso de uma versão da API anterior resulta em falhas. 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

Ao armazenar as credenciais no Key Vault, assim como o environmentUrl e o clientId, você deixa de poder editar as configurações pela interface do usuário. É necessário marcar a opção Especificar conteúdos dinâmicos em formato JSON e fazer essa configuração manualmente. A vantagem desse necessário é que você poderá derivar todas as configurações do Key Vault 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. A versão aplicável do runtime de integração auto-hospedada é a 5.44.8984.1 ou superior. “Não” para a fonte (se “query” estiver especificado na fonte), “Sim” para o coletor
reportId O ID do relatório da Salesforce do qual recuperar dados. Essa funcionalidade não tem suporte no coletor. Existem limitações ao usar relatórios. A versão aplicável do runtime de integração auto-hospedada é a 5.44.8984.1 ou superior. “Não” para a fonte (se “query” estiver especificado na fonte), sem suporte para o coletor

Importante

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

Nome da API de conexão do Salesforce

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
Consulta Utiliza a consulta personalizada para ler os dados. Você só pode usar a consulta SOQL (Salesforce Object Query Language) com limitações. Para obter limitações de SOQL, confira este artigo. 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)
includeDeletedObjects Indica se deve consultar os registros existentes, ou consultar todos os registros, incluindo o que foi excluído. Se não for especificado, o comportamento padrão será false.
Valores permitidos: false (padrão), true.
Não

Importante

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

Lista de nome de API de conexão do Salesforce

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",
                "query": "SELECT Col_Currency__c, Col_Date__c, Col_Email__c FROM AllDataType__c",
                "includeDeletedObjects": false
            },
            "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. Um número reduzido de linhas por lote diminui a eficiência da transferência. 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. Dados com casas decimais que excedem a escala definida terão seus valores arredondados na pré-visualização e cópia dos dados. 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.

Fazer um upgrade do serviço vinculado do Salesforce

Aqui estão as etapas que ajudarão você a atualizar seu serviço vinculado e as consultas relacionadas:

  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. Você também precisa atualizar manualmente os conjuntos de dados existentes que dependem do serviço vinculado antigo, alterando cada um para usar o novo 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).

  4. O readBehavior será substituído por includeDeletedObjects na origem da atividade de cópia ou na atividade de pesquisa. Para obter a configuração detalhada, confira Salesforce como um tipo de origem.

Diferenças entre o Salesforce e o Salesforce (herdado)

O conector do Salesforce oferece novas funcionalidades e é compatível com a maioria dos recursos do conector do Salesforce (herdado). A tabela a seguir mostra as diferenças de funcionalidades entre o Salesforce e o Salesforce (herdado).

Salesforce Salesforce (herdado)
Suporte à SOQL na API em Massa do Salesforce 2.0.
Para consultas SOQL:
• Não há suporte para cláusulas GROUP BY, LIMIT, ORDER BY, OFFSET ou TYPEOF.
• Não há suporte para funções de agregação como COUNT() e você pode usar relatórios do Salesforce para implementá-las.
• Não há suporte para funções de data em cláusulas GROUP BY, mas elas têm suporte na cláusula WHERE.
• Não há suporte para campos de endereço composto ou campos de geolocalização compostos. Como alternativa, consulte os componentes individuais dos campos compostos.
• Não há suporte para consultas de relação de pai para filho, enquanto as consultas de relação de filho para pai são compatíveis.
Dê suporte à sintaxe SQL e SOQL.
Não há suporte para objetos que contêm campos binários ao especificar a consulta. Há suporte para os objetos que contêm campos binários ao especificar a consulta.
Oferece suporte a objetos na API em massa ao especificar a consulta. Oferece suporte a objetos que não são compatíveis com a API em massa ao especificar a consulta.
Suporte ao relatório selecionando uma ID de relatório. Suporte a sintaxe de consulta de relatório, como {call "<report name>"}.

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.