Compartilhar via


Objetos de dados no lakehouse do Databricks

O lakehouse do Databricks organiza os dados armazenados com o Delta Lake no armazenamento de objetos em nuvem com relações familiares, como banco de dados, tabelas e exibições. Esse modelo combina muitos dos benefícios de um data warehouse empresarial com a escalabilidade e a flexibilidade de um data lake. Saiba mais sobre como esse modelo funciona e a relação entre dados de objeto e metadados, de modo que você possa aplicar as melhores práticas ao projetar e implementar um lakehouse do Databricks para sua organização.

Quais objetos de dados estão no lakehouse do Databricks?

A arquitetura do lakehouse do Databricks combina dados armazenados com o protocolo Delta Lake no armazenamento de objetos em nuvem com metadados registrados em um metastore. Há cinco objetos principais no lakehouse do Databricks:

  • Catálogo: um agrupamento de bancos de dados.
  • Banco de dados ou esquema: um agrupamento de objetos em um catálogo. Os bancos de dados contêm tabelas, exibições e funções.
  • Tabela: uma coleção de linhas e colunas armazenadas como arquivos de dados no armazenamento de objetos.
  • Exibição: uma consulta salva, de modo geral relacionada a uma ou mais tabelas ou fontes de dados.
  • Função: lógica salva que retorna um conjunto de linhas ou um valor escalar.

Diagrama de modelo de objeto do Catálogo do Unity

Para obter informações sobre como proteger objetos com o Catálogo do Unity, consulte o modelo de objetos protegíveis.

O que é um metastore?

O metastore contém todos os metadados que definem objetos de dados no lakehouse. O Azure Databricks fornece as seguintes opções de metastore:

  • Metastore do Catálogo do Unity: o Catálogo do Unity fornece recursos centralizados de controle de acesso, auditoria, linhagem e descoberta de dados. Você cria metastores do Catálogo do Unity no nível da conta do Azure Databricks e um único metastore pode ser usado em diversos workspaces.

    Cada metastore do Catálogo do Unity é configurado com um local de armazenamento raiz em um contêiner do Azure Data Lake Storage Gen2 na sua conta do Azure. Esse local de armazenamento é usado por padrão para armazenar dados para tabelas gerenciadas.

    No Catálogo do Unity, os dados são seguros por padrão. Inicialmente, os usuários não têm acesso aos dados de um metastore. O acesso pode ser concedido por um administrador do metastore ou pelo proprietário de um objeto. Os objetos protegíveis no Catálogo do Unity são hierárquicos e os privilégios são herdados para baixo. O Catálogo do Unity oferece um único local para administrar políticas de acesso a dados. Os usuários podem acessar dados no Catálogo do Unity a partir de qualquer workspace ao qual o metastore estiver anexado. Para obter mais informações, confira Gerenciar privilégios no Catálogo do Unity.

  • Metastore do Hive integrado (herdado): cada workspace do Azure Databricks inclui um metastore do Hive integrado como um serviço gerenciado. Uma instância do metastore é implantada em cada cluster e acessa com segurança metadados de um repositório central para cada espaço de trabalho do cliente.

    O metastore do Hive fornece um modelo de governança de dados menos centralizado que o do Catálogo do Unity. Por padrão, um cluster permite que todos os usuários acessem todos os dados gerenciados pelo metastore do Hive integrado do workspace, a menos que o controle de acesso à tabela esteja habilitado para esse cluster. Para obter mais informações, confira Controle de acesso a tabelas do metastore do Hive (herdado).

    Os controles de acesso a tabelas não são armazenados no nível da conta e, portanto, precisam ser configurados separadamente para cada workspace. Para aproveitar o modelo de governança de dados centralizado e simplificado fornecido pelo Catálogo do Unity, o Databricks recomenda que você faça o upgrade das tabelas gerenciadas pelo metastore do Hive do seu workspace para o metastore do Catálogo do Unity.

  • Metastore do Hive externo (herdado): você também pode trazer seu próprio metastore para o Azure Databricks. Os clusters do Azure Databricks podem se conectar a metastores do Apache Hive externos existentes. Você pode usar o controle de acesso a tabelas para gerenciar permissões em um metastore externo. Os controles de acesso a tabelas não são armazenados no metastore externo e, portanto, precisam ser configurados separadamente para cada workspace. O Databricks recomenda que, em vez disso, você use o Catálogo do Unity, devido à sua simplicidade e ao modelo de governança centralizado na conta.

Independentemente do metastore que você usar, o Azure Databricks armazena todos os dados de tabela no armazenamento de objetos da sua conta na nuvem.

O que é um catálogo?

Um catálogo é a abstração mais alta (ou granularidade mais grosseira) no modelo relacional do lakehouse do Databricks. Cada banco de dados será associado a um catálogo. Os catálogos existem como objetos em um metastore.

Antes da introdução do Catálogo do Unity, o Azure Databricks usava um namespace de duas camadas. Os catálogos são a terceira camada no modelo de espaçamento de nomes do Catálogo do Unity:

catalog_name.database_name.table_name

O metastore do Hive interno dá suporte apenas a um único catálogo, hive_metastore.

O que é um banco de dados?

Um banco de dados é uma coleção de objetos de dados, como tabelas ou exibições (também chamadas de "relações") e funções. No Azure Databricks, os termos "esquema" e "banco de dados" são usados de forma intercambiável (enquanto em muitos sistemas relacionais, um banco de dados é uma coleção de esquemas).

Os bancos de dados sempre serão associados a um local no armazenamento de objetos de nuvem. Opcionalmente, você pode especificar um LOCATION ao registrar um banco de dados, tendo em mente que:

  • O LOCATION associado a um banco de dados sempre é considerado um local gerenciado.
  • A criação de um banco de dados não cria nenhum arquivo no local de destino.
  • O LOCATION de um banco de dados determinará o local padrão para dados de todas as tabelas registradas nesse banco de dados.
  • A remoção bem-sucedida de um banco de dados removerá recursivamente todos os dados e arquivos armazenados em um local gerenciado.

Essa interação entre locais gerenciados por arquivos de dados e de banco de dados é muito importante. Para evitar a exclusão acidental de dados:

  • Não compartilhe locais de banco de dados em várias definições de banco de dados.
  • Não registre um banco de dados em um local que já contenha dados.
  • Para gerenciar o ciclo de vida dos dados independentemente do banco de dados, salve os dados em um local que não esteja aninhado em nenhum local de banco de dados.

O que é uma tabela?

Uma tabela do Azure Databricks é uma coleção de dados estruturados. Uma tabela Delta armazena dados como um diretório de arquivos no armazenamento de objetos de nuvem e registra metadados de tabela no metastore dentro de um catálogo e esquema. Como o Delta Lake é o formato padrão para tabelas criadas no Azure Databricks, todas as tabelas criadas no Databricks são tabelas Delta, por padrão. Como as tabelas Delta armazenam dados no armazenamento de objetos de nuvem e fornecem referências a dados por meio de um metastore, os usuários em uma organização podem acessar dados usando suas APIs preferidas; no Databricks, isso inclui o SQL, Python, PySpark, Scala e R.

Observe que é possível criar tabelas em Databricks que não são tabelas Delta. Essas tabelas não são apoiadas pelo Delta Lake e não fornecerão as transações ACID e o desempenho otimizado das tabelas Delta. As tabelas que se enquadram nessa categoria incluem tabelas registradas em relação a dados em sistemas externos e tabelas registradas em outros formatos de arquivo no data lake. Confira Conectar-se às fontes de dados.

Há dois tipos de tabelas em tabelas Databricks, tabelas gerenciadas e não gerenciadas (ou externas).

Observação

A distinção de Tabelas Dinâmicas Delta entre tabelas ao vivo e tabelas ao vivo de transmissão não é imposta da perspectiva da tabela.

O que é uma tabela gerenciada?

O Azure Databricks gerencia os metadados e os dados de uma tabela gerenciada. Ao soltar uma tabela, também exclui os dados subjacentes. Analistas de dados e outros usuários que trabalham principalmente em SQL podem preferir esse comportamento. As tabelas gerenciadas são o padrão ao criar uma tabela. Os dados de uma tabela gerenciada residem no banco de dados LOCATION ao qual ele está registrado. Essa relação gerenciada entre o local de dados e o banco de dados significa que, para mover uma tabela gerenciada para um novo banco de dados, você deve regenerar todos os dados para o novo local.

Há várias maneiras de criar tabelas gerenciadas, incluindo:

CREATE TABLE table_name AS SELECT * FROM another_table
CREATE TABLE table_name (field_name1 INT, field_name2 STRING)
df.write.saveAsTable("table_name")

O que é uma tabela não gerenciada?

O Azure Databricks gerencia apenas os metadados de tabelas não gerenciadas (externas). Ao soltar uma tabela, não afeta os dados subjacentes. Tabelas não gerenciadas sempre especificarão um LOCATION durante a criação da tabela. É possível registrar um diretório existente de arquivos de dados como uma tabela ou fornecer um caminho quando uma tabela for definida pela primeira vez. Como os dados e metadados são gerenciados de forma independente, você pode renomear uma tabela ou registrá-la em um novo banco de dados sem precisar mover dados. Os engenheiros de dados geralmente preferem tabelas não gerenciadas e a flexibilidade que fornecem para os dados de produção.

Há várias maneiras de criar tabelas não gerenciadas, incluindo:

CREATE TABLE table_name
USING DELTA
LOCATION '/path/to/existing/data'
CREATE TABLE table_name
(field_name1 INT, field_name2 STRING)
LOCATION '/path/to/empty/directory'
df.write.option("path", "/path/to/empty/directory").saveAsTable("table_name")

O que é uma exibição?

Uma exibição armazena o texto de uma consulta normalmente em uma ou mais fontes de dados ou tabelas no metastore. Em Databricks, uma exibição é equivalente a um DataFrame do Spark persistente como um objeto em um banco de dados. Ao contrário do DataFrames, você pode consultar exibições de qualquer parte do produto Databricks, supondo que você tenha permissão para fazer isso. A criação de uma exibição não processa nem grava nenhum dado; somente o texto da consulta é registrado no metastore no banco de dados associado.

O que é uma exibição temporária?

Uma exibição temporária tem um escopo e persistência limitados e não está registrada em um esquema ou catálogo. O tempo de vida de uma exibição temporária difere com base no ambiente que você está usando:

  • Em notebooks e trabalhos, as exibições temporárias têm como escopo o nível do notebook ou do script. Eles não podem ser referenciados fora do notebook no qual são declarados e não existirão mais quando o notebook se desanexar do cluster.
  • Em SQL do Databricks, as exibições temporárias têm como escopo o nível de consulta. Várias instruções na mesma consulta podem usar a exibição temporária, mas não podem ser referenciadas em outras consultas, mesmo no mesmo painel.
  • As exibições temporárias globais têm como escopo o nível do cluster e podem ser compartilhadas entre notebooks ou trabalhos que compartilham recursos de computação. O Databricks recomenda usar exibições com as ACLs de tabela apropriadas em vez de exibições temporárias globais.

O que é uma função?

As funções permitem que você associe a lógica definida pelo usuário a um banco de dados. As funções podem retornar valores escalares ou conjuntos de linhas. As funções são usadas para agregar dados. O Azure Databricks permite salvar funções em várias linguagens, dependendo do contexto de execução, com o SQL sendo amplamente compatível. Você pode usar funções para fornecer acesso gerenciado à lógica personalizada em uma variedade de contextos no produto Databricks.

Como os objetos relacionais funcionam em Tabelas Delta Dinâmicas?

As Tabelas Dinâmicas Delta usam sintaxe declarativa para definir e gerenciar a implantação de DDL, DML e infraestrutura. As Tabelas Dinâmicas Delta usam o conceito de um "esquema virtual" durante o planejamento e a execução da lógica. As Tabelas Dinâmicas Delta podem interagir com outros bancos de dados em seu ambiente de Databricks, e as Tabelas Dinâmicas Delta podem publicar e persistir tabelas para consulta em outro lugar especificando um banco de dados de destino nas configurações de pipeline.

Todas as tabelas criadas no Delta Live Tables são tabelas delta. Ao usar o Catálogo do Unity com o Delta Live Tables, todas as tabelas são tabelas gerenciadas pelo Catálogo do Unity. Se o Catálogo do Unity não estiver ativo, as tabelas poderão ser declaradas como tabelas gerenciadas ou não gerenciadas.

Embora as exibições possam ser declaradas em Tabelas Dinâmicas Delta, elas devem ser consideradas como exibições temporárias no escopo do pipeline. Tabelas temporárias em Tabelas Dinâmicas Delta são um conceito exclusivo: essas tabelas persistem os dados no armazenamento, mas não publicam dados no banco de dados de destino.

Algumas operações, como APPLY CHANGES INTO, registrarão uma tabela e uma exibição no banco de dados; o nome da tabela começará com um sublinhado (_) e o modo de exibição terá o nome da tabela declarado como o destino da operação APPLY CHANGES INTO. A exibição consulta a tabela oculta correspondente para materializar os resultados.