Leitura do compartilhamento de dados usando o Delta Sharing do Databricks para Databricks (para destinatários)
Este artigo descreve como ler dados que foram compartilhados com você usando o protocolo Databricks-to-Databricks do Delta Sharing, no qual o Databricks gerencia uma conexão segura para o compartilhamento de dados. Ao contrário do protocolo de compartilhamento aberto do Delta Sharing, o protocolo Databricks-to-Databricks não requer um arquivo de credencial (segurança baseada em token).
O compartilhamento Databricks para Databricks requer que você, como destinatário, tenha acesso a um workspace do Databricks habilitado para o Catálogo do Unity.
Se você não tiver um workspace do Databricks habilitado para o Unity Catalog, os dados deverão ser compartilhados com você usando o protocolo de compartilhamento aberto do Compartilhamento Delta e este artigo não se aplicará a você. Confira Leitura do compartilhamento de dados usando o compartilhamento aberto do Delta Sharing (para destinatários).
Como faço para disponibilizar dados compartilhados para minha equipe?
Para ler dados e notebooks que foram compartilhados com você usando o protocolo Databricks para Databricks, você deve ser um usuário em um workspace do Databricks habilitado para o Catálogo do Unity. Um membro da sua equipe fornece ao provedor de dados um identificador exclusivo para a metastore do Catálogo do Unity e o provedor de dados usa esse identificador para criar uma conexão de compartilhamento segura com sua organização. Os dados compartilhados tornam-se disponíveis para acesso de leitura em seu workspace, e quaisquer atualizações que o provedor de dados fizer nas tabelas, exibições, volumes e partições compartilhados são refletidas em seu workspace quase em tempo real.
Observação
As atualizações em tabelas de dados, exibições e volumes compartilhados aparecem em seu workspace quase em tempo real. No entanto, as alterações de coluna (adicionar, renomear, excluir) podem não aparecer no Explorador do Catálogo por até um minuto. Da mesma forma, novos compartilhamentos e atualizações em compartilhamentos (como a adição de novas tabelas a um compartilhamento) são armazenados em cache durante um minuto antes de estarem disponíveis para exibição e consulta.
Para ler os dados que foram compartilhados com você:
- Um usuário em sua equipe encontra o compartilhamento – o contêiner para as tabelas, exibições, volumes e notebooks que foram compartilhados com você – e usa esse compartilhamento para criar um catálogo – o contêiner de nível superior para todos os dados no Catálogo do Unity do Databricks.
- Um usuário de sua equipe concede ou nega acesso ao catálogo e aos objetos dentro dele (esquemas, tabelas, exibições e volumes) a outros membros de sua equipe.
- Você lê os dados nas tabelas, exibições e volumes aos quais recebeu acesso, assim como em qualquer outro ativo de dados no Databricks ao qual você tenha acesso somente leitura (
SELECT
ouREAD VOLUME
). - Você visualiza e clona notebooks no compartilhamento, desde que tenha o privilégio
USE CATALOG
no catálogo.
Permissões necessárias
Para poder listar e exibir detalhes sobre todos os provedores e compartilhamentos de provedores, você deve ser um administrador do metastore ou ter o privilégio USE PROVIDER
. Outros usuários têm acesso somente aos provedores e compartilhamentos que possuem.
Para criar um catálogo a partir de um compartilhamento de provedor, você deve ser um administrador de metastore, um usuário que tenha os privilégios CREATE_CATALOG
e USE PROVIDER
para o metastore do Catálogo do Unity ou um usuário que possui o privilégio CREATE_CATALOG
e a propriedade do objeto do provedor.
A capacidade de conceder acesso somente leitura aos esquemas (bancos de dados), tabelas, exibições e volumes no catálogo criado a partir do compartilhamento segue a hierarquia típica de privilégios do Catálogo do Unity. A capacidade de exibir notebooks no catálogo criado a partir do compartilhamento requer o privilégio USE CATALOG
no catálogo. Confira Gerenciar permissões para esquemas, tabelas e volumes em um catálogo do Delta Sharing.
Exibir provedores e compartilhamentos
Para começar a ler os dados que foram compartilhados com você por um provedor de dados, você precisa saber o nome do provedor e os objetos de compartilhamento armazenados no metastore do seu Catálogo do Unity depois que o provedor tiver compartilhado dados com você.
O objeto do provedor representa o metastore do Catálogo do Unity, a plataforma de nuvem e a região da organização que compartilhou os dados com você.
O objeto de compartilhamento representa as tabelas, volumes e exibições que o provedor compartilhou com você.
Ver todos os provedores que compartilharam dados com você
Para exibir uma lista de provedores de dados disponíveis, use o Explorador de Catálogos, a CLI do Catálogo do Unity do Databricks ou o comando SQL SHOW PROVIDERS
em um notebook do Azure Databricks ou o editor de consulta SQL do Databricks.
Permissões necessárias: você deve ser um administrador do metastore ou ter o privilégio USE PROVIDER
. Outros usuários têm acesso apenas aos provedores e compartilhamentos de provedores de sua propriedade.
Para obter detalhes, confira Ver provedores.
Ver detalhes do provedor
Para exibir detalhes sobre um provedor, use o Explorador de Catálogos, a CLI do Catálogo do Unity do Databricks ou o comando SQL DESCRIBE PROVIDER
em um notebook do Azure Databricks ou o editor de consulta do Databricks SQL.
Permissões necessárias: você deve ser um administrador do metastore, ter o privilégio USE PROVIDER
ou possuir o objeto provedor.
Para obter detalhes, confira Ver detalhes do provedor.
Ver compartilhamentos
Para exibir os compartilhamentos que um provedor compartilhou com você, use o Explorador de Catálogos, a CLI do Catálogo do Unity do Databricks ou o comando SQL SHOW SHARES IN PROVIDER
em um notebook do Azure Databricks ou o editor de consulta do Databricks SQL.
Permissões necessárias: você deve ser um administrador do metastore, ter o privilégio USE PROVIDER
ou possuir o objeto provedor.
Para obter detalhes, confira Ver compartilhamentos que um provedor compartilhou com você.
Acessar dados em uma tabela ou volume compartilhado
Para ler dados em uma tabela ou volume compartilhado:
- Um usuário com privilégios deve criar um catálogo com base no compartilhamento que contém a tabela ou volume. Pode ser um administrador do metastore, um usuário que tenha os privilégios
CREATE_CATALOG
eUSE PROVIDER
para o metastore do Catálogo do Unity ou um usuário que tenha o privilégioCREATE_CATALOG
e a propriedade do objeto provedor. - Esse usuário ou um usuário com os mesmos privilégios deve lhe conceder acesso à tabela ou volume compartilhado.
- Você pode acessar a tabela ou volume da mesma forma que faria com qualquer outro ativo de dados registrado no metastore do Catálogo do Unity.
Criar um catálogo com base em um compartilhamento
Para tornar os dados de um compartilhamento acessíveis à sua equipe, você deve criar um catálogo a partir do compartilhamento. Para criar um catálogo a partir de um compartilhamento, use o Explorador do Catálogo, a CLI do Catálogo do Unity do Databricks ou os comandos SQL em um notebooks do Azure Databricks ou o editor de consulta do Databricks SQL.
Permissões necessárias: um administrador do metastore, um usuário que tenha os privilégios CREATE_CATALOG
e USE PROVIDER
para o metastore do Catálogo do Unity ou um usuário que tenha o privilégio CREATE_CATALOG
e a propriedade do objeto provedor.
Observação
Se o compartilhamento incluir exibições, você deverá usar um nome de catálogo diferente do nome do catálogo que contém a exibição no metastore do provedor.
Explorador do Catálogo
Em seu workspace do Azure Databricks, clique em Catálogo para abrir o Explorador de Catálogo.
Na parte superior do painel Catálogo, clique no ícone de engrenagem e selecione Compartilhamento Delta.
Como alternativa, na página Acesso rápido, clique no botão Compartilhamento Delta>.
Na guia Compartilhado comigo, localize e selecione o provedor.
Na guia Compartilhamentos, localize o compartilhamento e clique em Criar catálogo na linha de compartilhamento.
Insira um nome para o catálogo e um comentário opcional.
Clique em Criar.
Como alternativa, ao abrir o Catalog Explorer, você pode clicar em Criar Catálogo no canto superior direito para criar um catálogo compartilhado. Consulte Criar catálogos.
SQL
Execute o comando a seguir em um notebook ou no editor de SQL do Databricks.
CREATE CATALOG [IF NOT EXISTS] <catalog-name>
USING SHARE <provider-name>.<share-name>;
CLI
databricks catalogs create <catalog-name> /
--provider-name <provider-name> /
--share-name <share-name>
O catálogo criado com base em um compartilhamento tem um tipo de catálogo do Delta Sharing. Você pode ver o tipo na página de detalhes do catálogo no Explorador do Catálogo ou executando o comando SQL DESCRIBE CATALOG em um notebook ou uma consulta SQL do Databricks. Todos os catálogos compartilhados estão listados em Catálogo > Compartilhado no painel esquerdo do Gerenciador de Catálogos.
Um catálogo do Delta Sharing pode ser gerenciado da mesma forma que catálogos regulares em um metastore do Catálogo do Unity. Você pode exibir, atualizar e excluir um catálogo do Delta Sharing usando o Explorador do Catálogo, a CLI do Databricks e comandos SQL SHOW CATALOGS
, DESCRIBE CATALOG
, ALTER CATALOG
e DROP CATALOG
.
A estrutura de namespace de 3 níveis em um catálogo do Delta Sharing criado com base em um compartilhamento é a mesma de um catálogo regular no Catálogo do Unity: catalog.schema.table
ou catalog.schema.volume
.
Os dados de tabela ou volume em um catálogo compartilhado são somente leitura, o que significa que você pode executar operações de leitura como:
DESCRIBE
,SHOW
eSELECT
para tabelas.DESCRIBE VOLUME
,LIST <volume-path>
,SELECT * FROM <format>.'<volume_path>'
eCOPY INTO
para volumes.
Os notebooks em um catálogo compartilhado podem ser visualizados e clonados por qualquer usuário com USE CATALOG
ao catálogo.
Os modelos em um catálogo compartilhado podem ser lidos e carregados para inferência por qualquer usuário com os seguintes privilégios: privilégio EXECUTE
no modelo registrado, além de privilégios USE SCHEMA
e USE CATALOG
no esquema e catálogo que contém o modelo.
Gerenciar permissões para os esquemas, tabelas e volumes em um catálogo do Delta Sharing
Por padrão, o criador de catálogos é o proprietário de todos os objetos de dados em um catálogo do Delta Sharing e pode gerenciar permissões para qualquer um deles.
Os privilégios são herdados de cima para baixo, embora alguns workspaces ainda possam estar no modelo de segurança herdado que não tenha fornecido a herança. Confira Modelo de herança. Qualquer usuário com o privilégio SELECT
no catálogo terá o privilégio SELECT
em todos os esquemas e tabelas no catálogo, a menos que esse privilégio seja revogado. Da mesma forma, qualquer usuário com o privilégio READ VOLUME
no catálogo terá o privilégio READ VOLUME
em todos os volumes no catálogo, a menos que esse privilégio seja revogado. Você não pode conceder privilégios que dão acesso de gravação ou atualização a um catálogo ou objetos do Delta Sharing em um catálogo do Delta Sharing.
O proprietário do catálogo pode delegar a propriedade de objetos de dados a outros usuários ou grupos, concedendo a esses usuários a capacidade de gerenciar as permissões de objetos e os ciclos de vida.
Para obter informações detalhadas sobre como gerenciar privilégios em objetos de dados usando o Catálogo do Unity, confira Gerenciar privilégios no Catálogo do Unity.
Ler dados em uma tabela compartilhada
Você pode ler dados em uma tabela compartilhada usando qualquer uma das ferramentas disponíveis para você como usuário do Azure Databricks: Explorador do Catálogo, notebooks, consultas SQL, CLI do Databricks e APIs REST do Databricks. Você deve ter o privilégio SELECT
na mesa.
Ler dados em um volume compartilhado
Você pode ler dados em um volume compartilhado usando qualquer uma das ferramentas disponíveis para você como usuário do Azure Databricks: Explorador do Catálogo, notebooks, consultas SQL, CLI do Databricks e APIs REST do Databricks. Você deve ter o privilégio READ VOLUME
no volume.
Carregar um modelo compartilhado para inferência
Para obter detalhes sobre como carregar um modelo compartilhado e usá-lo para inferência em lotes, consulte Carregar versões de modelos por alias para cargas de trabalho de inferência.
Consultar dados de histórico de uma tabela
Se o histórico for compartilhado junto com a tabela, consulte os dados da tabela a partir de uma versão ou carimbo de data/hora. Requer o Databricks Runtime 12.2 LTS ou superior.
Por exemplo:
SELECT * FROM vaccine.vaccine_us.vaccine_us_distribution VERSION AS OF 3;
SELECT * FROM vaccine.vaccine_us.vaccine_us_distribution TIMESTAMP AS OF "2023-01-01 00:00:00";
Além disso, se o feed de dados de alteração (CDF) estiver habilitado com a tabela, consulte o CDF. Há suporte para a versão e o carimbo de data/hora:
SELECT * FROM table_changes('vaccine.vaccine_us.vaccine_us_distribution', 0, 3);
SELECT * FROM table_changes('vaccine.vaccine_us.vaccine_us_distribution', "2023-01-01 00:00:00", "2022-02-01 00:00:00");
Para obter mais informações sobre o feed de dados de alterações, confira Usar o feed de dados de alterações do Delta Lake no Azure Databricks.
Consultar uma tabela usando o Streaming Estruturado do Apache Spark
Se uma tabela for compartilhada com o histórico, você poderá usá-la como fonte do Streaming Estruturado do Spark. Requer o Databricks Runtime 12.2 LTS ou superior.
Opções com suporte:
ignoreDeletes
: ignorar transações que excluem dados.ignoreChanges
: reprocessar as atualizações se os arquivos foram reescritos na tabela de origem devido a uma operação de alteração de dados, comoUPDATE
,MERGE INTO
,DELETE
(dentro de partições) ouOVERWRITE
. Linhas inalteradas ainda podem ser emitidas. Portanto, seus consumidores downstream devem ser capazes de lidar com duplicatas. As exclusões não são propagadas downstream.ignoreChanges
incorporaignoreDeletes
. Portanto, se você usarignoreChanges
, seu stream não será interrompido por exclusões ou atualizações na tabela de origem.startingVersion
: a versão da tabela compartilhada a ser iniciada. Todas as alterações de tabela que começam desta versão (inclusive) serão lidas pela fonte de streaming.startingTimestamp
: O carimbo de data/hora do qual começar. Todas as alterações de tabela confirmadas no carimbo de data/hora (inclusive) ou após este serão lidas pela fonte de streaming. Exemplo:"2023-01-01 00:00:00.0"
maxFilesPerTrigger
: o número de novos arquivos a serem considerados em cada microlote.maxBytesPerTrigger
: a quantidade de dados que é processada em cada microlote. Essa opção define um “máximo flexível”, o que significa que um lote processa aproximadamente essa quantidade de dados e pode processar mais do que o limite para fazer a consulta de streaming avançar nos casos em que a menor unidade de entrada for maior que esse limite.readChangeFeed
: o stream lê o feed de dados de alterações da tabela compartilhada.
Opções sem suporte:
Trigger.availableNow
Exemplos de consultas de Streaming Estruturado
Scala
spark.readStream.format("deltaSharing")
.option("startingVersion", 0)
.option("ignoreChanges", true)
.option("maxFilesPerTrigger", 10)
.table("vaccine.vaccine_us.vaccine_us_distribution")
Python
spark.readStream.format("deltaSharing")\
.option("startingVersion", 0)\
.option("ignoreDeletes", true)\
.option("maxBytesPerTrigger", 10000)\
.table("vaccine.vaccine_us.vaccine_us_distribution")
Se o feed de dados alterados (CDF) estiver habilitado com a tabela, você poderá transmitir a leitura do CDF.
spark.readStream.format("deltaSharing")
.option("readChangeFeed", "true")
.table("vaccine.vaccine_us.vaccine_us_distribution")
Ler tabelas com vetores de exclusão ou mapeamento de colunas ativados
Importante
Esse recurso está em uma versão prévia.
Os vetores de exclusão são um recurso de otimização de armazenamento que seu provedor pode habilitar em tabelas Delta compartilhadas. Confira O que são vetores de exclusão?
O Azure Databricks também dá suporte ao mapeamento de colunas para tabelas Delta. Confira Renomear e remover colunas usando o mapeamento de colunas do Delta Lake.
Se o provedor compartilhou uma tabela com vetores de exclusão ou mapeamento de coluna habilitado, você pode executar leituras em lote na tabela usando um SQL warehouse ou um cluster executando o Databricks Runtime 14.1 ou superior. As consultas de streaming e CDF exigem o Databricks Runtime 14.2 ou superior.
Você pode executar consultas em lote como estão, pois elas podem resolver responseFormat
automaticamente com base nos recursos de tabela da tabela compartilhada.
Para ler um CDF (feed de dados de alteração) ou executar consultas de streaming em tabelas compartilhadas com vetores de exclusão ou mapeamento de colunas habilitado, você deve definir a opção adicional responseFormat=delta
.
Os exemplos a seguir mostram consultas em lote, de streaming e CDF:
import org.apache.spark.sql.SparkSession
// Batch query
spark.read.format("deltaSharing").table(<tableName>)
// CDF query
spark.read.format("deltaSharing")
.option("readChangeFeed", "true")
.option("responseFormat", "delta")
.option("startingVersion", 1)
.table(<tableName>)
// Streaming query
spark.readStream.format("deltaSharing").option("responseFormat", "delta").table(<tableName>)
Ler exibições compartilhadas
Importante
Esse recurso está em uma versão prévia.
Ler exibições compartilhadas é o mesmo que ler tabelas compartilhadas, com essas exceções:
Exibir restrições de compartilhamento:
Não é possível compartilhar exibições que façam referência a tabelas ou exibições compartilhadas.
Requisitos de nomenclatura:
O nome do catálogo que você usa para o catálogo compartilhado que contém a exibição não pode ser o mesmo que qualquer catálogo de provedores que contenha uma tabela referenciada pelo modo de exibição. Por exemplo, se o modo de exibição compartilhado estiver contido em seu catálogo test
e uma das tabelas do provedor referenciadas nessa exibição estiver contida no catálogo test
do provedor, a consulta resultará em um erro de conflito de namespace. Consulte Criar um catálogo com base em um compartilhamento.
Histórico e streaming:
Você não pode consultar o histórico ou usar um modo de exibição como fonte de streaming.
Veja o suporte no compartilhamento aberto:
As instruções nesse artigo se concentram na leitura de dados compartilhados usando interfaces de usuário do Azure Databricks, especificamente sintaxe e interfaces do Catálogo do Unity. Você também pode consultar exibições compartilhadas usando o Apache Spark, Python e ferramentas de BI, como Tableau e Power BI.
Custos:
Há duas fontes potenciais de custo para o compartilhamento de visualizações:
- Custo de computação, cobrado pelo Databricks.
- Custo de armazenamento e transferência de rede (saída), cobrado pelo fornecedor de armazenamento.
O custo de computação é baseado no tipo de recurso de computação do destinatário:
Computação do destinatário | Quem paga? | SKU |
---|---|---|
Databricks Sem Servidor | Recipient | SKU sem servidor usado pelo destinatário |
Databricks Clássico | Recipient | Sem servidor interativo |
Abrir conectores de compartilhamento delta | Provedor | Sem servidor interativo |
Ler notebooks compartilhados
Para visualizar e clonar arquivos de notebooks compartilhados, use o Explorador do Catálogo.
Permissões necessárias: proprietário ou usuário do catálogo com privilégio USE CATALOG
no catálogo criado a partir do compartilhamento.
No workspace do Azure Databricks, clique em Catálogo.
No painel esquerdo, expanda o menu Catálogo, encontre e selecione o catálogo criado a partir do compartilhamento.
Na guia Outros ativos, você verá todos os arquivos de notebooks compartilhados.
Clique no nome de um arquivo de notebook compartilhado para visualizá-lo.
(Opcional) Clique no botão Clonar para importar o arquivo de notebook compartilhado para seu workspace.
- Na caixa de diálogo Clonar para, insira opcionalmente um Novo nome e selecione a pasta do workspace para a qual deseja clonar o arquivo do notebook.
- Clique em Clonar.
- Depois que o notebooks for clonado, uma caixa de diálogo será exibida para informar que ele foi clonado com sucesso. Clique em revelar no editor do notebook na caixa de diálogo para visualizá-lo no editor do notebooks.