Datenzugriff mit Analyseregeln einschränken

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

Was ist eine Analyseregel?

Mit einer Analyseregel werden Richtlinien für die Weitergabe von Daten erzwungen. Eine Richtlinie stellt eine Bedingung dar, die erfüllt sein muss, bevor eine Abfrage ausgeführt werden kann. 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, müssen alle Nutzer, die diese Ansicht abfragen, die Analyseregel für die Ansicht einhalten. Wenn die Analyseregel erfüllt ist, erzeugt die Abfrage eine Ausgabe, die der Analyseregel entspricht. Wenn die Abfrage nicht der Analyseregel entspricht, wird ein Fehler ausgegeben.

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 mit DDL-Anweisungen oder Data-Clean-Rooms erzwingen. Diese Regel unterstützt die Richtlinie für Aggregationsschwellenwerte und die Richtlinie für Join-Einschränkungen.

  • Differential Privacy-Analyseregel: Erzwingt ein Datenschutzbudget, das die Daten begrenzt, die einem Abonnenten offengelegt werden, wenn die Daten mit Differential Privacy geschützt sind. Sie können diese Regel für eine Ansicht mit DDL-Anweisungen oder Data-Clean-Rooms erzwingen. Diese Regel unterstützt die Richtlinie zum differenziellen Datenschutz und die Richtlinie zur Join-Einschränkung.

  • Regel für die Analyse von Überschneidungen in Listen: Überschneidende Zeilen können nur nach einem Join-Vorgang abgefragt werden, was der Regel entspricht. Sie können diese Regel für eine Ansicht mit DDL-Anweisungen oder Data-Clean-Rooms erzwingen. Diese Regel unterstützt die Richtlinie zur Join-Einschränkung.

Analyseregel für Aggregationsschwellenwert

Eine Analyseregel für Aggregationsschwellenwerte erzwingt die Mindestanzahl verschiedener Entitäten, die zu einer Ausgabezeile einer Abfrage beitragen müssen, damit die Ausgabezeile im Abfrageergebnis enthalten ist.

Wenn sie erzwungen wird, gruppiert die Analyseregel für den Aggregationsschwellenwert 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, muss die Richtlinie für den Aggregationsschwellenwert und kann optional die Richtlinie für die Join-Einschränkung enthalten.

Analyseregel für Aggregationsschwellenwerte für eine Ansicht definieren

Sie können eine Analyseregel für den Aggregationsschwellenwert für eine Ansicht in einem Data-Clean-Room oder mit der CREATE VIEW-Anweisung definieren:

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

Definitionen:

  • aggregation_threshold_policy: Die Richtlinie für den Aggregationsschwellenwert für die Analyseregel für den Aggregationsschwellenwert.

    • 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.

  • join_restriction_policy (optional): Die optionale Richtlinie für Join-Einschränkungen für die Analyseregel für Aggregationsschwellenwerte.

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

      • JOIN_ALL: Zum Abfragen dieser Ansicht müssen alle Spalten in join_allowed_columns inner join-verknüpft werden.

      • JOIN_ANY: Zum Abfragen dieser Ansicht muss mindestens eine Spalte in join_allowed_columns verknüpft werden.

      • JOIN_BLOCKED: Diese Ansicht kann nicht über eine Spalte verknüpft werden. Legen Sie join_allowed_columns in diesem Fall nicht fest.

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

    • JOIN_ALLOWED_COLUMNS: Die Spalten, die Teil eines Zusammenführungsvorgangs sein können.

  • QUERY: Die Abfrage für die Ansicht.

Beispiel:

Im folgenden Beispiel wird eine Regel für die Analyse von Aggregationsschwellenwerten für eine Ansicht mit dem Namen ExamView erstellt. ExamView verweist auf eine Tabelle mit dem Namen ExamTable:

CREATE OR REPLACE 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 Aggregationsschwellenwerte 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 ALTER VIEW-Anweisung ändern:

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

Weitere Informationen zu den Werten, die Sie für die Datenschutzrichtlinien in der oben genannten Syntax festlegen können, finden Sie unter Regel für die Analyse von Aggregationsschwellenwerten für eine Ansicht definieren.

Beispiel:

Im folgenden Beispiel wird eine Analyseregel für Aggregationsschwellenwerte für eine Ansicht namens ExamView 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 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 einem Aggregationsschwellenwert unterstützte Aggregationsfunktionen verwenden.

Beispiel:

Im folgenden Beispiel wird eine Analyseregel für Aggregationsschwellenwerte für eine Ansicht namens ExamView abgefragt:

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             |
 *---------+---------------*/

Die Regel für die Analyse des Aggregationsschwellenwerts kann optional auch die Richtlinie für Join-Einschränkungen enthalten. Informationen zur Verwendung der Richtlinie zur Einschränkung von Joins mit einer Analyseregel finden Sie unter Richtlinie zur Einschränkung von Joins in Analyseregeln.

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

Regel für die Analyse von Differential Privacy

Die Analyseregel für Differential Privacy erzwingt ein Datenschutzbudget, das die Daten begrenzt, die einem Abonnenten offengelegt werden, wenn die Daten durch Differential Privacy geschützt sind. Ein Datenschutzbudget verhindert, dass ein Abonnent weitergegebene Daten abfragt, wenn die Summe aller Abfragen (Epsilon oder Delta) den Gesamtwert für Epsilon oder Delta erreicht. Sie können diese Analyseregel in einer Ansicht verwenden.

Eine Ansicht, die diese Analyseregel enthält, muss die Richtlinie zur differenziellen Vertraulichkeit enthalten und kann optional die Richtlinie zur Join-Einschränkung enthalten.

Regel für die Analyse mit differenzieller Vertraulichkeit für eine Ansicht definieren

Sie können eine Analyseregel für differenziellen Datenschutz für eine Ansicht in einem Data-Clean-Room oder mit der Anweisung CREATE VIEW 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
      },
      "join_restriction_policy": {
        "join_condition": "JOIN_CONDITION",
        "join_allowed_columns": JOIN_ALLOWED_COLUMNS
      }
    }'''
  )
  AS QUERY;

Definitionen:

  • differential_privacy_policy: Die Richtlinie für differenzielle Vertraulichkeit für die Regel zur Analyse der differenziellen Vertraulichkeit.

    • PRIVACY_UNIT_COLUMN: Die Spalte, die die Entität in einem Dataset identifiziert, das mit einer Regel für die Datenschutzanalyse geschützt wird. Dieser Wert ist ein JSON-String.

    • MAX_EPSILON_PER_QUERY: Bestimmt die Menge an Rauschen, die den Ergebnissen pro Abfrage hinzugefügt wird, und verhindert, dass das Gesamt-Epsilon durch eine einzelne Abfrage erreicht wird. Dieser Wert ist eine JSON-Zahl zwischen 0.001 und 1e+15.

    • EPSILON_BUDGET: Das Epsilon-Budget, das das gesamte Epsilon darstellt, das für alle differenziell privaten Abfragen für die Ansicht verwendet werden kann. Dieser Wert muss größer als MAX_EPSILON_PER_QUERY sein und ist eine JSON-Zahl zwischen 0.001 und 1e+15.

    • DELTA_PER_QUERY: Die Wahrscheinlichkeit, dass eine Zeile im Ergebnis nicht ε-differenziell privat ist. Dieser Wert ist eine JSON-Zahl zwischen 1e-15 und 1.

    • DELTA_BUDGET: Das Delta-Budget, das das Gesamtdelta darstellt, das für alle differenziell privaten Abfragen für die Ansicht verwendet werden kann. 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

  • join_restriction_policy (optional): Die optionale Richtlinie zur Einschränkung von Joins für die Regel zur differenziellen Datenschutzanalyse.

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

      • JOIN_ALL: Zum Abfragen dieser Ansicht müssen alle Spalten in join_allowed_columns inner join-verknüpft werden.

      • JOIN_ANY: Zum Abfragen dieser Ansicht muss mindestens eine Spalte in join_allowed_columns verknüpft werden.

      • JOIN_BLOCKED: Diese Ansicht kann nicht über eine Spalte verknüpft werden. Legen Sie join_allowed_columns in diesem Fall nicht fest.

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

    • JOIN_ALLOWED_COLUMNS: Die Spalten, die Teil eines Zusammenführungsvorgangs sein können.

  • QUERY: Die Abfrage für die Ansicht.

Beispiel:

Im folgenden Beispiel wird eine Regel für die Analyse der differenziellen Vertraulichkeit für eine Ansicht mit dem Namen ExamView erstellt. ExamView verweist auf eine Tabelle mit dem Namen ExamTable:

CREATE OR REPLACE VIEW mydataset.ExamView
OPTIONS(
  privacy_policy= '{"differential_privacy_policy": {"privacy_unit_column": "last_name", "max_epsilon_per_query": 1000.0, "epsilon_budget": 10000.1, "delta_per_query": 0.01, "delta_budget": 0.1, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these 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 die Analyse mit differenzieller Vertraulichkeit für eine Ansicht aktualisieren

Sie können die Analyseregel für differenziellen Datenschutz für eine Ansicht in einem Data-Clean-Room oder mit der ALTER VIEW-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
    }
  }'''
)

Weitere Informationen zu den Werten, die Sie für die Datenschutzrichtlinien in der oben genannten Syntax festlegen können, finden Sie unter Regel für die Analyse des differenziellen Datenschutzes für eine Ansicht definieren.

Beispiel:

Im folgenden Beispiel wird eine Regel für die Analyse mit Differential Privacy für eine Ansicht mit dem Namen ExamView 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.05, "delta_budget": 0.1, "max_groups_contributed": 2}}'
);

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these 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 Analyseregel für differenziellen Datenschutz abfragen

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

Beispiel:

Im folgenden Beispiel wird eine Regel für die differenzielle Datenschutzanalyse für eine Ansicht mit dem Namen ExamView abgefragt. Die differenziell privaten Daten sollten erfolgreich aus ExamView zurückgegeben werden, da epsilon, delta und max_groups_contributed alle die Bedingungen der differentiellen Analyseregel in ExamView erfüllen.

-- Query an analysis–rule enforced view called ExamView.
SELECT
  WITH DIFFERENTIAL_PRIVACY
    test_id,
    AVG(test_score) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

-- Results will vary.
/*---------+--------------------*
 | test_id | average_test_score |
 +---------+--------------------+
 | P91     | 512.627693163311   |
 | C83     | 506.01565971561649 |
 | U25     | 524.81202728847893 |
 *---------+--------------------*/

Abfrage mit einem Epsilon außerhalb des zulässigen Bereichs blockieren

Mit Epsilon können Sie Rauschen hinzufügen oder entfernen. Je höher der Epsilon-Wert, desto weniger Rauschen wird hinzugefügt. Wenn Sie dafür sorgen möchten, dass eine differenziell private Abfrage nur ein minimales Rauschen aufweist, achten Sie genau auf den Wert für max_epsilon_per_query in Ihrer Regel für die differenzielle Datenschutzanalyse.

Beispiel:

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

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE 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": 0.1, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these should be much smaller.

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

-- Error: Epsilon is too high: 1e+20, policy for table mydataset.
-- ExamView allows max 10.01
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=1e20)
    test_id,
    AVG(test_score) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

Abfragen blockieren, die ein Epsilon-Budget überschritten haben

Mit Epsilon können Sie Rauschen hinzufügen oder entfernen. Ein kleinerer Epsilon-Wert erhöht das Rauschen, ein größerer Epsilon-Wert verringert es. 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 Epsilon-Budget erstellen. Wenn Sie ein Epsilon-Budget hinzufügen möchten, sehen Sie sich den Wert für epsilon_budget in der Regel für die Analyse der differenziellen Vertraulichkeit für Ihre Ansicht an.

Beispiel:

Führen Sie die folgende Abfrage dreimal aus. Beim dritten Mal wird die Anfrage blockiert, da das verwendete Gesamt-Epsilon 30 beträgt, aber epsilon_budget in ExamView nur 25.6 zulässt:

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE 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": 0.1, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

-- NOTE: Delta and epsilon parameters are set very high due to the small
-- dataset. In practice, these should be much smaller.

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

-- Error after three query runs: Privacy budget is not sufficient for
-- table 'mydataset.ExamView' in this query.

SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10)
    test_id,
    AVG(test_score) AS average_test_score
FROM mydataset.ExamView
GROUP BY test_id;

Regel für die Analyse der Listenüberschneidung

Nach einer Join-Operation können nur sich überschneidende Zeilen abgefragt werden, was der Regel für Listenüberschneidungen entspricht. Sie können diese Regel für eine Ansicht mit DDL-Anweisungen oder Data-Clean-Rooms erzwingen.

Eine Ansicht, die diese Analyseregel enthält, darf nur die Richtlinie zur Einschränkung von Joins enthalten.

Regel für die Analyse von Listenüberschneidungen für eine Ansicht definieren

Sie können eine Analyseregel für die Listenüberschneidung für eine Ansicht in einem Data-Clean-Room oder mit der CREATE VIEW-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;

Definitionen:

  • join_restriction_policy: Die Richtlinie für die Join-Einschränkung für die Regel zur Analyse von Listenüberschneidungen.

    • JOIN_CONDITION: Der Typ der Listenüberschneidung, die für eine Ansicht erzwungen werden soll. Dies kann einer der folgenden Werte sein:

      • JOIN_ALL: Zum Abfragen dieser Ansicht müssen alle Spalten in join_allowed_columns inner join-verknüpft werden.

      • JOIN_ANY: Zum Abfragen dieser Ansicht muss mindestens eine Spalte in join_allowed_columns verknüpft werden.

    • JOIN_ALLOWED_COLUMNS: Die Spalten, die Teil eines Zusammenführungsvorgangs sein können.

  • QUERY: Die Abfrage für die Ansicht.

Beispiel:

Im folgenden Beispiel wird eine Regel für die Analyse von Listenüberschneidungen für eine Ansicht mit dem Namen ExamView erstellt. ExamView verweist auf eine Tabelle mit dem Namen ExamTable:

-- Create a view that includes a table called ExamTable.
CREATE OR REPLACE 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 );

Regel für die Analyse von Listenüberschneidungen für eine Ansicht aktualisieren

Sie können die Analyseregel für die Listenüberschneidung für eine Ansicht mit einem Data-Clean-Room oder mit der ALTER VIEW-Anweisung ändern:

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

Weitere Informationen zu den Werten, die Sie für die Datenschutzrichtlinie in der oben genannten Syntax festlegen können, finden Sie unter Regel für die Analyse von Listenüberschneidungen für eine Ansicht definieren.

Beispiel:

Im folgenden Beispiel wird eine Regel für die Analyse von Listenüberschneidungen in einer Ansicht mit dem Namen ExamView 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 abfragen, die durch eine Analyseregel für Listenüberschneidungen erzwungen wird

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

Join-Vorgang ohne Überschneidung blockieren

Sie können einen Join-Vorgang blockieren, wenn er nicht mindestens eine Überschneidung mit einer erforderlichen Spalte enthält.

Beispiel:

In der folgenden Abfrage wird eine Ansicht namens ExamView mit einer Tabelle namens StudentTable verknüpft. Da die Datenansicht die Regel für die Analyse der Überschneidung von JOIN_ANY-Listen enthält, ist mindestens eine überschneidende Zeile aus ExamView und StudentTable erforderlich. Da es mindestens eine Überschneidung gibt, wird die Abfrage erfolgreich ausgeführt.

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

-- Query a view called ExamView and a table called StudentTable.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (test_score);

/*------------+-----------+---------+-------------*
 | test_score | last_name | test_id | last_name_1 |
 +------------+-----------+---------+-------------+
 | 490        | Ivanov    | U25     | Ivanov      |
 | 500        | Wang      | U25     | Wang        |
 | 510        | Hansen    | P91     | Hansen      |
 | 550        | Silva     | U25     | Silva       |
 | 580        | Devi      | U25     | Devi        |
 *------------+-----------+---------+-------------*/

Blockieren eines Inner Join-Vorgangs ohne vollständige Überschneidung

Sie können einen Join-Vorgang blockieren, wenn er keine Überschneidung mit allen erforderlichen Spalten enthält.

Beispiel:

Im folgenden Beispiel wird versucht, einen Join-Vorgang für eine Ansicht mit dem Namen ExamView und eine Tabelle mit dem Namen StudentTable auszuführen. Die Abfrage schlägt jedoch fehl. Der Fehler tritt auf, weil für die Regel zur Analyse der Überschneidung von ExamView-Listen ein Join für alle Spalten erforderlich ist, die in der Richtlinie zur Join-Einschränkung vorhanden sind. Da die Tabelle mit dem Namen StudentTable diese Spalten nicht enthält, überschneiden sich nicht alle Zeilen und es wird ein Fehler ausgegeben.

-- Create a view that includes ExamTable.
CREATE OR REPLACE 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 error: Joining must occur on all of the following columns
-- [test_score, last_name] on table mydataset.ExamView.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

Richtlinie für Beitrittsbeschränkung mit einer anderen Richtlinie verwenden

Die Richtlinie zur Einschränkung von Joins kann mit anderen Richtlinien in den Analyseregeln für Aggregationsschwellenwerte und differenziellen Datenschutz verwendet werden. Wenn Sie jedoch eine Richtlinie mit Join-Einschränkung mit einer anderen Richtlinie verwendet haben, können Sie diese andere Richtlinie danach nicht mehr ändern.

Beispiel:

Im folgenden Beispiel wird eine Richtlinie für Join-Einschränkungen in einer Regel für die Analyse von Aggregationsschwellenwerten verwendet:

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

Zusammenführungsoperation ohne erforderliche Spalte blockieren

Sie können einen Join-Vorgang blockieren, wenn er nicht mindestens eine erforderliche Spalte enthält. Dazu müssen Sie die folgenden Teile in Ihre Regel für die Analyse von Listenüberschneidungen aufnehmen:

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

Beispiel:

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

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

-- Query error: Joining must occur on at least one of the following columns
-- [test_score, test_id] on table mydataset.ExamView.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

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

Abfrage ohne Join-Vorgang blockieren

Wenn die Abfrage einen Join-Vorgang enthalten muss, können Sie sie blockieren, wenn kein Join-Vorgang vorhanden ist. Verwenden Sie dazu eine der folgenden Regeln für die Analyse der Listenüberschneidung:

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

Beispiel:

In der folgenden Abfrage wird die Abfrage blockiert, da kein Join-Vorgang mit ExamView in der Abfrage vorhanden ist:

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

-- Query error: At least one allowed column must be specified with
-- join_condition = 'JOIN_NOT_REQUIRED'.
SELECT *
FROM mydataset.ExamView;

Abfrage ohne Join-Vorgang und ohne erforderliche Spalte blockieren

Wenn die Abfrage einen Join-Vorgang und der Join-Vorgang mindestens eine erforderliche Spalte enthalten muss, fügen Sie die folgenden Teile in Ihre Regel für die Analyse von Listenüberschneidungen ein:

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

Beispiel:

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

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

-- Query error: Join occurring on a restricted column.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

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

Alle Join-Vorgänge blockieren

Sie können alle Join-Vorgänge blockieren. Dazu müssen Sie in Ihrer Regel für die Analyse von Listenüberschneidungen nur die folgenden Teile einbeziehen:

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

Beispiel:

In der folgenden Abfrage wird die Abfrage blockiert, da ein Join-Vorgang mit einer Ansicht namens ExamView vorhanden ist:

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

-- Query error: Join occurring on a restricted column.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

Damit die vorherige Abfrage ausgeführt wird, entfernen Sie den Vorgang INNER JOIN.

Blockieren eines Inner Join-Vorgangs ohne alle erforderlichen Spalten

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 Analyse von Listenüberschneidungen ein:

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

Beispiel:

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

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

-- Query error: Joining must occur on all of the following columns
-- [test_score, last_name] on table mydataset.ExamView.
SELECT *
FROM mydataset.ExamView INNER JOIN mydataset.StudentTable USING (last_name);

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

Beispieltabellen

In mehreren Beispielen in diesem Dokument wird auf zwei Tabellen mit den Namen ExamTable und StudentTable verwiesen. ExamTable enthält eine Liste der von Schülern erzielten Testergebnisse und StudentTable eine Liste der Schüler und ihrer Testergebnisse.

Wenn Sie die Beispiele in diesem Dokument testen möchten, fügen Sie Ihrem Projekt zuerst die folgenden Beispieltabellen hinzu:

-- Create a table called ExamTable.
CREATE OR REPLACE 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 OR REPLACE 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);

Beschränkungen

Für Analyseregeln gelten die folgenden Einschränkungen:

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

Für eine Regel zur Analyse von Aggregationsschwellenwerten gelten die folgenden Einschränkungen:

  • Sie können nur unterstützte Aggregatfunktionen 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 mit Aggregationsschwellenwert eine Ansicht mit einer durch eine Analyseregel für Aggregationsschwellenwerte erzwungenen Datenschutzrichtlinie verwenden, müssen beide denselben Wert für die Spalte der 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 mit einer Analyseregel für Aggregationsschwellenwerte deaktiviert.

Für Regeln für differenziellen Datenschutz gelten die folgenden Einschränkungen:

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

Für eine Regel zur Analyse von Listenüberschneidungen gelten die folgenden Einschränkungen:

  • Wenn Sie eine Regel für die Analyse von Aggregationsschwellenwerten oder eine Regel für die Analyse von differenzieller Vertraulichkeit mit einer Regel für die Analyse von Listenüberschneidungen kombinieren und privacy_unit_column nicht als join_allowed_column in die Regel für die Analyse von Listenüberschneidungen einfügen, können Sie in bestimmten Situationen möglicherweise keine Spalten verknüpfen.

Preise

  • Für das Anhängen einer Analyseregel an eine Ansicht fallen keine zusätzlichen Kosten an.
  • Es gelten die standardmäßigen BigQuery-Preise für Analysen.