Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O controle de acesso refinado permite restringir o acesso a dados específicos usando exibições, filtros de linha e máscaras de coluna. Esta página explica como a computação sem servidor é usada para impor controles de acesso refinados em recursos de computação dedicados.
Observação
A computação dedicada é a computação de todos os fins ou trabalhos configurada com o modo de acesso dedicado (antigo modo de acesso de usuário único). Consulte Modos de acesso.
Requisitos
Para usar a computação dedicada para consultar uma exibição ou tabela com controles de acesso refinados:
- O recurso de computação dedicado deve estar no Databricks Runtime 15.4 LTS ou superior.
- O workspace deve estar habilitado para computação sem servidor para trabalhos, notebooks e Pipelines Declarativos do Lakeflow.
Se o recurso de computação dedicado e o workspace atenderem a esses requisitos, a filtragem de dados será executada automaticamente.
Como a filtragem de dados funciona na computação dedicada
Sempre que uma consulta acessa um objeto de banco de dados com controles de acesso refinados, o recurso de computação dedicado passa a consulta para a computação sem servidor do workspace para executar a filtragem de dados. Os dados filtrados são transferidos entre a computação dedicada e sem servidor usando arquivos temporários no armazenamento em nuvem interno do workspace.
Essa funcionalidade se aplica aos seguintes objetos de banco de dados:
- Exibições dinâmicas
- Tabelas com filtros de linha ou máscaras de coluna
- Exibições criadas sobre tabelas nas quais o usuário não tem o
SELECT
privilégio - Exibições materializadas
- Tabelas de streaming
No diagrama a seguir, um usuário tem o SELECT
privilégio em table_1
, view_2
e table_w_rls
, que tem filtros de linha aplicados. O usuário não tem o privilégio SELECT
em table_2
, que é referenciado por view_2
.
A consulta no table_1
é tratada inteiramente pelo recurso de computação dedicado, pois nenhuma filtragem é necessária. As consultas a view_2
e table_w_rls
exigem filtragem de dados para retornar os dados aos quais o usuário tem acesso. Essas consultas são tratadas pela funcionalidade de filtragem de dados na computação sem servidor.
Suporte para operações de gravação
Importante
Esse recurso está em Visualização Pública.
No Databricks Runtime 16.3 e posteriores, você pode gravar em tabelas com filtros de linha ou máscaras de coluna aplicadas, usando estas opções:
- O MERGE INTO comando SQL, que você pode usar para obter
INSERT
,UPDATE
eDELETE
funcionalidade. - A operação de mesclagem Delta.
- A API do
DataFrame.write.mode("append")
.
Para obter INSERT, UPDATE, e a funcionalidade DELETE, é possível usar uma tabela de estagiamento e as cláusulas WHEN MATCHED e WHEN NOT MATCHED da instrução MERGE INTO.
Veja a seguir um exemplo de UPDATE, utilizando MERGE INTO:
MERGE INTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET
t.column1 = s.column1,
t.column2 = s.column2;
O seguinte é um exemplo de um INSERT utilizando MERGE INTO:
MERGE INTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHEN NOT MATCHED THEN
INSERT (id, column1, column2) VALUES (s.id, s.column1, s.column2);
Veja a seguir um exemplo de DELETE usando MERGE INTO:
MERGE INTO target_table AS t
USING source_table AS s ON t.id = s.id
WHEN MATCHED AND s.some_column = TRUE THEN DELETE;
Custos de computação sem servidor
Os clientes são cobrados pelos recursos de computação sem servidor que executam operações de filtragem de dados. Para obter informações sobre preços, consulte Camadas de Plataforma e Complementos.
Os usuários com acesso podem consultar a system.billing.usage
tabela para ver quanto foram cobrados. Por exemplo, a consulta a seguir divide os custos da computação por usuário:
SELECT usage_date,
sku_name,
identity_metadata.run_as,
SUM(usage_quantity) AS `DBUs consumed by FGAC`
FROM system.billing.usage
WHERE usage_date BETWEEN '2024-08-01' AND '2024-09-01'
AND billing_origin_product = 'FINE_GRAINED_ACCESS_CONTROL'
GROUP BY 1, 2, 3 ORDER BY 1;
Exibir o desempenho da consulta quando a filtragem de dados estiver ativada
A interface do usuário do Spark para computação dedicada exibe métricas que você pode usar para entender o desempenho de suas consultas. Para cada consulta executada no recurso de computação, a guia SQL/Dataframe exibe a representação do gráfico de consulta. Se uma consulta estiver envolvida na filtragem de dados, a interface do usuário exibirá um nó do operador RemoteSparkConnectScan na parte inferior do grafo. Esse nó exibe métricas que você pode usar para investigar o desempenho da consulta. Consulte Exibir informações de computação na interface do usuário do Apache Spark.
Expanda o nó do operador RemoteSparkConnectScan para ver as métricas que abordam perguntas como as seguintes:
- Quanto tempo levou a filtragem de dados? Veja "tempo total de execução remota".
- Quantas linhas permaneceram após a filtragem de dados? Veja "saída de linhas".
- Quantos dados (em bytes) foram retornados após a filtragem de dados? Veja "tamanho da saída de linhas".
- Quantos arquivos de dados foram removidos da partição e não precisaram ser lidos no armazenamento? Exibir "Arquivos removidos" e "Tamanho dos arquivos removidos".
- Quantos arquivos de dados não puderam ser removidos e tiveram que ser lidos do armazenamento? Veja "Arquivos lidos" e "Tamanho dos arquivos lidos".
- Dos arquivos que tinham que ser lidos, quantos já estavam no cache? Veja "Tamanho de acertos do cache" e "Tamanho de erros do cache".
Limitações
O catálogo padrão (
spark.sql.catalog.spark_catalog
) não pode ser modificado.No Databricks Runtime 16.2 e abaixo, não há suporte para operações de gravação ou atualização de tabela em tabelas que tenham filtros de linha ou máscaras de coluna aplicadas.
Especificamente, não há suporte para operações DML, como
INSERT
,DELETE
,UPDATE
,REFRESH TABLE
eMERGE
. Você só pode ler (SELECT
) dessas tabelas.No Databricks Runtime 16.3 e posteriores, as operações de tabela de gravação, tais como
INSERT
,DELETE
eUPDATE
não têm suporte, mas podem ser feitas usandoMERGE
, que tem suporte.No Databricks Runtime 16.2 e versões anteriores, as auto-uniões são bloqueadas automaticamente ao chamar a filtragem de dados, porque essas consultas podem retornar diferentes versões instantâneas da mesma tabela remota. No entanto, você pode habilitar essas consultas configurando
spark.databricks.remoteFiltering.blockSelfJoins
parafalse
na máquina em que está executando esses comandos.No Databricks Runtime 16.3 e posteriores, os instantâneos são sincronizados automaticamente entre recursos de computação dedicados e sem servidor. Devido a essa sincronização, consultas de autojunção que usam a funcionalidade de filtragem de dados retornam instantâneos idênticos e estão habilitadas por padrão. As exceções são exibições materializadas e quaisquer exibições, exibições materializadas e tabelas de streaming compartilhadas usando o Compartilhamento Delta. Para esses objetos, as autojunções são bloqueadas por padrão, mas você pode habilitar essas consultas definindo
spark.databricks.remoteFiltering.blockSelfJoins
como false na computação em que está executando esses comandos.Se você ativar as consultas de união automática para visualizações materializadas e quaisquer visualizações, visualizações materializadas e tabelas de streaming, deverá garantir que não haja gravações simultâneas nos objetos que estão sendo unidos.
- Não há suporte para imagens do Docker.
- Não há suporte ao usar os Serviços de Contêiner do Databricks.