Copiar dados do SAP HANA utilizando o Azure Data Factory ou 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 banco de dados SAP HANA. Ele amplia o artigo Visão geral da atividade de cópia que apresenta uma 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 com introdução detalhada sobre cada conector SAP, comparações e orientações.

Funcionalidades com suporte

Há suporte ao conector do SAP HANA para as seguintes funcionalidades:

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

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

Para obter uma lista de armazenamentos de dados com suporte, que funcionam como fontes/coletores da atividade de cópia, confira a tabela Armazenamentos de dados com suporte.

Especificamente, este conector do SAP HANA dá suporte à:

  • Cópia de dados de qualquer versão do banco de dados SAP HANA.
  • Cópia de dados dos modelos de informações do HANA (exibições de Análise e de Cálculo) e das tabelas linha/coluna.
  • Cópia de dados usando a autenticação Básica ou do Windows.
  • Cópia paralela de uma fonte do SAP HANA. Confira a seção Cópia paralela do SAP HANA para obter detalhes.

Dica

Para copiar dados no armazenamento de dados do SAP HANA, use o conector ODBC genérico. Consulte a seção coletor do SAP HANA com detalhes. Observe que os serviços vinculados para o conector do SAP HANA e o conector ODBC são de tipos diferentes, portanto, não podem ser reutilizados.

Pré-requisitos

Para usar esse conector do SAP HANA, você precisa:

  • Configurar um Integration Runtime auto-hospedado. Consulte o artigo Self-hosted integration runtime (Integration Runtime auto-hospedado) para obter detalhes.
  • Instalar o driver ODBC do SAP HANA no computador do Integration Runtime. Baixe o driver ODBC do SAP HANA do Centro de Download de Software SAP. Pesquisa com a palavra-chave CLIENTE SAP HANA para Windows.

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 o SAP HANA usando a interface do usuário

Use as etapas a seguir para criar um serviço vinculado para o SAP HANA 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 do SAP HANA.

    Screenshot of the SAP HANA 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 SAP HANA.

Detalhes da configuração do conector

As seções que a seguir fornecem detalhes sobre as propriedades usadas para definir entidades do Data Factory específicas ao conector do SAP HANA.

Propriedades do serviço vinculado

As propriedades a seguir têm suporte para o serviço vinculado do SAP HANA:

Propriedade Descrição Obrigatório
type A propriedade type deve ser definida como: SapHana Sim
connectionString Especifique as informações necessárias para se conectar ao SAP HANA usando a autenticação básica ou a autenticação do Windows. Consulte os exemplos a seguir.
Na cadeia de conexão, servidor/porta é obrigatório (a porta padrão é 30015) e o nome de usuário e a senha são obrigatórios ao usar a autenticação básica. Para obter configurações avançadas adicionais, consulte Propriedades de conexão ODBC do SAP HANA
Você também pode colocar uma senha no Azure Key Vault e extrair a configuração de senha da cadeia de conexão. Consulte o artigo Credenciais de armazenamento no Azure Key Vault para obter mais detalhes.
Sim
userName Especifique o nome de usuário ao usar a autenticação do Windows. Exemplo: user@domain.com Não
password Especifique a senha para a conta de usuário. Marque este campo como um SecureString para armazená-lo com segurança ou referencie um segredo armazenado no Azure Key Vault. Não
connectVia O Integration Runtime a ser usado para se conectar ao armazenamento de dados. É necessário um Integration Runtime auto-hospedado, conforme mencionado nos Pré-requisitos. Sim

Exemplo: usar autenticação básica

{
    "name": "SapHanaLinkedService",
    "properties": {
        "type": "SapHana",
        "typeProperties": {
            "connectionString": "SERVERNODE=<server>:<port (optional)>;UID=<userName>;PWD=<Password>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemplo: usar autenticação do Windows

{
    "name": "SapHanaLinkedService",
    "properties": {
        "type": "SapHana",
        "typeProperties": {
            "connectionString": "SERVERNODE=<server>:<port (optional)>;",
            "userName": "<username>", 
            "password": { 
                "type": "SecureString", 
                "value": "<password>" 
            } 
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Se você estava usando o serviço vinculado do SAP HANA com o conteúdo a seguir, ainda terá suporte «no estado em que se encontra», mas é recomendável usar o novo de agora em diante.

Exemplo:

{
    "name": "SapHanaLinkedService",
    "properties": {
        "type": "SapHana",
        "typeProperties": {
            "server": "<server>:<port (optional)>",
            "authenticationType": "Basic",
            "userName": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "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 SAP HANA.

Para copiar dados do SAP HANA, há suporte para as seguintes propriedades:

Propriedade Descrição Obrigatório
type A propriedade type do conjunto de dados deve ser definida como: SapHanaTable Sim
esquema O nome do esquema no banco de dados do SAP HANA. Não (se "query" na fonte da atividade for especificada)
tabela O nome da tabela no banco de dados do SAP HANA. Não (se "query" na fonte da atividade for especificada)

Exemplo:

{
    "name": "SAPHANADataset",
    "properties": {
        "type": "SapHanaTable",
        "typeProperties": {
            "schema": "<schema name>",
            "table": "<table name>"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<SAP HANA linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

Se você estava usando o conjunto de dados com tipos RelationalTable, ele ainda tem suporte como está, mas é recomendável usar o novo de agora em diante.

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 do SAP HANA.

SAP HANA como fonte

Dica

Para ingerir dados do SAP HANA com eficiência usando o particionamento de dados, saiba mais na seção Cópia paralela do SAP HANA.

Para copiar dados do SAP HANA, as seguintes propriedades têm suporte na seção origem da atividade de cópia:

Propriedade Descrição Obrigatório
type A propriedade type da origem da atividade de cópia deve ser definida como: SapHanaSource Sim
Consulta Especifica a consulta SQL para ler dados da instância do SAP HANA. Sim
partitionOptions Especifica as opções de particionamento de dados usadas para ingerir dados do SAP HANA. Saiba mais na seção Cópia paralela do SAP HANA.
Os valores permitidos são: Nenhum (padrão), PhysicalPartitionsOfTable, SapHanaDynamicRange. Saiba mais na seção Cópia paralela do SAP HANA. PhysicalPartitionsOfTable só pode ser usado ao copiar dados de uma tabela, mas não de uma consulta.
Quando uma opção de partição é habilitada (ou seja, não None), o grau de paralelismo para carregar dados simultaneamente do SAP HANA é controlado pela configuração parallelCopies na atividade de cópia.
Falso
partitionSettings Especifique o grupo de configurações para o particionamento de dados.
Aplicar quando a opção de partição for SapHanaDynamicRange.
Falso
partitionColumnName Especifique o nome da coluna de origem que será usada pela partição para cópia paralela. Se não for especificado, o índice ou a chave primária da tabela será auto-detectado e usado como coluna de partição.
Aplicar quando a opção de partição for SapHanaDynamicRange. Se você usar uma consulta para recuperar os dados de origem, conecte ?AdfHanaDynamicRangePartitionCondition na cláusula WHERE. Confira o exemplo na seção Cópia paralela do SAP HANA.
Sim ao usar a SapHanaDynamicRange partição. 
packetSize Especifica o tamanho do pacote de rede (em kilobytes) para dividir os dados em vários blocos. Se você tiver uma grande quantidade de dados a serem copiados, aumentar o tamanho do pacote poderá aumentar a velocidade de leitura do SAP HANA na maioria dos casos. O teste de desempenho é recomendado ao ajustar o tamanho do pacote. Não.
O valor padrão é 2048 (2 MB).

Exemplo:

"activities":[
    {
        "name": "CopyFromSAPHANA",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<SAP HANA input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SapHanaSource",
                "query": "<SQL query for SAP HANA>"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Se você estava usando a origem de cópia com tipo RelationalSource, ela ainda tem suporte “no estado em que se encontra”, mas é recomendável usar a nova no futuro.

Cópia paralela do SAP HANA

O conector do SAP HANA fornece particionamento de dados interno para copiar dados do SAP HANA em paralelo. Você pode encontrar opções de particionamento de dados na tabela Origem da atividade de cópia.

Screenshot of partition options

Quando você habilita a cópia particionada, o serviço executa consultas paralelas com relação à sua origem do SAP HANA para recuperar dados por partições. O grau paralelo é controlado pela configuração do parallelCopies 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 HANA.

É recomendável habilitar a cópia paralela com o particionamento de dados, especialmente quando você ingere grandes quantidades de dados do SAP HANA. Veja a seguir as configurações sugeridas para cenários diferentes. Ao copiar dados para o armazenamento de dados baseado em arquivo, recomendamos gravá-los em uma pasta como vários arquivos (apenas especifique o nome da pasta) para ter um desempenho melhor do que gravar em um arquivo.

Cenário Configurações sugeridas
Carga completa de uma tabela grande. Opção de partição: partições físicas da tabela.

Durante a execução, o serviço detecta automaticamente o tipo de partição física da tabela de SAP HANA especificada e escolhe a estratégia de partição correspondente:
- Particionamento por intervalos: defina a coluna de partição e os intervalos de partição para a tabela e, em seguida, copie os dados por intervalo.
- Particionamento de hash: use a chave de partição de hash como coluna de partição, depois particione e copie os dados com base em intervalos calculados no serviço.
- Particionamento round-robin ou sem partição use a chave de partição de hash como coluna de partição, depois particione e copie os dados com base em intervalos calculados no serviço.
Carregue uma grande quantidade de dados usando uma consulta personalizada. Opção de partição: partição de intervalo dinâmico.
Consulta: SELECT * FROM <TABLENAME> WHERE ?AdfHanaDynamicRangePartitionCondition AND <your_additional_where_clause>.
Coluna de partição: especifique a coluna usada para aplicar partição de intervalos dinâmicos.

Durante a execução, o serviço calcula primeiro os intervalos de valor da coluna de partição especificada, distribui uniformemente as linhas em um número de buckets de acordo com o número de valores de coluna de partição distintos e a configuração de cópia paralela do ADF e, em seguida, substitui pela ?AdfHanaDynamicRangePartitionCondition filtragem do intervalo de valores da coluna de partição para cada partição e envia ao SAP HANA.

Se você quiser usar várias colunas como coluna de partição, poderá concatenar os valores de cada coluna como uma coluna na consulta e especificá-la como coluna de partição, como SELECT * FROM (SELECT *, CONCAT(<KeyColumn1>, <KeyColumn2>) AS PARTITIONCOLUMN FROM <TABLENAME>) WHERE ?AdfHanaDynamicRangePartitionCondition.

Exemplo: consulta com partições físicas de uma tabela

"source": {
    "type": "SapHanaSource",
    "partitionOption": "PhysicalPartitionsOfTable"
}

Exemplo: consulta com a partição do intervalo dinâmico

"source": {
    "type": "SapHanaSource",
    "query": "SELECT * FROM <TABLENAME> WHERE ?AdfHanaDynamicRangePartitionCondition AND <your_additional_where_clause>",
    "partitionOption": "SapHanaDynamicRange",
    "partitionSettings": {
        "partitionColumnName": "<Partition_column_name>"
    }
}

Mapeamento de tipo de dados para SAP HANA

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

Tipo de dados do SAP HANA Tipo de dados provisório do serviço
ALPHANUM String
bigint Int64
BINARY Byte[]
BINTEXT Cadeia de caracteres
BLOB Byte[]
BOOL Byte
CLOB String
DATE Datetime
DECIMAL Decimal
DOUBLE Double
FLOAT Double
INTEGER Int32
NCLOB String
NVARCHAR Cadeia de caracteres
real Único
SECONDDATE DateTime
SHORTTEXT Cadeia de caracteres
SMALLDECIMAL Decimal
SMALLINT Int16
STGEOMETRYTYPE Byte[]
STPOINTTYPE Byte[]
TEXT String
TIME TimeSpan
TINYINT Byte
VARCHAR String
timestamp Datetime
VARBINARY Byte[]

Coletor do SAP HANA

Atualmente, o conector do SAP HANA não tem suporte como coletor, embora seja possível usar o conector ODBC genérico com o driver do SAP HANA para gravar dados no SAP HANA.

Siga os Pré-requisitos para configurar o tempo de execução de integração auto-hospedado e instale o driver ODBC do SAP HANA primeiro. Crie um serviço vinculado de ODBC para se conectar ao armazenamento de dados do SAP HANA, conforme mostrado no exemplo a seguir e, depois, crie um conjunto de dados e um coletor de atividade de cópia com o tipo ODBC adequadamente. Saiba mais no artigo conector ODBC.

{
    "name": "SAPHANAViaODBCLinkedService",
    "properties": {
        "type": "Odbc",
        "typeProperties": {
            "connectionString": "Driver={HDBODBC};servernode=<HANA server>.clouddatahub-int.net:30015",
            "authenticationType": "Basic",
            "userName": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Pesquisar propriedades de atividade

Para saber detalhes sobre as propriedades, verifique Pesquisar atividade.

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