Restringe el acceso a los datos con reglas de análisis

En este documento se proporciona información general sobre las reglas de análisis en GoogleSQL para BigQuery.

¿Qué es una regla de análisis?

Una regla de análisis aplica una condición para compartir datos. Con BigQuery, puedes aplicar una regla de análisis en una vista mediante una sala limpia de datos o si aplicas la regla de análisis directamente a la vista. Cuando se aplica una regla de análisis, aplicas que todos los usuarios que consultan esa vista deben cumplir con esa regla de análisis en la vista. Si se cumple la regla de análisis, la consulta produce un resultado que cumple con la regla de análisis. Se producirá un error si la consulta no cumple con la regla de análisis.

Reglas de análisis compatibles

Se admiten las siguientes reglas de análisis:

  • Regla de análisis de umbral de agregación: Aplica la cantidad mínima de entidades distintas que deben estar presentes en un conjunto de datos. Puedes aplicar esta regla en una vista mediante declaraciones o salas limpias de datos.
  • Regla de análisis de privacidad diferencial: Aplica un presupuesto de privacidad que limita los datos que se revelan a un suscriptor cuando estos se protegen con la privacidad diferencial. Puedes aplicar esta regla en una vista mediante declaraciones o salas limpias de datos.
  • Regla de análisis de restricciones de unión: Limita los tipos de uniones que se pueden usar con columnas específicas. No es necesario que las uniones estén presentes en las consultas, y se pueden bloquear ciertas columnas. Se puede incluir en una regla de análisis de umbral de agregación o una regla de análisis de privacidad diferencial. Puedes aplicar esta regla en una vista mediante declaraciones o salas limpias de datos.
  • Regla de análisis de superposición de listas: Es similar a la regla de análisis de restricción de unión, pero no se puede usar con otras reglas de análisis. Puedes aplicar esta regla en una vista mediante salas limpias de datos.

Regla de análisis de umbral de agregación

Una regla de análisis de umbral de agregación aplica la cantidad mínima de entidades distintas que deben estar presentes en un conjunto de datos, para que las estadísticas de ese conjunto de datos se incluyan en los resultados de una consulta.

Cuando se aplica de manera forzosa, la regla de análisis de umbral de agregación agrupa datos en dimensiones y, al mismo tiempo, garantiza que se cumpla el umbral de agregación. Cuenta la cantidad de unidades de privacidad distintas (representadas por la columna de unidades de privacidad) de cada grupo y solo genera los grupos en los que el recuento de unidades de privacidad distinto cumple con el umbral de agregación.

Una vista que incluye esta regla de análisis también puede incluir la regla de análisis de restricción de unión.

Define una regla de análisis de umbral de agregación para una vista

Puedes definir una regla de análisis de umbral de agregación para una vista en una sala limpia de datos o con la siguiente declaración:

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

Reemplaza los siguientes valores:

  • VIEW_NAME: La ruta de acceso y el nombre de la vista.
  • THRESHOLD: La cantidad mínima de unidades de privacidad distintas que deben contribuir a cada fila en los resultados de la consulta. Si una posible fila no satisface este umbral, esa fila se omite de los resultados de la consulta.
  • PRIVACY_UNIT_COLUMN: Representa la columna de unidades de privacidad. Una columna de unidades de privacidad es un identificador único para una unidad de privacidad. Una unidad de privacidad es un valor de la columna de unidades de privacidad que representa a la entidad en un conjunto de datos que se protege.

    Solo puedes usar una columna de unidades de privacidad y el tipo de datos para la columna de unidades de privacidad debe ser agrupable.

    Los valores en la columna de unidades de privacidad no se pueden proyectar directamente a través de una consulta y solo puedes usar funciones de agregación compatibles con reglas de análisis para agregar los datos en esta columna.

  • QUERY: La consulta de la vista.

En el siguiente ejemplo, se crea una regla de análisis de umbral de agregación:

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

Para revisar la sintaxis privacy_policy de CREATE VIEW, consulta la lista OPTIONS en CREATE VIEW.

Actualiza una regla de análisis de umbral de agregación para una vista

Puedes cambiar la regla de análisis de umbral de agregación para una vista en una sala limpia de datos o con la siguiente declaración:

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

Reemplaza los siguientes valores:

  • VIEW_NAME: La ruta de acceso y el nombre de la vista.
  • THRESHOLD: La cantidad mínima de unidades de privacidad distintas que deben contribuir a cada fila en los resultados de la consulta. Si una posible fila no satisface este umbral, esa fila se omite de los resultados de la consulta.
  • PRIVACY_UNIT_COLUMN: Representa la columna de unidades de privacidad. Una columna de unidades de privacidad es un identificador único para una unidad de privacidad. Una unidad de privacidad es un valor de la columna de unidades de privacidad que representa a la entidad en un conjunto de datos que se protege.

    Solo puedes usar una columna de unidades de privacidad y el tipo de datos para la columna de unidades de privacidad debe ser agrupable.

    Los valores en la columna de unidades de privacidad no se pueden proyectar directamente a través de una consulta y solo puedes usar funciones de agregación compatibles con reglas de análisis para agregar los datos en esta columna.

En el siguiente ejemplo, se actualiza una regla de análisis de umbral de agregación:

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

Para revisar la sintaxis privacy_policy de ALTER VIEW, consulta la lista OPTIONS en ALTER VIEW SET OPTIONS.

Consulta una vista aplicada de la regla de análisis de umbral de agregación

Puedes consultar una vista que tiene una regla de análisis de umbral de agregación con la cláusula AGGREGATION_THRESHOLD. La consulta debe incluir funciones de agregación y, en esta consulta, solo puedes usar funciones de agregación compatibles con reglas de análisis.

En el siguiente ejemplo, se consulta una vista con una regla de análisis de umbral de agregación:

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

Para revisar los ejemplos adicionales de la cláusula AGGREGATION_THRESHOLD, consulta la cláusula AGGREGATION_THRESHOLD.

Regla de análisis de privacidad diferencial

La regla de análisis de privacidad diferencial aplica un presupuesto de privacidad, que limita los datos que se revelan a un suscriptor cuando estos se protegen con la privacidad diferencial. Un presupuesto de privacidad evita que cualquier suscriptor consulte datos compartidos cuando la suma de épsilon o delta de todas las consultas alcanza el valor total de épsilon o delta total. Puedes usar esta regla de análisis en una vista. Una vista que incluye esta regla de análisis también puede incluir la regla de análisis de restricción de unión.

Define una regla de análisis de privacidad diferencial para una vista

Puedes definir una regla de análisis de privacidad diferencial para una vista en una sala limpia de datos o con la siguiente declaración:

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;

Reemplaza los siguientes valores:

  • PRIVACY_UNIT_COLUMN: Es la columna que identifica la entidad en un conjunto de datos protegido con una regla de análisis de privacidad. Este valor es una string JSON.
  • MAX_EPSILON_PER_QUERY: Determina la solidez de la garantía de privacidad por consulta y evita que una sola consulta alcance el total de épsilon. Este valor es un número JSON de 0.001 a 1e+15.
  • EPSILON_BUDGET: El presupuesto de épsilon que representa la fortaleza de una garantía de privacidad general. Se usa en su totalidad para todas las consultas privadas diferenciales en la vista. Este valor debe ser mayor que MAX_EPSILON_PER_QUERY y es un número JSON de 0.001 a 1e+15.
  • DELTA_PER_QUERY: La probabilidad máxima de pérdida de privacidad por consulta más allá de la garantía determinada por épsilon total. Evita que una sola consulta alcance el delta total. Este valor es un número JSON de 1e-15 a 1.
  • DELTA_BUDGET: El presupuesto delta, que representa la probabilidad máxima de pérdida de privacidad general más allá de la garantía determinada por épsilon total. Se usa en su totalidad para todas las consultas privadas diferenciales en la vista. Este valor debe ser mayor que DELTA_PER_QUERY y es un número JSON de 1e-15 a 1000.
  • MAX_GROUPS_CONTRIBUTED: Opcional Limita la cantidad de grupos a los que puede contribuir una entidad de una columna de unidades de privacidad. Este valor debe ser un número entero no negativo de JSON
  • QUERY: La consulta de la vista.

En el siguiente ejemplo, se crea una regla de análisis de privacidad diferencial:

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

Para revisar la sintaxis privacy_policy de CREATE VIEW, consulta la lista OPTIONS en CREATE VIEW.

Actualiza una regla de análisis de privacidad diferencial para una vista

Puedes cambiar la regla de análisis de privacidad diferencial de una vista en una sala limpia de datos o con la siguiente declaración:

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

Reemplaza los siguientes valores:

  • PRIVACY_UNIT_COLUMN: Es la columna que identifica la entidad en un conjunto de datos protegido con una regla de análisis de privacidad. Este valor es una string JSON.
  • MAX_EPSILON_PER_QUERY: Determina la solidez de la garantía de privacidad por consulta y evita que una sola consulta alcance el total de épsilon. Este valor es un número JSON de 0.001 a 1e+15.
  • EPSILON_BUDGET: El presupuesto de épsilon que representa la fortaleza de una garantía de privacidad general. Se usa en su totalidad para todas las consultas privadas diferenciales en la vista. Este valor debe ser mayor que MAX_EPSILON_PER_QUERY y es un número JSON de 0.001 a 1e+15.
  • DELTA_PER_QUERY: La probabilidad máxima de pérdida de privacidad por consulta más allá de la garantía determinada por épsilon total. Evita que una sola consulta alcance el delta total. Este valor es un número JSON de 1e-15 a 1.
  • DELTA_BUDGET: El presupuesto delta, que representa la probabilidad máxima de pérdida de privacidad general más allá de la garantía determinada por épsilon total. Se usa en su totalidad para todas las consultas privadas diferenciales en la vista. Este valor debe ser mayor que DELTA_PER_QUERY y es un número JSON de 1e-15 a 1000.
  • MAX_GROUPS_CONTRIBUTED: Opcional Limita la cantidad de grupos a los que puede contribuir una entidad de una columna de unidades de privacidad. Este valor debe ser un número entero no negativo de JSON

En el siguiente ejemplo, se actualiza una regla de análisis de privacidad diferencial:

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.

Para revisar la sintaxis privacy_policy de ALTER VIEW, consulta la lista OPTIONS en ALTER VIEW SET OPTIONS.

Consulta una vista aplicada de manera forzosa de reglas de análisis de privacidad diferencial

Puedes consultar una vista que tiene una regla de análisis de privacidad diferencial con la cláusula DIFFERENTIAL_PRIVACY. Para revisar la sintaxis y los ejemplos adicionales de la cláusula DIFFERENTIAL_PRIVACY, consulta la cláusula DIFFERENTIAL_PRIVACY.

Asegúrate de que se ejecute la consulta privada diferencial

Crea una consulta privada diferencial para la vista aplicada de la regla de análisis y asegúrate de que la consulta se ejecute.

Por ejemplo, en la siguiente consulta, los datos privados diferenciales se muestran con éxito deExamView porqueepsilon ,delta y max_groups_contributed todas satisfacen las condiciones de la regla de análisis diferencial enExamView:

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

Después de crear la vista, espera brevemente y, cuando estés seguro de que se creó la vista, ejecuta la siguiente consulta:

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

Bloquea una consulta con un épsilon fuera de los límites

Épsilon se puede usar para agregar o quitar ruido. Más épsilon significa que se agregará menos ruido. Si quieres asegurarte de que una consulta privada diferencial tenga una cantidad mínima de ruido, presta mucha atención al valor de max_epsilon_per_query en la regla de análisis de privacidad diferencial.

Por ejemplo, en la siguiente consulta, la consulta se bloquea con un error porque epsilon en la cláusula DIFFERENTIAL_PRIVACY es mayor que max_epsilon_per_query en 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 );

Después de crear la vista, espera brevemente y, luego, ejecuta la siguiente consulta:

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

Bloquea una consulta que no tiene una cantidad específica de delta

Delta representa el umbral que determina si los datos se pueden filtrar por accidente. Menos aumento delta del umbral, más delta disminuye el umbral. Para asegurarte de que una consulta privada diferencial tenga un umbral específico, actualiza la configuración delta_per_query en la regla de análisis de privacidad diferencial.

Por ejemplo, en la siguiente consulta, la consulta se bloquea con un error porque delta en la cláusula DIFFERENTIAL_PRIVACY no coincide con delta_per_query en 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 );

Después de crear la vista, espera brevemente y, luego, ejecuta la siguiente consulta:

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

Bloquea búsquedas que hayan superado un presupuesto de épsilon

Épsilon se puede usar para agregar o quitar ruido. Menos épsilon aumenta el ruido, más épsilon reduce el ruido. Incluso cuando el ruido es alto, varias consultas sobre los mismos datos pueden revelar la versión sin ruido de los datos. Para evitar que esto suceda, puedes crear un presupuesto de épsilon. Si deseas agregar un presupuesto de épsilon, revisa el valor de epsilon_budget en la regla de análisis de privacidad diferencial de tu vista.

Ejecuta la siguiente consulta tres veces. En la tercera vez, la consulta se bloquea porque el total de épsilon usado es 30, pero epsilon_budget en ExamView solo permite 25.6:

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

Después de crear la vista, espera brevemente y, luego, ejecuta la siguiente consulta tres veces:

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

Bloquea consultas que hayan excedido un presupuesto delta

Delta representa el umbral que determina si los datos se pueden filtrar por accidente. Menos aumento delta del umbral, más delta disminuye el umbral. Incluso cuando el umbral es alto, varias consultas sobre los mismos datos pueden revelar los datos privados diferenciales. Para evitar que esto suceda, puedes crear un presupuesto delta. Si deseas agregar un presupuesto delta, revisa el valor de delta_budget en la regla de análisis de privacidad diferencial de tu vista.

Ejecuta la siguiente consulta siete veces. La séptima vez, la consulta se bloquea porque el delta total usado es 0.7, pero delta_budget en ExamView solo permite 0.6:

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

Después de crear la vista, espera brevemente y, luego, ejecuta la siguiente consulta siete veces:

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

Cómo bloquear una consulta que permite demasiadas contribuciones de grupo

Puedes limitar la cantidad de grupos a los que puede contribuir cada entidad en una consulta privada diferencial. Si quieres asegurarte de que una consulta privada diferencial tenga una cantidad limitada de grupos a los que cada entidad pueda contribuir, presta mucha atención al valor de max_groups_contributed en tu regla de análisis de privacidad diferencial.

Por ejemplo, en la siguiente consulta, la consulta se bloquea con un error porque max_groups_contributed en la cláusula DIFFERENTIAL_PRIVACY es mayor que max_groups_contributed en 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 );

Después de crear la vista, espera brevemente y, luego, ejecuta la siguiente consulta:

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

Regla de análisis de restricción de unión

Una regla de análisis de restricciones de unión limita los tipos de uniones que se pueden usar con columnas específicas en una vista. Puedes usar esta regla de análisis en una vista. Una vista que incluye esta regla de análisis también puede incluir la regla de análisis del umbral de agregación o la regla de análisis de privacidad diferencial.

Define una regla de análisis de restricciones de unión para una vista

Puedes definir una regla de análisis de restricciones de unión para una vista en una sala limpia de datos o con la siguiente declaración.

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

Reemplaza los siguientes valores:

  • JOIN_CONDITION: El tipo de restricción de unión que se aplicará en una vista. Puede ser uno de los siguientes valores:

    • JOIN_NOT_REQUIRED: No se necesita una unión para consultar esta vista. Si se usa una unión, solo se pueden usar las columnas en join_allowed_columns.

    • JOIN_BLOCKED: Esta vista no se puede unir en ninguna columna. No configures join_allowed_columns en este caso.

    • JOIN_ANY: Se debe unir al menos una columna en join_allowed_columns para que se consulte esta vista.

    • JOIN_ALL: Todas las columnas en join_allowed_columns deben estar unidas de forma interna para que se consulte esta vista.

  • JOIN_ALLOWED_COLUMNS: Las columnas que pueden ser parte de una operación de unión.

  • QUERY: La consulta de la vista.

En el siguiente ejemplo, se crea una regla de análisis de restricciones de unión:

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

Usa una regla de análisis de restricciones de unión con otra regla de análisis

Puedes usar una regla de análisis de restricciones de unión con una regla de análisis de umbral de agregación o una regla de análisis de privacidad diferencial. Sin embargo, una vez que usaste una restricción de unión con otra regla de análisis en una vista, no podrás cambiar esa otra regla de análisis.

En el siguiente ejemplo, se usan juntas una regla de análisis de restricciones de unión y una regla de análisis de umbral de agregación:

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

Actualiza una regla de análisis de restricciones de unión para una vista

Puedes cambiar la regla de análisis de restricciones de unión de una vista con una sala limpia de datos o con la siguiente declaración:

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

Reemplaza los siguientes valores:

  • JOIN_CONDITION: El tipo de restricción de unión que se aplicará en una vista. Puede ser uno de los siguientes valores:

    • JOIN_NOT_REQUIRED: No se necesita una unión para consultar esta vista. Si se usa una unión, solo se pueden usar las columnas en join_allowed_columns.

    • JOIN_BLOCKED: Esta vista no se puede unir en ninguna columna. No configures join_allowed_columns en este caso.

    • JOIN_ANY: Se debe unir al menos una columna en join_allowed_columns para que se consulte esta vista.

    • JOIN_ALL: Todas las columnas en join_allowed_columns deben estar unidas de forma interna para que se consulte esta vista.

  • JOIN_ALLOWED_COLUMNS: Las columnas que pueden ser parte de una operación de unión.

  • QUERY: La consulta de la vista.

En el siguiente ejemplo, se actualiza una regla de análisis de restricciones de unión:

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

Para revisar la sintaxis privacy_policy de ALTER VIEW, consulta la lista OPTIONS en ALTER VIEW SET OPTIONS.

Consulta una vista aplicada de una regla de análisis de restricciones de unión

Puedes realizar una operación de unión en una vista que tenga una regla de análisis de restricciones de unión. Para revisar la sintaxis de la operación JOIN, consulta Operación de unión.

Asegúrate de que se ejecute la consulta restrictiva de unión

Debes probar para asegurarte de que se ejecute tu consulta restrictiva de unión.

Por ejemplo, en la siguiente consulta, los datos unidos se muestran de forma correcta de ExamView y StudentTable:

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

Bloquea una operación de unión sin una columna obligatoria

Puedes bloquear una operación de unión si no incluye al menos una columna obligatoria. Para ello, incluye las siguientes partes en tu regla de análisis de restricción de unión:

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

Por ejemplo, en la siguiente consulta, la consulta se bloquea con un error debido a que la consulta no contiene ninguna operación de unión en la columna test_score o test_id en ExamView yStudentTable:

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

Para que se ejecute la consulta anterior, en la cláusula USING, reemplaza last_name por test_score.

Bloquea una consulta sin operación de unión

Si la consulta debe tener una operación de unión, puedes bloquearla si no hay ninguna operación de unión presente mediante una de las siguientes reglas de análisis de restricciones de unión:

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

Por ejemplo, en la siguiente consulta, la consulta está bloqueada porque no hay una operación de unión en la consulta:

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

Bloquea una consulta sin operación de unión y sin columna obligatoria

Si la consulta debe tener una operación de unión y esta debe tener al menos una columna obligatoria, incluye las siguientes partes en tu regla de análisis de restricción de unión:

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

Por ejemplo, en la siguiente consulta, la consulta se bloquea porque la operación de unión no incluye una columna en el array join_allowed_columns:

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

Para que se ejecute la consulta anterior, en la cláusula USING, reemplaza last_name por test_score.

Bloquea todas las operaciones de unión

Puedes bloquear todas las operaciones de unión. Para ello, solo incluye las siguientes partes en tu regla de análisis de restricción de unión:

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

Por ejemplo, en la siguiente consulta, la consulta está bloqueada porque hay una operación de unión:

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

Para que se ejecute la consulta anterior, quita la operación INNER JOIN.

Bloquea una operación de unión interna sin todas las columnas obligatorias

Puedes bloquear una operación de unión interna si no incluye toda la columna obligatoria. Para ello, incluye las siguientes partes en tu regla de análisis de restricción de unión:

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

Por ejemplo, en la siguiente consulta, la consulta se bloquea con un error porque la consulta no incluye test_score en la operación de unión:

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

Para que se ejecute la consulta anterior, reemplaza USING (last_name) por USING (last_name, test_score).

Enumera reglas de análisis de superposición

Limita los tipos de uniones que se pueden usar con columnas específicas. Las uniones deben estar presentes en las consultas y ciertas columnas no se pueden bloquear. Puedes definir y actualizar una regla de análisis de superposición de listas para una vista en una sala limpia de datos. Para obtener más información, consulta Comparte datos sensibles con salas limpias de datos.

Limitaciones

Las reglas de análisis tienen las siguientes limitaciones:

  • Si ya agregaste una regla de análisis a una vista, no puedes cambiar entre las reglas de análisis de umbral de agregación y las reglas de análisis diferencial.

Una regla de análisis de límite de agregación tiene las siguientes limitaciones:

  • Solo puedes usar funciones agregadas compatibles en una consulta en una vista aplicada de manera forzosa de reglas de análisis de umbral de agregación.
  • No puedes agregar una regla de análisis de umbral de agregación a una vista materializada.
  • Si usas una vista aplicada de manera forzosa en una regla de análisis de umbral de agregación en una consulta de umbral de agregación, ambas deben tener el mismo valor para la columna de la unidad de privacidad.
  • Si usas una vista aplicada de manera forzosa en una regla de análisis de umbral de agregación en una consulta de umbral de agregación, el umbral en la consulta debe ser mayor o igual que el umbral en la vista.
  • El viaje en el tiempo está inhabilitado en cualquier vista que tenga una regla de análisis de límite de agregación.

Una regla de análisis de privacidad diferencial tiene las siguientes limitaciones:

  • Una vez que se agota el presupuesto de privacidad de una vista, no se puede usar y debes crear una vista nueva.

Una regla de análisis de restricciones de unión tiene las siguientes limitaciones:

  • Si no colocas privacy_unit_column como join_allowed_column en una regla de análisis de restricción de unión, es posible que no puedas unir ninguna columna en ciertas situaciones.

Precios