Limita l'accesso ai dati utilizzando le regole di analisi

Le regole di analisi in GoogleSQL per BigQuery ti consentono di applicare norme e condizioni sulla privacy durante la condivisione di dati sensibili. Puoi applicare regole di analisi a una vista, direttamente o in una data clean room, per limitare le query in base alle soglie di aggregazione, ai budget di privacy differenziale o ai requisiti di join.

Che cos'è una regola di analisi?

Una regola di analisi applica le policy per la condivisione dei dati. Una policy rappresenta una condizione che deve essere soddisfatta prima che una query possa essere eseguita. Con BigQuery, puoi applicare una regola di analisi a una vista utilizzando una data clean room o applicando la regola di analisi direttamente alla vista. Quando applichi una regola di analisi, imponi che chiunque esegua query su quella vista deve rispettare la regola di analisi sulla vista. Se la regola di analisi è soddisfatta, la query produce un output che soddisfa la regola di analisi. Se la query non soddisfa la regola di analisi, viene generato un errore.

Regole di analisi supportate

Sono supportate le seguenti regole di analisi:

  • Regola di analisi della soglia di aggregazione: forza l'applicazione del numero minimo di entità distinte che devono essere presenti in un set di dati. Puoi applicare questa regola a una vista utilizzando istruzioni DDL o data clean room. Questa regola supporta la policy relativa alla soglia di aggregazione e la policy relativa alla limitazione di join.

  • Regola di analisi della privacy differenziale: applica un budget di privacy, che limita i dati rivelati a un abbonato se sono protetti con la privacy differenziale. Puoi applicare questa regola a una vista utilizzando istruzioni DDL o data clean room. Questa regola supporta la policy sulla privacy differenziale e la policy sulle limitazioni di join.

  • Regola di analisi della sovrapposizione degli elenchi: è possibile eseguire query sulle righe sovrapposte solo dopo un'operazione di join, che è conforme alla regola. Puoi applicare questa regola a una vista utilizzando istruzioni DDL o data clean room. Questa regola supporta la policy di limitazione di partecipazione.

Regola di analisi della soglia di aggregazione

Una regola di analisi della soglia di aggregazione forza l'applicazione del numero minimo di entità distinte che devono contribuire a una riga di output di una query, in modo che la riga di output venga inclusa nel risultato della query.

Quando viene applicata, la regola di analisi della soglia di aggregazione raggruppa i dati in base alle dimensioni, garantendo al contempo il rispetto della soglia di aggregazione. Conta il numero di unità privacy distinte (rappresentate dalla colonna unità privacy) per ogni gruppo e restituisce solo i gruppi in cui il conteggio delle unità privacy distinte soddisfa la soglia di aggregazione.

Una vista che include questa regola di analisi deve includere la policy di soglia di aggregazione e può includere facoltativamente la policy di limitazione dei join.

Definisci una regola di analisi della soglia di aggregazione per una vista

Puoi definire una regola di analisi della soglia di aggregazione per una vista in una data clean room o con l'istruzione CREATE VIEW:

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;

Definizioni:

  • aggregation_threshold_policy: La politica della soglia di aggregazione per la regola di analisi della soglia di aggregazione.

    • VIEW_NAME: il percorso e il nome della vista.

    • THRESHOLD: il numero minimo di unità di privacy distinte che devono contribuire a ogni riga nei risultati della query. Se una potenziale riga non soddisfa questa soglia, viene omessa dai risultati della query.

    • PRIVACY_UNIT_COLUMN: rappresenta la colonna unità privacy. Una colonna unità privacy è un identificatore univoco di un'unità privacy. Un'unità privacy è un valore della colonna unità privacy che rappresenta l'entità in un set di dati che viene protetto.

      Puoi utilizzare una sola colonna unità privacy e il tipo di dati per la colonna unità privacy deve essere raggruppabile.

      I valori nella colonna dell'unità di privacy non possono essere proiettati direttamente tramite una query e puoi utilizzare solo le funzioni aggregate supportate dalle regole di analisi per aggregare i dati in questa colonna.

  • join_restriction_policy (facoltativo): la policy di limitazione dei join facoltativa per la regola di analisi della soglia di aggregazione.

    • JOIN_CONDITION: il tipo di limitazione di join da applicare a una vista. Può avere uno dei seguenti valori:

      • JOIN_ALL: tutte le colonne in join_allowed_columns devono essere unite internamente per poter eseguire query su questa vista.

      • JOIN_ANY: è necessario unire almeno una colonna in join_allowed_columns per eseguire query su questa vista.

      • JOIN_BLOCKED: non è possibile unire questa visualizzazione lungo nessuna colonna. In questo caso, non impostare join_allowed_columns.

      • JOIN_NOT_REQUIRED: non è necessario un join per eseguire query su questa vista. Se viene utilizzata una join, è possibile utilizzare solo le colonne in join_allowed_columns.

    • JOIN_ALLOWED_COLUMNS: le colonne che possono far parte di un'operazione di join.

  • QUERY: la query per la visualizzazione.

Esempio:

Nell'esempio seguente, viene creata una regola di analisi della soglia di aggregazione su una vista denominata ExamView. ExamView fa riferimento a una tabella denominata 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 );

Per esaminare la sintassi privacy_policy per CREATE VIEW, consulta l'elenco OPTIONS in CREATE VIEW.

Aggiorna una regola di analisi della soglia di aggregazione per una vista

Puoi modificare la regola di analisi della soglia di aggregazione per una vista in una data clean room o con l'istruzione ALTER VIEW:

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

Per saperne di più sui valori che puoi impostare per le policy sulla privacy nella sintassi precedente, consulta Definisci una regola di analisi della soglia di aggregazione per una vista.

Esempio:

Nell'esempio seguente, viene aggiornata una regola di analisi della soglia di aggregazione su una vista denominata ExamView.

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

Per esaminare la sintassi privacy_policy per ALTER VIEW, consulta l'elenco OPTIONS in ALTER VIEW SET OPTIONS.

Esegui una query su una vista applicata con una regola di analisi della soglia di aggregazione

Puoi eseguire una query su una vista con una regola di analisi della soglia di aggregazione con la clausola AGGREGATION_THRESHOLD. La query deve includere funzioni di aggregazione e in questa query puoi utilizzare solo funzioni di aggregazione supportate dalla soglia di aggregazione.

Esempio:

Nell'esempio seguente, viene eseguita una query su una regola di analisi della soglia di aggregazione in una vista denominata 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             |
 *---------+---------------*/

La regola di analisi della soglia di aggregazione può anche includere facoltativamente la policy di limitazione dei join. Per scoprire come utilizzare la policy di limitazione dei join con una regola di analisi, consulta Policy di limitazione dei join nelle regole di analisi.

Per esaminare altri esempi per la clausola AGGREGATION_THRESHOLD, consulta Clausola AGGREGATION_THRESHOLD.

Regola di analisi della privacy differenziale

La regola di analisi della privacy differenziale applica un budget di privacy, che limita i dati rivelati a un abbonato se sono protetti con la privacy differenziale. Un budget di privacy impedisce ai sottoscrittori di eseguire query sui dati condivisi se la somma del valore epsilon o delta di tutte le query raggiunge il valore epsilon o delta totale. Puoi utilizzare questa regola di analisi in una vista.

Una vista che include questa regola di analisi deve includere la policy sulla privacy differenziale e può facoltativamente includere la policy di limitazione dei join.

Definisci una regola di analisi della privacy differenziale per una vista

Puoi definire una regola di analisi della privacy differenziale per una vista in una data clean room o con l'istruzione CREATE VIEW:

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;

Definizioni:

  • differential_privacy_policy: la policy di privacy differenziale per la regola di analisi di privacy differenziale.

    • PRIVACY_UNIT_COLUMN: la colonna che identifica l'entità in un set di dati protetto utilizzando una regola di analisi della privacy. Questo valore è una stringa JSON.

    • MAX_EPSILON_PER_QUERY: determina la quantità di rumore aggiunto ai risultati per query e impedisce che l'epsilon totale venga raggiunto da una singola query. Questo valore è un numero JSON compreso tra 0.001 e 1e+15.

    • EPSILON_BUDGET: il budget epsilon che rappresenta l'epsilon totale che può essere utilizzato in tutte le query con privacy differenziale sulla vista. Questo valore deve essere maggiore di MAX_EPSILON_PER_QUERY ed è un numero JSON compreso tra 0.001 e 1e+15.

    • DELTA_PER_QUERY: la probabilità che una riga del risultato non sia epsilon-differenzialmente privata. Questo valore è un numero JSON compreso tra 1e-15 e 1.

    • DELTA_BUDGET: il budget delta, che rappresenta il delta totale che può essere utilizzato in tutte le query con privacy differenziale sulla vista. Questo valore deve essere maggiore di DELTA_PER_QUERY ed è un numero JSON compreso tra 1e-15 e 1000.

    • MAX_GROUPS_CONTRIBUTED (facoltativo): limita il numero di gruppi a cui può contribuire un'entità in una colonna unità privacy. Questo valore deve essere un numero intero JSON non negativo.

  • join_restriction_policy (facoltativo): la policy di limitazione dei join facoltativa per la regola di analisi della privacy differenziale.

    • JOIN_CONDITION: il tipo di limitazione di join da applicare a una vista. Può avere uno dei seguenti valori:

      • JOIN_ALL: tutte le colonne in join_allowed_columns devono essere unite internamente per poter eseguire query su questa vista.

      • JOIN_ANY: è necessario unire almeno una colonna in join_allowed_columns per eseguire query su questa vista.

      • JOIN_BLOCKED: non è possibile unire questa visualizzazione lungo nessuna colonna. In questo caso, non impostare join_allowed_columns.

      • JOIN_NOT_REQUIRED: non è necessario un join per eseguire query su questa vista. Se viene utilizzata una join, è possibile utilizzare solo le colonne in join_allowed_columns.

    • JOIN_ALLOWED_COLUMNS: le colonne che possono far parte di un'operazione di join.

  • QUERY: la query per la visualizzazione.

Esempio:

Nell'esempio seguente, viene creata una regola di analisi con privacy differenziale su una vista denominata ExamView. ExamView fa riferimento a una tabella denominata 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.

Per esaminare la sintassi privacy_policy per CREATE VIEW, consulta l'elenco OPTIONS in CREATE VIEW.

Aggiorna una regola di analisi della privacy differenziale per una visualizzazione

Puoi modificare la regola di analisi della privacy differenziale per una vista in una data clean room o con l'istruzione ALTER VIEW:

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
    }
  }'''
)

Per saperne di più sui valori che puoi impostare per le policy sulla privacy nella sintassi precedente, consulta Definisci una regola di analisi con privacy differenziale per una vista.

Esempio:

Nell'esempio seguente, una regola di analisi della privacy differenziale viene aggiornata su una vista denominata ExamView.

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.

Per esaminare la sintassi privacy_policy per ALTER VIEW, consulta l'elenco OPTIONS in ALTER VIEW SET OPTIONS.

Esegui una query su una vista applicata con una regola di analisi della privacy differenziale

Puoi eseguire una query su una vista con una regola di analisi della privacy differenziale con la clausola DIFFERENTIAL_PRIVACY. Per esaminare la sintassi e altri esempi per la clausola DIFFERENTIAL_PRIVACY, consulta Clausola DIFFERENTIAL_PRIVACY.

Esempio:

Nell'esempio seguente, viene eseguita una query su una regola di analisi della privacy differenziale su una vista denominata ExamView. I dati con privacy differenziale dovrebbero essere restituiti correttamente da ExamView perché epsilon, delta e max_groups_contributed soddisfano tutte le condizioni della regola di analisi differenziale in ExamView.

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

Blocca una query con un epsilon fuori intervallo

Epsilon può essere utilizzato per aggiungere o rimuovere il rumore. Un valore di epsilon più alto significa che verrà aggiunto meno rumore. Se vuoi assicurarti che una query con privacy differenziale abbia una quantità minima di rumore, presta molta attenzione al valore di max_epsilon_per_query nella regola di analisi della privacy differenziale.

Esempio:

Nella query seguente, la query viene bloccata con un errore perché epsilon nella clausola DIFFERENTIAL_PRIVACY è superiore a max_epsilon_per_query in ExamView:

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

Dopo aver creato la vista, attendi un attimo, quindi esegui la seguente query:

-- 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;

Blocca le query che hanno superato un budget epsilon

Epsilon può essere utilizzato per aggiungere o rimuovere il rumore. Un valore di epsilon inferiore aumenta il rumore, mentre un valore superiore lo riduce. Anche quando il rumore è elevato, più query sugli stessi dati possono rivelare la versione senza rumore dei dati. Per evitare che ciò accada, puoi creare un budget epsilon. Se vuoi aggiungere un budget epsilon, esamina il valore di epsilon_budget nella regola di analisi della privacy differenziale per la tua vista.

Esempio:

Esegui la seguente query tre volte. La terza volta, la query viene bloccata perché l'epsilon totale utilizzato è 30, ma epsilon_budget in ExamView consente solo 25.6:

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

Dopo aver creato la vista, attendi un attimo, quindi esegui la seguente query tre volte:

-- 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;

Regola di analisi di sovrapposizione degli elenchi

Dopo un'operazione di join, è possibile eseguire query solo sulle righe sovrapposte, in conformità con la regola di sovrapposizione degli elenchi. Puoi applicare questa regola a una vista utilizzando istruzioni DDL o data clean room.

Una vista che include questa regola di analisi deve includere solo la policy di limitazione dei join.

Definisci una regola di analisi della sovrapposizione degli elenchi per una vista

Puoi definire una regola di analisi di sovrapposizione degli elenchi per una vista in una data clean room o con l'istruzione CREATE VIEW:

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

Definizioni:

  • join_restriction_policy: la policy di limitazione dei join per la regola di analisi della sovrapposizione degli elenchi.

    • JOIN_CONDITION: il tipo di sovrapposizione degli elenchi da applicare a una visualizzazione. Può avere uno dei seguenti valori:

      • JOIN_ALL: tutte le colonne in join_allowed_columns devono essere unite internamente per poter eseguire query su questa vista.

      • JOIN_ANY: è necessario unire almeno una colonna in join_allowed_columns per eseguire query su questa vista.

    • JOIN_ALLOWED_COLUMNS: le colonne che possono far parte di un'operazione di join.

  • QUERY: la query per la visualizzazione.

Esempio:

Nell'esempio seguente, viene creata una regola di analisi di sovrapposizione degli elenchi in una vista denominata ExamView. ExamView fa riferimento a una tabella denominata 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 );

Aggiorna una regola di analisi della sovrapposizione degli elenchi per una vista

Puoi modificare la regola di analisi di sovrapposizione degli elenchi per una vista con una data clean room o con l'istruzione ALTER VIEW:

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

Per saperne di più sui valori che puoi impostare per la policy sulla privacy nella sintassi precedente, consulta Definisci una regola di analisi della sovrapposizione degli elenchi per una visualizzazione.

Esempio:

Nell'esempio seguente, una regola di analisi di sovrapposizione degli elenchi viene aggiornata su una vista denominata ExamView.

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

Per esaminare la sintassi privacy_policy per ALTER VIEW, consulta l'elenco OPTIONS in ALTER VIEW SET OPTIONS.

Esegui query su una vista applicata dalla regola di analisi della sovrapposizione degli elenchi

Puoi eseguire un'operazione di join su una vista con una regola di analisi della sovrapposizione degli elenchi. Per esaminare la sintassi dell'operazione JOIN, consulta Operazione Join.

Blocca un'operazione di join senza sovrapposizione

Puoi bloccare un'operazione di join se non include almeno una sovrapposizione con una colonna obbligatoria.

Esempio:

Nella query seguente, una vista denominata ExamView viene unita a una tabella denominata StudentTable. Poiché la vista contiene la regola di analisi della sovrapposizione degli elenchi JOIN_ANY, è necessaria almeno una riga sovrapposta di ExamView e StudentTable. Poiché esiste almeno una sovrapposizione, la query viene eseguita correttamente.

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

Blocca un'operazione di inner join senza sovrapposizione completa

Puoi bloccare un'operazione di join se non include una sovrapposizione con tutte le colonne obbligatorie.

Esempio:

Nell'esempio seguente, viene tentata un'operazione di join su una vista denominata ExamView e una tabella denominata StudentTable, ma la query non va a buon fine. L'errore si verifica perché la regola di analisi della sovrapposizione degli elenchi ExamView richiede l'unione di tutte le colonne presenti nella policy di limitazione dell'unione. Poiché la tabella denominata StudentTable non contiene queste colonne, non tutte le righe si sovrappongono e viene generato un errore.

-- 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);

Utilizza una policy di limitazione di partecipazione con un'altra policy

La policy di limitazione dei join può essere utilizzata con altre policy nelle regole di analisi della soglia di aggregazione e della privacy differenziale. Tuttavia, una volta utilizzata una policy di limitazione di partecipazione con un'altra policy, non puoi modificare quest'ultima in un secondo momento.

Esempio:

Nell'esempio seguente, viene utilizzata una policy di limitazione dei join in una regola di analisi della soglia di aggregazione:

-- 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 );

Blocca un'operazione di join senza una colonna obbligatoria

Puoi bloccare un'operazione di join se non include almeno una colonna obbligatoria. Per farlo, includi le seguenti parti nella regola di analisi della sovrapposizione degli elenchi:

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

Esempio:

Nella query seguente, la query viene bloccata con un errore perché non contiene operazioni di join sulla colonna test_score o test_id in ExamView e StudentTable:

-- 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);

Per eseguire la query precedente, nella clausola USING, sostituisci last_name con test_score.

Blocca una query senza operazione di join

Se la query deve avere un'operazione di join, puoi bloccarla se non è presente alcuna operazione di join utilizzando una delle seguenti regole di analisi della sovrapposizione degli elenchi:

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

Esempio:

Nella query seguente, la query è bloccata perché non esiste un'operazione di join con ExamView nella query:

-- 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;

Blocca una query senza operazione di join e senza colonna obbligatoria

Se la query deve avere un'operazione di join e l'operazione di join deve avere almeno una colonna obbligatoria, includi le seguenti parti nella regola di analisi della sovrapposizione degli elenchi:

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

Esempio:

Nella query seguente, la query è bloccata perché l'operazione di join non include una colonna nell'array ExamView join_allowed_columns:

-- 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);

Per eseguire la query precedente, nella clausola USING, sostituisci last_name con test_score.

Blocca tutte le operazioni di join

Puoi bloccare tutte le operazioni di join. Per farlo, includi solo le seguenti parti nella regola di analisi della sovrapposizione degli elenchi:

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

Esempio:

Nella query seguente, la query è bloccata perché è presente un'operazione di join con una vista denominata ExamView:

-- 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);

Per eseguire la query precedente, rimuovi l'operazione INNER JOIN.

Blocca un'operazione di inner join senza tutte le colonne obbligatorie

Puoi bloccare un'operazione di inner join se non include tutte le colonne obbligatorie. Per farlo, includi le seguenti parti nella regola di analisi della sovrapposizione degli elenchi:

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

Esempio:

Nella query seguente, la query viene bloccata con un errore perché non include test_score nell'operazione di join con la vista denominata ExamView:

-- 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);

Per eseguire la query precedente, sostituisci USING (last_name) con USING (last_name, test_score).

Tabelle di esempio

Diversi esempi in questo documento fanno riferimento a due tabelle denominate ExamTable e StudentTable. ExamTable contiene un elenco dei punteggi dei test ottenuti dagli studenti e StudentTable contiene un elenco degli studenti e dei relativi punteggi dei test.

Per testare gli esempi in questo documento, aggiungi innanzitutto le seguenti tabelle di esempio al tuo progetto:

-- 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);

Limitazioni

Le regole di analisi presentano le seguenti limitazioni:

  • Se hai già aggiunto una regola di analisi a una vista, non puoi passare dalle regole di analisi della soglia di aggregazione alle regole di analisi della privacy differenziale e viceversa.

Una regola di analisi della soglia di aggregazione presenta le seguenti limitazioni:

  • Puoi utilizzare solo funzioni di aggregazione supportate in una query su una vista applicata dalla regola di analisi della soglia di aggregazione.
  • Non puoi aggiungere una regola di analisi della soglia di aggregazione a una vista materializzata.
  • Se utilizzi una vista applicata dalla regola di analisi della soglia di aggregazione in una query sulla soglia di aggregazione, entrambe devono avere lo stesso valore per la colonna dell'unità di privacy.
  • Se utilizzi una vista applicata dalla regola di analisi della soglia di aggregazione in una query sulla soglia di aggregazione, la soglia nella query deve essere maggiore o uguale alla soglia nella vista.
  • La funzionalità Viaggio nel tempo è disattivata per tutte le viste con una regola di analisi della soglia di aggregazione.

Una regola di analisi della privacy differenziale presenta le seguenti limitazioni:

  • Una volta esaurito il budget di privacy di una vista, questa non può essere utilizzata e devi crearne una nuova.

Una regola di analisi della sovrapposizione degli elenchi presenta le seguenti limitazioni:

  • Se combini una regola di analisi della soglia di aggregazione o una regola di analisi della privacy differenziale con una regola di analisi della sovrapposizione degli elenchi e non inserisci privacy_unit_column come join_allowed_column nella regola di analisi della sovrapposizione degli elenchi, in determinate situazioni potresti non essere in grado di unire le colonne.

Prezzi

  • Non sono previsti costi aggiuntivi per collegare una regola di analisi a una visualizzazione.
  • Si applicano i prezzi di BigQuery standard per l'analisi.