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ą Unity Catalog.
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. Implementujesz filtr wierszy jako funkcję zdefiniowaną przez użytkownika SQL (UDF). Obsługiwane są również UDF-y w języku Python i Scala, ale tylko wtedy, gdy są one opakowane w UDF-y SQL.
Co to są maski kolumn?
Maski kolumn umożliwiają zastosowanie funkcji maskowania do kolumny tabeli. Funkcja maskowania jest wykonywana podczas działania zapytania, zastępując każde odwołanie do kolumny docelowej wynikami funkcji maskującej. 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 to wyrażenia zapisane jako funkcje zdefiniowane przez użytkownika (UDF) w języku SQL albo jako funkcje UDF w językach Python lub Scala, które są osadzone w funkcjach UDF 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 widok tylko do odczytu 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 Delta Sharing, 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 obsługiwany przez Unity Catalog.
- Funkcja zarejestrowana w Unity Catalog. Ta funkcja może być funkcją zdefiniowaną przez użytkownika SQL, lub funkcją UDF w języku Python albo Scala, która jest zarejestrowana w katalogu Unity Catalog i opakowana w funkcję zdefiniowaną przez użytkownika SQL. Aby uzyskać szczegółowe informacje, zobacz Co to są funkcje zdefiniowane przez użytkownika (UDF)?, kolumna
mask
klauzula, orazROW FILTER
klauzula.
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ń:
- Magazyn SQL.
- Tryb dostępu standardowego (dawniej tryb dostępu współdzielonego) w środowisku Databricks Runtime 12.2 LTS lub nowszym.
- Tryb dedykowanego dostępu (dawniej 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 dedykowanych obliczeń 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 obliczeń skonfigurowanych jako dedykowany tryb dostępu do odczytywania tabel korzystających z filtrów wierszy lub masek kolumn. Zobacz szczegółową kontrolę dostępu w przypadku dedykowanych zasobów obliczeniowych (dawniej dedykowane zbiory obliczeniowe dla jednego użytkownika).
Zastosuj filtr 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 ikonę
Katalog.
- Przeglądaj lub wyszukaj tabelę, którą chcesz filtrować.
- Na karcie Przegląd kliknij Filtr wierszy: Dodaj filtr.
- W oknie dialogowym Dodaj filtr wierszy wybierz katalog i schemat zawierający funkcję filtru, a następnie wybierz tę 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 fx Filtr wierszy i kliknij 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, zmodyfikuj tabelę i usuń odwołanie do filtru osieroconego wiersza przy użyciu
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 osobę niebędącą administratorem, warunek RETURN_IF
kończy się niepowodzeniem, a wyrażenie region='US'
jest wykonywane, filtrując tabelę, aby wyświetlała tylko rekordy w regionie US
.
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 będą zwracać 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 funkcja została już utworzona i zarejestrowana 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 ikonę
Katalog.
- Przeglądaj lub wyszukaj tabelę.
- Na karcie Przegląd znajdź wiersz, do którego chcesz zastosować maskę kolumny, a następnie kliknij ikonę
i wybierz opcję Maskuj.
- 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 CREATE FUNCTION
i zastosuj funkcję maskowania przy użyciu ALTER TABLE
. Funkcję można również zastosować podczas tworzenia tabeli przy użyciu polecenia CREATE TABLE
.
Używasz 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 uruchamiającego funkcję przy użyciu current_user( )
lub uzyskanie informacji o grupach, do których należy, przy użyciu is_account_group_member( )
. Aby uzyskać szczegółowe informacje, zobacz klauzulę kolumnymask
oraz 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, korzystając z
DROP
istniejącej funkcji, albo 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
Jeśli nie wykonasz polecenia
ALTER TABLE
, usunięcie funkcji spowoduje, że 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ń w zależności od zalogowanego użytkownika z uwzględnieniem 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 definiującego, z wyjątkiem funkcji, które sprawdzają kontekst użytkownika (na przykład funkcje CURRENT_USER
i IS_MEMBER
), które są uruchamiane jako wykonujący wywołanie.
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ę SQL zdefiniowaną przez użytkownika 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ą zarówno Databricks SQL, jak i notesy 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.
- Formaty danych dla zagranicznych tabel zarejestrowane w Unity Catalog za pomocą Lakehouse Federation.
- Parametry polityki mogą obejmować stałe wyrażenia (ciągi znaków, liczby, interwały, wartości logiczne, wartości null).
- UDF-y SQL, Python i Scala są obsługiwane jako funkcje filtrowania wierszy lub maskowania kolumn, jeśli są zarejestrowane w Unity Catalog. Funkcje zdefiniowane przez użytkownika w językach Python i Scala muszą być umieszczone w SQL UDF.
- 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.
- Strumienie danych zmian w Delta Lake są obsługiwane, jeśli schemat jest zgodny z filtrami wierszy i maskami kolumn, które stosują się do tabeli docelowej.
- Obsługiwane są tabele obce.
- Pobieranie próbek z tabeli jest obsługiwane.
- Instrukcje
MERGE
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 (wersja Public Preview):
- Możesz dodawać filtry wierszy i maski kolumn do zmaterializowanego widoku lub tabeli strumieniowej w Databricks SQL. Po zdefiniowaniu zmaterializowanego widoku lub tabeli przesyłania strumieniowego należy deklaratywnie dodawać maski. Zobacz CREATE MATERIALIZED VIEW lub CREATE STREAMING TABLE.
- Możesz zdefiniować zmaterializowane widoki Databricks SQL lub tabele strumieniowe na tabelach, które zawierają filtry wierszy i maski kolumn.
Zmaterializowane widoki i tabele strumieniowe zadeklarowane i opublikowane w DLT obsługują filtry wierszy lub maski kolumn (publiczna wersja zapoznawcza):
- Można dodawać filtry wierszy i maski kolumn do zmaterializowanego widoku DLT lub tabeli transmisji strumieniowej.
- Można zdefiniować widoki zmaterializowane DLT lub tabele strumieniowe na tabelach, które zawierają 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 podzapytań wyrażeń zamiast 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 zabezpieczają swoje działanie, co oznacza, że jeśli spróbujesz uzyskać dostęp do tabel z nieobsługiwanych wersji tych środowisk, nie zostaną zwrócone żadne dane.
- Delta Sharing 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 w połączeniu z zabezpieczeniami na poziomie wiersza ani z 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 prowadzącymi 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. - API Delta Lake nie są obsługiwane.
Ograniczenie trybu dedykowanego dostępu
Nie można uzyskać dostępu do tabeli z filtrami wierszy lub maskami kolumn z dedykowanego zasobu obliczeniowego do dostępu w środowisku Databricks Runtime 15.3 lub starszym. Możesz użyć dedykowanego trybu dostępu w środowisku Databricks Runtime 15.4 LTS lub nowszym, jeśli obszar roboczy jest włączony do bezserwerowychobliczeń. Aby uzyskać więcej informacji, zobacz dokładna kontrola dostępu do dedykowanej mocy obliczeniowej (dawniej przetwarzanie pojedynczego użytkownika).