Para determinar se o evento foi uma leitura ou uma gravação, você pode verificar os campos source_type e target_type.
- Somente leitura: O tipo de fonte não é nulo, mas o tipo de destino é nulo.
- Somente gravação: O tipo de destino não é nulo, mas o tipo de fonte é nulo.
- Leitura e gravação: Os tipos de fonte e destino não são nulos.
No restante do artigo, explorarei alguns casos de uso destacando a auditoria de acesso a dados e a popularidade de objetos de dados, demonstrarei técnicas para analisar seus dados de linhagem e geraremos um painel que você pode personalizar para obter insights.
Nesse artigo temos quatro conjuntos de códigos: um notebook para exploração de dados da tabela de linhagem e três dashboards que mostram alguns dos resultados do notebook. Ambos podem ser usados imediatamente em qualquer workspace onde o Unity Catalog e as tabelas do sistema estejam habilitados.
Exploração de Dados — Configuração da Análise
No início do notebook, configuramos variáveis para a execução das consultas subsequentes. Por favor, ajuste os valores de acordo com o seu ambiente.
DECLARE OR REPLACE VARIABLE catalog_val STRING;
DECLARE OR REPLACE VARIABLE target_catalog_val STRING;
DECLARE OR REPLACE VARIABLE schema_val STRING;
DECLARE OR REPLACE VARIABLE table_val STRING;
DECLARE OR REPLACE VARIABLE column_val STRING;
DECLARE OR REPLACE VARIABLE email_val STRING;
DECLARE OR REPLACE VARIABLE table_full_name_val STRING;
SET VARIABLE catalog_val = 'system';
SET VARIABLE target_catalog_val = 'pdavis';
SET VARIABLE schema_val = 'billing';
SET VARIABLE table_val = 'usage';
SET VARIABLE column_val = 'usage_quantity';
SET VARIABLE table_full_name_val = concat(catalog_val, '.', schema_val, '.', table_val)
SET VARIABLE email_val = 'demo@databricks.com';
Acessos às Tabelas por Usuários:
Veja quais usuários acessaram uma tabela e qual interface do Databricks usaram nos últimos 7 dias:
- Usuários: Identifique os usuários que acessaram a tabela.
- Interfaces: Verifique se usaram notebooks, jobs, ou outras interfaces do Databricks para acessar a tabela.
Isso ajudará a entender o comportamento de acesso e uso das tabelas por diferentes usuários dentro do período de uma semana.
SELECT
mask(created_by) as created_by, -- Masking function - nice feature
entity_type,
source_type,
COUNT(distinct event_time) as access_count,
MIN(event_date) as first_access_date,
MAX(event_date) as last_access_date
FROM
system.access.table_lineage
WHERE
source_table_catalog = catalog_val
AND source_table_schema = schema_val
AND source_table_name = table_val
AND datediff(now(), event_date) < 7
AND entity_type IS NOT NULL
AND source_type IS NOT NULL
GROUP BY
ALL -- Nice feature
ORDER BY
ALL -- Nice feature
Aqui, obtemos um resultado com os endereços de e-mail (created_by), interfaces (entity_type), datas do primeiro e último acesso, e a contagem de acessos à tabela.
Limitei o período total para uma semana para minimizar o uso de recursos durante a exploração, e uso uma função de mascaramento para ocultar os endereços de e-mail no campo created_by para este artigo.
Acessos às tabelas em um catálogo e esquema específicos:
SELECT
source_table_name,
entity_type,
created_by,
source_type,
COUNT(distinct event_time) as access_count,
MIN(event_date) as first_access_date,
MAX(event_date) as last_access_date
FROM
system.access.table_lineage
WHERE
source_table_catalog = catalog_val
AND source_table_schema = schema_val
AND datediff(now(), event_date) < 30
GROUP BY
ALL
ORDER BY
ALL
Aqui, vemos todas as tabelas acessadas dentro de um catálogo e esquema específicos nos últimos 30 dias, quem as acessou e as datas do primeiro e último acesso.
Acessos às Tabelas por Usuários Específicos
Quais tabelas um usuário específico acessou no catálogo do sistema nos últimos 90 dias:
SELECT
source_table_catalog,
source_table_schema,
source_table_name,
entity_type,
source_type,
mask(created_by) as created_by,
COUNT(distinct event_time) as access_count,
MIN(event_date) as first_access_date,
MAX(event_date) as last_access_date
FROM
system.access.table_lineage
WHERE
created_by = email_val
AND datediff(now(), event_date) < 90
and entity_type is not NULL
and source_table_catalog = 'system'
GROUP BY
ALL
ORDER BY
ALL
Linhagem de Objetos
Para um único objeto, quais são os objetos imediatamente upstream (anteriores) e downstream (posteriores)?
with downstream AS (
select
distinct target_table_catalog as table_catalog,
target_table_schema as table_schema,
target_table_name as table_name,
'downstream' as direction,
CASE WHEN tbl.table_catalog is null then 'no' else 'yes' end as current
from
system.access.table_lineage tl
left join system.information_schema.tables tbl
on tl.target_table_full_name = concat(tbl.table_catalog, '.', tbl.table_schema, '.', tbl.table_name)
where
source_table_full_name = table_full_name_val
AND target_table_full_name is not null
order by current desc, table_catalog, table_schema, table_name
)
,
upstream AS (
select
distinct source_table_catalog as table_catalog,
source_table_schema as table_schema,
source_table_name as table_name,
'upstream' as direction,
CASE WHEN tbl.table_catalog is null then 'no' else 'yes' end as current
from
system.access.table_lineage tl
left join system.information_schema.tables tbl
on tl.source_table_full_name = concat(tbl.table_catalog, '.', tbl.table_schema, '.', tbl.table_name)
where
target_table_full_name = table_full_name_val
AND source_table_full_name is not null
order by current desc, table_catalog, table_schema, table_name
)
select * from upstream
UNION ALL
select * from downstream
Vamos juntar tudo ? — Dashboards
Os dashboards a seguir ajudarão você a começar a analisar as tabelas de linhagem do Unity Catalog. Os usuários são incentivados a experimentar os dashboards e, em seguida, personalizá-los conforme o que for mais útil em seu ambiente.
Temos três dashboards com os seguintes recursos:
- Linhagem de tabelas
- Linhagem de colunas
- Tags e linhagem de colunas
Linhagem de tabelas
Juntando tudo, criei um dashboard para mostrar:
- Acessos às tabelas por data
- Colunas em uso na tabela
- Quem acessou a tabela e por quais interfaces
- Tabelas upstream/downstream relacionadas (incluindo dependências depreciadas)
Importando o dashboard e inserindo qualquer nome de tabela com 3 níveis, você pode revisar as mesmas informações sobre as tabelas (desde que tenha permissão para ver os metadados da tabela).