Restringir el acceso a los datos mediante 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 para poder ejecutar una consulta. Con BigQuery, puedes aplicar una regla de análisis a una vista mediante una sala limpia de datos o aplicando la regla de análisis directamente a la vista. Cuando aplicas una regla de análisis, obligas a todos los usuarios que consulten esa vista a cumplirla. Si se cumple la regla de análisis, la consulta genera una salida que cumple la regla de análisis. Si la consulta no cumple la regla de análisis, se produce un error.

Reglas de análisis admitidas

Se admiten las siguientes reglas de análisis:

  • Regla de análisis de umbral de agregación: aplica el número mínimo de entidades distintas que debe haber en un conjunto de datos. Puedes aplicar esta regla en una vista mediante instrucciones DDL o salas limpias de datos. Esta regla admite la política de umbral de agregación y la política de restricción de combinaciones.

  • 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. Puedes aplicar esta regla en una vista mediante instrucciones DDL o salas limpias 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 superposición de listas: las filas superpuestas solo se pueden consultar después de una operación de unión, lo que cumple la regla. Puedes aplicar esta regla a una vista mediante instrucciones DDL o salas blancas 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 el número mínimo de entidades distintas que deben contribuir a una fila de salida de una consulta para que se incluya en el resultado de la consulta.

Cuando se aplica, la regla de análisis de umbral de agregación agrupa los datos de las dimensiones y, al mismo tiempo, se asegura de que se cumpla el umbral de agregación. Cuenta el número de unidades de privacidad distintas (representadas por la columna de unidad de privacidad) de cada grupo y solo muestra los grupos en los que el recuento de unidades de privacidad distintas cumple el umbral de agregación.

Una vista que incluya esta regla de análisis debe incluir la política de umbral de agregación y, opcionalmente, la política de restricción de combinación.

Definir una regla de análisis de umbrales de agregación en una vista

Puedes definir una regla de análisis de umbral de agregación para una vista en una sala blanca de datos o con la instrucció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: política de umbral de agregación de la regla de análisis de umbral de agregación.

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

    • THRESHOLD: número mínimo de unidades de privacidad distintas que deben contribuir a cada fila de los resultados de la consulta. Si una fila potencial no cumple este umbral, se omite de los resultados de la consulta.

    • PRIVACY_UNIT_COLUMN: representa la columna de la unidad de privacidad. Una columna de unidad de privacidad es un identificador único de una unidad de privacidad. Una unidad de privacidad es un valor de la columna de unidad de privacidad que representa la entidad de un conjunto de datos que se está protegiendo.

      Solo puedes usar una columna de unidad de privacidad y el tipo de datos de esa columna debe ser agrupable.

      Los valores de la columna de unidad de privacidad no se pueden proyectar directamente mediante una consulta. Solo puedes usar funciones de agregación compatibles con reglas de análisis para agregar los datos de esta columna.

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

    • JOIN_CONDITION: el tipo de restricción de unión que se va a aplicar a una vista. Puede tener uno de los siguientes valores:

      • JOIN_ALL: todas las columnas de join_allowed_columns deben unirse mediante una unión interna para poder consultar esta vista.

      • JOIN_ANY: al menos una columna de join_allowed_columns debe unirse para poder consultar esta vista.

      • JOIN_BLOCKED: esta vista no se puede combinar por ninguna columna. En este caso, no incluyas join_allowed_columns.

      • JOIN_NOT_REQUIRED: no es necesario usar una combinación para consultar esta vista. Si se usa una combinación, solo se pueden usar las columnas de join_allowed_columns.

    • JOIN_ALLOWED_COLUMNS: las columnas que pueden formar parte de una operación de unión.

  • QUERY: la consulta de la vista.

Ejemplo:

En el ejemplo siguiente, 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 consultar la sintaxis de privacy_policy para CREATE VIEW, consulta la lista de OPTIONS en CREATE VIEW.

Actualizar una regla de análisis de umbral de agregación de una vista

Puede cambiar la regla de análisis de umbral de agregación de una vista en una sala blanca de datos o con la instrucció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 puede definir para las políticas de privacidad en la sintaxis anterior, consulte Definir una regla de análisis de umbral de agregación para una vista.

Ejemplo:

En el ejemplo siguiente, 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 consultar la sintaxis de privacy_policy para ALTER VIEW, consulta la OPTIONS lista en ALTER VIEW SET OPTIONS.

Consultar una vista de una regla de análisis de umbrales de agregación

Puede 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 puede usar funciones de agregación compatibles con umbrales de agregación en esta consulta.

Ejemplo:

En el ejemplo siguiente, 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             |
 *---------+---------------*/

La regla de análisis de umbral de agregación también puede incluir opcionalmente la política de restricción de combinaciones. Para saber cómo usar la política de restricción de unión con una regla de análisis, consulta Política de restricción de unión en reglas de análisis.

Para ver más ejemplos de la cláusula AGGREGATION_THRESHOLD, consulta la sección 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 impide que cualquier suscriptor consulte datos compartidos cuando la suma del épsilon o el delta de todas las consultas alcance el valor total del épsilon o del delta. Puede 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, opcionalmente, la política de restricción de combinaciones.

Definir 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 blanca de datos o con la instrucció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: política de privacidad diferencial de la regla de análisis de privacidad diferencial.

    • PRIVACY_UNIT_COLUMN: la columna que identifica la entidad de un conjunto de datos que está protegida mediante una regla de análisis de privacidad. Este valor es una cadena JSON.

    • MAX_EPSILON_PER_QUERY: determina la cantidad de ruido que se añade a los resultados por consulta e impide que una sola consulta alcance el épsilon total. Este valor es un número JSON que va de 0.001 a 1e+15.

    • EPSILON_BUDGET: el presupuesto de épsilon que representa el épsilon total que se puede usar en todas las consultas con privacidad diferencial de la vista. Este valor debe ser superior a MAX_EPSILON_PER_QUERY y es un número JSON comprendido entre 0.001 y 1e+15.

    • DELTA_PER_QUERY: probabilidad de que alguna fila del resultado no sea ε-diferencialmente privada. Este valor es un número JSON entre 1e-15 y 1.

    • DELTA_BUDGET: el presupuesto delta, que representa el delta total que se puede usar en todas las consultas con privacidad diferencial de la vista. Este valor debe ser superior a DELTA_PER_QUERY y es un número JSON comprendido entre 1e-15 y 1000.

    • MAX_GROUPS_CONTRIBUTED (opcional): limita el número de grupos a los que puede contribuir una entidad de una columna de unidad de privacidad. Este valor debe ser un número entero JSON no negativo.

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

    • JOIN_CONDITION: el tipo de restricción de unión que se va a aplicar a una vista. Puede tener uno de los siguientes valores:

      • JOIN_ALL: todas las columnas de join_allowed_columns deben unirse mediante una unión interna para poder consultar esta vista.

      • JOIN_ANY: al menos una columna de join_allowed_columns debe unirse para poder consultar esta vista.

      • JOIN_BLOCKED: esta vista no se puede combinar por ninguna columna. En este caso, no incluyas join_allowed_columns.

      • JOIN_NOT_REQUIRED: no es necesario usar una combinación para consultar esta vista. Si se usa una combinación, solo se pueden usar las columnas de join_allowed_columns.

    • JOIN_ALLOWED_COLUMNS: las columnas que pueden formar parte de una operación de unión.

  • QUERY: la consulta de la vista.

Ejemplo:

En el ejemplo siguiente, se crea una regla de análisis de privacidad diferencial 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 consultar la sintaxis de privacy_policy para CREATE VIEW, consulta la lista de OPTIONS en CREATE VIEW.

Actualizar una regla de análisis de privacidad diferencial de una vista

Puede cambiar la regla de análisis de privacidad diferencial de una vista en una sala blanca de datos o con la instrucció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
    }
  }'''
)

Para obtener más información sobre los valores que puede definir para las políticas de privacidad en la sintaxis anterior, consulte Definir 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 consultar la sintaxis de privacy_policy para ALTER VIEW, consulta la OPTIONS lista en ALTER VIEW SET OPTIONS.

Consultar una vista protegida por una regla de análisis de privacidad diferencial

Puede consultar una vista que tenga una regla de análisis de privacidad diferencial con la cláusula DIFFERENTIAL_PRIVACY. Para consultar la sintaxis y otros ejemplos de la cláusula DIFFERENTIAL_PRIVACY, consulta la sección Cláusula DIFFERENTIAL_PRIVACY.

Ejemplo:

En el ejemplo siguiente, se consulta una regla de análisis de privacidad diferencial en una vista llamada ExamView. Los datos con privacidad diferencial se deberían devolver correctamente desde ExamView porque epsilon, delta y max_groups_contributed cumplen las condiciones de la regla de análisis diferencial de 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 |
 *---------+--------------------*/

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

Epsilon se puede usar para añadir o quitar ruido. Cuanto mayor sea el valor de épsilon, menos ruido se añadirá. Si quieres asegurarte de que una consulta con privacidad diferencial tenga una cantidad mínima 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, se bloquea la consulta con un error porque epsilon en la cláusula DIFFERENTIAL_PRIVACY es superior a 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.

Una vez que hayas creado la vista, espera un momento y, a continuación, 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;

Bloquear las consultas que hayan superado un presupuesto de épsilon

Epsilon se puede usar para añadir o quitar ruido. Cuanto menor sea el valor de épsilon, más ruido habrá. Cuanto mayor sea el valor de épsilon, menos ruido habrá. 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 ocurra, puedes crear un presupuesto de épsilon. Si quiere añadir un presupuesto de épsilon, consulte el valor de epsilon_budget en la regla de análisis de privacidad diferencial de su vista.

Ejemplo:

Ejecuta la siguiente consulta tres veces. La tercera vez, la consulta se bloquea porque el épsilon total usado 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.

Una vez que hayas creado la vista, espera un momento y, a continuación, 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, lo que se ajusta a la regla de superposición de listas. Puedes aplicar esta regla en una vista mediante instrucciones DDL o salas blancas de datos.

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

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

Puede definir una regla de análisis de superposición de listas para una vista en una sala blanca de datos o con la instrucció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: política de restricción de unión de la regla de análisis de superposición de listas.

    • JOIN_CONDITION: el tipo de superposición de listas que se va a aplicar en una vista. Puede tener uno de los siguientes valores:

      • JOIN_ALL: todas las columnas de join_allowed_columns deben unirse mediante una unión interna para poder consultar esta vista.

      • JOIN_ANY: al menos una columna de join_allowed_columns debe unirse para poder consultar esta vista.

    • JOIN_ALLOWED_COLUMNS: las columnas que pueden formar parte de una operación de unión.

  • QUERY: la consulta de la vista.

Ejemplo:

En el siguiente ejemplo, se crea una regla de análisis de solapamiento de listas 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 );

Actualizar una regla de análisis de superposición de listas de una vista

Puede cambiar la regla de análisis de superposición de listas de una vista con una sala blanca de datos o con la instrucció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 puede definir para la política de privacidad en la sintaxis anterior, consulte Definir una regla de análisis de superposición de listas para una vista.

Ejemplo:

En el ejemplo siguiente, 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 consultar la sintaxis de privacy_policy para ALTER VIEW, consulta la OPTIONS lista en ALTER VIEW SET OPTIONS.

Consultar una vista de una regla de análisis de superposición de listas

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

Bloquear 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, se combina una vista llamada ExamView con una tabla llamada StudentTable. Como la vista contiene la regla de análisis de superposición de la lista JOIN_ANY, se necesita al menos una fila superpuesta de ExamView y StudentTable. Como hay al menos una superposición, la consulta se ejecuta correctamente.

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

Bloquear una operación de unión interna sin 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 ejemplo siguiente, se intenta realizar una operación de unión en una vista llamada ExamView y una tabla llamada StudentTable, pero la consulta falla. El error se produce porque la regla de análisis de superposición de la lista ExamView requiere que se unan todas las columnas presentes en la política de restricción de unión. Como 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);

Usar una política de restricción de unión con otra política

La política de restricción de unión se puede usar con otras políticas en las reglas de análisis de umbral de agregación y privacidad diferencial. Sin embargo, una vez que hayas usado una política de restricción de unión con otra política, no podrás cambiar esa otra política.

Ejemplo:

En el ejemplo siguiente, se usa una política de restricción de combinaciones en una regla de análisis de 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 );

Bloquear una operación de unión sin ninguna columna obligatoria

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

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

Ejemplo:

En la siguiente consulta, se bloquea la consulta con un error porque no contiene ninguna operación de unión en la columna test_score o test_id de 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, sustituye last_name por test_score.

Bloquear una consulta sin operación de unión

Si la consulta debe tener una operación de unión, puede 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 porque no hay ninguna operación de unión con 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_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;

Bloquear 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, incluya las siguientes partes en su regla de análisis de superposición de listas:

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

Ejemplo:

En la siguiente consulta, la consulta se bloquea porque la operación de unión no incluye una columna en la matriz 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, sustituye last_name por test_score.

Bloquear todas las operaciones de unión

Puedes bloquear todas las operaciones de unión. Para ello, solo debes incluir 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 que se ejecute la consulta anterior, quita la operación INNER JOIN.

Bloquear una operación de combinación interna sin todas las columnas obligatorias

Puede bloquear una operación de unión interna si no incluye todas las columnas obligatorias. Para ello, incluya las siguientes partes en su 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, se bloquea la consulta con un error porque 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, sustituye USING (last_name) por USING (last_name, test_score).

Tablas de ejemplo

En varios ejemplos de este documento se hace referencia a dos tablas llamadas ExamTable y StudentTable. ExamTable contiene una lista de las puntuaciones de los exámenes de los alumnos y StudentTable contiene una lista de los alumnos y sus puntuaciones.

Para probar los ejemplos de este documento, primero añade 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 has añadido una regla de análisis a una vista, no puedes cambiar entre reglas de análisis de umbral de agregación y reglas de análisis de privacidad diferencial.

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

  • Solo puedes usar funciones de agregación admitidas en una consulta de una vista de regla de análisis de umbral de agregación obligatoria.
  • No puedes añadir una regla de análisis de umbral de agregación a una vista materializada.
  • Si usa una vista con una regla de análisis de umbral de agregación aplicada en una consulta de umbral de agregación, ambas deben tener el mismo valor en la columna de unidad de privacidad.
  • Si usa una vista con una regla de análisis de umbral de agregación obligatoria en una consulta de umbral de agregación, el umbral de la consulta debe ser igual o superior al de la vista.
  • La cronología está inhabilitada en las vistas que tienen una regla de análisis de umbral 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, esta no se puede usar y debes crear una nueva.

Una regla de análisis de solapamiento de listas tiene las siguientes limitaciones:

  • Si combina 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 coloca el privacy_unit_column como join_allowed_column en la regla de análisis de superposición de listas, es posible que no pueda combinar ninguna columna en determinadas situaciones.

Precios