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 políticas para compartir datos. Una política representa una condición que se debe cumplir antes de que se pueda ejecutar una consulta. Con BigQuery, puedes aplicar una regla de análisis a una vista, usando una sala limpia de datos o aplicar la regla de análisis directamente en la vista. Cuando aplicas una regla de análisis, fuerzas que todos los usuarios que consultan esa vista deban 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 del umbral de agregación: Fuerza la cantidad mínima de entidades distintas que deben estar presentes en un conjunto de datos. Puedes aplicar esta regla en una vista usando declaraciones DDL o los espacios de limpieza de datos. Esta regla admite la política de umbral de agregación y la política de restricción para unirse.

  • Regla de análisis de privacidad diferencial: Fuerza un presupuesto de privacidad, que limita los datos que se revelan a un suscriptor cuando estén protegidos con la privacidad diferencial. Puedes aplicar esta regla en una vista usando declaraciones DDL o los espacios de limpieza de datos. Esta regla admite la política de privacidad diferencial y la política de restricción de unión.

  • Regla de análisis de lista de superposición: Las filas superpuestas solo pueden consultarse después de una operación de unión, que se ajusta a la regla. Puedes aplicar esta regla en una vista, mediante declaraciones DDL o salas limpias de datos. Esta regla admite la política de restricción de uniones.

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 contribuir a una fila de salida de una consulta, de modo que la fila de salida se incluya en el resultado de la 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 incluya esta regla de análisis debe incluir la política del umbral de agregación y, de manera opcional, puede incluir la política 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 declaración 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;

Definiciones:

  • aggregation_threshold_policy: La política del umbral de agregación para la regla de análisis del umbral de agregación.

    • VIEW_NAME: Es la ruta de acceso y el nombre de la vista.

    • THRESHOLD: Es la cantidad mínima de unidades de privacidad distintas que deben contribuir en cada fila de los resultados de la consulta. Si una posible fila no cumple con este umbral, esa fila se omite del resultado de la consulta.

    • PRIVACY_UNIT_COLUMN: Representa la columna de la unidad de privacidad. Una columna de la unidad 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 la entidad en un conjunto de datos que se protege.

      Puedes usar solo una columna de unidad de privacidad y el tipo de datos para la columna unidad de privacidad debe ser agrupable.

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

  • join_restriction_policy (opcional): Política opcional de restricción para unirse para la regla de análisis del umbral de agregación.

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

      • JOIN_ALL: Todas las columnas de join_allowed_columns deben estar unidas internamente para que se pueda consultar esta vista.

      • JOIN_ANY: Al menos una columna en join_allowed_columns debe estar unida para que se pueda consultar esta vista.

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

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

    • JOIN_ALLOWED_COLUMNS: Son las columnas que pueden ser parte de una unión.

  • QUERY: Es la consulta para la vista.

Ejemplo:

En el siguiente ejemplo, se crea una regla de análisis de umbral de agregación en una vista llamada ExamView. ExamView hace referencia a una tabla llamada 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 );

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 declaración ALTER VIEW:

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

Para obtener más información sobre los valores que puedes establecer para las políticas de privacidad en la sintaxis anterior, consulta Define una regla de análisis de umbral de agregación para una vista.

Ejemplo:

En el siguiente ejemplo, se actualiza una regla de análisis de umbral de agregación en una vista llamada ExamView.

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 regla de análisis de umbral de agregación

Puedes consultar una vista que tenga 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 solo puedes usar funciones agregadas compatibles con el umbral de agregación en esta consulta.

Ejemplo:

En el siguiente ejemplo, se consulta una regla de análisis de umbral de agregación en una vista llamada 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             |
 *---------+---------------*/

De forma opcional, la regla de análisis de umbral de agregación también puede incluir la política de restricción de unión. Para aprender a usar una política de restricción de unión con una regla de análisis, consulta Política de restricción de unión en las reglas de análisis.

Para revisar ejemplos adicionales de la cláusula AGGREGATION_THRESHOLD, consulta 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 los datos están protegidos con privacidad diferencial. Un presupuesto de privacidad evita que cualquier suscriptor consulte datos compartidos cuando la suma de todas las consultas épsilon o delta alcanza el valor total de épsilon o delta total. Puedes usar esta regla de análisis en una vista.

Una vista que incluya esta regla de análisis debe incluir la política de privacidad diferencial y, de manera opcional, puede incluir la política 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 siguiente declaración 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;

Definiciones:

  • differential_privacy_policy: Es la política de privacidad diferencial de la regla de análisis diferencial de privacidad.

    • PRIVACY_UNIT_COLUMN: La columna que identifica la entidad en un conjunto de datos protegido mediante una regla de análisis de privacidad. Este valor es una string JSON.

    • MAX_EPSILON_PER_QUERY: Determina la cantidad de ruido agregado a los resultados por consulta y evita que una sola consulta alcance el épsilon total. Este valor es un número JSON de 0.001 a 1e+15.

    • EPSILON_BUDGET: El presupuesto épsilon que representa el total de épsilon que se puede usar en todos consultas privadas diferencialmente privadas 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 de que cualquier fila del resultado no tiene una privacidad diferencial de épsilon. Este valor es un número JSON de 1e-15 a 1.

    • DELTA_BUDGET: El presupuesto delta, que representa el delta total que puede usarse en todas consultas privadas diferencialmente privadas en la vista. Este valor debe ser superior a 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

  • join_restriction_policy (opcional): Política opcional de restricción para unirse para la regla de análisis diferencial de privacidad.

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

      • JOIN_ALL: Todas las columnas de join_allowed_columns deben estar unidas internamente para que se pueda consultar esta vista.

      • JOIN_ANY: Al menos una columna en join_allowed_columns debe estar unida para que se pueda consultar esta vista.

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

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

    • JOIN_ALLOWED_COLUMNS: Son las columnas que pueden ser parte de una unión.

  • QUERY: Es la consulta para la vista.

Ejemplo:

En el siguiente ejemplo, se crea una regla de análisis diferencial de privacidad en una vista llamada ExamView. ExamView hace referencia a una tabla llamada 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.

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

Cómo actualizar 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 declaración 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
    }
  }'
)

Si deseas obtener más información sobre los valores que puedes establecer para las políticas de privacidad en la sintaxis anterior, consulta Define una regla de análisis de privacidad diferencial para una vista.

Ejemplo:

En el siguiente ejemplo, se actualiza una regla de análisis de privacidad diferencial en una vista llamada 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.

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 privacidad diferencial

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

Ejemplo:

En el siguiente ejemplo, se consulta una regla de análisis diferencial de privacidad una vista llamada ExamView. Los datos privados diferenciales se deben mostrar con éxito desde ExamView porque epsilon, delta y max_groups_contributed satisfacen las condiciones de la regla de análisis diferencial en 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 |
 *---------+--------------------*/

Bloquea una consulta con una é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 un mínima cantidad de ruido, presta mucha atención al valor de max_epsilon_per_query en tu regla de análisis de privacidad diferencial.

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

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

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

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 quieres agregar un presupuesto de épsilon, revisa el valor de epsilon_budget en la regla de análisis de privacidad diferencial para tu vista.

Ejemplo:

Ejecuta la siguiente consulta tres veces. En la tercera vez, se bloquea la consulta porque el total de épsilon utilizado es 30, pero epsilon_budget en ExamView solo permite 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.

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

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

Regla de análisis de superposición de listas

Solo se pueden consultar las filas superpuestas después de una operación de unión, que se ajusta a la regla de superposición de listas. Puedes aplicar esta regla en una vista, mediante declaraciones DDL o salas limpias de datos.

Una vista que incluya esta regla de análisis solo debe incluir la política de restricción de unión.

Cómo definir una regla de análisis de superposición de listas para una vista

Puedes definir una regla de análisis de superposición de listas para una vista en una sala limpia de datos o con la declaración 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;

Definiciones:

  • join_restriction_policy: La política de restricción de uniones para la regla de análisis de superposición de listas.

    • JOIN_CONDITION: El tipo de superposición de listas que se aplicará de manera forzosa en una vista. Puede ser uno de los siguientes valores:

      • JOIN_ALL: Todas las columnas de join_allowed_columns deben estar unidas internamente para que se pueda consultar esta vista.

      • JOIN_ANY: Al menos una columna en join_allowed_columns debe estar unida para que se pueda consultar esta vista.

    • JOIN_ALLOWED_COLUMNS: Son las columnas que pueden ser parte de una unión.

  • QUERY: Es la consulta para la vista.

Ejemplo:

En el siguiente ejemplo, se crea una regla de análisis de superposición de lista en una vista llamada ExamView. ExamView hace referencia a una tabla llamada 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 );

Actualiza una regla de análisis de superposición de listas para una vista

Puedes cambiar la regla de análisis de superposición de listas para una vista con una sala limpia de datos o con la declaración ALTER VIEW:

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

Para obtener más información sobre los valores que puedes establecer para la política de privacidad en la sintaxis anterior, consulta Define una regla de análisis de superposición de lista para una vista.

Ejemplo:

En el siguiente ejemplo, se actualiza una regla de análisis de superposición de listas en una vista llamada ExamView.

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 la regla de análisis de superposición de listas

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

Bloquea una operación de unión sin superposición

Puedes bloquear una operación de unión si no incluye al menos una superposición con una columna obligatoria.

Ejemplo:

En la siguiente consulta, una vista llamada ExamView se une con una tabla llamada StudentTable. Debido a que la vista contiene la regla de análisis de superposición de lista JOIN_ANY, se requiere al menos una fila superpuesta de ExamView y StudentTable. Debido a que hay al menos una superposición, la consulta se ejecuta de forma correcta.

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

Bloquea una operación de unión interna sin una superposición completa

Puedes bloquear una operación de unión si no incluye una superposición con todas las columnas obligatorias.

Ejemplo:

En el siguiente ejemplo, se intenta realizar una operación join en una vista llamada ExamView y una tabla llamada StudentTable, pero la consulta falla. Se produce la falla porque la regla de análisis de superposición de listas ExamView requiere unirse a todas columnas presentes en la política de restricción de unión. Debido a que la tabla llamada StudentTable no contiene estas columnas, no todas las filas se superponen y se produce un error.

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

Usa una política de restricción para unirse con otra política

La política de restricción para unirse a la reunión se puede utilizar con otras políticas en el umbral de agregación y reglas de análisis diferencial de privacidad. Sin embargo, una vez usaste una política de restricción para unirse con otra política, no puedes esa otra política luego.

Ejemplo:

En el siguiente ejemplo, se usa una política de restricción de unión en una regla de análisis del umbral de agregación:

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

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

Puedes bloquear una operación de unión si no incluye al menos una columna obligatoria. Para hacerlo, incluye las siguientes partes en tu relga de análisis de su superposición de listas:

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

Ejemplo:

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

Para que se ejecute la consulta anterior, en la cláusula USING, reemplaza last_name con 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 mediante una de las siguientes reglas de análisis de superposición de listas:

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

Ejemplo:

En la siguiente consulta, se bloquea la consulta porque no hay operación de unión con ExamView en la consulta:

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

Bloquea una consulta sin una operación de unión ni una 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 la regla de análisis de superposición de listas:

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

Ejemplo:

Por ejemplo, en la siguiente consulta, la consulta se bloquea porque la operación de unión no incluye una columna en el 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);

Para que se ejecute la consulta anterior, en la cláusula USING, reemplaza last_name con 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 superposición de listas:

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

Ejemplo:

En la siguiente consulta, la consulta se bloquea porque hay una operación de unión con una vista llamada 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);

Para obtener la consulta anterior que se ejecutará, quita la operación INNER JOIN.

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

Puedes bloquear una operación de unión interna si no incluye columnas obligatorias. Para ello, incluye las siguientes partes en tu regla de análisis de superposición de listas:

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

Ejemplo:

En la siguiente consulta, la consulta se bloquea con un error debido a que la consulta no incluye test_score en la operación de unión con la vista llamada 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);

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

Tablas de ejemplo

En varios ejemplos de este documento, se hacen referencia a dos tablas llamadas ExamTable y StudentTable. ExamTable contiene una lista de calificaciones de exámenes producidas por estudiantes y StudentTable incluye una lista de estudiantes y sus calificaciones.

Para probar los ejemplos de este documento, primero agrega las siguientes tablas de muestra a tu proyecto:

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

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 de privacidad diferencial.

Una regla de análisis de umbral de agregación tiene las siguientes limitaciones:

  • Solo puedes usar las funciones de agregación compatibles en una consulta en una vista aplicada mediante 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 la 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 unidades de privacidad.
  • Si usas una vista aplicada de la 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 umbral de agregación.

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

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

Una regla de análisis de superposición de listas tiene las siguientes limitaciones:

  • Si combinas una regla de análisis de umbral de agregación o una regla de análisis de privacidad diferencial con una regla de análisis de superposición de listas y no colocas el privacy_unit_column como join_allowed_column en la superposición de la lista regla de análisis, es posible que no puedas unir ninguna columna en ciertas situaciones.

Precios