Udostępnij za pośrednictwem


Filtrowanie poufnych danych table przy użyciu filtrów wierszy i masek column

Ten artykuł zawiera wskazówki i przykłady dotyczące używania filtrów wierszy, maski column i mapowania tables do filtrowania poufnych danych w tables. Te funkcjonalności wymagają programu Unity Catalog.

Co to są filtry wierszy?

Filtry wierszy umożliwiają zastosowanie filtru do table tak, aby zapytania zwracały 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 column?

Column maski pozwalają na zastosowanie funkcji maskowania do tablecolumn. Funkcja maskowania jest oceniana w momencie wykonywania zapytania, podstawiając każde odwołanie do docelowego column wynikami tej funkcji maskowania. W większości przypadków użycia column maski określają, czy należy zwrócić oryginalną wartość column, czy zredagować ją na podstawie tożsamości wywoływanego użytkownika. Column maski są wyrażeniami napisanymi jako funkcje zdefiniowane przez użytkownika SQL lub jako funkcje zdefiniowane przez użytkownika w językach Python lub Scala opakowane w funkcje zdefiniowane przez użytkownika SQL.

Do każdego tablecolumn może być zastosowana tylko jedna funkcja maskowania. Funkcja maskowania przyjmuje niemaskowaną wartość column jako dane wejściowe i zwraca maskowaną wartość w wyniku. Wartość zwracana funkcji maskowania powinna być tego samego typu co maskowana column. Funkcja maskowania może również przyjmować dodatkowe columns jako dane wejściowe parameters i używać ich w logice maskowania.

Jaka jest różnica między tymi filtrami a dynamicznymi views?

Dynamiczne views, filtry wierszy i maski column umożliwiają stosowanie złożonej logiki do tables oraz przetwarzania decyzji filtrowania podczas wykonywania zapytań.

Dynamiczny widok jest abstrakcyjnym widokiem tylko do odczytu jednego lub więcej źródeł tables. Użytkownik może uzyskać dostęp do widoku dynamicznego bez having bezpośredniego dostępu do źródła tables. Tworzenie widoku dynamicznego definiuje nową nazwę table, która nie powinna pasować do nazwy żadnego źródła tables lub innego tables i views, obecnych w tym samym schema.

Z drugiej strony skojarzenie filtru wiersza lub maski column z docelowym table stosuje odpowiednią logikę bezpośrednio do samego table, bez wprowadzania nowych nazw table. Kolejne zapytania mogą nadal bezpośrednio odwoływać się do docelowego table przy użyciu jego oryginalnej nazwy.

Użyj dynamicznej views, jeśli musisz zastosować logikę przekształcania, taką jak filtry i maski, do tables tylko-do-odczytu i jeśli jest akceptowalne dla użytkowników, by odwoływać się do dynamicznej views za pomocą różnych nazw. Jeśli chcesz filtrować dane podczas udostępniania z użyciem Delta Sharing, musisz użyć dynamicznego views. Użyj filtrów wierszy i masek column, jeśli chcesz filtrować lub obliczać wyrażenia na podstawie określonych danych, ale jednocześnie zapewnij użytkownika dostęp do tables przy użyciu ich oryginalnych nazw.

Zanim rozpoczniesz

Aby dodać filtry wierszy i maski column do tables, musisz mieć:

  • Przestrzeń robocza dostosowana do środowiska Unity Catalog.
  • Funkcja zarejestrowana w środowisku Unity Catalog. Ta funkcja może być funkcją zdefiniowaną przez użytkownika SQL, językiem Python lub funkcją UDF języka Scala zarejestrowaną w środowisku Unity Catalog i opakowaną w funkcji zdefiniowanej przez użytkownika SQL. Aby uzyskać szczegółowe informacje, zobacz Co to są funkcje zdefiniowane przez użytkownika (UDF)?, klauzula maski Columni klauzula ROW FILTER.

Należy również spełnić następujące wymagania:

  • Aby przypisać funkcję, która dodaje filtry wierszy lub maski column do table, musisz mieć uprawnienie EXECUTE do funkcji, USE SCHEMA do schemaoraz USE CATALOG do nadrzędnego catalog.
  • Jeśli dodajesz filtry lub maski przy tworzeniu nowegotable, musisz mieć uprawnienia CREATE TABLE w schema.
  • Jeśli dodajesz filtry lub maski do istniejącegotable, musisz być właścicielem table.

Aby uzyskać dostęp do table z filtrami wierszy lub maskami column, 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 ani maski column 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 bezserwerowychobliczeniowych, ponieważ funkcja filtrowania danych, która obsługuje filtry wierszy i column maski są uruchamiane na bezserwerowych obliczeniach. Opłaty mogą być naliczane za zasoby obliczeniowe bezserwerowe w przypadku korzystania z zasobów obliczeniowych skonfigurowanych w trybie dostępu dla pojedynczego użytkownika do odczytu tables z użyciem filtrów wierszy lub masek column. 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 table. Każdy table może mieć tylko jeden filtr wierszy. Filtr wierszy akceptuje zero lub więcej danych wejściowych parameterswhere każdy parametr wejściowy wiąże się z jednym column odpowiadającego table.

Filtr wierszy można zastosować przy użyciu Catalog Eksploratora lub poleceń SQL. W instrukcjach Catalog Explorer założono, że utworzono już funkcję i zarejestrowano ją w środowisku Unity Catalog. Instrukcje SQL obejmują przykłady tworzenia funkcji filtrowania wierszy i stosowania jej do table.

Eksplorator Catalog

  1. W obszarze roboczym usługi Azure Databricks kliknij ikonę CatalogCatalog.
  2. Przeglądaj lub wyszukaj table, które chcesz filtrować.
  3. Na karcie Przegląd kliknij pozycję Filtr wierszy: Dodaj filtr.
  4. W oknie dialogowym Dodawanie filtru wierszyselectcatalog i schema, które zawierają funkcję filter, a następnie select funkcję.
  5. W rozszerzonym oknie dialogowym wyświetl definicję funkcji i selecttablecolumns, które pasują do columns zawartego w oświadczeniu funkcji.
  6. Kliknij przycisk Dodaj.

Aby remove filtr z table, kliknij fx Row filter i kliknij Remove.

SQL

Aby utworzyć filtr wierszy, a następnie dodać go do istniejącego table, użyj CREATE FUNCTION i zastosuj funkcję przy użyciu ALTER TABLE. Funkcję można również zastosować podczas tworzenia table przy użyciu CREATE TABLE.

  1. Utwórz filtr wierszy:

    CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...)
    RETURN {filter clause whose output must be a boolean};
    
  2. Zastosuj filtr wierszy do table przy użyciu nazwy column:

    ALTER TABLE <table_name> SET ROW FILTER <function_name> ON (<column_name>, ...);
    

Dodatkowe przykłady składni:

  • Zastosuj filtr wierszy do table przy użyciu literału stałego zgodnego z parametrem funkcji:

    ALTER TABLE <table_name> SET ROW FILTER <function_name> ON (<constant_literal>, ...);
    
  • Remove filtr wiersza z table:

    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, table będzie w stanie niedostępnym.

    Jeśli table stanie się w ten sposób niedostępny, zmień table i usuń odwołanie do filtra 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 tej przykładowej funkcji do salestableczłonkowie grupy admin mogą uzyskać dostęp do wszystkich rekordów w table. Jeśli funkcja jest wywoływana przez innego niż administrator, warunek RETURN_IF zakończy się niepowodzeniem, a wyrażenie region='US' zostanie obliczone, filtrując table, aby pokazywać tylko rekordy w regionie US.

CREATE FUNCTION us_filter(region STRING)
RETURN IF(IS_ACCOUNT_GROUP_MEMBER('admin'), true, region='US');

Zastosuj funkcję do table jako filtr wiersza. Kolejne zapytania z salestable następnie 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 salestable następnie zwracają wszystkie wiersze w table.

ALTER TABLE sales DROP ROW FILTER;

Utwórz table, zastosowując funkcję jako filtr dla wierszy w ramach instrukcji CREATE TABLE. Przyszłe zapytania z salestable następnie każde zwraca podzbiór wierszy.

CREATE TABLE sales (region STRING, id INT)
WITH ROW FILTER us_filter ON (region);

Nałóż maskę column

Aby zastosować maskę column, utwórz funkcję (UDF) i zastosuj ją do tablecolumn.

Maskę column można zastosować przy użyciu poleceń Catalog Explorer lub SQL. W instrukcjach Catalog Explorer założono, że utworzono już funkcję i zarejestrowano ją w środowisku Unity Catalog. Instrukcje SQL obejmują przykłady tworzenia funkcji maski column i stosowania jej do tablecolumn.

Eksplorator Catalog

  1. W obszarze roboczym usługi Azure Databricks kliknij ikonę CatalogCatalog.
  2. Przejrzyj lub wyszukaj table.
  3. Na karcie Przegląd znajdź wiersz, do którego chcesz zastosować maskę , a następnie kliknij ikonę EdytujIkona maskowania edycji.
  4. W oknie dialogowym Dodaj maskę columnselect, catalog i schema, które zawierają funkcję filtru, następnie użyj select funkcji.
  5. W rozwiniętym oknie dialogowym wyświetl definicję funkcji. Jeśli funkcja zawiera jakiekolwiek parameters oprócz maskowanego column, selecttablecolumns, w którym chcesz rzutować te dodatkowe funkcje parameters.
  6. Kliknij przycisk Dodaj.

Aby remove maskę column z table, kliknij pozycję fx Column maski w wierszu table i kliknij przycisk Remove.

SQL

Aby utworzyć maskę column i dodać ją do istniejącej tablecolumn, użyj CREATE FUNCTION i zastosuj funkcję maskowania przy użyciu ALTER TABLE. Funkcję można również zastosować podczas tworzenia table przy użyciu 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 Column klauzula maski i funkcje wbudowane .

  1. Utwórz maskę column:

    CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...)
    RETURN {expression with the same type as the first parameter};
    
  2. Zastosuj maskę column do column w istniejącym table:

    ALTER TABLE <table_name> ALTER COLUMN <col_name> SET MASK <mask_func_name> USING COLUMNS <additional_columns>;
    

Dodatkowe przykłady składni:

  • Zastosuj maskę column do column w istniejącym table przy użyciu stałego literału zgodnego z parametrem funkcji:

    ALTER TABLE <table_name> ALTER COLUMN <col_name> SET MASK <mask_func_name> USING COLUMNS (<constant_name>, ...);
    
  • Remove maskę column z column w table:

    ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK;
    
  • Zmodyfikuj maskę columnDROP istniejącą funkcję lub użyj CREATE OR REPLACE TABLE.

  • Usuń maskę column:

    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ć polecenie ALTER TABLE lub table będzie w stanie niedostępnym.

    Jeśli table stanie się w taki sposób niedostępny, zmień table i usuń odniesienie do osieroconej maski przy użyciu ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK;.

przykłady maski Column

W tym przykładzie utworzysz funkcję zdefiniowaną przez użytkownika, która maskuje ssncolumn, aby tylko użytkownicy będący członkami grupy HumanResourceDept mogli wyświetlać values w tym column.

CREATE FUNCTION ssn_mask(ssn STRING)
  RETURN CASE WHEN is_member('HumanResourceDept') THEN ssn ELSE '***-**-****' END;

Zastosuj nową funkcję do table jako maskę column. Maskę column można dodać podczas tworzenia table 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 table teraz zwracają maskowane ssncolumnvalues, gdy użytkownik wykonujący zapytanie nie jest członkiem grupy HumanResourceDept.

SELECT * FROM users;
  James  ***-**-****

Aby wyłączyć maskę column i umożliwić, by zapytania zwracały oryginalne values w ssncolumn:

ALTER TABLE users ALTER COLUMN ssn DROP MASK;

Użyj mapowania tables do stworzenia kontroli dostępu list

Aby uzyskać zabezpieczenia na poziomie wiersza, rozważ zdefiniowanie mapowania table (lub kontroli dostępu list). Kompleksowe mapowanie table koduje, które wiersze danych w oryginalnym table są dostępne dla określonych użytkowników lub grup. tables mapowania są przydatne, ponieważ oferują prostą integrację z faktami tables za pomocą bezpośrednich sprzężeń.

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.

Dzięki wdrożeniu mapowania tablesmożna wykonać te trudne scenariusze i zapewnić niezawodne implementacje zabezpieczeń na poziomie wiersza i column.

Przykłady mapowania table

Aby sprawdzić, czy bieżący użytkownik znajduje się w table, użyj mapowania list.

USE CATALOG main;

Utwórz nowe mapowanie table:

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 valid_userstable. 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 table. Filtr można również dodać później przy użyciu instrukcji ALTER TABLE . Podczas stosowania go do całej tableuż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);

Select dane z table. Powinno to zwracać dane tylko wtedy, gdy użytkownik znajduje się w valid_userstable.

SELECT * FROM data_table;

Utwórz mapowanie table składające się z kont, które zawsze powinny mieć dostęp do wyświetlania wszystkich wierszy w table, niezależnie od columnvalues:

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 values wszystkich columns w wierszu są mniejsze niż pięć lub jeśli użytkownik wywołujący jest członkiem powyższego mapowania table.

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ę zdefiniowaną przez użytkownika SQL do table 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 column 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

Funkcjonalność obsługiwana przez to list 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 instrukcje UPDATE i DELETE i nie są stosowane do zapisanych danych (w tym INSERT).

  • Obsługiwane formaty danych:

    • Usługi Delta i Parquet dla zarządzanych i zewnętrznych systemów tables.
    • Wiele innych formatów danych dla zagranicznych tables zarejestrowanych w środowisku Unity Catalog przy użyciu Lakehouse Federation.
  • Zasada parameters może zawierać wyrażenia stałe (napisy, liczbowe, interwały, wartości logiczne, wartości null).

  • SQL, Python i Scala UDF (funkcje zdefiniowane przez użytkownika) są obsługiwane jako funkcje filtrowania wierszy lub maski column, jeśli są zarejestrowane w Unity Catalog. Funkcje zdefiniowane przez użytkownika języka Python i języka Scala muszą być opakowane w funkcji zdefiniowanej przez użytkownika SQL.

  • Można utworzyć views na tables, które odwołują się do masek column lub filtrów wierszy, ale nie można dodawać masek column ani filtrów wierszy do widoku.

  • Kanały danych zmiany w Delta Lake są obsługiwane, jeśli schema jest zgodny z filtrami wierszy i maskami column, które mają zastosowanie do docelowego table.

  • Obsługiwane są tables obce.

  • Table próbkowanie jest obsługiwane.

  • Instrukcje MERGE są obsługiwane, gdy źródło tables, cel tableslub oba używają filtrów wierszy i masek column. Obejmuje to tables z funkcjami filtrowania wierszy, które zawierają proste podzapytania. Ograniczenia są wymienione w poniższej sekcji.

  • Usługa Databricks SQL zmaterializowana views i usługa Databricks SQL przesyłania strumieniowego tables obsługują filtry wierszy i maski column (publiczna wersja zapoznawcza):

    • Filtry wierszy i maski column można dodawać do zmaterializowanego widoku SQL usługi Databricks lub przesyłania strumieniowego table. Maski należy dodawać deklaratywnie podczas definiowania zmaterializowanego widoku lub przesyłania strumieniowego table. Zobacz CREATE MATERIALIZED VIEW lub CREATE STREAMING TABLE.
    • Możesz zdefiniować views zmaterializowane views usługi Databricks lub tables przesyłania strumieniowego na column, które obejmują filtry wierszy i maski .
  • Zmaterializowane views i transmisja strumieniowa tables, zadeklarowane i opublikowane w ramach Delta Live Tables, obsługują filtry wierszy lub maski column (wersja zapoznawcza publiczna):

    • Możesz dodawać filtry wierszy i maski column zarówno do zmaterializowanego widoku Delta Live Tables, jak i do przesyłania strumieniowego table.
    • Można zdefiniować Tables delta Live zmaterializowane views lub tables przesyłania strumieniowego na tables, które obejmują filtry wierszy i maski column.

    Zobacz Publikowanie tables z filtrami wierszy i maskami column.

zalecenia dotyczące wydajności

Filtry wierszy i maski column kontrolują widoczność danych, zapewniając, że użytkownicy nie mogą wyświetlać zawartości values podstawowej tables przed operacjami filtrowania i maskowania. Działają one dobrze w odpowiedzi na zapytania w typowych przypadkach użycia. W mniej typowych aplikacjach where aparat zapytań musi wybrać między optymalizacją wydajności zapytań a ochroną przed wyciekiem informacji z filtrowanych/maskowanych values, 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 mapowania tables i podzapytań wyrażeń zamiast prostych funkcji CASE.
  • Zmniejsz liczbę argumentów funkcji: Usługa Azure Databricks nie może optimize usunąć column odwołań do źródła table wynikających z argumentów funkcji polityki, nawet jeśli te columns nie są używane w zapytaniu. Użyj funkcji zasad z mniejszą liczbą argumentów, ponieważ zapytania z tych tables będą działać lepiej.
  • Unikaj dodawania filtrów wierszy z zbyt dużą liczbą sprzężeń AND: Ponieważ każda table obsługuje tylko dodawanie co najwyżej jednego filtru wierszy, typowym podejściem jest połączenie wielu żądanych funkcji zasad z AND. Jednak w przypadku każdej koniunkcji rośnie prawdopodobieństwo, że koniunkcje zawierają składniki wspomniane gdzie indziej w tym table, które mogą wpływać na wydajność (takie jak mapowanie tables). 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 table i zapytaniach z tych tables: 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ąć błędów takich jak "dzielenie według zera", które ujawniają informacje o values przed filtrowaniem i/lub maskowaniem operacji. 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 na table w celu pomiaru wydajności: Konstruowanie realistycznych zapytań reprezentujących obciążenie oczekiwane dla table z filtrami wierszy i/lub column maskami i mierz wydajność. 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 maski column. Te środowiska uruchomieniowe bezpiecznie przestają działać, co oznacza, że jeśli próbujesz uzyskać dostęp do tables z nieobsługiwanych wersji tych środowisk, nie zwracają żadnych danych.
  • Delta Sharing nie działa z zabezpieczeniami na poziomie wiersza ani maskami column.
  • Do widoku nie można zastosować zabezpieczeń na poziomie wiersza ani maski column.
  • Podróż w czasie nie działa z zabezpieczeniami na poziomie wiersza ani maskami column.
  • Dostęp oparty na ścieżkach do plików w tables z zasadami nie jest obsługiwany.
  • Zasady filtrowania wierszy lub maskowania columnz cyklicznymi zależnościami 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ą tables z filtrem wierszy ani columnzasad maskowania zawierających zagnieżdżanie, agregacje, okna, 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 table z filtrami wierszy lub maskami column z jednego zasobu obliczeniowego użytkownika w środowisku Databricks Runtime 15.3 lub niższym. 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.