Filtrowanie poufnych danych tabeli przy użyciu filtrów wierszy i masek kolumn
Ten artykuł zawiera wskazówki i przykłady dotyczące używania filtrów wierszy, masek kolumn i tabel mapowania w celu filtrowania poufnych danych w tabelach. Te funkcje wymagają wykazu aparatu Unity.
Co to są filtry wierszy?
Filtry wierszy umożliwiają zastosowanie filtru do tabeli, dzięki czemu zapytania zwracają tylko wiersze spełniające kryteria filtrowania. Filtr wierszy jest implementowane jako funkcja zdefiniowana przez użytkownika SQL (UDF). Obsługiwane są również funkcje zdefiniowane przez użytkownika języka Python i języka Scala, ale tylko wtedy, gdy są one opakowane w funkcje zdefiniowane przez użytkownika SQL.
Co to są maski kolumn?
Maski kolumn umożliwiają zastosowanie funkcji maskowania do kolumny tabeli. Funkcja maskowania ocenia w czasie wykonywania zapytań, podstawiając każde odwołanie do kolumny docelowej z wynikami funkcji maskowania. W większości przypadków użycia maski kolumn określają, czy zwracać oryginalną wartość kolumny, czy zredagować ją na podstawie tożsamości wywoływanego użytkownika. Maski kolumnowe są wyrażeniami napisanymi jako funkcje zdefiniowane przez użytkownika SQL albo jako funkcje zdefiniowane przez użytkownika w języku Python lub Scala, opakowane w funkcje zdefiniowane przez użytkownika SQL.
Każda kolumna tabeli może mieć zastosowaną tylko jedną funkcję maskowania. Funkcja maskowania przyjmuje niemaskowaną wartość kolumny jako dane wejściowe i zwraca maskowaną wartość w wyniku. Wartość zwracana funkcji maskowania powinna być tego samego typu co maskowana kolumna. Funkcja maskowania może również przyjmować dodatkowe kolumny jako parametry wejściowe i używać ich w logice maskowania.
Jaka jest różnica między tymi filtrami i widokami dynamicznymi?
Widoki dynamiczne, filtry wierszy i maski kolumn umożliwiają stosowanie złożonej logiki do tabel i przetwarzanie decyzji dotyczących filtrowania w czasie wykonywania zapytań.
Widok dynamiczny to abstrakcyjny, tylko do odczytu widok jednej lub większej liczby tabel źródłowych. Użytkownik może uzyskać dostęp do widoku dynamicznego bez bezpośredniego dostępu do tabel źródłowych. Tworzenie widoku dynamicznego definiuje nową nazwę tabeli, która nie może być zgodna z nazwą żadnych tabel źródłowych ani innych tabel i widoków znajdujących się w tym samym schemacie.
Z drugiej strony skojarzenie filtru wiersza lub maski kolumny z tabelą docelową stosuje odpowiednią logikę bezpośrednio do samej tabeli bez wprowadzania nowych nazw tabel. Kolejne zapytania mogą nadal odwoływać się bezpośrednio do tabeli docelowej przy użyciu oryginalnej nazwy.
Użyj widoków dynamicznych, jeśli musisz zastosować logikę przekształcania, taką jak filtry i maski, w tabelach tylko do odczytu i jeśli jest akceptowalne, aby użytkownicy odwołyli się do widoków dynamicznych przy użyciu różnych nazw. Jeśli chcesz filtrować dane podczas udostępniania przy użyciu funkcji udostępniania różnicowego, musisz użyć widoków dynamicznych. Użyj filtrów wierszy i masek kolumn, jeśli chcesz filtrować lub obliczać wyrażenia na podstawie określonych danych, ale nadal zapewniają użytkownikom dostęp do tabel przy użyciu ich oryginalnych nazw.
Zanim rozpoczniesz
Aby dodać filtry wierszy i maski kolumn do tabel, musisz mieć następujące elementy:
- Obszar roboczy, który jest włączony dla wykazu aparatu Unity.
- Funkcja zarejestrowana w wykazie aparatu Unity. Ta funkcja może być funkcją zdefiniowaną przez użytkownika SQL lub funkcją UDF języka Python albo Scala, zarejestrowaną w katalogu Unity i opakowaną w funkcję zdefiniowaną przez użytkownika SQL. Aby uzyskać szczegółowe informacje, zobacz Co to są funkcje zdefiniowane przez użytkownika?, klauzula maski kolumny i klauzula FILTER wiersza.
Należy również spełnić następujące wymagania:
- Aby przypisać funkcję, która dodaje filtry wierszy lub maski kolumn do tabeli, musisz mieć
EXECUTE
uprawnienia do funkcji,USE SCHEMA
schematu iUSE CATALOG
wykazu nadrzędnego. - Jeśli dodasz filtry lub maski podczas tworzenia nowej tabeli, musisz mieć
CREATE TABLE
uprawnienia do schematu. - Jeśli dodasz filtry lub maski do istniejącej tabeli, musisz być właścicielem tabeli.
Aby uzyskać dostęp do tabeli z filtrami wierszy lub maskami kolumn, zasób obliczeniowy musi spełniać jedno z następujących wymagań:
Usługa SQL Warehouse.
Tryb dostępu współdzielonego w środowisku Databricks Runtime 12.2 LTS lub nowszym.
Tryb dostępu pojedynczego użytkownika w środowisku Databricks Runtime 15.4 LTS lub nowszym.
Nie można odczytać filtrów wierszy lub masek kolumn przy użyciu obliczeń skonfigurowanych z trybem dostępu pojedynczego użytkownika w środowisku Databricks Runtime 15.3 lub nowszym.
Aby skorzystać z filtrowania danych dostępnego w środowisku Databricks Runtime 15.4 LTS lub nowszym, należy również sprawdzić, czy obszar roboczy jest włączony dla bezserwerowych obliczeń, ponieważ funkcja filtrowania danych, która obsługuje filtry wierszy i maski kolumn, działa na bezserwerowych obliczeniach. Opłaty mogą być naliczane za zasoby obliczeniowe bezserwerowe w przypadku używania zasobów obliczeniowych skonfigurowanych jako tryb dostępu pojedynczego użytkownika do odczytywania tabel korzystających z filtrów wierszy lub masek kolumn. Zobacz Szczegółowa kontrola dostępu w obliczeniach pojedynczego użytkownika.
Stosowanie filtru wierszy
Aby utworzyć filtr wierszy, należy napisać funkcję (UDF), aby zdefiniować zasady filtrowania, a następnie zastosować je do tabeli. Każda tabela może mieć tylko jeden filtr wierszy. Filtr wierszy akceptuje zero lub więcej parametrów wejściowych, w których każdy parametr wejściowy wiąże się z jedną kolumną odpowiadającej tabeli.
Filtr wiersza można zastosować przy użyciu Eksploratora wykazu lub poleceń SQL. W instrukcjach Eksploratora Katalogu założono, że funkcja została już utworzona i zarejestrowana w Unity Catalog. Instrukcje SQL zawierają przykłady tworzenia funkcji filtrowania wierszy i stosowania jej do tabeli.
Eksplorator wykazu
- W obszarze roboczym usługi Azure Databricks kliknij pozycję Wykaz.
- Przeglądaj lub wyszukaj tabelę, którą chcesz filtrować.
- Na karcie Przegląd kliknij pozycję Filtr wierszy: Dodaj filtr.
- W oknie dialogowym Dodawanie filtru wierszy wybierz wykaz i schemat zawierający funkcję filter, a następnie wybierz funkcję.
- W rozwiniętym oknie dialogowym wyświetl definicję funkcji i wybierz kolumny tabeli zgodne z kolumnami zawartymi w instrukcji funkcji.
- Kliknij przycisk Dodaj.
Aby usunąć filtr z tabeli, kliknij przycisk fx Filtr wierszy i kliknij przycisk Usuń.
SQL
Aby utworzyć filtr wierszy, a następnie dodać go do istniejącej tabeli, użyj CREATE FUNCTION
i zastosuj funkcję przy użyciu ALTER TABLE
. Funkcję można również zastosować podczas tworzenia tabeli przy użyciu polecenia CREATE TABLE
.
Utwórz filtr wierszy:
CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...) RETURN {filter clause whose output must be a boolean};
Zastosuj filtr wierszy do tabeli przy użyciu nazwy kolumny:
ALTER TABLE <table_name> SET ROW FILTER <function_name> ON (<column_name>, ...);
Dodatkowe przykłady składni:
Zastosuj filtr wierszy do tabeli przy użyciu literału stałego zgodnego z parametrem funkcji:
ALTER TABLE <table_name> SET ROW FILTER <function_name> ON (<constant_literal>, ...);
Usuń filtr wierszy z tabeli:
ALTER TABLE <table_name> DROP ROW FILTER;
Modyfikowanie filtru wiersza:
Run a DROP FUNCTION statement to drop the existing function, or use CREATE OR REPLACE FUNCTION to replace it.
Usuń filtr wierszy:
ALTER TABLE <table_name> DROP ROW FILTER; DROP FUNCTION <function_name>;
Uwaga
Przed usunięciem
ALTER TABLE ... DROP ROW FILTER
funkcji należy wykonać polecenie . Jeśli tego nie zrobisz, tabela będzie w stanie niedostępnym.Jeśli tabela stanie się w ten sposób niedostępna, zmień tabelę i upuść odwołanie filtru oddzielonego wiersza przy użyciu polecenia
ALTER TABLE <table_name> DROP ROW FILTER;
.
Zobacz również klauzulę ROW FILTER.
Przykłady filtrów wierszy
W tym przykładzie jest tworzona funkcja zdefiniowana przez użytkownika SQL, która ma zastosowanie do członków grupy admin
w regionie US
.
Po zastosowaniu sales
tej przykładowej funkcji do tabeli członkowie admin
grupy mogą uzyskiwać dostęp do wszystkich rekordów w tabeli. Jeśli funkcja jest wywoływana przez innego niż administrator, RETURN_IF
warunek kończy się niepowodzeniem, a region='US'
wyrażenie jest oceniane, filtrując tabelę tak, aby pokazywała tylko rekordy w US
regionie.
CREATE FUNCTION us_filter(region STRING)
RETURN IF(IS_ACCOUNT_GROUP_MEMBER('admin'), true, region='US');
Zastosuj funkcję do tabeli jako filtr wiersza. Kolejne zapytania z sales
tabeli zwracają podzbiór wierszy.
CREATE TABLE sales (region STRING, id INT);
ALTER TABLE sales SET ROW FILTER us_filter ON (region);
Wyłącz filtr wierszy. Przyszłe zapytania użytkownika z sales
tabeli zwracają wszystkie wiersze w tabeli.
ALTER TABLE sales DROP ROW FILTER;
Utwórz tabelę z funkcją zastosowaną jako filtr wierszy w ramach instrukcji CREATE TABLE
. Przyszłe zapytania z sales
tabeli zwracają podzbiór wierszy.
CREATE TABLE sales (region STRING, id INT)
WITH ROW FILTER us_filter ON (region);
Stosowanie maski kolumny
Aby zastosować maskę kolumny, utwórz funkcję (UDF) i zastosuj ją do kolumny tabeli.
Maskę kolumn można zastosować przy użyciu Eksploratora wykazu lub poleceń SQL. W instrukcjach Eksploratora katalogu założono, że funkcję już utworzono i zarejestrowano w Unity Catalog. Instrukcje SQL zawierają przykłady tworzenia funkcji maski kolumn i stosowania jej do kolumny tabeli.
Eksplorator wykazu
- W obszarze roboczym usługi Azure Databricks kliknij pozycję Wykaz.
- Przeglądaj lub wyszukaj tabelę.
- Na karcie Przegląd znajdź wiersz, do którego chcesz zastosować maskę kolumny, a następnie kliknij ikonę Maskuj edycję.
- W oknie dialogowym Dodawanie maski kolumn wybierz katalog i schemat zawierający funkcję filter, a następnie wybierz funkcję.
- W rozwiniętym oknie dialogowym wyświetl definicję funkcji. Jeśli funkcja zawiera jakiekolwiek parametry oprócz maskowanej kolumny, wybierz kolumny tabeli, w których chcesz rzutować te dodatkowe parametry funkcji.
- Kliknij przycisk Dodaj.
Aby usunąć maskę kolumny z tabeli, kliknij przycisk fx Maska kolumny w wierszu tabeli i kliknij przycisk Usuń.
SQL
Aby utworzyć maskę kolumny i dodać ją do istniejącej kolumny tabeli, użyj funkcji CREATE FUNCTION
maskowania i zastosuj ją przy użyciu polecenia ALTER TABLE
. Funkcję można również zastosować podczas tworzenia tabeli przy użyciu polecenia CREATE TABLE
.
Służy SET MASK
do stosowania funkcji maskowania. W ramach klauzuli MASK
można użyć dowolnej wbudowanej funkcji środowiska uruchomieniowego usługi Azure Databricks lub wywołać inne funkcje zdefiniowane przez użytkownika. Typowe przypadki użycia obejmują inspekcję tożsamości użytkownika wywołującego funkcję przy użyciu funkcji current_user( )
lub uzyskiwanie grup, do których należą.is_account_group_member( )
Aby uzyskać szczegółowe informacje, zobacz Klauzula maski kolumn i Wbudowane funkcje.
Utwórz maskę kolumny:
CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...) RETURN {expression with the same type as the first parameter};
Zastosuj maskę kolumny do kolumny w istniejącej tabeli:
ALTER TABLE <table_name> ALTER COLUMN <col_name> SET MASK <mask_func_name> USING COLUMNS <additional_columns>;
Dodatkowe przykłady składni:
Zastosuj maskę kolumny do kolumny w istniejącej tabeli przy użyciu literału stałego zgodnego z parametrem funkcji:
ALTER TABLE <table_name> ALTER COLUMN <col_name> SET MASK <mask_func_name> USING COLUMNS (<constant_name>, ...);
Usuń maskę kolumny z kolumny w tabeli:
ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK;
Zmodyfikuj maskę kolumny
DROP
istniejącej funkcji lub użyjCREATE OR REPLACE TABLE
.Usuń maskę kolumny:
ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK; DROP FUNCTION <function_name>;
Uwaga
Przed usunięciem funkcji należy wykonać
ALTER TABLE
polecenie lub tabela będzie w stanie niedostępnym.Jeśli tabela stanie się w ten sposób niedostępna, zmień tabelę i upuść odwołanie do oddzielonej maski przy użyciu polecenia
ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK;
.
Przykłady maski kolumn
W tym przykładzie utworzysz funkcję zdefiniowaną przez użytkownika, która maskuje kolumnę ssn
tak, aby tylko użytkownicy, którzy są członkami HumanResourceDept
grupy, mogli wyświetlać wartości w tej kolumnie.
CREATE FUNCTION ssn_mask(ssn STRING)
RETURN CASE WHEN is_member('HumanResourceDept') THEN ssn ELSE '***-**-****' END;
Zastosuj nową funkcję do tabeli jako maskę kolumny. Maskę kolumn można dodać podczas tworzenia tabeli lub później.
--Create the `users` table and apply the column mask in a single step:
CREATE TABLE users (
name STRING,
ssn STRING MASK ssn_mask);
--Create the `users` table and apply the column mask after:
CREATE TABLE users
(name STRING, ssn STRING);
ALTER TABLE users ALTER COLUMN ssn SET MASK ssn_mask;
Zapytania dotyczące tej tabeli zwracają teraz wartości kolumn maskowanych ssn
, gdy użytkownik kwerendy nie jest członkiem HumanResourceDept
grupy:
SELECT * FROM users;
James ***-**-****
Aby wyłączyć maskę kolumn, aby zapytania zwracały oryginalne wartości w kolumnie ssn
:
ALTER TABLE users ALTER COLUMN ssn DROP MASK;
Tworzenie listy kontroli dostępu za pomocą tabel mapowania
Aby uzyskać zabezpieczenia na poziomie wiersza, rozważ zdefiniowanie tabeli mapowania (lub listy kontroli dostępu). Kompleksowa tabela mapowania koduje wiersze danych w oryginalnej tabeli dostępne dla niektórych użytkowników lub grup. Tabele mapowania są przydatne, ponieważ oferują prostą integrację z tabelami faktów za pomocą sprzężeń bezpośrednich.
Ta metodologia dotyczy wielu przypadków użycia, które obejmują wymagania niestandardowe. Oto kilka przykładów:
- Nakładanie ograniczeń na podstawie zalogowanego użytkownika przy jednoczesnym korzystaniu z różnych reguł dla określonych grup użytkowników.
- Tworzenie skomplikowanych hierarchii, takich jak struktury organizacyjne, które wymagają różnych zestawów reguł.
- Replikowanie złożonych modeli zabezpieczeń z zewnętrznych systemów źródłowych.
Przyjmując tabele mapowania, można wykonać te trudne scenariusze i zapewnić niezawodne implementacje zabezpieczeń na poziomie wiersza i kolumny.
Przykłady tabeli mapowania
Użyj tabeli mapowania, aby sprawdzić, czy bieżący użytkownik znajduje się na liście:
USE CATALOG main;
Utwórz nową tabelę mapowania:
DROP TABLE IF EXISTS valid_users;
CREATE TABLE valid_users(username string);
INSERT INTO valid_users
VALUES
('fred@databricks.com'),
('barney@databricks.com');
Utwórz nowy filtr:
Uwaga
Wszystkie filtry są uruchamiane z prawami zdefiniowanych z wyjątkiem funkcji, które sprawdzają kontekst użytkownika (na przykład CURRENT_USER
funkcje i IS_MEMBER
), które są uruchamiane jako wywołacz.
W tym przykładzie funkcja sprawdza, czy bieżący użytkownik znajduje się w tabeli valid_users
. Jeśli użytkownik zostanie znaleziony, funkcja zwróci wartość true.
DROP FUNCTION IF EXISTS row_filter;
CREATE FUNCTION row_filter()
RETURN EXISTS(
SELECT 1 FROM valid_users v
WHERE v.username = CURRENT_USER()
);
Poniższy przykład stosuje filtr wierszy podczas tworzenia tabeli. Filtr można również dodać później przy użyciu instrukcji ALTER TABLE
. Podczas stosowania jej do całej tabeli użyj składni ON ()
. W przypadku określonego wiersza użyj ON (row);
.
DROP TABLE IF EXISTS data_table;
CREATE TABLE data_table
(x INT, y INT, z INT)
WITH ROW FILTER row_filter ON ();
INSERT INTO data_table VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9);
Wybierz dane z tabeli. Powinno to zwracać dane tylko wtedy, gdy użytkownik znajduje się w valid_users
tabeli.
SELECT * FROM data_table;
Utwórz tabelę mapowania zawierającą konta, które powinny zawsze mieć dostęp do wyświetlania wszystkich wierszy w tabeli, niezależnie od wartości kolumn:
CREATE TABLE valid_accounts(account string);
INSERT INTO valid_accounts
VALUES
('admin'),
('cstaff');
Teraz utwórz funkcję zdefiniowaną przez użytkownika SQL zwracającą true
, jeśli wartości wszystkich kolumn w wierszu są mniejsze niż pięć lub jeśli użytkownik wywołujący jest członkiem wspomnianej tabeli mapowania.
CREATE FUNCTION row_filter_small_values (x INT, y INT, z INT)
RETURN (x < 5 AND y < 5 AND z < 5)
OR EXISTS(
SELECT 1 FROM valid_accounts v
WHERE IS_ACCOUNT_GROUP_MEMBER(v.account));
Na koniec zastosuj funkcję zdefiniowanej przez użytkownika SQL do tabeli jako filtr wiersza:
ALTER TABLE data_table SET ROW FILTER row_filter_small_values ON (x, y, z);
Obsługa i ograniczenia
Filtry wierszy i maski kolumn nie są obsługiwane w przypadku wszystkich funkcji usługi Azure Databricks ani wszystkich zasobów obliczeniowych. W tej sekcji wymieniono obsługiwane funkcje i ograniczenia.
Obsługiwane funkcje i formaty
Ta lista obsługiwanych funkcji nie jest wyczerpująca. Niektóre elementy są wyświetlane, ponieważ nie były obsługiwane w publicznej wersji zapoznawczej.
Obsługiwane są notesy usługi Databricks SQL i Databricks dla obciążeń SQL.
Obsługiwane są polecenia DML przez użytkowników z uprawnieniami
MODIFY
. Filtry i maski są stosowane do danych odczytywanych przez instrukcjeUPDATE
iDELETE
i nie są stosowane do zapisanych danych (w tymINSERT
).Obsługiwane formaty danych:
- Delta i Parquet dla tabel zarządzanych i zewnętrznych.
- Wiele innych formatów danych dla tabel obcych zarejestrowanych w wykazie aparatu Unity przy użyciu federacji Lakehouse.
Parametry zasad mogą zawierać wyrażenia stałe (ciągi, liczbowe, interwały, wartości logiczne, wartości null).
Funkcje zdefiniowane przez użytkownika SQL, Python i Scala mogą być używane jako funkcje filtrowania wierszy lub maski kolumn, jeśli są zarejestrowane w katalogu Unity. Funkcje zdefiniowane przez użytkownika języka Python i języka Scala muszą być opakowane w funkcji zdefiniowanej przez użytkownika SQL.
Można tworzyć widoki w tabelach odwołujących się do masek kolumn lub filtrów wierszy, ale nie można dodawać masek kolumn ani filtrów wierszy do widoku.
Źródła danych zmian usługi Delta Lake są obsługiwane, jeśli schemat jest zgodny z filtrami wierszy i maskami kolumn, które mają zastosowanie do tabeli docelowej.
Obsługiwane są tabele obce.
Obsługiwane jest próbkowanie tabeli.
MERGE
instrukcje są obsługiwane, gdy tabele źródłowe, tabele docelowe lub obie używają filtrów wierszy i masek kolumn. Obejmuje to tabele z funkcjami filtru wierszy, które zawierają proste podzapytania. Ograniczenia są wymienione w poniższej sekcji.Zmaterializowane widoki SQL usługi Databricks i tabele przesyłania strumieniowego SQL usługi Databricks obsługują filtry wierszy i maski kolumn (publiczna wersja zapoznawcza):
- Filtry wierszy i maski kolumn można dodawać do zmaterializowanego widoku lub tabeli przesyłania strumieniowego usługi Databricks. Po zdefiniowaniu zmaterializowanego widoku lub tabeli przesyłania strumieniowego należy deklaratywnie dodawać maski. Zobacz CREATE MATERIALIZED VIEW (TWORZENIE ZMATERIALIZOWANEGO WIDOKU ) lub CREATE STREAMING TABLE (TWORZENIE TABELI PRZESYŁANIA STRUMIENIOWEGO).
- Możesz zdefiniować zmaterializowane widoki SQL usługi Databricks lub tabele przesyłania strumieniowego w tabelach zawierających filtry wierszy i maski kolumn.
Zmaterializowane widoki i tabele przesyłania strumieniowego zadeklarowane i opublikowane w tabelach Delta Live Tables obsługują filtry wierszy lub maski kolumn (publiczna wersja zapoznawcza):
- Filtry wierszy i maski kolumn można dodawać do zmaterializowanego widoku lub tabeli przesyłania strumieniowego w tabelach delta live.
- Możesz zdefiniować tabele delta Live Tables zmaterializowane widoki lub tabele przesyłania strumieniowego w tabelach zawierających filtry wierszy i maski kolumn.
Zobacz Publikowanie tabel z filtrami wierszy i maskami kolumn.
zalecenia dotyczące wydajności
Filtry wierszy i maski kolumn kontrolują widoczność danych, zapewniając, że użytkownicy nie mogą wyświetlać zawartości wartości tabel podstawowych przed filtrowaniem i maskowaniem operacji. Działają one dobrze w odpowiedzi na zapytania w typowych przypadkach użycia. W mniej typowych aplikacjach, w których aparat zapytań musi wybierać między optymalizacją wydajności zapytań a ochroną przed wyciekiem informacji z filtrowanych/maskowanych wartości, zawsze podejmie bezpieczną decyzję kosztem pewnego wpływu na wydajność zapytań. Aby zminimalizować ten wpływ na wydajność, zastosuj następujące zalecenia:
- Używanie prostych funkcji zasad: Funkcje zasad z mniejszą liczbą wyrażeń często działają lepiej niż bardziej złożone wyrażenia. Unikaj używania tabel mapowania i podzapytania wyrażeń na rzecz prostych funkcji CASE.
- Zmniejsz liczbę argumentów funkcji: Azure Databricks nie może zoptymalizować odwołań do kolumn w tabeli źródłowej wynikających z argumentów funkcji polityki, nawet gdy te kolumny nie są używane w zapytaniu. Używaj funkcji zasad z mniejszą liczbą argumentów, ponieważ zapytania z tych tabel będą działać lepiej.
-
Unikaj dodawania filtrów wierszy z zbyt dużą liczbą sprzężeń AND: ponieważ każda tabela obsługuje tylko dodawanie co najwyżej jednego filtru wierszy, typowym podejściem jest połączenie wielu żądanych funkcji zasad za pomocą polecenia
AND
. Jednak w przypadku każdej koniunkcji zwiększa się szansa, że koniunkcje zawierają składniki wymienione gdzie indziej w tej tabeli, które mogą wpływać na wydajność (np. tabele odwzorowań). Użyj mniejszej liczby sprzężeń, aby zwiększyć wydajność. -
Użyj wyrażeń deterministycznych, które nie mogą zgłaszać błędów w zasadach tabeli i zapytaniach z tych tabel: Niektóre wyrażenia mogą zgłaszać błędy, jeśli podane dane wejściowe są nieprawidłowe, takie jak podział ANSI. W takich przypadkach kompilator SQL nie może wypychać operacji z tymi wyrażeniami (takimi jak filtry) zbyt daleko w planie zapytania, aby uniknąć wystąpienia błędów, takich jak "dzielenie według zera", które ujawniają informacje o wartościach przed filtrowaniem i/lub operacjami maskowania. Użyj wyrażeń deterministycznych, które nigdy nie zgłaszają błędów, takich jak
try_divide
w tym przykładzie. - Uruchamianie zapytań testowych w tabeli w celu pomiaru wydajności: konstruowanie realistycznych zapytań reprezentujących obciążenie, którego oczekujesz dla tabeli, przy użyciu filtrów wierszy i/lub masek kolumn i mierzenia wydajności. Wprowadź małe modyfikacje funkcji zasad i obserwuj ich skutki, dopóki nie osiągniesz dobrej równowagi między wydajnością a ekspresyjnością logiki filtrowania i maskowania.
Ograniczenia
- Wersje środowiska Databricks Runtime poniżej wersji 12.2 LTS nie obsługują filtrów wierszy ani masek kolumn. Te środowiska uruchomieniowe kończą się niepowodzeniem bezpiecznie, co oznacza, że jeśli próbujesz uzyskać dostęp do tabel z nieobsługiwanych wersji tych środowisk uruchomieniowych, żadne dane nie są zwracane.
- Udostępnianie różnicowe nie działa z zabezpieczeniami na poziomie wiersza ani maskami kolumn.
- Do widoku nie można zastosować masek zabezpieczeń na poziomie wiersza ani kolumn.
- Podróż w czasie nie działa z zabezpieczeniami na poziomie wiersza ani maskami kolumn.
- Dostęp oparty na ścieżkach do plików w tabelach z zasadami nie jest obsługiwany.
- Zasady filtrowania wierszy lub maski kolumn z zależnościami cyklicznymi z powrotem do oryginalnych zasad nie są obsługiwane.
- Głębokie i płytkie klony nie są obsługiwane.
- Instrukcje
MERGE
nie obsługują tabel z zasadami filtrowania wierszy lub zasadami maskowania kolumn, które zawierają zagnieżdżanie, agregacje, funkcje okienkowe, limity lub funkcje niedeterministyczne. - Interfejsy API usługi Delta Lake nie są obsługiwane.
Ograniczenie mocy obliczeniowej pojedynczego użytkownika
Nie można uzyskać dostępu do tabeli z filtrami wierszy lub maskami kolumn z jednego zasobu obliczeniowego użytkownika w środowisku Databricks Runtime 15.3 lub nowszym. Możesz użyć trybu dostępu pojedynczego użytkownika w środowisku Databricks Runtime 15.4 LTS lub nowszym, jeśli obszar roboczy jest włączony na potrzeby przetwarzania bezserwerowego. Aby uzyskać więcej informacji, zobacz Szczegółowe informacje dotyczące kontroli dostępu w obliczeniach pojedynczego użytkownika.