Copiar dados de uma tabela SAP usando o Azure Data Factory ou o Azure Synapse Analytics

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Gorjeta

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange tudo, desde a movimentação de dados até ciência de dados, análises em tempo real, business intelligence e relatórios. Saiba como iniciar uma nova avaliação gratuitamente!

Este artigo descreve como usar a atividade de cópia nos pipelines do Azure Data Factory e do Azure Synapse Analytics para copiar dados de uma tabela SAP. Para obter mais informações, consulte Visão geral da atividade de cópia.

Gorjeta

Para saber o suporte geral no cenário de integração de dados SAP, consulte o whitepaper Integração de dados SAP usando o Azure Data Factory com introdução detalhada sobre cada conector, comparação e orientação SAP.

Capacidades suportadas

Este conector de tabela SAP é suportado para os seguintes recursos:

Capacidades suportadas IR
Atividade de cópia (fonte/-)
Atividade de Pesquisa

(1) Tempo de execução de integração do Azure (2) Tempo de execução de integração auto-hospedado

Para obter uma lista dos armazenamentos de dados suportados como fontes ou coletores pela atividade de cópia, consulte a tabela Armazenamentos de dados suportados.

Especificamente, este conector de tabela SAP suporta:

  • Copiando dados de uma tabela SAP em:

    • SAP ERP Central Component (SAP ECC) versão 7.01 ou posterior (em uma pilha recente de pacotes de suporte SAP lançada após 2015).
    • SAP Business Warehouse (SAP BW) versão 7.01 ou posterior (em um recente SAP Support Package Stack lançado após 2015).
    • SAP S/4HANA.
    • Outros produtos no SAP Business Suite versão 7.01 ou posterior (em um recente SAP Support Package Stack lançado após 2015).
  • Copiar dados de uma tabela transparente SAP, uma tabela agrupada, uma tabela clusterizada e uma exibição.

  • Copiar dados usando autenticação básica ou SNC (Secure Network Communications), se o SNC estiver configurado.

  • Conectando-se a um servidor de aplicativos SAP ou servidor de mensagens SAP.

  • Recuperação de dados via RFC padrão ou personalizada.

A versão 7.01 ou posterior refere-se à versão do SAP NetWeaver em vez da versão do SAP ECC. Por exemplo, o SAP ECC 6.0 EHP 7 em geral tem NetWeaver versão >=7.4. Caso você não tenha certeza sobre seu ambiente, aqui estão as etapas para confirmar a versão do seu sistema SAP:

  1. Use SAP GUI para se conectar ao sistema SAP.
  2. Vá para System ->Status.
  3. Verifique a liberação do SAP_BASIS, verifique se ele é igual ou maior que 701.
    Check SAP_BASIS

Pré-requisitos

Para usar este conector de tabela SAP, você precisa:

  • Configure um tempo de execução de integração auto-hospedado (versão 3.17 ou posterior). Para obter mais informações, consulte Criar e configurar um tempo de execução de integração auto-hospedado.

  • Baixe o SAP Connector de 64 bits para Microsoft .NET 3.0 do site da SAP e instale-o na máquina de tempo de execução de integração auto-hospedada. Durante a instalação, certifique-se de selecionar a opção Instalar assemblies no GAC na janela Etapas de configuração opcionais.

    Install SAP Connector for .NET

  • O usuário SAP que está sendo usado no conector de tabela SAP deve ter as seguintes permissões:

    • Autorização para usar destinos de RFC (Remote Function Call).
    • Permissões para a atividade Executar do objeto de autorização S_SDSAUTH. Você pode consultar o SAP Note 460089 sobre os objetos de autorização da maioria. Certas RFCs são exigidas pelo conector NCo subjacente, por exemplo, RFC_FUNCTION_SEARCH.

Introdução

Para executar a atividade Copiar com um pipeline, você pode usar uma das seguintes ferramentas ou SDKs:

Criar um serviço vinculado a uma tabela SAP usando a interface do usuário

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

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

  2. Pesquise SAP e selecione o conector de tabela SAP.

    Screenshot of the SAP table connector.

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

    Screenshot of configuration for an SAP table linked service.

Detalhes de configuração do conector

As seções a seguir fornecem detalhes sobre as propriedades que são usadas para definir as entidades específicas para o conector de tabela SAP.

Propriedades do serviço vinculado

As seguintes propriedades são suportadas para o serviço vinculado SAP BW Open Hub:

Propriedade Descrição Necessário
type A type propriedade deve ser definida como SapTable. Sim
server O nome do servidor no qual a instância SAP está localizada.
Use para se conectar a um servidor de aplicativos SAP.
Não
systemNumber O número do sistema SAP.
Use para se conectar a um servidor de aplicativos SAP.
Valor permitido: um número decimal de dois dígitos representado como uma cadeia de caracteres.
Não
messageServer O nome do host do servidor de mensagens SAP.
Use para se conectar a um servidor de mensagens SAP.
Não
messageServerService O nome do serviço ou o número da porta do servidor de mensagens.
Use para se conectar a um servidor de mensagens SAP.
Não
systemId O ID do sistema SAP onde a tabela está localizada.
Use para se conectar a um servidor de mensagens SAP.
Não
logonGroup O grupo de logon para o sistema SAP.
Use para se conectar a um servidor de mensagens SAP.
Não
clientId O ID do cliente no sistema SAP.
Valor permitido: um número decimal de três dígitos representado como uma cadeia de caracteres.
Sim
language A linguagem que o sistema SAP usa.
O valor predefinido é EN.
Não
userName O nome do usuário que tem acesso ao servidor SAP. Sim
password A palavra-passe do utilizador. Marque este campo com o SecureString tipo para armazená-lo com segurança ou faça referência a um segredo armazenado no Cofre de Chaves do Azure. Sim
sncMode O indicador de ativação SNC para acessar o servidor SAP onde a tabela está localizada.
Use se quiser usar o SNC para se conectar ao servidor SAP.
Os valores permitidos são 0 (off, o padrão) ou 1 (on).
Não
sncMyName O nome SNC do iniciador para acessar o servidor SAP onde a tabela está localizada.
Aplica-se quando sncMode está ativado.
Não
sncPartnerName O nome SNC do parceiro de comunicação para acessar o servidor SAP onde a tabela está localizada.
Aplica-se quando sncMode está ativado.
Não
sncLibraryPath A biblioteca do produto de segurança externa para acessar o servidor SAP onde a tabela está localizada.
Aplica-se quando sncMode está ativado.
Não
sncQop O nível de Qualidade de Proteção SNC a aplicar.
Aplica-se quando sncMode está ativado.
Os valores permitidos são 1 (Autenticação), (Integridade), (Privacidade), (Padrão), 8239 (Máximo).
Não
connectVia O tempo de execução de integração a ser usado para se conectar ao armazenamento de dados. Um tempo de execução de integração auto-hospedado é necessário, conforme mencionado anteriormente em Pré-requisitos. Sim

Exemplo 1: Conectar-se a um servidor de aplicativos SAP

{
    "name": "SapTableLinkedService",
    "properties": {
        "type": "SapTable",
        "typeProperties": {
            "server": "<server name>",
            "systemNumber": "<system number>",
            "clientId": "<client ID>",
            "userName": "<SAP user>",
            "password": {
                "type": "SecureString",
                "value": "<Password for SAP user>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemplo 2: Conectar-se a um servidor de mensagens SAP

{
    "name": "SapTableLinkedService",
    "properties": {
        "type": "SapTable",
        "typeProperties": {
            "messageServer": "<message server name>",
            "messageServerService": "<service name or port>",
            "systemId": "<system ID>",
            "logonGroup": "<logon group>",
            "clientId": "<client ID>",
            "userName": "<SAP user>",
            "password": {
                "type": "SecureString",
                "value": "<Password for SAP user>"
            }
        },
        "connectVia": {
            "referenceName": "<name of integration runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemplo 3: Conectar usando SNC

{
    "name": "SapTableLinkedService",
    "properties": {
        "type": "SapTable",
        "typeProperties": {
            "server": "<server name>",
            "systemNumber": "<system number>",
            "clientId": "<client ID>",
            "userName": "<SAP user>",
            "password": {
                "type": "SecureString",
                "value": "<Password for SAP user>"
            },
            "sncMode": 1,
            "sncMyName": "<SNC myname>",
            "sncPartnerName": "<SNC partner name>",
            "sncLibraryPath": "<SNC library path>",
            "sncQop": "8"
        },
        "connectVia": {
            "referenceName": "<name of integration runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Propriedades do conjunto de dados

Para obter uma lista completa das seções e propriedades para definir conjuntos de dados, consulte Conjuntos de dados. A seção a seguir fornece uma lista das propriedades suportadas pelo conjunto de dados da tabela SAP.

Para copiar dados de e para o serviço vinculado SAP BW Open Hub, as seguintes propriedades são suportadas:

Propriedade Descrição Necessário
type A type propriedade deve ser definida como SapTableResource. Sim
tableName O nome da tabela SAP da qual copiar dados. Sim

Exemplo

{
    "name": "SAPTableDataset",
    "properties": {
        "type": "SapTableResource",
        "typeProperties": {
            "tableName": "<SAP table name>"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<SAP table linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

Propriedades da atividade Copy

Para obter uma lista completa das seções e propriedades para definir atividades, consulte Pipelines. A seção a seguir fornece uma lista das propriedades suportadas pela fonte da tabela SAP.

Tabela SAP como origem

Para copiar dados de uma tabela SAP, as seguintes propriedades são suportadas:

Propriedade Descrição Necessário
type A type propriedade deve ser definida como SapTableSource. Sim
rowCount O número de linhas a serem recuperadas. Não
rfcTableFields Os campos (colunas) a serem copiados da tabela SAP. Por exemplo, column0, column1. Não
rfcTableOptions As opções para filtrar as linhas em uma tabela SAP. Por exemplo, COLUMN0 EQ 'SOMEVALUE'. Consulte também a tabela do operador de consulta SAP mais adiante neste artigo. Não
customRfcReadTableFunctionModule Um módulo de função RFC personalizado que pode ser usado para ler dados de uma tabela SAP.
Você pode usar um módulo de função RFC personalizado para definir como os dados são recuperados do seu sistema SAP e retornados ao serviço. O módulo de função personalizado deve ter uma interface implementada (importação, exportação, tabelas) semelhante à /SAPDS/RFC_READ_TABLE2, que é a interface padrão usada pelo serviço.
Não
partitionOption O mecanismo de partição para ler a partir de uma tabela SAP. As opções suportadas incluem:
  • None
  • PartitionOnInt (valores inteiros ou inteiros normais com preenchimento zero à esquerda, como 0000012345)
  • PartitionOnCalendarYear (4 dígitos no formato "AAAA")
  • PartitionOnCalendarMonth (6 dígitos no formato "AAAAMM")
  • PartitionOnCalendarDate (8 dígitos no formato "AAAAMMDD")
  • PartitionOntime (6 dígitos no formato "HHMMSS", como 235959)
Não
partitionColumnName O nome da coluna usada para particionar os dados. Não
partitionUpperBound O valor máximo da coluna especificada em partitionColumnName que será usado para continuar com o particionamento. Não
partitionLowerBound O valor mínimo da coluna especificada em partitionColumnName que será usado para continuar com o particionamento. (Nota: partitionLowerBound não pode ser "0" quando a opção de partição é PartitionOnInt) Não
maxPartitionsNumber O número máximo de partições para dividir os dados. O valor predefinido é 1. Não
sapDataColumnDelimiter O único caractere usado como delimitador passou para o SAP RFC para dividir os dados de saída. Não

Gorjeta

Se sua tabela SAP tiver um grande volume de dados, como vários bilhões de linhas, use partitionOption e partitionSetting divida os dados em partições menores. Nesse caso, os dados são lidos por partição e cada partição de dados é recuperada do seu servidor SAP por meio de uma única chamada RFC.

Tomando partitionOption como partitionOnInt exemplo, o número de linhas em cada partição é calculado com esta fórmula: (total de linhas situadas entre partitionUpperBound e partitionLowerBound)/maxPartitionsNumber.

Para carregar partições de dados em paralelo para acelerar a cópia, o grau paralelo é controlado pela parallelCopies configuração na atividade de cópia. Por exemplo, se você definir parallelCopies como quatro, o serviço gerará e executará simultaneamente quatro consultas com base na opção e nas configurações de partição especificadas, e cada consulta recuperará uma parte dos dados da tabela SAP. Recomendamos vivamente que faça maxPartitionsNumber um múltiplo do valor do parallelCopies imóvel. Ao copiar dados para o armazenamento de dados baseado em arquivo, ele também é recomendado para gravar em uma pasta como vários arquivos (especifique apenas o nome da pasta), caso em que o desempenho é melhor do que gravar em um único arquivo.

Gorjeta

O BASXML é ativado por padrão para este conector de tabela SAP dentro do serviço.

No rfcTableOptions, você pode usar os seguintes operadores de consulta SAP comuns para filtrar as linhas:

Operator Description
EQ Igual a
NE Diferente de
LT Menor que
LE Menor que ou igual a
GT Maior que
GE Maior que ou igual a
IN Como em TABCLASS IN ('TRANSP', 'INTTAB')
LIKE Como em LIKE 'Emma%'

Exemplo

"activities":[
    {
        "name": "CopyFromSAPTable",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<SAP table input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SapTableSource",
                "partitionOption": "PartitionOnInt",
                "partitionSettings": {
                     "partitionColumnName": "<partition column name>",
                     "partitionUpperBound": "2000",
                     "partitionLowerBound": "1",
                     "maxPartitionsNumber": 500
                 }
            },
            "sink": {
                "type": "<sink type>"
            },
            "parallelCopies": 4
        }
    }
]

Junte-se a tabelas SAP

Atualmente, o conector SAP Table suporta apenas uma única tabela com o módulo de função padrão. Para obter os dados associados de várias tabelas, você pode aproveitar a propriedade customRfcReadTableFunctionModule no conector SAP Table seguindo as etapas abaixo:

  • Escreva um módulo de função personalizado, que pode tomar uma consulta como OPTIONS e aplicar sua própria lógica para recuperar os dados.
  • Para o "Módulo de função personalizado", digite o nome do seu módulo de função personalizado.
  • Para as "Opções de tabela RFC", especifique a instrução table join para alimentar seu módulo de função como OPTIONS, como "<TABLE1> INNER JOIN <TABLE2> ON COLUMN0".

Abaixo encontra-se um exemplo:

Sap Table Join

Gorjeta

Você também pode considerar ter os dados associados agregados no VIEW, que é suportado pelo conector SAP Table. Você também pode tentar extrair tabelas relacionadas para integrar o Azure (por exemplo, Armazenamento do Azure, Banco de Dados SQL do Azure) e, em seguida, usar o Fluxo de Dados para prosseguir com a associação ou o filtro adicionais.

Criar módulo de função personalizado

Para a tabela SAP, atualmente suportamos a propriedade customRfcReadTableFunctionModule na fonte de cópia, o que permite que você aproveite sua própria lógica e processe dados.

Como orientação rápida, aqui estão alguns requisitos para começar a usar o "Módulo de função personalizado":

  • Definição:

    Definition

  • Exporte dados para uma das tabelas abaixo:

    Export table 1

    Export table 2

Abaixo estão ilustrações de como o conector de tabela SAP funciona com o módulo de função personalizado:

  1. Construa conexão com o servidor SAP via SAP NCO.

  2. Invoque "Módulo de função personalizado" com os parâmetros definidos abaixo:

    • QUERY_TABLE: o nome da tabela definida no conjunto de dados da Tabela SAP;
    • Delimitador: o delimitador definido no SAP Table Source;
    • ROWCOUNT/Option/Fields: o Rowcount/Aggregated Option/Fields que você definiu na origem da tabela.
  3. Obtenha o resultado e analise os dados das seguintes maneiras:

    1. Analise o valor na tabela Fields para obter os esquemas.

      Parse values in Fields

    2. Obtenha os valores da tabela de saída para ver qual tabela contém esses valores.

      Get values in output table

    3. Obtenha os valores no OUT_TABLE, analise os dados e escreva-os no coletor.

Mapeamentos de tipo de dados para uma tabela SAP

Quando você copia dados de uma tabela SAP, os mapeamentos a seguir são usados dos tipos de dados da tabela SAP para os tipos de dados provisórios usados no serviço. Para saber como a atividade de cópia mapeia o esquema de origem e o tipo de dados para o coletor, consulte Mapeamentos de esquema e tipo de dados.

Tipo SAP ABAP Tipo de dados provisórios de serviço
C (String) String
I (Inteiro) Int32
F (Flutuação) Double
D (Data) String
T (Tempo) String
P (BCD embalado, moeda, decimal, Qty) Decimal
N (Numérico) String
X (Binário e Raw) String

Propriedades da atividade de pesquisa

Para saber detalhes sobre as propriedades, verifique Atividade de pesquisa.

Para obter uma lista dos armazenamentos de dados suportados como fontes e coletores pela atividade de cópia, consulte Armazenamentos de dados suportados.