Über Datenschutzbereiche¶
In Differential Privacy (differentielle Privatsphäre) in Snowflake definiert Datenschutzbereich die möglichen Werte in einer Spalte, ähnlich wie ein mathematischer Bereich. Ein Datenschutzbereich ist entweder ein Wertebereich mit einem Minimum und einem Maximum oder eine Aufzählung von Werten.
Der Datenschutzbereich ist ein Faktor, den Snowflake verwendet, um die Menge an Rauschen zu berechnen, die zur Wahrung des Datenschutzes hinzugefügt werden muss. Aus diesem Grund sollten die meisten Felder einen endlichen Datenschutzbereich haben, da sonst die Menge des hinzugefügten Rauschens unendlich sein müsste. Standardmäßig wird bei Feldern ohne Datenschutzbereich davon ausgegangen, dass sie eine unendliche Domäne haben.
Welche Spalten benötigen einen Datenschutzbereich?¶
Mit Ausnahme der Funktion COUNT kann eine Abfrage eine Spalte nur dann aggregieren, wenn die Spalte einen Datenschutzbereich hat. Ebenso kann eine Abfrage keine Spalte in einer GROUP BY-Klausel verwenden, es sei denn, die Spalte hat einen Datenschutzbereich. Im folgenden Beispiel müssen zum Beispiel sowohl die Spalte score
als auch die Spalte age
Datenschutzbereiche haben.
SELECT AVG(age) FROM t1
GROUP BY score;
df.group_by("score").agg(f.mean("age").as_("mean_age")).show()
Diese Anforderungen gelten nicht für Unterabfragen. In der folgenden Abfrage zum Beispiel muss die Spalte mean_age
einen Datenschutzbereich haben, die Spalten score
und age
jedoch nicht, obwohl sie in einer Aggregation verwendet werden.
SELECT AVG(mean_age)
FROM (SELECT AVG(age) AS mean_age FROM t1 GROUP BY score)
WHERE mean_age >= 20 AND mean_age <= 80;
df.group_by("score").agg(f.mean("age").as_("mean_age")) \
.where((f.col("mean_age") >= 20) & (f.col("mean_age") <= 80)) \
.select(f.mean("mean_age")).show()
Definieren eines Datenschutzbereichs¶
Sowohl Administratoren als auch Analysten, die Abfragen durchführen, können zwar einen Datenschutzbereich für eine Spalte definieren, tun dies aber auf unterschiedliche Weise:
Ein Administrator verwendet die Befehle CREATE TABLE und ALTER TABLE, um einen Datenschutzbereich für eine Spalte festzulegen. Ein Administrator des Datenanbieters stellt Datenschutzbereiche ein, bevor er Analysten Zugriff gewährt. Unter bestimmten Umständen muss ein Administrator für den Analysten auch Datenschutzbereiche für Tabellen festlegen, die mit den geschützten Tabellen des Datenanbieters verbunden werden. Wenn Sie ein Administrator sind, der Datenschutzbereiche festlegen muss, lesen Sie Als Administrator mit Datenschutzbereichen arbeiten.
Ein Analyst formt eine Abfrage, um mit Hilfe von Abfrageelementen wie Filtern und Spaltentransformationen implizit einen Datenschutzbereich anzugeben. Diese Datenschutzbereiche können für Spalten ohne einen Datenschutzbereich angegeben werden oder einen vom Datenanbieter festgelegten Datenschutzbereich einschränken. Wenn Sie ein Analyst sind, der einen Datenschutzbereich festlegen oder eingrenzen muss, lesen Sie Als Analyst mit Datenschutzbereichen arbeiten.
Wechselwirkungen zwischen Datenschutzbereichen¶
An einer Abfrage können mehrere Datenschutzbereiche beteiligt sein. Es kann einen vom Administrator festgelegten Datenschutzdomäne und einen von einem Analysten festgelegten Datenschutzbereich in derselben Spalte geben. Alternativ könnte eine Abfrage zwei Tabellen über eine Spalte verbinden, die in beiden Tabellen einen Datenschutzbereich hat.
Snowflake wertet alle Datenschutzbereiche aus und berechnet den Datenschutzbereich, der für die Dauer der Abfrage verwendet werden soll. Informationen darüber, wie dieser Datenschutzbereich zur Abfragezeit bestimmt wird, finden Sie unter:
Interaktion zwischen vom Administrator und vom Analysten festgelegten Datenschutzbereichen¶
Ein Analyst verwendet Abfrageelemente, um implizit einen Datenschutzbereich für eine Spalte anzugeben. Wenn Sie zum Beispiel nach einer Spalte filtern, definieren Sie einen Datenschutzbereich für diese Spalte. Dieser vom Analysten festgelegte Datenschutzbereich existiert nur für die Dauer der Abfrage. Er ändert nicht den Datenschutzbereich, den ein Administrator für die Spalte festgelegt hat.
Ein von einem Analysten spezifizierter Datenschutzbereich kann einen vom Administrator spezifizierten Datenschutzbereich einschränken, aber niemals erweitern. Der Datenschutzbereich zur Abfragezeit ist die Schnittmenge zwischen dem durch die Abfrage angegebenen Datenschutzbereich und dem vom Administrator eingestellten Datenschutzbereich. Wenn der Datenanbieter zum Beispiel den Datenschutzbereich als Bereich (5, 15) festgelegt hat und die Abfrage Filter verwendet, um den Datenschutzbereich als Bereich (0, 10) festzulegen, dann ist der effektive Datenschutzbereich zur Abfragezeit (5, 10).
Wenn der Administrator den Datenschutzbereich als Liste („blau“, „gelb“) festgelegt hat und die Abfrage Filter verwendet, um einen Datenschutzbereich von („orange“, „blau“) festzulegen, ist der Datenschutzbereich zur Abfragezeit („blau“).
Datenschutzbereiche und Verknüpfungen¶
Wenn ein Analyst zwei Tabellen über eine Spalte verknüpft, die in beiden Tabellen einen Datenschutzbereich hat, bestimmt die Art der Verknüpfung den Datenschutzbereich zur Abfragezeit. Während der Abfrage kann der effektive Datenschutzbereich die Schnittmenge der beiden Datenschutzbereiche, die Vereinigung der beiden Datenschutzbereiche oder nur einer der Datenschutzbereiche sein.
In der folgenden Tabelle bezieht sich domainL
auf den Datenschutzbereich in der Join-Spalte in der linken Tabelle und domainR
auf den Datenschutzbereich in der Join-Spalte in der rechten Tabelle.
Verknüpfungstyp |
Datenschutzbereich zur Abfragezeit |
---|---|
INNER |
Schnittpunkt von |
OUTER |
Vereinigung von |
LEFT |
|
RIGHT |
|
LEFT SEMI |
Schnittpunkt von |
LEFT ANTI |
|
Nehmen wir zum Beispiel an, die Spalte day
in t1
hat einen Datenschutzbereich von (1, 100) und die Spalte day
in t2
hat einen Datenschutzbereich von (0, 90). Wenn ein Analyst t1
und t2
auf day
verknüpft, ist der Datenschutzbereich zur Abfragezeit (1, 90), d. h. die Schnittmenge der beiden Datenschutzbereiche.
Werte außerhalb eines Datenschutzbereichs¶
Ein Datenschutzbereich definiert mögliche Werte in einer Spalte, nicht unbedingt tatsächliche Werte. Im Folgenden wird zusammengefasst, was mit Werten geschieht, die nicht in der Liste oder im Bereich des Datenschutzbereichs enthalten sind.
- Zeichenfolgen
Werte in einer Zeichenfolgenpalte, die außerhalb des Datenschutzbereichs liegen, werden für die Dauer der Abfrage immer als NULL behandelt. Dies gilt unabhängig davon, ob es sich um einen vom Administrator festgelegte Datenschutzbereich, einen vom Analysten festgelegte Datenschutzbereich oder um eine Schnittmenge von Datenschutzbereichen handelt.
Nehmen wir zum Beispiel an, dass der Datenanbieter einen Datenschutzbereich für eine Spalte
state
von ('california'
,'oregon'
) eingestellt hat und der Analyst eine Abfrage geschrieben hat, die die Spaltestate
nach ('nevada'
,'oregon'
) filtert. Wenn die Abfrage die Spaltestate
in einer GROUP BY-Klausel verwendet, dann enthält das Ergebnis zwei Gruppen:OREGON
undNULL
. Die GruppeNULL
umfasst alle Datensätze, bei denen der Wert der Spaltestate
nichtOREGON
lautet, sowie Datensätze, bei denen der Wert der Spaltestate
buchstäblichNULL
lautet.
- Numerisch, Datum und Uhrzeit
Snowflake behandelt numerische, Datums- oder Zeitwerte, die außerhalb des Bereichs eines Datenschutzbereichs liegen, unterschiedlich, je nachdem, ob der Datenschutzbereich von einem Administrator oder einem Analysten definiert wurde.
- Adminangaben:
Wenn der Datenanbieter einen Datenschutzbereich definiert, der eine Teilmenge der tatsächlichen Werte der Spalte enthält, werden die Werte außerhalb des Datenschutzbereichs begrenzt, d. h. sie werden so behandelt, als wären sie der nächstgelegene Wert im Bereich (der Mindest- oder Höchstwert). Wenn zum Beispiel der Datenschutzbereich einer Spalte aus ganzen Zahlen zwischen 1–100 besteht, wird ein Datensatz mit einem tatsächlichen Wert von 105 bei der Berechnung von Aggregationen so behandelt, als hätte er einen Wert von 100. Analysten können nicht auf Werte außerhalb des Datenschutzbereichs zugreifen.
Wenn eine Verknüpfung von zwei datenschutzgeschützten Tabellen zu einer Überschneidung von Datenschutzbereichen führt, werden Werte außerhalb des Datenschutzbereichs zur Abfragezeit begrenzt.
- Analystenangaben:
Wenn ein Analyst einen Datenschutzbereich für eine Spalte angibt, die keinen hat, oder einen vom Administrator angegebenen Datenschutzbereich einschränkt, bestimmt die Abfrage selbst, was mit Werten geschieht, die außerhalb des Datenschutzbereichs liegen.
Wenn die Abfrage einen Filter verwendet (WHERE-Klausel), werden Werte außerhalb des Datenschutzbereichs bei der Berechnung von Aggregationen ignoriert.
Wenn die Abfrage eine Spaltentransformation verwendet, werden Werte in der Spalte, die außerhalb des Datenschutzbereichs liegen, wie ein vom Administrator festgelegter Datenschutzbereich begrenzt.
Wie sich zwischengeschaltete Abfrageelemente auf Datenschutzbereiche auswirken¶
Die Art und Weise, wie eine Abfrage geschrieben wird, kann sich darauf auswirken, ob sich der Bereich eines Datenschutzbereichs ändert oder ob ein Datenschutzbereich für eine Spalte noch existiert. Dieser Abschnitt hilft Ihnen zu verstehen, wie zwischengeschaltete Teile einer Abfrage, d. h. Teile der Abfrage vor der endgültigen Aggregation, den Datenschutzbereich einer Spalte beeinflussen können.
- Hinzufügen neuer Spalten
Wenn eine Abfrage eine neue Spalte hinzufügt, die auf einer vorhandenen Spalte basiert, hat die Angabe oder Einschränkung eines Datenschutzbereichs für die ursprüngliche Spalte keine Auswirkungen auf die neue Spalte.
Im folgenden Beispiel nehmen wir an, dass der Datenanbieter den Datenschutzbereich in der Spalte
score
als einen Bereich zwischen 0 und 100 definiert hat. Wenn die Abfrage den Datenschutzbereich vonscore
als einen Bereich zwischen 1 und 2 angibt, hat dies keine Auswirkungen auf den Datenschutzbereich der Spaltescore_derived
.
SELECT AVG(score_derived)
FROM (SELECT score, score_derived FROM t1 WHERE score <= 2);
df.with_column("score_derived", f.col("score")) \
.where((f.col("score") >= 1) & \
(f.col("score") <= 2)) \
.select(f.mean("score_derived")).show()
Die Ausgabe könnte zum Beispiel so aussehen:
--------------------------
|"avg(""SCORE_DERIVED"")"|
--------------------------
|31.8196209349 |
--------------------------
- Verwenden einer GROUP BY-Klausel in zwischengeschalteten Aggregationen
Für dazwischen liegende Teile einer Abfrage wird durch die Verwendung einer GROUP BY-Klausel beim Aggregieren einer Spalte der Datenschutzbereich aus der Spalte entfernt. Daher müssen Sie einen neue Datenschutzbereich für die Spalte angeben, wenn sie in der endgültigen Aggregation der Abfrage verwendet wird.
Im folgenden Beispiel werden bei der anfänglichen Aggregation alle Datenschutzbereiche entfernt, die in der Spalte
score
festgelegt wurden. Die Abfrage ist nur deshalb erfolgreich, weil sie vor der endgültigen Aggregation einen Datenschutzbereich auf den Alias der Spalte festlegt.
SELECT AVG(num_scores)
FROM (SELECT COUNT(score) AS num_scores
FROM t1
GROUP BY age)
WHERE num_scores >= 0 AND num_scores <= 100;
df.group_by("age").agg(f.count("score").as_("num_scores")) \
.where((f.col("num_scores") >= 0) & (f.col("num_scores") <= 100)) \
.select(f.mean("num_scores")).show()