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
a1e+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 de0.001
a1e+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
a1
. - 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 de1e-15
a1000
. - 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
a1e+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 de0.001
a1e+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
a1
. - 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 de1e-15
a1000
. - 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 enjoin_allowed_columns
.JOIN_BLOCKED
: Esta vista no se puede unir en ninguna columna. No configuresjoin_allowed_columns
en este caso.JOIN_ANY
: Se debe unir al menos una columna enjoin_allowed_columns
para que se consulte esta vista.JOIN_ALL
: Todas las columnas enjoin_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 enjoin_allowed_columns
.JOIN_BLOCKED
: Esta vista no se puede unir en ninguna columna. No configuresjoin_allowed_columns
en este caso.JOIN_ANY
: Se debe unir al menos una columna enjoin_allowed_columns
para que se consulte esta vista.JOIN_ALL
: Todas las columnas enjoin_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
comojoin_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
- No se aplican costos adicionales por adjuntar una regla de análisis a una vista.
- Se aplican los precios estándar de BigQuery para el análisis.
- Las consultas en una vista con una regla de análisis se restringen a ofertas sin edición o la edición Enterprise Plus.