Criação de tabelas virtuais

Objective

After completing this lesson, you will be able to crie e administre tabelas virtuais em esquemas clássicos e containers HDI e consuma tabelas virtuais de fontes remotas.

Tabelas virtuais

Acesso a objetos remotos

Para acessar dados de objetos específicos de um sistema remoto (objetos remotos), o SAP HANA implementa tabelas virtuais. As tabelas virtuais são objetos de catálogo e estão localizadas em um esquema.

Uma tabela virtual dá acesso a um objeto remoto (uma tabela ou uma visão no exemplo abaixo).

Este slide explica o conceito de tabelas virtuais.

Nota

Aqui, chamamos deliberadamente artefatos no sistema remoto de "objetos" e não de "tabelas" por pelo menos dois motivos:
  • Primeiro, o tipo de artefatos remotos depende do sistema remoto. Em um sistema de banco de dados, é claro, essas podem ser tabelas. Mas em um sistema de arquivos, não existem tabelas, mas arquivos. Um arquivo .csv ou .txt com uma estrutura bem definida pode certamente ser convertido em uma tabela virtual, mas isso depende da capacidade do adaptador e requer uma definição de metadados para identificar tipos de coluna, entre outros.
  • Além disso, mesmo em um sistema de banco de dados remoto, existem tabelas e visões clássicas. A maioria dos adaptadores pode acessar tabelas remotas e visões remotas de forma semelhante.

Assim que as tabelas virtuais são criadas, elas podem ser consumidas pelos processos do banco de dados como se estivessem fisicamente localizadas no banco de dados de destino. No entanto, o princípio chave das tabelas virtuais é que elas não armazenam os dados no banco de dados local, mas somente os metadados. Em vez disso, eles expõem dados remotos por meio de sua fonte remota de suporte sempre que uma consulta é executada sobre eles.

Nota

Uma abordagem alternativa é possível, que é consumir dados remotos sem tabelas virtuais. Ele é chamado de Banco de dados vinculado e só está disponível com fontes remotas do Smart Data Access. O conceito, os benefícios e as limitações são discutidos posteriormente.

Definição de tabela virtual

Uma tabela virtual tem duas partes em suas definições:

  • O identificador de tabela virtual
  • O identificador do objeto remoto, incluindo a referência à fonte remota
Este slide fornece uma síntese dos atributos da tabela virtual.

Nota

O nome do banco de dados remoto pode ser <NULL> mesmo que o sistema remoto seja realmente um banco de dados. Isso ocorre porque, em algumas configurações, por exemplo, com SAP HANA como sistema remoto, o objeto fonte remoto já determina o banco de dados com o host e a porta.

Com outros tipos de sistema remoto, uma única fonte remota pode referenciar um servidor de banco de dados no qual vários bancos de dados podem ser acessados. É aqui que a configuração do banco de dados remoto é necessária em uma definição de tabela virtual.

Consideração de segurança para tabelas virtuais

Ao criar tabelas virtuais, você precisa cumprir vários pré-requisitos em relação não só à disponibilidade da fonte remota e do sistema remoto, mas também às autorizações em vigor nos dois sistemas. Aqui estão eles.

No sistema local

Para criar uma tabela virtual, os pré-requisitos para o usuário local são os seguintes:

  • O usuário local que criou a fonte remota recebe automaticamente a autorização para criar tabelas virtuais nessa fonte remota.
  • Qualquer outro uso requer o privilégio CREATE VIRTUAL TABLE na fonte remota.
  • Em qualquer caso, o usuário local precisa CREATE ANY privilégios no esquema em que a tabela virtual será armazenada.

No sistema remoto

A configuração de credenciais da fonte remota (ou uma credencial secundária existente para seu usuário nessa fonte remota) determina qual usuário remoto está acessando o objeto remoto/de origem.

Cuidado

Se não existirem credenciais para a fonte remota (usuário técnico ou credenciais secundárias), não é possível acessar os objetos remotos. Isso pode ser resolvido para alguns tipos de fontes remotas, mas geralmente não é recomendado.

Como regra geral, quando você cria uma tabela virtual apontando para um sistema de banco de dados remoto, o usuário remoto derivado da definição de fonte remota (ou uma credencial secundária existente associada ao seu usuário) só precisa doCATALOG READprivilégio (SAP HANA) ou de um equivalente, mas NÃO necessariamente um privilégio SELECT na tabela ou visão remota (ou seu esquema contendo).

Nota

Isso permite uma configuração de segurança conveniente ao usar credenciais secundárias; na verdade, um usuário com o privilégio CATALOG READ (ou equivalente) pode criar tabelas virtuais sem ser capaz de selecionar os dados dos objetos de origem correspondentes.

Como criar uma tabela virtual?

Uma tabela virtual pode ser criada de duas formas diferentes:

  • No Explorador de banco de dados SAP HANA, usando o catálogo
  • Com uma instrução SQL

Configuração de tabela virtual com a interface gráfica do usuário

Com o editor baseado em formulário, você usa uma fonte remota existente para listar os objetos aos quais ela dá acesso e, em seguida, cria objetos virtuais para uma ou várias delas.

Este slide mostra como utilizar a lista de objetos de fonte remota.

Com a abordagem baseada em formulário, você seleciona objetos remotos primeiro e, em seguida, define onde armazenar a tabela virtual e como nomeá-los.

Então, vamos discutir os diferentes elementos que identificam objetos remotos primeiro.

  • A fonte remota é um elemento obrigatório, como discutido anteriormente.
  • O elemento Banco de dados é usado para alguns tipos de fontes remotas (ou seja, alguns adaptadores) quando a fonte remota não faz referência a um banco de dados específico.

    Um caso de uso comum é quando um sistema de banco de dados remoto pode dar acesso a mais de um banco de dados a partir de um único host e porta.

    Para o SAP HANA como um sistema remoto, a fonte remota sempre especifica um único banco de dados de destino. Como consequência, a parte do banco de dados é sempre <NULL>.

  • Esquema

    O esquema é um artefato clássico na topologia do banco de dados. Na maioria dos sistemas de banco de dados, incluindo SAP HANA, tabelas, visões e muitos outros objetos, estão localizados em esquemas. No entanto, o conceito de esquema nem sempre existe. Por exemplo, com o adaptador de arquivo SDI, não existe nenhum esquema. Por isso, a parte do esquema também é <NULL>.

  • Objeto

    Por fim, o objeto remoto é identificado com o respectivo nome. Este elemento é obrigatório em qualquer definição de tabela virtual.

Depois de selecionar um ou vários objetos para criar uma tabela virtual para, você precisa definir os identificadores das tabelas virtuais no seu sistema SAP HANA local (destino).

  • Se você criar uma única tabela virtual, a caixa de diálogo solicita o nome do objeto. Pelo contrário, se você criar várias tabelas virtuais, a caixa de diálogo – como mostrado no exemplo – solicita um prefixo que será adicionado a todos os nomes dos objetos remotos.

    Dica

    Em geral, é recomendado usar um prefixo que ajude a identificar tabelas virtuais. Como lembrete, mesmo que as tabelas virtuais tenham um ícone dedicado no explorador de catálogos, elas ainda estão listadas com outras tabelas de linhas e colunas clássicas, por isso um prefixo específico pode ajudar.
  • Por último, mas não menos importante, o esquema onde criar as novas tabelas virtuais deve ser especificado. Por padrão, ele é predefinido para o esquema do seu usuário.

Inicie este vídeo para saber como criar uma tabela virtual com a interface gráfica de usuário do Explorador de banco de dados SAP HANA.

Configuração de tabela virtual com SQL

Além da lista de objetos de fonte remota no Explorador de banco de dados SAP HANA, você pode criar tabelas virtuais com instruções SQL. Isso é útil quando você já conhece os identificadores de objetos remotos, especialmente se quiser criar tabelas virtuais em massa.

A afirmação é a seguinte:

Code Snippet
12
CREATE VIRTUAL TABLE <schema>.<virtual_table_name> AT <remote_source>.<database>.<schema>.<object_name>;

As informações já discutidas sobre como definir os objetos remotos ao criar uma tabela virtual a partir da interface gráfica do usuário são aplicadas da mesma forma. Como em qualquer instrução SQL no SAP HANA, os identificadores devem estar entre aspas duplas ou são interpretados automaticamente como independente de maiúsculas/minúsculas (e armazenados em maiúsculas).

Em alguns cenários, o <database> remoto e/ou <schema> pode precisar ser definido como "<NULL>".

Cuidado

Mesmo que você use identificadores sem aspas para a fonte remota ou nome do objeto, o valor <NULL> para um banco de dados ou esquema, quando aplicável, deve SEMPRE ser mencionado. Sem aspas duplas, a instrução SQL falhará.

Aqui está um exemplo de duas instruções SQL para criar as mesmas tabelas virtuais que as que criamos anteriormente com base em objetos no esquema EPM_MODEL remoto (fonte CL_RS_OP_SDA):

Code Snippet
12345
CREATE VIRTUAL TABLE "CL_DATA_ENGINEER_FED"."VT_SNWD_PO" AT "CL_RS_OP_SDA"."<NULL>"."EPM_MODEL"."SNWD_PO"; CREATE VIRTUAL TABLE "CL_DATA_ENGINEER_FED"."VT_SNWD_PO_I" AT "CL_RS_OP_SDA"."<NULL>"."EPM_MODEL"."SNWD_PO_I";

Se o usuário da sessão for CL_DATA_ENGINEER_FED, a menção desse esquema no identificador de tabela virtual pode ser omitida.

Inicie este vídeo para saber como criar uma tabela virtual com uma instrução SQL.

Definição de tabela virtual em um projeto SAP Business Application Studio

Acesso a objetos remotos a partir de um container HDI

Ao trabalhar em projetos de desenvolvimento ou modelagem no SAP Business Application Studio, você tem a possibilidade de consumir fontes remotas e criar tabelas virtuais a partir de um módulo de banco de dados SAP HANA (contendo artefatos de tempo de design), que é implementado em um container HDI (artefatos de tempo de execução).

Um artefato dedicado de tipo de design, .hdbvirtualtable, é usado para esse fim.

Como lembrete, uma fonte remota no SAP HANA não é um objeto de esquema. Por isso, você não pode criar uma fonte remota dentro do módulo HDB de um projeto. No entanto, você pode configurar seu projeto para que ele consuma uma fonte remota existente.

Vamos ver como fazer isso.

Como consumir objetos remotos

O consumo de objetos remotos a partir de um container HDI depende dos seguintes pré-requisitos:

  • Um serviço fornecido pelo usuário está sendo executado no espaço Cloud Foundry onde você planeja implementar seu serviço de container HDI.

    Este serviço fornecido pelo usuário deve ter atribuídos um usuário com as seguintes autorizações:

    CREATE VIRTUAL TABLE na fonte remota que você deseja usar.

  • O serviço fornecido pelo usuário está vinculado ao seu projeto na definição de dependência do arquivo mta.yaml
  • Um arquivo .hdbentures concede os privilégios relevantes ao usuário Proprietário do objeto HDI (#OO) que terá os objetos de container HDI.

Nota

O projeto deve ser implementado com êxito depois de fazer essas alterações, para que o proprietário do objeto receba os privilégios relevantes, permitindo que você crie tabelas virtuais.

Criar tabelas virtuais no SAP Business Application Studio

Para criar uma tabela virtual no SAP Business Application Studio, você cria um arquivo de tempo de design .hdbvirtualtable correspondente. Esse arquivo pode ser editado em um editor de texto ou em um editor dedicado. Este último traz um benefício, que é a capacidade de ler a hierarquia de objetos fonte remota.

Este slide mostra como criar uma tabela virtual no SAP Business Application Studio.

Em um editor de texto, o mesmo objeto de tempo de design terá o seguinte aspecto:

Code Snippet
12
VIRTUAL TABLE "CL_V_SNWD_PO" AT "CL_RS_OP_SDA"."<NULL>"."EPM_MODEL"."SNWD_PO"

Recomenda-se usar as aspas duplas para evitar inconsistências no uso de maiúsculas e minúsculas. Dependendo da convenção de nomes que você selecionou, isso também pode ser obrigatório. Por exemplo, se você planeja usar nomes de objeto misturando letras minúsculas e maiúsculas, se usar espaços de nomes em identificadores de objeto e/ou esses identificadores incluírem pontos.

Nota

Se você usa ou não delimitadores de aspas duplas em geral, a palavra-chave "<NULL>" deve ser sempre citada sempre que for usada em uma definição de tabela virtual. Isso é ilustrado no campo Nome do banco de dados no exemplo acima.

Em comparação com tabelas virtuais criadas em um esquema clássico, aquelas que você define com um arquivo de tempo de design em um projeto do SAP Business Application NÃO especificam um esquema, como é o caso dos projetos do SAP Business Application Studio para quaisquer outros objetos, como tabelas, visões de coluna e assim por diante.

Caso a sua convenção de nomes inclua um espaço de nomes no identificador de objeto, você deve adicionar esse espaço de nomes como prefixo no campo Nome de tabela virtual, da seguinte forma: <name.space.specification>::<virtual_table_name>

Inicie este vídeo para saber como criar tabelas virtuais com arquivos de tempo de design em um projeto do SAP Business Application Studio.

Consumo de uma tabela virtual

Assim que uma tabela virtual é criada com sucesso, ela pode ser consumida por qualquer usuário com privilégios apropriados. Vejamos os privilégios necessários:

  • No sistema local: SELECT privilégio no objeto virtual.

    Este é o privilégio clássico necessário para acessar dados de uma tabela. Ele pode ser concedido a um usuário ou (de preferência) a uma função, seja em uma tabela virtual específica ou em todo o esquema.

  • No sistema remoto: SELECT no objeto remoto

    O consumo de uma tabela virtual requer que o usuário remoto derivado da definição da fonte remota (usuário técnico ou uma credencial secundária atribuída a você para essa fonte remota) conceda acesso ao objeto remoto. Em um sistema de banco de dados remoto, isso é geralmente concedido por meio de um privilégio SELECT.

    Nota

    Em sistemas fonte que não são bancos de dados, por exemplo, um sistema de files, pode existir uma forma diferente de configurar o acesso aos dados. A utilização de credenciais secundárias nem sempre é possível nesses casos. Por exemplo, o FileAdapter da integração de dados inteligentes SAP HANA pode armazenar um token para proteger o acesso a um repositório de arquivos. Em seguida, este token é utilizado na definição de segurança da fonte remota.

Administração de fonte remota

Além da criação de uma fonte remota, um administrador de provisionamento de dados é responsável pela manutenção. Isso inclui, por exemplo, privilégios de fonte remota, modificações na definição da fonte remota ou na configuração de segurança. Isso também pode ser a exclusão de uma fonte remota quando ela não é mais necessária.

Vamos destacar um aspecto muito importante dessa manutenção. As tabelas virtuais dependem de uma fonte remota. Assim que uma tabela virtual é definida sobre uma fonte remota, você NÃO PODE excluir a fonte remota enquanto mantém as tabelas virtuais.

Felizmente, você pode modificar a definição da fonte remota mesmo que ela tenha tabelas virtuais definidas nela.

Manutenção de privilégios em uma fonte remota

Quando uma fonte remota é criada, o usuário que a criou é inicialmente a única com privilégios nessa fonte remota. Esses privilégios podem ou devem ser concedidos a outros usuários, dependendo de como a árvore de autorizações está configurada em sua organização.

Os privilégios de fonte remota são privilégios de objeto (eles se referem a um objeto de fonte remota específico) e podem ser classificados em duas categorias:

  • Privilégios de administração:
    • ALTER
    • DROP
  • Privilégios para operar a fonte remota:
    • CREATE VIRTUAL TABLE
    • LINKED DATABASE
    • CREATE REMOTE SUBSCRIPTION
    • PROCESS REMOTE SUBSCRIPTION EXCEPTION

Outro privilégio é CREDENTIAL ADMIN, que é necessário para administrar credenciais secundárias em uma fonte remota que você NÃO criou.

Todos esses privilégios são classicamente administrados no cockpit do SAP HANA ou com instruções GRANT e REVOKE em um console SQL.

Modificação de uma fonte remota

Para modificar uma fonte remota, use a interface gráfica de usuário no SAP Database Explorer ou execute uma instrução ALTER REMOTE SOURCE em um console SQL.

Isso permite que você modifique todos os elementos de uma definição de fonte remota, EXCETO seu nome.

Nota

Na verdade, o nome da fonte remota é o que é usado para manter a relação com as tabelas virtuais criadas sobre a fonte remota.

Um cenário típico pode ser um sistema remoto movendo para um host diferente, a modificação de uma configuração como o modo DML (leitura ou leitura/gravação) ou um esquema de alias. Isso também pode ser uma alteração na definição de segurança, por exemplo, passar de usuário técnico para credenciais secundárias para permitir acesso mais detalhado a objetos remotos.

Exclusão de uma fonte remota

Com a diferença entre modificar e excluir uma fonte remota em mente, vamos discutir como excluir uma fonte remota.

Exclusão de uma fonte remota usando a interface gráfica de usuário

  1. No Explorador de banco de dados SAP HANA, navegue pelo catálogo para a seção Fontes remotas.
  2. Clique com o botão direito do mouse na fonte remota e selecione Excluir.
  3. Selecione a opção relevante:
    • Eliminar fonte remota se nenhum outro objeto depender dela
    • Eliminar fonte remota e quaisquer outros objetos que dependam dela
  4. Selecione Eliminar.

Cuidado

Use a segunda opção com muito cuidado, pois você poderá perder muitas tabelas virtuais se excluir a fonte remota incorreta.

Exclusão de uma fonte remota com SQL

Em um console SQL, você exclui uma fonte remota executando uma das seguintes instruções:

  • Para excluir a fonte remota caso nenhum outro objeto dependa dela:
    Code Snippet
    1
    DROP REMOTE SOURCE <remote_source_name>;
  • Para excluir a fonte remota e quaisquer outros objetos que dependam dela:
    Code Snippet
    1
    DROP REMOTE SOURCE <remote_source_name> CASCADE;

Cuidado

Novamente, você deve usar a opção CASCADE com muito cuidado.