Datenzugriff mithilfe von Analyseregeln einschränken

Dieses Dokument enthält allgemeine Informationen zu Analyseregeln in Google SQL for BigQuery.

Was ist eine Analyseregel?

Eine Analyseregel erzwingt eine Bedingung für die Freigabe von Daten. Mit BigQuery können Sie eine Analyseregel für eine Ansicht erzwingen, indem Sie einen Data-Clean-Room verwenden oder die Analyseregel direkt auf die Ansicht anwenden. Wenn Sie eine Analyseregel erzwingen, erzwingen Sie, dass alle Nutzer, die diese Ansicht abfragen, diese Analyseregel für die Ansicht einhalten müssen. Wenn die Analyseregel erfüllt ist, erzeugt die Abfrage eine Ausgabe, die der Analyseregel entspricht. Wenn die Abfrage die Analyseregel nicht erfüllt, wird ein Fehler erzeugt.

Unterstützte Analyseregeln

Die folgenden Analyseregeln werden unterstützt:

  • Analyseregel für Aggregationsschwellenwerte: Erzwingt die Mindestanzahl verschiedener Entitäten, die in einem Dataset vorhanden sein muss. Sie können diese Regel für eine Ansicht mithilfe von Anweisungen oder Data-Clean-Rooms erzwingen.
  • Differenzielle Datenschutzanalyseregel: Erzwingt ein Datenschutzbudget, das die Daten begrenzt, die einem Abonnenten angezeigt werden, wenn die Daten durch differenziellen Datenschutz geschützt sind. Sie können diese Regel für eine Ansicht mithilfe von Anweisungen oder Data-Clean-Rooms erzwingen.
  • Regel zur Analyse der Join-Einschränkung: Beschränkt die Join-Typen, die mit bestimmten Spalten verwendet werden können. Joins müssen nicht in Abfragen vorhanden sein und bestimmte Spalten können blockiert werden. Kann in eine Analyseregel für Aggregationsschwellenwerte oder eine differenzielle Datenschutzanalyseregel einbezogen werden. Sie können diese Regel für eine Ansicht mithilfe von Anweisungen oder Data-Clean-Rooms erzwingen.
  • Regel für die Analyse von Überschneidungen: Ähnlich wie die Regel für die Analyse von Join-Einschränkungen, kann sie aber nicht mit anderen Analyseregeln verwendet werden. Sie können diese Regel für eine Ansicht mithilfe von Data-Clean-Rooms erzwingen.

Analyseregel für Aggregationsschwellenwerte

Eine Analyseregel für Aggregationsschwellenwerte erzwingt die Mindestanzahl verschiedener Entitäten, die in einem Dataset vorhanden sein muss, damit Statistiken zu diesem Dataset in den Ergebnissen einer Abfrage enthalten sind.

Wenn sie erzwungen wird, gruppiert die Analyseregel des Aggregationsschwellenwerts Daten über Dimensionen hinweg, wobei sichergestellt wird, dass der Aggregationsschwellenwert erreicht wird. Sie zählt die Anzahl der verschiedenen Datenschutzeinheiten (repräsentiert durch die Spalte für die Datenschutzeinheit) für jede Gruppe und gibt nur die Gruppen aus, bei denen die Anzahl der Datenschutzeinheiten den Aggregationsschwellenwert erreicht.

Eine Ansicht, die diese Analyseregel enthält, kann auch die Analyseregel für die Join-Einschränkung enthalten.

Analyseregel für den Aggregationsschwellenwert für eine Ansicht definieren

Sie können eine Analyseregel für Aggregationsschwellenwerte für eine Ansicht in einem Data-Clean-Room oder mit der folgenden Anweisung definieren:

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "aggregation_threshold_policy": {
        "threshold" : THRESHOLD,
        "privacy_unit_column": "PRIVACY_UNIT_COLUMN"
      }
    }'
  )
  AS QUERY;

Ersetzen Sie die folgenden Werte:

  • VIEW_NAME: Der Pfad und der Name der Ansicht.
  • THRESHOLD: Die Mindestanzahl unterschiedlicher Datenschutzeinheiten, die zu jeder Zeile in den Abfrageergebnissen beitragen müssen. Wenn eine potenzielle Zeile diesen Schwellenwert nicht erreicht, wird diese Zeile in den Abfrageergebnissen weggelassen.
  • PRIVACY_UNIT_COLUMN: Stellt die Spalte für die Datenschutzeinheit dar. Eine Spalte für die Datenschutzeinheit ist eine eindeutige Kennung für eine Datenschutzeinheit. Eine Datenschutzeinheit ist ein Wert aus der Spalte für die Datenschutzeinheit, der für die Entität in einem geschützten Satz von Daten steht.

    Sie können nur eine Spalte für die Datenschutzeinheit verwenden und der Datentyp der Spalte für die Datenschutzeinheit muss gruppierbar sein.

    Die Werte in der Spalte für die Datenschutzeinheit können nicht direkt über eine Abfrage projiziert werden. Sie können nur von Analyseregeln unterstützte Aggregationsfunktionen verwenden, um die Daten in dieser Spalte zu aggregieren.

  • QUERY: Die Abfrage für die Ansicht.

Im folgenden Beispiel wird eine Analyseregel für Aggregationsschwellenwerte erstellt:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Informationen zur privacy_policy-Syntax für CREATE VIEW finden Sie in der OPTIONS-Liste in CREATE VIEW.

Analyseregel für den Aggregationsschwellenwert für eine Ansicht aktualisieren

Sie können die Analyseregel für den Aggregationsschwellenwert für eine Ansicht in einem Data-Clean-Room oder mit der folgenden Anweisung ändern:

ALTER VIEW VIEW_NAME
SET OPTIONS (
  privacy_policy= '{
    "aggregation_threshold_policy": {
      "threshold" : THRESHOLD,
      "privacy_unit_column": "PRIVACY_UNIT_COLUMN"
    }
  }'
)

Ersetzen Sie die folgenden Werte:

  • VIEW_NAME: Der Pfad und der Name der Ansicht.
  • THRESHOLD: Die Mindestanzahl unterschiedlicher Datenschutzeinheiten, die zu jeder Zeile in den Abfrageergebnissen beitragen müssen. Wenn eine potenzielle Zeile diesen Schwellenwert nicht erreicht, wird diese Zeile in den Abfrageergebnissen weggelassen.
  • PRIVACY_UNIT_COLUMN: Stellt die Spalte für die Datenschutzeinheit dar. Eine Spalte für die Datenschutzeinheit ist eine eindeutige Kennung für eine Datenschutzeinheit. Eine Datenschutzeinheit ist ein Wert aus der Spalte für die Datenschutzeinheit, der für die Entität in einem geschützten Satz von Daten steht.

    Sie können nur eine Spalte für die Datenschutzeinheit verwenden und der Datentyp der Spalte für die Datenschutzeinheit muss gruppierbar sein.

    Die Werte in der Spalte für die Datenschutzeinheit können nicht direkt über eine Abfrage projiziert werden. Sie können nur von Analyseregeln unterstützte Aggregationsfunktionen verwenden, um die Daten in dieser Spalte zu aggregieren.

Im folgenden Beispiel wird eine Analyseregel für den Aggregationsschwellenwert aktualisiert:

ALTER VIEW mydataset.ExamView
SET OPTIONS (
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_column": "last_name"}}'
);

Informationen zur privacy_policy-Syntax für ALTER VIEW finden Sie in der OPTIONS-Liste in ALTER VIEW SET OPTIONS.

Ansicht mit erzwungener Analyseregel für Aggregationsschwellenwerte abfragen

Sie können eine Ansicht mit einer Analyseregel für Aggregationsschwellenwerte mit der AGGREGATION_THRESHOLD-Klausel abfragen. Die Abfrage muss Aggregationsfunktionen enthalten und Sie können in dieser Abfrage nur von Analyseregeln unterstützte Aggregationsfunktionen verwenden.

Im folgenden Beispiel wird eine Ansicht mit einer Analyseregel für Aggregationsschwellenwerte abgefragt:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query an analysis–rule enforced view called ExamView.
SELECT WITH AGGREGATION_THRESHOLD
  test_id, COUNT(DISTINCT last_name) AS student_count
FROM mydataset.ExamView
GROUP BY test_id;

/*---------+---------------*
 | test_id | student_count |
 +---------+---------------+
 | P91     | 3             |
 | U25     | 4             |
 *---------+---------------*/

Weitere Beispiele für die AGGREGATION_THRESHOLD-Klausel finden Sie unter AGGREGATION_THRESHOLD-Klausel.

Regel für differenzielle Datenschutzanalyse

Die differenzielle Datenschutzanalyseregel erzwingt ein Datenschutzbudget, das die Daten begrenzt, die einem Abonnenten angezeigt werden, wenn die Daten durch differenziellen Datenschutz geschützt sind. Ein Datenschutzbudget verhindert, dass ein Abonnenten freigegebene Daten abfragen kann, wenn die Summe der Epsilon oder Deltas aller Abfragen den Epsilon- oder Deltagesamtwert erreicht. Sie können diese Analyseregel in einer Ansicht verwenden. Eine Ansicht, die diese Analyseregel enthält, kann auch die Join-Einschränkungsanalyse-Regel enthalten.

Differenzielle Datenschutzanalyseregel für eine Ansicht definieren

Sie können eine differenzielle Datenschutzanalyseregel für eine Ansicht in einem Data-Clean-Room oder mit der folgenden Anweisung definieren:

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "differential_privacy_policy": {
        "privacy_unit_column": "PRIVACY_UNIT_COLUMN",
        "max_epsilon_per_query": MAX_EPSILON_PER_QUERY,
        "epsilon_budget": EPSILON_BUDGET,
        "delta_per_query": DELTA_PER_QUERY,
        "delta_budget": DELTA_BUDGET,
        "max_groups_contributed": MAX_GROUPS_CONTRIBUTED
      }
    }'
  )
  AS QUERY;

Ersetzen Sie die folgenden Werte:

  • PRIVACY_UNIT_COLUMN: Die Spalte, die die Entität in einem Dataset identifiziert, das durch eine Datenschutzanalyseregel geschützt ist. Dieser Wert ist ein JSON-String.
  • MAX_EPSILON_PER_QUERY: Bestimmt die Stärke der Datenschutzgarantie pro Abfrage und verhindert, dass der gesamte Epsilon von einer einzigen Abfrage erreicht wird. Dieser Wert ist eine JSON-Zahl zwischen 0.001 und 1e+15.
  • EPSILON_BUDGET: Das Epsilon-Budget, das die Stärke einer allgemeinen Datenschutzgarantie darstellt. Dies wird in der Gesamtheit für alle differenziellen privaten Abfragen in der Ansicht verwendet. Dieser Wert muss größer als MAX_EPSILON_PER_QUERY sein und ist eine JSON-Nummer zwischen 0.001 und 1e+15.
  • DELTA_PER_QUERY: Die maximale Wahrscheinlichkeit eines Datenschutzverlusts pro Abfrage über die Garantie hinaus, bestimmt durch den gesamten Epsilon. Verhindert, dass das gesamte Delta von einer einzelnen Abfrage nicht erreicht wird. Dieser Wert ist eine JSON-Zahl zwischen 1e-15 und 1.
  • DELTA_BUDGET: Das Delta-Budget, das die maximale Wahrscheinlichkeit eines allgemeinen Datenschutzverlusts über die durch den Gesamt-Epilson bestimmte Garantie hinaus darstellt. Dieser Wert wird insgesamt für alle differenziell privaten Abfragen in der Ansicht verwendet. Dieser Wert muss größer als DELTA_PER_QUERY sein und ist eine JSON-Zahl zwischen 1e-15 und 1000.
  • MAX_GROUPS_CONTRIBUTED: Optional. Beschränkt die Anzahl der Gruppen, zu denen eine Entität in einer Spalte für die Datenschutzeinheit beitragen kann. Dieser Wert muss eine nichtnegative JSON-Ganzzahl sein
  • QUERY: Die Abfrage für die Ansicht.

Im folgenden Beispiel wird eine Regel zur differenziellen Datenschutzanalyse erstellt:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Informationen zur privacy_policy-Syntax für CREATE VIEW finden Sie in der OPTIONS-Liste in CREATE VIEW.

Regel für differenzielle Datenschutzanalyse für eine Ansicht aktualisieren

Sie können die Regel für die differenzielle Datenschutzanalyse für eine Ansicht in einem Data-Clean-Room oder mit der folgenden Anweisung ändern:

ALTER VIEW VIEW_NAME
SET OPTIONS (
  privacy_policy= '{
    "differential_privacy_policy": {
      "privacy_unit_column": "PRIVACY_UNIT_COLUMN",
      "max_epsilon_per_query": MAX_EPSILON_PER_QUERY,
      "epsilon_budget": EPSILON_BUDGET,
      "delta_per_query": DELTA_PER_QUERY,
      "delta_budget": DELTA_BUDGET,
      "max_groups_contributed": MAX_GROUPS_CONTRIBUTED
    }
  }'
)

Ersetzen Sie die folgenden Werte:

  • PRIVACY_UNIT_COLUMN: Die Spalte, die die Entität in einem Dataset identifiziert, das durch eine Datenschutzanalyseregel geschützt ist. Dieser Wert ist ein JSON-String.
  • MAX_EPSILON_PER_QUERY: Bestimmt die Stärke der Datenschutzgarantie pro Abfrage und verhindert, dass der gesamte Epsilon von einer einzigen Abfrage erreicht wird. Dieser Wert ist eine JSON-Zahl zwischen 0.001 und 1e+15.
  • EPSILON_BUDGET: Das Epsilon-Budget, das die Stärke einer allgemeinen Datenschutzgarantie darstellt. Dies wird in der Gesamtheit für alle differenziellen privaten Abfragen in der Ansicht verwendet. Dieser Wert muss größer als MAX_EPSILON_PER_QUERY sein und ist eine JSON-Nummer zwischen 0.001 und 1e+15.
  • DELTA_PER_QUERY: Die maximale Wahrscheinlichkeit eines Datenschutzverlusts pro Abfrage über die Garantie hinaus, bestimmt durch den gesamten Epsilon. Verhindert, dass das gesamte Delta von einer einzelnen Abfrage nicht erreicht wird. Dieser Wert ist eine JSON-Zahl zwischen 1e-15 und 1.
  • DELTA_BUDGET: Das Delta-Budget, das die maximale Wahrscheinlichkeit eines allgemeinen Datenschutzverlusts über die durch den Gesamt-Epilson bestimmte Garantie hinaus darstellt. Dieser Wert wird insgesamt für alle differenziell privaten Abfragen in der Ansicht verwendet. Dieser Wert muss größer als DELTA_PER_QUERY sein und ist eine JSON-Zahl zwischen 1e-15 und 1000.
  • MAX_GROUPS_CONTRIBUTED: Optional. Beschränkt die Anzahl der Gruppen, zu denen eine Entität in einer Spalte für die Datenschutzeinheit beitragen kann. Dieser Wert muss eine nichtnegative JSON-Ganzzahl sein

Im folgenden Beispiel wird eine Regel für die differenzielle Datenschutzanalyse aktualisiert:

ALTER VIEW mydataset.ExamView
SET OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 0.01, "epsilon_budget": 1000.0, "delta_per_query": 0.005, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
);

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Informationen zur privacy_policy-Syntax für ALTER VIEW finden Sie in der OPTIONS-Liste in ALTER VIEW SET OPTIONS.

Ansicht mit erzwungener differenzieller Datenschutzanalyseregel abfragen

Sie können eine Ansicht mit einer differenziellen Datenschutzanalyseregel mit der DIFFERENTIAL_PRIVACY-Klausel abfragen. Die Syntax und zusätzliche Beispiele für die DIFFERENTIAL_PRIVACY-Klausel finden Sie unter DIFFERENTIAL_PRIVACY-Klausel.

Achten Sie darauf, dass die differenzielle private Abfrage ausgeführt wird

Erstellen Sie eine differenziell private Abfrage für die Ansicht mit erzwungener Analyseregel und prüfen Sie, ob die Abfrage ausgeführt wird.

In der folgenden Abfrage werden beispielsweise erfolgreich differentielle private Daten aus ExamView zurückgegeben, da epsilon, delta und max_groups_contributed alle die Bedingungen der differentiellen Analyseregel in ExamView erfüllen:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 1000.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Nachdem Sie die Ansicht erstellt haben, warten Sie kurz. Führen Sie dann die folgende Abfrage aus, wenn Sie sicher sind, dass die Ansicht erstellt wurde:

-- Query an analysis–rule enforced view called ExamView.
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.01, max_groups_contributed=2, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- These results will change each time you run the query.
-- Smaller aggregations might be removed.
/*---------+--------------------*
 | test_id | average_test_score |
 +---------+--------------------+
 | P91     | ???                |
 | U25     | ???                |
 *---------+--------------------*/

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Abfrage mit einem Epsilon außerhalb des Bereichs blockieren

Mit Epsilon können Sie Rauschen hinzufügen oder entfernen. Mehr Epsilon bedeutet, dass weniger Rauschen hinzugefügt wird. Wenn Sie gewährleisten möchten, dass eine differenzielle private Abfrage ein minimales Rauschen enthält, achten Sie besonders auf den Wert für max_epsilon_per_query in Ihrer differenziellen Datenschutzanalyseregel.

Beispiel: In der folgenden Abfrage wird die Abfrage mit einem Fehler blockiert, da epsilon in der DIFFERENTIAL_PRIVACY-Klausel höher ist als max_epsilon_per_query in ExamView:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Nachdem Sie die Ansicht erstellt haben, warten Sie kurz und führen Sie dann die folgende Abfrage aus:

-- Error: epsilon is out of bounds.
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=1e20, delta=.01, max_groups_contributed=2, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Abfrage ohne ein bestimmtes Deltamenge blockieren

Delta stellt den Schwellenwert dar, der bestimmt, ob Daten versehentlich gehackt werden können. Je niedriger der Deltawert ist, desto höher ist der Schwellenwert. Damit eine differenzielle private Abfrage einen bestimmten Schwellenwert hat, aktualisieren Sie die Einstellung delta_per_query in Ihrer Regel für die differenzielle Datenschutzanalyse.

In der folgenden Abfrage wird die Abfrage beispielsweise mit einem Fehler blockiert, da delta in der DIFFERENTIAL_PRIVACY-Klausel nicht mit delta_per_query in ExamView übereinstimmt:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Nachdem Sie die Ansicht erstellt haben, warten Sie kurz und führen Sie dann die folgende Abfrage aus:

-- Error: delta in query does not match delta_per_query.
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.02, max_groups_contributed=2, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Abfragen blockieren, die ein Epilson-Budget überschritten haben

Mit Epsilon können Sie Rauschen hinzufügen oder entfernen. Weniger Epsilon erhöht das Rauschen, mehr Epsilon verringert das Rauschen. Selbst bei hohem Rauschen können mehrere Abfragen bezüglich derselben Daten letztendlich die rauschunterdrückte Version der Daten aufdecken. Um dies zu verhindern, können Sie ein Epilson-Budget erstellen. Wenn Sie ein Epilson-Budget hinzufügen möchten, prüfen Sie den Wert für epsilon_budget in der Regel zur differenziellen Datenschutzanalyse für Ihre Ansicht.

Führen Sie die folgende Abfrage dreimal aus. Beim dritten Mal wird die Abfrage blockiert, weil insgesamt 30 verwendet wird, aber epsilon_budget in ExamView nur 25.6 zulässt:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 25.6, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Nachdem Sie die Ansicht erstellt haben, warten Sie kurz und führen Sie die folgende Abfrage dreimal aus:

-- Error after three query runs: epsilon budget exceeded
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.01, max_groups_contributed=2, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Abfragen blockieren, die ein Deltabudget überschritten haben

Delta stellt den Schwellenwert dar, der bestimmt, ob Daten versehentlich gehackt werden können. Je niedriger der Deltawert ist, desto höher ist der Schwellenwert. Selbst wenn der Schwellenwert hoch ist, können mehrere Abfragen derselben Daten letztendlich die differenziellen privaten Daten aufdecken. Um dies zu verhindern, können Sie ein Deltabudget erstellen. Wenn Sie ein Deltabudget hinzufügen möchten, prüfen Sie den Wert für delta_budget in der Regel zur differenziellen Datenschutzanalyse für Ihre Ansicht.

Führen Sie die folgende Abfrage siebenmal aus. Beim siebten Mal wird die Abfrage blockiert, da das insgesamt verwendete Delta 0.7 ist, aber delta_budget in ExamView nur 0.6 zulässt:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 0.2, "delta_per_query": 0.01, "delta_budget": 0.6, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Nachdem Sie die Ansicht erstellt haben, warten Sie kurz und führen Sie die folgende Abfrage siebenmal aus:

-- Error after seven query runs: epsilon budget exceeded
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.01, max_groups_contributed=2, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Abfrage blockieren, die zu viele Gruppenbeiträge zulässt

Sie können die Anzahl der Gruppen begrenzen, zu denen jede Entität in einer differenziellen privaten Abfrage beitragen kann. Wenn eine differenzielle private Abfrage eine begrenzte Anzahl an Gruppen enthält, zu denen jede Entität beitragen kann, achten Sie auf den Wert für max_groups_contributed in Ihrer Regel für die differenzielle Datenschutzanalyse.

Beispiel: In der folgenden Abfrage wird die Abfrage mit einem Fehler blockiert, da max_groups_contributed in der DIFFERENTIAL_PRIVACY-Klausel höher ist als max_groups_contributed in ExamView:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 10.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Nachdem Sie die Ansicht erstellt haben, warten Sie kurz und führen Sie dann die folgende Abfrage aus:

-- Error: max_groups_contributed is out of bounds.
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.02, max_groups_contributed=3, privacy_unit_column=last_name)
    test_id,
    AVG(test_score, contribution_bounds_per_group => (0,100)) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Epsilon parameters are set very high due to the small dataset.
-- In practice, epsilon should be much smaller.

Regel zur Einschränkungsanalyse

Mit einer Join-Einschränkungsanalyseregel werden die Join-Typen eingeschränkt, die mit bestimmten Spalten in einer Ansicht verwendet werden können. Sie können diese Analyseregel in einer Ansicht verwenden. Eine Ansicht, die diese Analyseregel enthält, kann auch die Analyseregel für Aggregationsschwellenwerte oder die Regel zur differenziellen Datenschutzanalyse enthalten.

Join-Einschränkungsanalyseregel für eine Ansicht definieren

Sie können eine Regel für die Join-Einschränkungsanalyse für eine Ansicht in einem Data-Clean-Room oder mit der folgenden Anweisung definieren.

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "join_restriction_policy": {
        "join_condition": "JOIN_CONDITION",
        "join_allowed_columns": JOIN_ALLOWED_COLUMNS
      }
    }'
  )
  AS QUERY;

Ersetzen Sie die folgenden Werte:

  • JOIN_CONDITION: Die Art der Join-Einschränkung, die für eine Ansicht erzwungen werden soll. Dies kann einer der folgenden Werte sein:

    • JOIN_NOT_REQUIRED: Zum Abfragen dieser Ansicht ist kein Join erforderlich. Wenn ein Join verwendet wird, können nur die Spalten in join_allowed_columns verwendet werden.

    • JOIN_BLOCKED: Diese Ansicht kann mit keiner Spalte verbunden werden. Legen Sie in diesem Fall nicht join_allowed_columns fest.

    • JOIN_ANY: Für die Abfrage dieser Ansicht muss mindestens eine Spalte in join_allowed_columns verknüpft sein.

    • JOIN_ALL: Alle Spalten in join_allowed_columns müssen intern verknüpft sein, damit diese Ansicht abgefragt werden kann.

  • JOIN_ALLOWED_COLUMNS: Die Spalten, die Teil eines Join-Vorgangs sein können.

  • QUERY: Die Abfrage für die Ansicht.

Im folgenden Beispiel wird eine Regel zur Analyse der Join-Einschränkung erstellt:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_id", "test_score"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Einschränkungsanalyseregel für Join mit einer anderen Analyseregel verwenden

Sie können eine Join-Einschränkungsanalyseregel mit einer Regel für die Analyse des Aggregationsschwellenwerts oder einer Regel für die differenzielle Datenschutzanalyse verwenden. Wenn Sie jedoch eine Join-Einschränkung mit einer anderen Analyseregel für eine Ansicht verwendet haben, können Sie diese andere Analyseregel nicht mehr ändern.

Im folgenden Beispiel werden eine Analyseregel für die Join-Einschränkung und die Analyseregel für Aggregationsschwellenwerte zusammen verwendet:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_id", "test_score"]}, "aggregation_threshold_policy": {"threshold": 3, "privacy_unit_column": "last_name"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Join-Einschränkungsanalyseregel für eine Ansicht aktualisieren

Sie können die Regel für die Join-Einschränkungsanalyse für eine Ansicht mit einem Data-Clean-Room oder mit der folgenden Anweisung ändern:

ALTER VIEW VIEW_NAME
SET OPTIONS (
  privacy_policy= '{
    "join_restriction_policy": {
      "join_condition": "JOIN_CONDITION",
      "join_allowed_columns": JOIN_ALLOWED_COLUMNS
    }
  }'
)

Ersetzen Sie die folgenden Werte:

  • JOIN_CONDITION: Die Art der Join-Einschränkung, die für eine Ansicht erzwungen werden soll. Dies kann einer der folgenden Werte sein:

    • JOIN_NOT_REQUIRED: Zum Abfragen dieser Ansicht ist kein Join erforderlich. Wenn ein Join verwendet wird, können nur die Spalten in join_allowed_columns verwendet werden.

    • JOIN_BLOCKED: Diese Ansicht kann mit keiner Spalte verbunden werden. Legen Sie in diesem Fall nicht join_allowed_columns fest.

    • JOIN_ANY: Für die Abfrage dieser Ansicht muss mindestens eine Spalte in join_allowed_columns verknüpft sein.

    • JOIN_ALL: Alle Spalten in join_allowed_columns müssen intern verknüpft sein, damit diese Ansicht abgefragt werden kann.

  • JOIN_ALLOWED_COLUMNS: Die Spalten, die Teil eines Join-Vorgangs sein können.

  • QUERY: Die Abfrage für die Ansicht.

Im folgenden Beispiel wird eine Analyseregel zur Join-Einschränkung aktualisiert:

ALTER VIEW mydataset.ExamView
SET OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_id", "test_score"]}}'
);

Informationen zur privacy_policy-Syntax für ALTER VIEW finden Sie in der OPTIONS-Liste in ALTER VIEW SET OPTIONS.

Ansicht mit erzwungener Analyseregel zur Join-Einschränkungsanalyse abfragen

Sie können einen Join-Vorgang für eine Ansicht ausführen, die eine Join-Einschränkungsanalyseregel enthält. Informationen zur Syntax für den Vorgang JOIN finden Sie unter Join-Vorgang.

Sicherstellen, dass die Join-Einschränkungen ausgeführt werden

Sie sollten testen, ob die Join-Einschränkungen ausgeführt werden.

In der folgenden Abfrage werden beispielsweise verknüpfte Daten erfolgreich von ExamView und StudentTable zurückgegeben:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_score"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query the ExamView view.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (test_score)
GROUP BY test_id;

-- These results will change each time you run the query.
-- Smaller aggregations might be removed.
/*---------+--------------------*
 | test_id | average_test_score |
 +---------+--------------------+
 | P91     | ???                |
 | U25     | ???                |
 *---------+--------------------*/

Join-Vorgang ohne erforderliche Spalte blockieren

Sie können einen Join-Vorgang blockieren, wenn er nicht mindestens eine erforderliche Spalte enthält. Fügen Sie dazu die folgenden Teile in Ihre Regel für die Join-Einschränkungsanalyse ein:

"join_restriction_policy": {
  "join_condition": "JOIN_ANY",
  "join_allowed_columns": ["column_name", ...]
}

In der folgenden Abfrage wird die Abfrage beispielsweise mit einem Fehler blockiert, da die Abfrage keine Join-Vorgänge für dietest_score- oder test_id-Spalte in ExamView und StudentTable enthalten:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ANY", "join_allowed_columns": ["test_score", "test_id"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query the ExamView view.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name)
GROUP BY test_id;

Ersetzen Sie in der USING-Klausel last_name durch test_score, damit die vorherige Abfrage ausgeführt wird.

Abfrage ohne Join-Vorgang blockieren

Wenn die Abfrage einen Join-Vorgang enthalten muss, können Sie die Abfrage blockieren, wenn kein Join-Vorgang vorhanden ist. Verwenden Sie dazu eine der folgenden Analyseregeln für Join-Einschränkungen:

"join_restriction_policy": {
  "join_condition": "JOIN_NOT_REQUIRED"
}
"join_restriction_policy": {
  "join_condition": "JOIN_NOT_REQUIRED",
  "join_allowed_columns": []
}

In der folgenden Abfrage wird die Abfrage beispielsweise blockiert, da die Abfrage keinen Join-Vorgang enthält:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_NOT_REQUIRED"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query the ExamView view.
SELECT *
FROM mydataset.ExamView
GROUP BY test_id;

Abfrage ohne Join-Vorgang und ohne erforderliche Spalte blockieren

Wenn die Abfrage einen Join-Vorgang enthalten muss und der Join-Vorgang mindestens eine erforderliche Spalte enthalten muss, fügen Sie die folgenden Teile in die Regel für die Join-Einschränkungsanalyse ein:

"join_restriction_policy": {
  "join_condition": "JOIN_NOT_REQUIRED",
  "join_allowed_columns": ["column_name", ...]
}

In der folgenden Abfrage wird die Abfrage beispielsweise blockiert, da der Join-Vorgang keine Spalte im Array join_allowed_columns enthält:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_NOT_REQUIRED", "join_allowed_columns": ["test_score"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query the ExamView view.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name)
GROUP BY test_id;

Ersetzen Sie in der USING-Klausel last_name durch test_score, damit die vorherige Abfrage ausgeführt wird.

Alle Join-Vorgänge blockieren

Sie können alle Join-Vorgänge blockieren. Fügen Sie dazu nur die folgenden Teile in Ihre Regel für die Join-Einschränkungsanalyse ein:

"join_restriction_policy": {
  "join_condition": "JOIN_BLOCKED",
}

In der folgenden Abfrage wird die Abfrage beispielsweise blockiert, da ein Join-Vorgang vorhanden ist:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_BLOCKED"}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query the ExamView view.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name)
GROUP BY test_id;

Entfernen Sie den Vorgang INNER JOIN, damit die vorherige Abfrage ausgeführt wird.

Inner Join-Vorgang ohne alle erforderlichen Spalten blockieren

Sie können einen Inner Join-Vorgang blockieren, wenn er nicht alle erforderlichen Spalten enthält. Fügen Sie dazu die folgenden Teile in Ihre Regel für die Join-Einschränkungsanalyse ein:

"join_restriction_policy": {
  "join_condition": "JOIN_ALL",
  "join_allowed_columns": ["column_name", ...]
}

In der folgenden Abfrage wird die Abfrage beispielsweise mit einem Fehler blockiert, da die Abfrage test_score nicht im Join-Vorgang enthält:

-- Create a table called ExamTable.
CREATE TABLE mydataset.ExamTable AS (
  SELECT "Hansen" AS last_name, "P91" AS test_id, 510 AS test_score UNION ALL
  SELECT "Wang", "U25", 500 UNION ALL
  SELECT "Wang", "C83", 520 UNION ALL
  SELECT "Wang", "U25", 460 UNION ALL
  SELECT "Hansen", "C83", 420 UNION ALL
  SELECT "Hansen", "C83", 560 UNION ALL
  SELECT "Devi", "U25", 580 UNION ALL
  SELECT "Devi", "P91", 480 UNION ALL
  SELECT "Ivanov", "U25", 490 UNION ALL
  SELECT "Ivanov", "P91", 540 UNION ALL
  SELECT "Silva", "U25", 550);

-- Create a table called StudentTable.
CREATE TABLE mydataset.StudentTable AS (
  SELECT "Hansen" AS last_name, 510 AS test_score UNION ALL
  SELECT "Wang", 500 UNION ALL
  SELECT "Devi", 580 UNION ALL
  SELECT "Ivanov", 490 UNION ALL
  SELECT "Silva", 550);

-- Create a view that includes ExamTable.
CREATE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_score", "last_name"]}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- Query the ExamView view.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name)
GROUP BY test_id;

Ersetzen Sie USING (last_name) durch USING (last_name, test_score), damit die vorherige Abfrage ausgeführt wird.

Regel für die Überschneidungsanalyse auflisten

Beschränkt die Join-Typen, die mit bestimmten Spalten verwendet werden können. Joins müssen in Abfragen vorhanden sein und bestimmte Spalten können nicht blockiert werden. Sie können eine Analyseregel für Listenüberschneidungen für eine Ansicht in einem Data-Clean-Room definieren und aktualisieren. Weitere Informationen finden Sie unter Vertrauliche Daten mit Data-Clean-Room freigeben.

Beschränkungen

Für Analyseregeln gelten die folgenden Einschränkungen:

  • Wenn Sie bereits eine Analyseregel zu einer Ansicht hinzugefügt haben, können Sie nicht zwischen Analyseregeln für Aggregationsschwellenwerte und differenziellen Analyseregeln wechseln.

Für eine Analyseregel für Aggregationsschwellenwerte gelten folgende Einschränkungen:

  • Sie können unterstützte Aggregatfunktionen nur in einer Abfrage für eine Ansicht mit erzwungener Analyseregel für Aggregationsschwellenwerte verwenden.
  • Sie können einer materialisierten Ansicht keine Analyseregel für Aggregationsschwellenwerte hinzufügen.
  • Wenn Sie in einer Abfrage des Aggregationsschwellenwerts eine Ansicht mit erzwungener Analyseregel für Aggregationsschwellenwerte verwenden, müssen beide denselben Wert für die Spalte für die Datenschutzeinheit haben.
  • Wenn Sie in einer Abfrage mit Aggregationsschwellenwert eine Ansicht mit erzwungener Analyseregel für Aggregationsschwellenwerte verwenden, muss der Schwellenwert in der Abfrage größer oder gleich dem Schwellenwert in der Ansicht sein.
  • Zeitreisen sind in jeder Ansicht deaktiviert, die eine Analyseregel für den Aggregationsschwellenwert enthält.

Eine differenzielle Datenschutzanalyseregel unterliegt den folgenden Einschränkungen:

  • Wenn ein Datenschutzbudget für eine Ansicht aufgebraucht ist, kann diese Ansicht nicht mehr verwendet werden und Sie müssen eine neue Ansicht erstellen.

Für eine Join-Einschränkungsanalyseregel gelten die folgenden Einschränkungen:

  • Wenn Sie privacy_unit_column nicht als join_allowed_column in einer Regel zur Join-Einschränkungsanalyse einfügen, können Sie in bestimmten Situationen Spalten möglicherweise nicht zusammenführen.

Preise