Ler dados compartilhados usando o Compartilhamento Delta de Databricks para Databricks (para destinatários)
Este artigo descreve como ler dados que foram compartilhados com você usando o protocolo Databricks-to-Databricks Delta Sharing, no qual o Databricks gerencia uma conexão segura para compartilhamento de dados. Ao contrário do protocolo de compartilhamento aberto Delta Sharing, o protocolo Databricks-to-Databricks não requer um arquivo de credencial (segurança baseada em token).
O compartilhamento de Databricks para Databricks requer que você, como destinatário, tenha acesso a um espaço de trabalho Databricks habilitado para o Unity Catalog.
Se você não tiver um espaço de trabalho Databricks habilitado para o Unity Catalog, os dados deverão ser compartilhados com você usando o protocolo de compartilhamento aberto Delta Sharing, e este artigo não se aplica a você. Consulte Ler dados compartilhados usando o compartilhamento aberto do Delta Sharing (para destinatários).
Como posso disponibilizar dados partilhados à minha equipa?
Para ler dados e blocos de anotações que foram compartilhados com você usando o protocolo Databricks-to-Databricks, você deve ser um usuário em um espaço de trabalho Databricks habilitado para o Unity Catalog. Um membro de sua equipe fornece ao provedor de dados um identificador exclusivo para seu metastore do Catálogo Unity, e o provedor de dados usa esse identificador para criar uma conexão de compartilhamento segura com sua organização. Em seguida, os dados compartilhados ficam disponíveis para acesso de leitura em seu espaço de trabalho, e todas as atualizações que o provedor de dados fizer nas tabelas, exibições, volumes e partições compartilhadas serão refletidas em seu espaço de trabalho quase em tempo real.
Nota
As atualizações de tabelas, exibições e volumes de dados compartilhados aparecem em seu espaço de trabalho quase em tempo real. No entanto, as alterações de coluna (adicionar, renomear, excluir) podem não aparecer no Gerenciador de Catálogos por até um minuto. Da mesma forma, novos compartilhamentos e atualizações para compartilhamentos (como adicionar novas tabelas a um compartilhamento) são armazenados em cache por um minuto antes de estarem disponíveis para exibição e consulta.
Para ler os dados que foram partilhados consigo:
- Um usuário da sua equipe encontra o compartilhamento — o contêiner para as tabelas, exibições, volumes e blocos de anotações 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 Databricks Unity Catalog.
- Um usuário da sua equipe concede ou nega acesso ao catálogo e aos objetos dentro do catálogo (esquemas, tabelas, exibições e volumes) para outros membros da sua equipe.
- Você lê os dados nas tabelas, exibições e volumes aos quais recebeu acesso como qualquer outro ativo de dados no Databricks ao qual você tem acesso somente leitura (
SELECT
ouREAD VOLUME
). - Você visualiza e clona blocos de anotações no compartilhamento, desde que tenha o
USE CATALOG
privilégio no catálogo.
Permissões necessárias
Para poder listar e visualizar detalhes sobre todos os provedores e compartilhamentos de provedores, você deve ser um administrador de metastore ou ter o USE PROVIDER
privilégio. Outros usuários têm acesso apenas 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 CREATE_CATALOG
privilégios e USE PROVIDER
para seu metastore do Unity Catalog ou um usuário que tenha o privilégio e a CREATE_CATALOG
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 de privilégios típica do Unity Catalog. A capacidade de visualizar blocos de anotações no catálogo criado a partir do compartilhamento requer o USE CATALOG
privilégio no catálogo. Consulte Gerenciar permissões para esquemas, tabelas e volumes em um catálogo de Compartilhamento Delta.
Ver fornecedores e partilhas
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 compartilhar objetos armazenados em seu metastore do Unity Catalog depois que o provedor tiver compartilhado dados com você.
O objeto provider representa o metastore do Unity Catalog, a plataforma de nuvem e a região da organização que compartilhou os dados com você.
O objeto share representa as tabelas, volumes e exibições que o provedor compartilhou com você.
Ver todos os fornecedores que partilharam dados consigo
Para exibir uma lista de provedores de dados disponíveis, você pode usar o Gerenciador de Catálogos, a CLI do Catálogo Unity do Databricks ou o SHOW PROVIDERS
comando SQL em um bloco de anotações do Azure Databricks ou o editor de consultas do Databricks SQL.
Permissões necessárias: você deve ser um administrador de metastore ou ter o USE PROVIDER
privilégio. Outros usuários têm acesso apenas aos provedores e compartilhamentos de provedores que possuem.
Para obter detalhes, consulte Exibir provedores.
Ver detalhes do fornecedor
Para exibir detalhes sobre um provedor, você pode usar o Gerenciador de Catálogos, a CLI do Catálogo Databricks Unity ou o DESCRIBE PROVIDER
comando SQL em um bloco de anotações do Azure Databricks ou o editor de consultas Databricks SQL.
Permissões necessárias: você deve ser um administrador de metastore, ter o USE PROVIDER
privilégio ou possuir o objeto do provedor.
Para obter detalhes, consulte Exibir detalhes do provedor.
Ver partilhas
Para exibir os compartilhamentos que um provedor compartilhou com você, você pode usar o Gerenciador de Catálogos, a CLI do Catálogo Unity do Databricks ou o SHOW SHARES IN PROVIDER
comando SQL em um bloco de anotações do Azure Databricks ou no editor de consultas do Databricks SQL.
Permissões necessárias: você deve ser um administrador de metastore, ter o USE PROVIDER
privilégio ou possuir o objeto do provedor.
Para obter detalhes, consulte Exibir 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 privilegiado deve criar um catálogo a partir do compartilhamento que contém a tabela ou o volume. Pode ser um administrador de metastore, um usuário que tenha os privilégios e
USE PROVIDER
para seuCREATE_CATALOG
metastore do Unity Catalog ou um usuário que tenha o privilégio e aCREATE_CATALOG
propriedade do objeto do provedor. - Esse usuário ou um usuário com os mesmos privilégios deve conceder acesso à tabela ou volume compartilhado.
- Você pode acessar a tabela ou o volume da mesma forma que faria com qualquer outro ativo de dados registrado em seu metastore do Catálogo Unity.
Criar um catálogo a partir de uma partilha
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, você pode usar o Gerenciador de Catálogos, a CLI do Catálogo Databricks Unity ou comandos SQL em um bloco de anotações do Azure Databricks ou no editor de consultas Databricks SQL.
Permissões necessárias: um administrador de metastore, um usuário que tenha os CREATE_CATALOG
privilégios e USE PROVIDER
para seu metastore do Unity Catalog ou um usuário que tenha o privilégio e a CREATE_CATALOG
propriedade do objeto do provedor.
Nota
Se o compartilhamento incluir modos de exibição, você deverá usar um nome de catálogo diferente do nome do catálogo que contém o modo de exibição no metastore do provedor.
Explorador de Catálogos
No espaço de trabalho do Azure Databricks, clique em Catálogo para abrir o Gerenciador de Catálogos.
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 comentário opcional.
Clique em Criar.
Como alternativa, ao abrir o Gerenciador de Catálogos, você pode clicar em Criar Catálogo no canto superior direito para criar um catálogo compartilhado. Consulte Criar catálogos.
SQL
Execute o seguinte comando em um bloco de anotações ou no editor de consultas Databricks SQL.
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 a partir de um compartilhamento tem um tipo de catálogo de Compartilhamento Delta. Você pode exibir o tipo na página de detalhes do catálogo no Catalog Explorer ou executando o comando DESCRIBE CATALOG SQL em um bloco de anotações ou consulta Databricks SQL. Todos os catálogos compartilhados são listados em Catálogo > compartilhado no painel esquerdo do Gerenciador de Catálogos.
Um catálogo Delta Sharing pode ser gerenciado da mesma forma que catálogos regulares em um metastore Unity Catalog. Você pode exibir, atualizar e excluir um catálogo de Compartilhamento Delta usando o Gerenciador de Catálogos, a CLI do Databricks e usando SHOW CATALOGS
os comandos , DESCRIBE CATALOG
, ALTER CATALOG
e DROP CATALOG
SQL.
A estrutura de namespace de 3 níveis em um catálogo Delta Sharing criado a partir de um compartilhamento é a mesma de um catálogo regular no Unity Catalog: catalog.schema.table
ou catalog.schema.volume
.
Os dados de tabela e 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 blocos de anotações em um catálogo compartilhado podem ser visualizados e clonados por qualquer usuário com USE CATALOG
no 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: EXECUTE
privilégio no modelo registrado, mais USE SCHEMA
e USE CATALOG
privilégios no esquema e catálogo que contém o modelo.
Gerenciar permissões para esquemas, tabelas e volumes em um catálogo de Compartilhamento Delta
Por padrão, o criador do catálogo é o proprietário de todos os objetos de dados em um catálogo de Compartilhamento Delta e pode gerenciar permissões para qualquer um deles.
Os privilégios são herdados para baixo, embora alguns espaços de trabalho ainda possam estar no modelo de segurança herdado que não forneceu herança. Consulte Modelo de herança. Qualquer usuário que tenha recebido o SELECT
privilégio no catálogo terá o SELECT
privilégio em todos os esquemas e tabelas do catálogo, a menos que esse privilégio seja revogado. Da mesma forma, qualquer usuário que tenha recebido o READ VOLUME
privilégio no catálogo terá o READ VOLUME
privilégio em todos os volumes do catálogo, a menos que esse privilégio seja revogado. Não é possível conceder privilégios que dão acesso de gravação ou atualização a um catálogo ou objetos de Compartilhamento Delta em um catálogo de Compartilhamento Delta.
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 e os ciclos de vida do objeto.
Para obter informações detalhadas sobre como gerenciar privilégios em objetos de dados usando o Unity Catalog, consulte Gerenciar privilégios no Unity Catalog.
Ler dados numa tabela partilhada
Você pode ler dados em uma tabela compartilhada usando qualquer uma das ferramentas disponíveis para você como um usuário do Azure Databricks: Catalog Explorer, blocos de anotações, consultas SQL, a CLI do Databricks e APIs REST do Databricks. Tem de ter o SELECT
privilégio em cima da 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 um usuário do Azure Databricks: Catalog Explorer, blocos de anotações, consultas SQL, a CLI do Databricks e APIs REST do Databricks. Você deve ter o READ VOLUME
privilégio 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 lote, consulte Carregar versão do modelo por alias para cargas de trabalho de inferência.
Consultar os dados do histórico de uma tabela
Se o histórico for compartilhado junto com a tabela, você poderá consultar os dados da tabela a partir de uma versão ou carimbo de data/hora. Requer 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, você poderá consultar o CDF. A versão e o carimbo de data/hora são suportados:
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ção, consulte Usar o feed de dados de alteração do Delta Lake no Azure Databricks.
Consultar uma tabela usando o Apache Spark Structured Streaming
Se uma tabela for compartilhada com o histórico, você poderá usá-la como fonte para o Spark Structured Streaming. Requer Databricks Runtime 12.2 LTS ou superior.
Opções suportadas:
ignoreDeletes
: Ignore transações que excluem dados.ignoreChanges
: Reprocesse 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. Por conseguinte, os seus consumidores a jusante devem ser capazes de lidar com duplicados. As eliminações não são propagadas a jusante.ignoreChanges
subsumesignoreDeletes
. Portanto, se você usarignoreChanges
o , seu fluxo não será interrompido por exclusões ou atualizações na tabela de origem.startingVersion
: A versão da tabela compartilhada para começar. Todas as alterações de tabela a partir desta versão (inclusive) serão lidas pela fonte de streaming.startingTimestamp
: O carimbo de data/hora a partir do qual começar. Todas as alterações de tabela confirmadas no ou após o carimbo de data/hora (inclusive) 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 são processados em cada microlote. Esta opção define um "soft max", o que significa que um lote processa aproximadamente essa quantidade de dados e pode processar mais do que o limite, a fim de fazer a consulta de streaming avançar nos casos em que a menor unidade de entrada é maior do que esse limite.readChangeFeed
: Stream ler o feed de dados de alteração da tabela compartilhada.
Opções não suportadas:
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 de alteração (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 habilitados
Importante
Esta funcionalidade está em Pré-visualização Pública.
Os vetores de exclusão são um recurso de otimização de armazenamento que seu provedor pode habilitar em tabelas Delta compartilhadas. Consulte O que são vetores de exclusão?.
O Azure Databricks também dá suporte ao mapeamento de colunas para tabelas Delta. Consulte Renomear e soltar colunas com o mapeamento de colunas Delta Lake.
Se seu provedor compartilhou uma tabela com vetores de exclusão ou mapeamento de coluna habilitados, você poderá executar leituras em lote na tabela usando um SQL warehouse ou um cluster executando o Databricks Runtime 14.1 ou superior. As consultas CDF e streaming requerem o Databricks Runtime 14.2 ou superior.
Você pode executar consultas em lote como estão, porque elas podem ser resolvidas responseFormat
automaticamente com base nos recursos da tabela compartilhada.
Para ler um feed de dados de alteração (CDF) ou para executar consultas de streaming em tabelas compartilhadas com vetores de exclusão ou mapeamento de coluna habilitados, você deve definir a opção responseFormat=delta
adicional .
Os exemplos a seguir mostram consultas em lote, CDF e streaming:
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 vistas partilhadas
Importante
Esta funcionalidade está em Pré-visualização Pública.
Nota
A partilha de vistas só é suportada na partilha entre Databricks.
Ler vistas partilhadas é o mesmo que ler tabelas partilhadas, com estas exceções:
Requisitos de computação:
- Se sua conta do Azure Databricks for diferente da do provedor, você deverá usar um SQL warehouse sem servidor para consultar exibições compartilhadas.
- Se o provedor estiver na mesma conta do Azure Databricks, você poderá usar qualquer SQL warehouse e também poderá usar um cluster que use o modo de acesso compartilhado.
Restrições de visualização na visualização:
Não é possível criar modos de exibição que façam referência a modos de exibição compartilhados.
Ver restrições de partilha:
Não é possível partilhar vistas que façam referência a tabelas partilhadas ou vistas partilhadas.
Requisitos de nomenclatura:
O nome do catálogo que você usa para o catálogo compartilhado que contém o modo de exibição não pode ser o mesmo que qualquer catálogo de provedor que contenha uma tabela referenciada pelo modo de exibição. Por exemplo, se o modo de exibição compartilhado estiver contido em seu test
catálogo e uma das tabelas do provedor referenciadas nesse modo de exibição estiver contida no catálogo do test
provedor, a consulta resultará em um erro de conflito de namespace. Consulte Criar um catálogo a partir de um compartilhamento.
História e streaming:
Não é possível consultar o histórico ou usar um modo de exibição como fonte de streaming.
JDBC/ODBC:
As instruções neste artigo se concentram na leitura de dados compartilhados usando interfaces de usuário do Azure Databricks, especificamente sintaxe e interfaces do Catálogo Unity. Você também pode consultar exibições compartilhadas usando ferramentas Apache Spark, Python e BI, como Tableau e Power BI, usando drivers Databricks JDBC/ODBC. Para saber como se conectar usando os drivers Databricks JDBC/ODBC, consulte Databricks ODBC e JDBC Drivers.
Ler blocos de notas partilhados
Para visualizar e clonar arquivos de bloco de anotações compartilhados, você pode usar o Gerenciador de Catálogos.
Permissões necessárias: proprietário ou usuário do catálogo com o USE CATALOG
privilégio no catálogo criado a partir do compartilhamento.
No seu espaço de trabalho do Azure Databricks, clique em Catálogo.
No painel esquerdo, expanda o menu Catálogo , localize e selecione o catálogo criado a partir do compartilhamento.
Na guia Outros ativos, você verá todos os arquivos de bloco de anotações compartilhados.
Clique no nome de um arquivo de bloco de anotações compartilhado para visualizá-lo.
(Opcional) Clique no botão Clonar para importar o arquivo de bloco de anotações compartilhado para seu espaço de trabalho.
- Na caixa de diálogo Clonar em, opcionalmente, insira um Novo nome e selecione a pasta do espaço de trabalho para a qual deseja clonar o arquivo do bloco de anotações.
- Clique em Clonar.
- Depois que o bloco de anotações for clonado, uma caixa de diálogo será exibida para informar que ele foi clonado com êxito. Clique em revelar no editor de bloco de anotações na caixa de diálogo para visualizá-lo no editor de bloco de anotações.