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 dejoin_allowed_columns
deben unirse mediante una unión interna para poder consultar esta vista.JOIN_ANY
: al menos una columna dejoin_allowed_columns
debe unirse para poder consultar esta vista.JOIN_BLOCKED
: esta vista no se puede combinar por ninguna columna. En este caso, no incluyasjoin_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 dejoin_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
a1e+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 entre0.001
y1e+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
y1
.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 entre1e-15
y1000
.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 dejoin_allowed_columns
deben unirse mediante una unión interna para poder consultar esta vista.JOIN_ANY
: al menos una columna dejoin_allowed_columns
debe unirse para poder consultar esta vista.JOIN_BLOCKED
: esta vista no se puede combinar por ninguna columna. En este caso, no incluyasjoin_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 dejoin_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 dejoin_allowed_columns
deben unirse mediante una unión interna para poder consultar esta vista.JOIN_ANY
: al menos una columna dejoin_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
comojoin_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
- No hay ningún coste adicional por asociar una regla de análisis a una vista.
- Se aplican los precios estándar de BigQuery para el análisis.