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

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 nos pipelines do Azure Data Factory e do Azure Synapse Analytics para copiar dados de uma tabela SAP. Para obter mais informações, confira Visão geral da atividade de cópia.

Dica

Para saber mais sobre o suporte geral no cenário de integração de dados do SAP, confira o artigo técnico Integração de dados do SAP usando o Azure Data Factory com introdução detalhada sobre cada conector SAP, comparações e orientações.

Funcionalidades com suporte

Há suporte para este conector de tabela SAP para as seguintes funcionalidades:

Funcionalidades com suporte IR
Atividade de cópia (origem/-) 2
Atividade de pesquisa 2

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

Para obter a lista de armazenamentos de dados que têm suporte como fontes ou coletores da Atividade de cópia, confira a tabela Armazenamentos de dados com suporte.

Especificamente, este conector da tabela SAP dá suporte à:

  • Copiando dados de uma tabela SAP em:

    • Componente central SAP ERP (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 superior (em uma Pilha de Pacote de Suporte SAP recente lançada após 2015).
    • SAP S/4HANA.
    • Outros produtos em SAP Business Suit versão 7.01 ou superior (em uma Pilha de Pacote de Suporte SAP recente lançada após 2015).
  • Copiar dados de uma tabela transparente do SAP, uma tabela em pool, uma tabela clusterizada e uma exibição.

  • Copiar dados usando a autenticação básica ou a SNC (comunicações de rede segura) se a SNC estiver configurada.

  • Conexão com um servidor de aplicativos ou um servidor de mensagens SAP.

  • Recuperando dados por meio da 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 a versão do NetWeaver >= 7.4. Caso você não tenha certeza sobre o seu ambiente, aqui estão as etapas para confirmar a versão do seu sistema SAP:

  1. Use a GUI do SAP para se conectar ao sistema SAP.
  2. Acesse Sistema ->Status.
  3. Verifique o lançamento do SAP_BASIS, confira se ele é igual ou maior que 701.
    Check SAP_BASIS

Pré-requisitos

Para usar esse conector da tabela SAP, é necessário:

  • Configurar um Integration Runtime auto-hospedado (versão 3.17 ou superior). Para obter mais informações, confira Criar e configurar um runtime de integração auto-hospedada.

  • Baixe o Conector SAP de 64 bits para Microsoft .NET 3.0 do site da SAP e instale-o no computador do runtime de integração auto-hospedada. Durante a instalação, lembre-se de selecionar a opção Instalar Assemblies no GAC na janela Etapas de instalação opcionais.

    Install SAP Connector for .NET

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

    • Autorização para usar destinos de chamada de função remota (RFC).
    • Permissões para a atividade Executar do objeto de autorização S_SDSAUTH. É possível consultar o SAP Note 460089 na maioria dos objetos de autorização. Determinadas RFCs são exigidas pelo conector NCo subjacente, por exemplo RFC_FUNCTION_SEARCH.

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 para uma tabela SAP usando a interface do usuário

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

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

  2. Procure SAP e selecione o conector 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 da configuração do conector

As seções a seguir fornecem detalhes sobre as propriedades usadas para definir as entidades específicas ao conector Tabela SAP.

Propriedades do serviço vinculado

Há suporte para as seguintes propriedades no serviço vinculado do SAP BW Open Hub:

Propriedade Descrição Obrigatório
type A propriedade type precisa 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 de sistema 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-o 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-o para se conectar a um servidor de mensagens SAP.
Não
systemId A ID do sistema SAP em que a tabela está localizada.
Use-a para se conectar a um servidor de mensagens SAP.
Não
logonGroup O grupo de logon para o sistema SAP.
Use-o para se conectar a um servidor de mensagens SAP.
Não
clientId O ID de Cliente do cliente no sistema SAP.
Valor permitido: Um número decimal de três dígitos representado como uma cadeia de caracteres.
Sim
language O idioma que o sistema SAP usa.
O valor padrão é EN.
Não
userName O nome do usuário que tem acesso ao servidor SAP. Sim
password A senha do usuário. Marque esse campo com o tipo SecureString para armazená-lo com segurança ou referencie um segredo armazenado no Azure Key Vault. Sim
sncMode O indicador de ativação da SNC para acessar o servidor SAP onde a tabela está localizada.
Use se você 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 do SNC do iniciador para acessar o servidor SAP onde a tabela está localizada.
Aplica-se quando sncMode está ativado.
Não
sncPartnerName O nome do 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 da SNC a ser aplicado.
Aplica-se quando sncMode está ativado.
Os valores permitidos são 1 (autenticação), 2 (integridade), 3 (privacidade), 8 (padrão), 9 (máximo).
Não
connectVia O runtime de integração a ser usado para se conectar ao armazenamento de dados. É necessário um Integration Runtime auto-hospedado, conforme mencionado anteriormente nos Pré-requisitos. Sim

Exemplo 1: Conecte 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: Conecte 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: conecte usando o 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 das propriedades para definir os conjuntos de dados, confira Conjuntos de dados. A seção a seguir fornece uma lista das propriedades compatíveis pelo conjunto de dados da tabela do SAP.

Para copiar dados de e para o SAP BW serviço vinculado de Hub aberto, há suporte para as seguintes propriedades:

Propriedade Descrição Obrigatório
type A propriedade type precisa ser definida como SapTableResource. Sim
tableName O nome da tabela SAP para copiar os dados do formulário. 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 de cópia

Para obter uma lista completa das seções e das propriedades para definir as atividades, confira Pipelines. A seção a seguir fornece uma lista das propriedades compatíveis pelo origem da tabela do SAP.

Tabela SAP como origem

Para copiar dados da tabela SAP, há suporte para as seguintes propriedades:

Propriedade Descrição Obrigatório
type A propriedade type precisa 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.
Use um módulo de função RFC personalizado para definir como os dados são recuperados do sistema SAP e retornados para o serviço. O módulo de função personalizado precisa ter uma interface implementada (importação, exportação, tabelas) semelhante a /SAPDS/RFC_READ_TABLE2, que é a interface padrão usada pelo serviço.
Não
partitionOption O mecanismo de partição para ler de uma tabela SAP. As opções com suporte incluem:
  • None
  • PartitionOnInt (inteiro normal ou valores inteiros com preenchimento zero à esquerda, como 0000012345 )
  • PartitionOnCalendarYear (4 dígitos no formato "aaaa")
  • PartitionOnCalendarMonth (6 dígitos no formato "YYYYMM")
  • PartitionOnCalendarDate (8 dígitos no formato "YYYYMMDD")
  • 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 no partitionColumnName que será usado para continuar com o particionamento. Não
partitionLowerBound O valor mínimo da coluna especificada no partitionColumnName que será usado para continuar com o particionamento. (Observação: 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 padrão é 1. Não
sapDataColumnDelimiter O caractere único que é utilizado como delimitador passado para o SAP RFC para dividir os dados de saída. Não

Dica

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

partitionOptionComo partitionOnInt exemplo, o número de linhas em cada partição é calculado com esta fórmula: (total de linhas caindo 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, ao definir parallelCopies como quatro, o serviço gera e executa simultaneamente quatro consultas com base na opção de partição especificada e nas configurações, e cada consulta recupera uma parte dos dados da Tabela SAP. É altamente recomendável fazer maxPartitionsNumber um múltiplo do valor da parallelCopies propriedade. Ao copiar os dados para o armazenamento de dados baseado em arquivo, também recomendamos gravá-los em uma pasta como vários arquivos (apenas especifique o nome da pasta) para obter um desempenho melhor do que gravá-los em um arquivo.

Dica

O BASXML é habilitado por padrão para este conector Tabela SAP dentro do serviço.

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

Operador Descrição
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
        }
    }
]

Unir tabelas SAP

Atualmente, o conector de tabela SAP dá suporte apenas a 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 de tabela do SAP seguindo as etapas abaixo:

  • Escreva um módulo de função personalizada, que pode fazer uma consulta como opções e aplicar sua própria lógica para recuperar os dados.
  • Para o "módulo de função personalizada", insira o nome do seu módulo de função personalizada.
  • Para as "opções de tabela da RFC", especifique a instrução de junção de tabela a ser alimentada em seu módulo de função como opções, como " <TABLE1> junção interna <TABLE2> em COLUMN0".

Veja um exemplo:

Sap Table Join

Dica

Você também pode considerar ter os dados associados agregados na exibição, que é suportado pelo conector de tabela do SAP. Você também pode tentar extrair tabelas relacionadas para se integrar ao Azure (por exemplo, armazenamento do Azure, banco de dados SQL do Azure) e, em seguida, usar o fluxo para prosseguir com o ingresso ou o filtro.

Criar o módulo função personalizada

Para a tabela SAP, atualmente damos suporte à propriedade customRfcReadTableFunctionModule na fonte de cópia, que permite aproveitar seus próprios dados de lógica e de processo.

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

  • Definição:

    Definition

  • Exporte dados em uma das tabelas abaixo:

    Export table 1

    Export table 2

Veja abaixo as ilustrações de como o conector de tabela SAP funciona com o módulo de função personalizada:

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

  2. Invoque "módulo de função personalizada" com os parâmetros definidos como abaixo:

    • QUERY_TABLE: o nome da tabela que você definiu no conjunto de uma Tabela SAP;
    • Delimitador: o delimitador definido na origem da Tabela SAP;
    • NÚMERO de linhas/opção/campos: a opção de número de linhas/campos agregados que você definiu na origem da tabela.
  3. Obtenha o resultado e analise os dados das maneiras abaixo:

    1. Analise o valor na tabela campos 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 grave-os no coletor.

Mapeamentos de tipo de dados para uma tabela SAP

Ao copiar dados de uma Tabela SAP, os seguintes mapeamentos são usados de tipos de dados da Tabela SAP para tipos de dados provisórios usados 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 SAP ABAP Tipo de dados provisório do serviço
C (cadeia de caracteres) String
I (Inteiro) Int32
F(Float) Double
D (Data) String
T (Horário) String
P(BCD Empacotado, Moeda, Decimal, Qtd) Decimal
N (Numérico) String
X (Binário e Raiz) String

Pesquisar propriedades de atividade

Para saber detalhes sobre as propriedades, verifique Pesquisar atividade.

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.