Filtern vertraulicher Tabellendaten mit Zeilenfiltern und Spaltenmasken
Dieser Artikel enthält einen Leitfaden sowie Beispiele für die Verwendung von Zeilenfiltern, Spaltenmasken und Zuordnungstabellen zum Filtern vertraulicher Daten in Ihren Tabellen. Für diese Features wird Unity Catalog benötigt.
Was sind Zeilenfilter?
Zeilenfilter ermöglichen es Ihnen, einen Filter so auf eine Tabelle anzuwenden, dass Abfragen nur Zeilen zurückgeben, die den Filterkriterien entsprechen. Sie implementieren einen Zeilenfilter als benutzerdefinierte SQL-Funktion (User-defined Function, UDF). Python- und Scala-UDFs werden ebenfalls unterstützt, aber nur, wenn sie in SQL-UDFs eingeschlossen werden.
Was sind Spaltenmasken?
Mit Spaltenformaten können Sie eine Maskierungsfunktion auf eine Tabellenspalte anwenden. Die Maskierungsfunktion wird während der Abfrageruntime ausgewertet, wobei jeder Verweis auf die Zielspalte durch die Ergebnisse der Maskierungsfunktion ersetzt wird. In den meisten Anwendungsfällen bestimmen Spaltenmasken, ob der ursprüngliche Spalten- oder (basierend auf der Identität des aufrufenden Benutzers) ein bearbeiteter Wert zurückgegeben werden soll. Spaltenmasken sind Ausdrücke, die als SQL-UDFs oder als Python- oder Scala-UDFs geschrieben werden und in SQL-UDFs eingeschlossen sind.
Auf jede Tabellenspalte kann nur eine Maskierungsfunktion angewendet werden. Die Maskierungsfunktion verwendet den nicht maskierten Wert der Spalte als Eingabe und gibt den maskierten Wert als Ergebnis zurück. Der Rückgabewert der Maskierungsfunktion sollte vom gleichen Typ wie die zu maskierende Spalte sein. Die Maskierungsfunktion akzeptiert auch zusätzliche Spalten als Eingabeparameter und kann diese in der zugehörigen Maskierungslogik verwenden.
Worin besteht der Unterschied zwischen diesen Filtern und dynamischen Ansichten?
Dynamische Ansichten, Zeilenfilter und Spaltenmasken ermöglichen es Ihnen, komplexe Logik auf Tabellen anzuwenden und deren Filterentscheidungen während der Abfrageruntime zu verarbeiten.
Eine dynamische Ansicht ist eine abstrahierte, schreibgeschützte Ansicht einer oder mehrerer Quelltabellen. Der Benutzer kann auf eine dynamische Ansicht zugreifen, ohne direkten Zugriff auf die Quelltabellen zu haben. Durch das Erstellen einer dynamischen Ansicht wird ein neuer Tabellenname definiert, der nicht mit dem Namen von Quell- oder anderen Tabellen und Ansichten übereinstimmen darf, die im selben Schema vorhanden sind.
Andererseits wird durch das Zuordnen eines Zeilenfilters oder einer Spaltenmaske zu einer Zieltabelle die entsprechende Logik ohne Einführen neuer Tabellennamen direkt auf die Tabelle angewendet. Nachfolgende Abfragen können weiterhin direkt auf die Zieltabelle verweisen und dabei ihren ursprünglichen Namen verwenden.
Verwenden Sie dynamische Ansichten, wenn Sie Transformationslogiken wie Filter und Masken auf schreibgeschützte Tabellen anwenden müssen, und wenn es für Benutzer akzeptabel ist, mit unterschiedlichen Namen auf die dynamischen Ansichten zu verweisen. Wenn Sie Daten filtern möchten, während Sie sie mithilfe von Delta Sharing freigeben, müssen Sie dynamische Ansichten verwenden. Verwenden Sie Zeilenfilter und Spaltenmasken, wenn Sie Ausdrücke über bestimmte Daten filtern oder berechnen, Benutzern jedoch weiterhin Zugriff auf die Tabellen unter Nutzung ihrer ursprünglichen Namen gewähren möchten.
Voraussetzungen
Zum Hinzufügen von Zeilenfiltern und Spaltenformaten zu Tabellen benötigen Sie Folgendes:
- Ein Arbeitsbereich, der für Unity Catalog aktiviert ist.
- Eine Funktion, die in Unity Catalog registriert ist. Dies kann eine SQL-UDF oder eine Python- oder Scala-UDF sein, die in Unity Catalog registriert und in eine SQL-UDF eingeschlossen ist. Ausführliche Informationen finden Sie unter Was sind benutzerdefinierte Funktionen (UDFs)?, Spaltenmaskenklausel und ROW FILTER-Klausel.
Sie müssen auch die folgenden Anforderungen erfüllen:
- Um eine Funktion zuzuweisen, die einer Tabelle Zeilenfilter oder Spaltenmasken hinzufügt, müssen Sie über die Berechtigungen
EXECUTE
für die Funktion,USE SCHEMA
für das Schema undUSE CATALOG
für den übergeordneten Katalog verfügen. - Wenn Sie beim Erstellen einer neuen Tabelle Filter oder Masken hinzufügen, müssen Sie über die
CREATE TABLE
-Berechtigung für das Schema verfügen. - Wenn Sie Filter oder Masken zu einer vorhandenen Tabelle hinzufügen, müssen Sie der Tabellenbesitzer sein oder über die Berechtigungen
MODIFY
undSELECT
für die Tabelle verfügen.
Für den Zugriff auf eine Tabelle mit Zeilenfiltern oder Spaltenmasken muss Ihre Computeressource eine der folgenden Anforderungen erfüllen:
Ein SQL-Warehouse
Gemeinsamer Zugriffsmodus auf Databricks Runtime 12.2 LTS oder höher.
Einzelbenutzerzugriffsmodus auf Databricks Runtime 15.4 LTS oder höher.
Sie können Zeilenfilter oder Spaltenmasken nicht mit einzelnen Benutzerberechnungen für Databricks Runtime 15.3 oder darunter lesen.
Um die in Databricks Runtime 15.4 LTS und höher bereitgestellten Datenfilter nutzen zu können, müssen Sie auch überprüfen, ob Ihr Arbeitsbereich für serverloses Computingaktiviert ist, da die Datenfilterfunktion, Zeilenfilter und Spaltenmasken unterstützt, auf serverlosem Computing ausgeführt wird. Möglicherweise werden Ihnen daher serverlose Computeressourcen in Rechnung gestellt, wenn Sie tabellen verwenden, die Zeilenfilter oder Spaltenmasken verwenden. Weitere Informationen finden Sie unter Feinkornierte Zugriffssteuerung für die Berechnung einzelner Benutzer.
Anwenden eines Zeilenfilters
Zum Erstellen eines Zeilenfilters schreiben Sie eine Funktion (UDF), um die Filterrichtlinie zu definieren und dann auf eine Tabelle anzuwenden. Sie können für jede Tabelle nur einen Zeilenfilter angeben. Ein Zeilenfilter akzeptiert null oder mehr Eingabeparameter, wobei jeder Eingabeparameter an eine Spalte der entsprechenden Tabelle gebunden wird.
Sie können einen Zeilenfilter mit Katalog-Explorer- oder SQL-Befehlen anwenden. Bei den Katalog-Explorer-Anweisungen wird davon ausgegangen, dass Sie bereits eine Funktion erstellt haben und dass sie in Unity Catalog registriert ist. Die SQL-Anweisungen enthalten Beispiele für das Erstellen einer Zeilenfilterfunktion und deren Anwenden auf eine Tabelle.
Katalog-Explorer
- Klicken Sie in Ihrem Azure Databricks-Arbeitsbereich auf Katalog.
- Suchen Sie nach der Tabelle, die Sie filtern möchten.
- Klicken Sie auf der Registerkarte Übersicht auf Zeilenfilter: Filter hinzufügen.
- Wählen Sie im Dialogfeld Zeilenfilter hinzufügen den Katalog und das Schema aus, das die Filterfunktion enthält, und wählen Sie dann die Funktion aus.
- Zeigen Sie im erweiterten Dialogfeld die Funktionsdefinition an, und wählen Sie die Tabellenspalten aus, die den Spalten in der Funktionsanweisung entsprechen.
- Klicken Sie auf Hinzufügen.
Um den Filter aus der Tabelle zu entfernen, klicken Sie auf fx-Zeilenfilter, und klicken Sie auf Entfernen.
SQL
Wenn Sie einen Zeilenfilter erstellen und dann einer vorhandenen Tabelle hinzufügen möchten, verwenden Sie CREATE FUNCTION
, und wenden Sie die Funktion mithilfe von ALTER TABLE
an. Sie können eine Funktion auch anwenden, wenn Sie eine Tabelle mit CREATE TABLE
erstellen.
Erstellen des Zeilenfilters:
CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...) RETURN {filter clause whose output must be a boolean};
Wenden Sie den Zeilenfilter mithilfe eines Spaltennamens auf eine Tabelle an:
ALTER TABLE <table_name> SET ROW FILTER <function_name> ON (<column_name>, ...);
Zusätzliche Syntaxbeispiele:
Anwenden des Zeilenfilters auf eine Tabelle mithilfe eines Konstantenliterals, das mit einem Funktionsparameter übereinstimmt:
ALTER TABLE <table_name> SET ROW FILTER <function_name> ON (<constant_literal>, ...);
Entfernen eines Zeilenfilters aus einer Tabelle:
ALTER TABLE <table_name> DROP ROW FILTER;
Ändern eines Zeilenfilters:
Run a DROP FUNCTION statement to drop the existing function, or use CREATE OR REPLACE FUNCTION to replace it.
Löschen eines Zeilenfilters:
ALTER TABLE <table_name> DROP ROW FILTER; DROP FUNCTION <function_name>;
Hinweis
Sie müssen den Befehl
ALTER TABLE ... DROP ROW FILTER
ausführen, bevor Sie die Funktion ablegen. Wenn Sie dies nicht tun, hat die Tabelle den Status „Kein Zugriff“.Wenn aus diesem Grund nicht auf die Tabelle zugegriffen werden kann, ändern Sie sie, und legen Sie den verwaisten Zeilenfilterverweis mithilfe von
ALTER TABLE <table_name> DROP ROW FILTER;
ab.
Weitere Informationen finden Sie unter ROW FILTER-Klausel.
Beispiele für Zeilenfilter
In diesem Beispiel wird eine benutzerdefinierte SQL-Funktion erstellt, die für Mitglieder der Gruppe admin
in der Region US
gilt.
Wenn diese Beispielfunktion auf die sales
-Tabelle angewendet wird, können Mitglieder der admin
-Gruppe auf alle Datensätze in der Tabelle zugreifen. Wenn die Funktion von einem Nichtadministrator aufgerufen wird, schlägt die RETURN_IF
-Bedingung fehl, und die Auswertung des region='US'
-Ausdrucks filtert die Tabelle so, dass nur Datensätze in der Region US
angezeigt werden.
CREATE FUNCTION us_filter(region STRING)
RETURN IF(IS_ACCOUNT_GROUP_MEMBER('admin'), true, region='US');
Wenden Sie die Funktion als Zeilenfilter auf eine Tabelle an. Die nachfolgenden Abfragen aus der sales
-Tabelle geben dann eine Teilmenge der Zeilen zurück.
CREATE TABLE sales (region STRING, id INT);
ALTER TABLE sales SET ROW FILTER us_filter ON (region);
Deaktivieren Sie den Zeilenfilter. Zukünftige Benutzerabfragen aus der sales
-Tabelle geben dann alle Zeilen in der Tabelle zurück.
ALTER TABLE sales DROP ROW FILTER;
Erstellen Sie eine Tabelle, wobei die Funktion als Zeilenfilter als Teil der CREATE TABLE
-Anweisung angewendet wird. Zukünftige Abfragen aus der sales
-Tabelle geben dann eine Teilmenge der Zeilen zurück.
CREATE TABLE sales (region STRING, id INT)
WITH ROW FILTER us_filter ON (region);
Anwenden einer Spaltenmaske
Um eine Spaltenmaske anzuwenden, erstellen Sie eine Funktion (UDF), und wenden Sie sie dann auf eine Tabellenspalte an.
Sie können eine Spaltenmaske mit Katalog-Explorer- oder SQL-Befehlen anwenden. Bei den Katalog-Explorer-Anweisungen wird davon ausgegangen, dass Sie bereits eine Funktion erstellt haben und dass sie in Unity Catalog registriert ist. Die SQL-Anweisungen enthalten Beispiele für das Erstellen einer Spaltenmaskenfunktion und deren Anwenden auf eine Tabellenspalte.
Katalog-Explorer
- Klicken Sie in Ihrem Azure Databricks-Arbeitsbereich auf Katalog.
- Suchen Sie nach der Tabelle.
- Suchen Sie auf der Registerkarte Übersicht die Zeile, auf die Sie die Spaltenmaske anwenden möchten, und klicken Sie auf das Bearbeitungssymbol Maske.
- Wählen Sie im Dialogfeld Spaltenmaske hinzufügen den Katalog und das Schema aus, das die Filterfunktion enthält, und wählen Sie dann die Funktion aus.
- Zeigen Sie im erweiterten Dialogfeld die Funktionsdefinition an. Wenn die Funktion zusätzlich zu der zu maskierenden Spalte Parameter enthält, wählen Sie die Tabellenspalten aus, in der Sie diese zusätzlichen Funktionsparameter wiedergeben möchten.
- Klicken Sie auf Hinzufügen.
Um die Spaltenmaske von der Tabelle zu entfernen, klicken Sie in der Tabellenzeile auf fx-Spaltenmaske und dann auf Entfernen.
SQL
Um eine Spaltenmaske zu erstellen und einer vorhandenen Tabellenspalte hinzuzufügen, verwenden Sie CREATE FUNCTION
, und wenden Sie die Maskierungsfunktion mithilfe von ALTER TABLE
an. Sie können eine Funktion auch anwenden, wenn Sie eine Tabelle mit CREATE TABLE
erstellen.
Wenden Sie die Maskierungsfunktion mit SET MASK
an. Innerhalb der MASK
-Klausel können Sie eine der integrierten Laufzeitfunktionen von Azure Databricks verwenden oder andere benutzerdefinierte Funktionen aufrufen. Zu gängigen Anwendungsfällen gehören das Überprüfen der Identität des aufrufenden Benutzers, der die Funktion ausführt, mithilfe von current_user( )
oder das Abrufen der Gruppen, deren Mitglied der Benutzer ist, mithilfe von is_account_group_member( )
. Ausführliche Informationen finden Sie unter COLUMN MASKE-Klausel und Integrierte Funktionen.
Erstellen einer Spaltenmaske:
CREATE FUNCTION <function_name> (<parameter_name> <parameter_type>, ...) RETURN {expression with the same type as the first parameter};
Wenden Sie die Spaltenmaske auf eine Spalte in einer vorhandenen Tabelle an:
ALTER TABLE <table_name> ALTER COLUMN <col_name> SET MASK <mask_func_name> USING COLUMNS <additional_columns>;
Zusätzliche Syntaxbeispiele:
Anwenden der Spaltenmaske auf eine Spalte in einer Tabelle mithilfe eines Konstantenliterals, das mit einem Funktionsparameter übereinstimmt:
ALTER TABLE <table_name> ALTER COLUMN <col_name> SET MASK <mask_func_name> USING COLUMNS (<constant_name>, ...);
Entfernen einer Spaltenmaske aus einer Spalte in einer Tabelle:
ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK;
Ändern einer Spaltenmaske: Wenden Sie entweder
DROP
auf die vorhandene Funktion an, oder verwenden SieCREATE OR REPLACE TABLE
.Löschen einer Spaltenmaske:
ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK; DROP FUNCTION <function_name>;
Hinweis
Sie müssen den Befehl
ALTER TABLE
ausführen, bevor Sie die Funktion ablegen. Andernfalls kann nicht auf die Tabelle zugegriffen werden.Wenn auf diese Weise auf die Tabelle nicht zugegriffen werden kann, ändern Sie die Tabelle, und legen Sie den verwaisten Maskenverweis mithilfe von
ALTER TABLE <table_name> ALTER COLUMN <column where mask is applied> DROP MASK;
.
Beispiele für Spaltenmasken
In diesem Beispiel erstellen Sie eine benutzerdefinierte Funktion, die die ssn
-Spalte maskiert, sodass nur Benutzer*innen, die Mitglied der Gruppe HumanResourceDept
sind, Werte in dieser Spalte anzeigen können.
CREATE FUNCTION ssn_mask(ssn STRING)
RETURN CASE WHEN is_member('HumanResourceDept') THEN ssn ELSE '***-**-****' END;
Wenden Sie die neue Funktion als Spaltenmaske auf eine Tabelle an. Sie können die Spaltenmaske beim Erstellen der Tabelle oder danach hinzufügen.
--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;
Abfragen für diese Tabelle geben jetzt maskierte ssn
-Spaltenwerte zurück, wenn die abfragenden Benutzer*innen kein Mitglied der Gruppe HumanResourceDept
sind:
SELECT * FROM users;
James ***-**-****
So deaktivieren Sie die Spaltenmaske, damit Abfragen die ursprünglichen Werte in der Spalte ssn
zurückgeben
ALTER TABLE users ALTER COLUMN ssn DROP MASK;
Verwenden von Zuordnungstabellen zum Erstellen einer Zugriffssteuerungsliste
Um Sicherheit auf Zeilenebene zu erzielen, sollten Sie eine Zuordnungstabelle (oder Zugriffssteuerungsliste) definieren. Jede Zuordnungstabelle ist eine umfassende Zugriffssteuerungsliste, die codiert, auf welche Datenzeilen in der ursprünglichen Tabelle bestimmte Benutzer oder Gruppen Zugriff haben. Zuordnungstabellen sind nützlich, da sie eine einfache Integration in Ihre Faktentabellen mithilfe direkter Verknüpfungen bieten.
Diese Methodik ist bei der Behandlung vieler Anwendungsfälle mit benutzerdefinierten Anforderungen vorteilhaft. Beispiele:
- Festlegen von Einschränkungen basierend auf dem angemeldeten Benutzer bei gleichzeitiger Beachtung verschiedener Regeln für bestimmte Benutzergruppen.
- Erstellen komplizierter Hierarchien, z. B. Organisationsstrukturen, die unterschiedliche Regelsätze erfordern.
- Replizieren komplexer Sicherheitsmodelle aus externen Quellsystemen.
Durch die Einführung von Zuordnungstabellen können Sie diese anspruchsvollen Szenarien effektiv meistern und für die Implementierung einer stabilen Sicherheit auf Zeilen- und Spaltenebene sorgen.
Beispiele für Zuordnungstabellen
Verwenden einer Zuordnungstabelle, um zu überprüfen, ob sich der aktuelle Benutzer in einer Liste befindet:
USE CATALOG main;
Erstellen einer neuen Zuordnungstabelle:
DROP TABLE IF EXISTS valid_users;
CREATE TABLE valid_users(username string);
INSERT INTO valid_users
VALUES
('fred@databricks.com'),
('barney@databricks.com');
Erstellen eines neuen Filters:
Hinweis
Alle Filter werden mit den Rechten des Definierenden (Definer) ausgeführt. Eine Ausnahme bilden Funktionen, die den Benutzerkontext überprüfen (z. B. die CURRENT_USER
- und IS_MEMBER
-Funktionen). Sie werden als Aufrufer (Invoker) ausgeführt werden.
In diesem Beispiel überprüft die Funktion, ob sich der aktuelle Benutzer in der valid_users
Tabelle befindet. Wenn der Benutzer gefunden wird, gibt die Funktion „wahr“ zurück.
DROP FUNCTION IF EXISTS row_filter;
CREATE FUNCTION row_filter()
RETURN EXISTS(
SELECT 1 FROM valid_users v
WHERE v.username = CURRENT_USER()
);
Im folgenden Beispiel wird der Zeilenfilter während der Tabellenerstellung angewendet. Sie können den Filter mithilfe einer ALTER TABLE
-Anweisung auch später hinzufügen. Verwenden Sie beim Anwenden auf eine ganze Tabelle die Syntax ON ()
. Verwenden Sie für eine bestimmte Zeile 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);
Wählen Sie Daten aus der Tabelle aus. Hierbei sollten nur Daten zurückgeben werden, wenn sich der Benutzer in der Tabelle valid_users
befindet.
SELECT * FROM data_table;
Erstellen Sie eine Zuordnungstabelle mit Konten, die immer Zugriff haben sollen, um unabhängig von den Spaltenwerten alle Zeilen in der Tabelle anzuzeigen:
CREATE TABLE valid_accounts(account string);
INSERT INTO valid_accounts
VALUES
('admin'),
('cstaff');
Erstellen Sie nun eine SQL-UDF, die true
zurückgibt, wenn die Werte aller Spalten in der Zeile kleiner als fünf sind, oder wenn der aufrufende Benutzer ein Mitglied der obigen Zuordnungstabelle ist.
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));
Wenden Sie zum Abschluss die SQL-UDF als Zeilenfilter auf die Tabelle an:
ALTER TABLE data_table SET ROW FILTER row_filter_small_values ON (x, y, z);
Unterstützung und Einschränkungen
Zeilenfilter und Spaltenmasken werden nicht mit allen Azure Databricks-Funktionen oder in allen Computeressourcen unterstützt. In diesem Abschnitt werden die unterstützten Funktionen und die Einschränkungen aufgeführt.
Unterstützte Features und Formate
Diese Liste der unterstützten Funktionen ist nicht vollständig. Einige Elemente werden aufgelistet, da sie während der Public Preview nicht unterstützt wurden.
Databricks SQL und Databricks-Notebooks für SQL-Workloads werden unterstützt.
DML-Befehle von Benutzern mit
MODIFY
-Berechtigungen werden unterstützt. Filter und Masken werden auf die Daten angewendet, die vonUPDATE
- undDELETE
-Anweisungen gelesen werden, jedoch nicht auf geschriebene Daten, einschließlichINSERT
.Unterstützte Datenformate:
- Delta und Parquet für verwaltete und externe Tabellen
- Mithilfe von Lakehouse Federation verschiedene andere Datenformate für Fremdtabellen, die in Unity Catalog registriert sind
Richtlinienparameter können Konstantenausdrücke (Zeichenfolgen, numerische Werte, Intervalle, boolesche Werte, NULL) enthalten.
SQL-, Python- und Scala-UDFs werden als Zeilenfilter- oder Spaltenmaskenfunktionen unterstützt, wenn sie in Unity Catalog registriert sind. Python- und Scala-UDFs müssen in eine SQL-UDF eingeschlossen werden.
Sie können Sichten für Tabellen erstellen, die auf Spaltenmasken oder Zeilenfilter verweisen, aber Sie können einer Sicht keine Spaltenmasken oder Zeilenfilter hinzufügen.
Delta Lake-Änderungsdatenfeeds werden unterstützt, solange das Schema mit den Zeilenfiltern und Spaltenmasken kompatibel ist, die für die Zieltabelle gelten.
Fremdtabellen werden unterstützt.
Tabellensampling wird unterstützt.
MERGE
-Anweisungen werden unterstützt, wenn Quelltabellen, Zieltabellen oder beide Zeilenfilter und Spaltenmasken verwenden. Dazu gehören Tabellen mit Zeilenfilterfunktionen, die einfache Unterabfragen enthalten, aber es gibt auch Einschränkungen. Diese werden im folgenden Abschnitt aufgeführt.Materialisierte Sichten und Streamingtabellen in Databricks SQL unterstützen Zeilenfilter und Spaltenmasken (Public Preview):
- Sie können materialisierten Sichten oder Streamingtabellen in Databricks SQL Zeilenfilter und Spaltenmasken hinzufügen. Dies muss deklarativ erfolgen, wenn die materialisierte Ansicht oder Streamingtabelle definiert ist. Siehe CREATE MATERIALIZED VIEW or CREATE STREAMING TABLE.
- Sie können materialisierte Sichten oder Streamingtabellen in Databricks SQL für Tabellen definieren, die Zeilenfilter und Spaltenmasken enthalten.
Materialisierte Sichten und Streamingtabellen, die in Delta Live Tables deklariert und veröffentlicht wurden, unterstützen Zeilenfilter oder Spaltenmasken (Public Preview):
- Sie können materialisierten Sichten oder Streamingtabellen in Delta Live Tables Zeilenfilter und Spaltenmasken hinzufügen.
- Sie können materialisierte Sichten oder Streamingtabellen in Delta Live Tables für Tabellen definieren, die Zeilenfilter und Spaltenmasken enthalten.
Siehe Veröffentlichen von Tabellen mit Zeilenfiltern und Spaltenmasken.
Überlegungen zur Leistung
Zeilenfilter und Spaltenmasken bieten Garantien für die Sichtbarkeit Ihrer Daten, indem sichergestellt wird, dass keine Benutzer den Inhalt der Werte der Basistabellen vor dem Filtern und Maskieren anzeigen können. Sie sind darauf entwickelt, als Antwort auf Abfragen unter den häufigsten Anwendungsfällen eine gute Leistung aufzuweisen. In weniger häufigen Anwendungsfällen, bei denen sich die Abfrage-Engine zwischen der Optimierung der Abfrageleistung und dem Schutz vor Verlust von Informationen aus den gefilterten/maskierten Werten entscheiden muss, wird immer die sichere Entscheidung auf Kosten der Abfrageleistung getroffen. Um diese Leistungseinbußen zu minimieren, wenden Sie die folgenden Prinzipien an:
- Verwenden Sie einfache Richtlinienfunktionen: Richtlinienfunktionen mit weniger Ausdrücken können in der Regel besser ausgeführt werden als komplexere Ausdrücke. Vermeiden Sie die Verwendung von Zuordnungstabellen und Ausdrucksunterabfragen zugunsten einfacher CASE-Funktionen.
- Verringern Sie die Anzahl der Funktionsargumente: Azure Databricks kann Spaltenbezüge auf die Quelltabelle, die sich aus Richtlinienfunktionsargumenten ergibt, nicht optimieren, auch wenn diese Spalten in der Abfrage sonst nicht verwendet werden. Verwenden Sie Richtlinienfunktionen mit weniger Argumenten, da die Abfragen aus diesen Tabellen im Allgemeinen eine bessere Leistung aufweisen.
- Vermeiden Sie das Hinzufügen von Zeilenfiltern mit zu vielen AND-Verbindungen: Da jede Tabelle nur das Hinzufügen höchstens eines Zeilenfilters unterstützt, besteht ein verbreiteter Ansatz darin, mehrere gewünschte Richtlinienfunktionen mit
AND
zu kombinieren. Für jede Verbindung erhöht sich jedoch die Wahrscheinlichkeit, dass Verbindungen Komponenten enthalten, die an anderer Stelle in dieser Tabelle erwähnt werden und sich auf die Leistung auswirken könnten (z. B. durch die Verwendung von Zuordnungstabellen). Verwenden Sie weniger Verbindungen, um die Leistung zu verbessern. - Verwenden Sie deterministische Ausdrücke, die in Tabellenrichtlinien und Abfragen aus diesen Tabellen keine Fehler auslösen können: Einige Ausdrücke können Fehler auslösen, wenn die bereitgestellten Eingaben ungültig sind, z. B. ANSI-Teilung. In solchen Fällen darf der SQL-Compiler Vorgänge mit diesen Ausdrücken (z. B. Filter) nicht zu weit nach unten im Abfrageplan verschieben, um die Möglichkeit von Fehlern wie „Division durch null“ zu vermeiden, die Informationen zu Werten vor dem Filtern oder Maskieren von Vorgängen aufdecken. Verwenden Sie Ausdrücke, die deterministisch sind und niemals Fehler auslösen, z. B.
try_divide
in diesem Beispiel. - Führen Sie Testabfragen über die Tabelle aus, um die Leistung zu messen: Erstellen Sie realistische Abfragen entsprechend der Workload, die Sie für Ihre Tabelle erwarten, mit Zeilenfiltern und Spaltenmasken, und messen Sie die Leistung. Nehmen Sie kleine Änderungen an den Richtlinienfunktionen vor, und beobachten Sie die Auswirkungen, bis Sie ein gutes Gleichgewicht zwischen Leistung und Ausdrucksfähigkeit der Filter- und Maskierungslogik erreichen.
Einschränkungen
- Databricks Runtime-Versionen vor Version 12.2 LTS unterstützen weder Zeilenfilter noch Spaltenmasken. Bei diesen Runtimes treten Fehler auf, d. h., wenn Sie versuchen, aus nicht unterstützten Versionen dieser Runtimes auf Tabellen zuzugreifen, werden keine Daten zurückgegeben.
- Delta Sharing funktioniert für Sicherheit auf Zeilenebene oder Spaltenmasken nicht.
- Sie können keine Sicherheit oder Spaltenmasken auf Zeilenebene auf eine Sicht anwenden.
- Zeitreisen funktionieren für Sicherheit auf Zeilenebene oder Spaltenmasken nicht.
- Der pfadbasierte Zugriff auf Dateien in Tabellen mit Richtlinien wird nicht unterstützt.
- Zeilenfilter- oder Spaltenmaskenrichtlinien mit Zirkelabhängigkeiten zurück zu den ursprünglichen Richtlinien werden nicht unterstützt.
- Tiefe und flache Kopien werden nicht unterstützt.
MERGE
-Anweisungen unterstützen keine Tabellen mit Zeilenfilterrichtlinien, die Schachtelung, Aggregationen, Fenster, Einschränkungen oder nicht deterministische Funktionen enthalten.- Delta Lake-APIs werden nicht unterstützt.
Einschränkung der Berechnung einzelner Benutzer
Sie können nicht auf eine Tabelle zugreifen, die Zeilenfilter oder Spaltenmasken aus einer einzelnen Benutzer-Computeressource in Databricks Runtime 15.3 oder darunter enthält. Sie können den Einzelbenutzerzugriffsmodus auf Databricks Runtime 15.4 LTS oder höher verwenden, wenn Ihr Arbeitsbereich für die serverlose Berechnung aktiviert ist. Weitere Informationen finden Sie unter Feinkornierte Zugriffssteuerung für die Berechnung einzelner Benutzer.