使用分析規則限制資料存取
本文件提供 GoogleSQL for BigQuery 中分析規則的一般資訊。
什麼是分析規則?
分析規則會強制執行資料共用政策。政策代表在執行查詢前必須符合的條件。您可以使用 BigQuery 的資料淨室,或直接將分析規則套用至檢視畫面,在檢視畫面上強制執行分析規則。強制執行分析規則時,您會強制要求查詢該檢視畫面的所有使用者都必須遵守該檢視畫面的分析規則。如果符合分析規則,查詢會產生符合分析規則的輸出內容。如果查詢不符合分析規則,系統會產生錯誤。
支援的分析規則
系統支援下列分析規則:
匯總門檻分析規則:強制執行資料集中須有的不重複實體數量下限。您可以使用 DDL 陳述式或資料無塵室,對檢視表強制執行這項規則。這項規則支援匯總門檻政策和彙整限制政策。
差異化隱私分析規則:強制執行隱私公開程度上限,如果資料套用了差異化隱私防護機制,訂閱者看見的資料就會受限。您可以使用 DDL 陳述式或資料無塵室,對檢視表強制執行這項規則。這項規則支援差異化隱私政策和彙整限制政策。
清單重疊分析規則:只有在符合規則的彙整作業後,才能查詢重疊的資料列。您可以使用 DDL 陳述式或資料無塵室,對檢視表套用這項規則。這項規則支援彙整限制政策。
匯總門檻分析規則
匯總門檻分析規則會強制執行一組查詢的輸出列所需的不重複實體數量下限,以便輸出列納入查詢結果。
強制執行時,匯總門檻分析規則會將各維度的資料分組,同時確保符合匯總門檻。它會為每個群組計算不重複的隱私權單位數量 (由隱私權單位欄代表),並只輸出不重複的隱私權單位數量符合匯總門檻的群組。
包含這項分析規則的檢視畫面必須包含匯總門檻政策,並可選擇納入彙整限制政策。
為檢視畫面定義匯總門檻分析規則
您可以在資料無塵室中,或使用 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;
定義:
aggregation_threshold_policy
:匯總門檻分析規則的匯總門檻政策。VIEW_NAME:檢視畫面的路徑和名稱。
THRESHOLD:查詢結果中,每個資料列所需提供的獨立隱私權單位數量下限。如果潛在的資料列未達到這個門檻,系統就會從查詢結果中省略該資料列。
PRIVACY_UNIT_COLUMN:代表隱私權單位欄。隱私權單位欄是隱私權單位的專屬 ID。隱私權單位是隱私權單位欄中的值,代表一組受保護資料中的實體。
您只能使用一個隱私權單位欄,且隱私權單位欄的資料類型必須是可分組。
您無法透過查詢直接投射隱私權單位欄中的值,而且只能使用分析規則支援的匯總函式匯總這個欄中的資料。
join_restriction_policy
(選用):匯總門檻分析規則的選用彙整限制政策。JOIN_CONDITION:要在檢視畫面上強制執行的彙整限制類型。可為下列其中一個值:
JOIN_ALL
:join_allowed_columns
中的所有欄都必須進行內部聯結,才能查詢這個檢視畫面。JOIN_ANY
:必須彙整join_allowed_columns
中至少一個資料欄,才能查詢這個檢視畫面。JOIN_BLOCKED
:這個檢視畫面無法與任何資料欄彙整。在這種情況下,請勿設定join_allowed_columns
。JOIN_NOT_REQUIRED
:查詢這個檢視畫面不需要彙整。如果使用了彙整,則只能使用join_allowed_columns
中的資料欄。
JOIN_ALLOWED_COLUMNS:可用於彙整作業的資料欄。
QUERY:檢視畫面的查詢。
範例:
在以下範例中,我們會在名為 ExamView
的檢視畫面上建立匯總門檻分析規則。ExamView
參照名為 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 );
如要查看 CREATE VIEW
的 privacy_policy
語法,請參閱 CREATE VIEW
中的 OPTIONS
清單。
更新檢視項目的匯總門檻分析規則
您可以在資料無塵室中,或使用 ALTER VIEW
陳述式,變更檢視畫面的匯總門檻分析規則:
ALTER VIEW VIEW_NAME SET OPTIONS ( privacy_policy= '''{ "aggregation_threshold_policy": { "threshold" : THRESHOLD, "privacy_unit_column": "PRIVACY_UNIT_COLUMN" } }''' )
如要進一步瞭解上述語法中可為隱私權政策設定的值,請參閱「為檢視畫面定義匯總門檻分析規則」。
範例:
在以下範例中,系統會在名為 ExamView
的檢視畫面上更新匯總門檻分析規則。
ALTER VIEW mydataset.ExamView
SET OPTIONS (
privacy_policy= '{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_column": "last_name"}}'
);
如要查看 ALTER VIEW
的 privacy_policy
語法,請參閱 ALTER VIEW SET OPTIONS
中的 OPTIONS
清單。
查詢匯總門檻分析規則強制執行的檢視畫面
您可以使用 AGGREGATION_THRESHOLD
子句查詢含有匯總門檻分析規則的檢視畫面。查詢必須包含匯總函式,且您只能在該查詢中使用匯總門檻支援的匯總函式。
範例:
在以下範例中,系統會針對名為 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 |
*---------+---------------*/
匯總門檻分析規則也可以視需要納入彙整限制政策。如要瞭解如何搭配使用彙整限制政策和分析規則,請參閱「分析規則中的彙整限制政策」。
如要查看 AGGREGATION_THRESHOLD
子句的其他範例,請參閱 AGGREGATION_THRESHOLD
子句。
差異化隱私分析規則
差異化隱私分析規則會強制執行隱私公開程度上限,限制訂閱者在資料套用了差異化隱私防護機制時,可看到的資料。套用隱私公開程度上限之後,如果所有查詢的 Epsilon 或 Delta 總和達到 Epsilon 總值或 Delta 總值,所有訂閱者都無法查詢共用資料。您可以在檢視畫面中使用這個分析規則。
包含這項分析規則的檢視表必須納入差異化隱私權政策,並可視需要納入彙整限制政策。
為檢視畫面定義差異化隱私分析規則
您可以在資料無塵室中,或使用 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;
定義:
differential_privacy_policy
:差異化隱私分析規則的差異化隱私權政策。PRIVACY_UNIT_COLUMN:欄:用於識別資料集中使用隱私權分析規則保護的實體。這個值是 JSON 字串。
MAX_EPSILON_PER_QUERY:決定各查詢結果中加入的雜訊數量,可防止單一查詢達到總 epsilon。這個值是 JSON 數字,介於
0.001
到1e+15
之間。EPSILON_BUDGET:epsilon 預算,代表可在檢視畫面上所有差異化不公開查詢中使用的 epsilon 總數。這個值必須大於
MAX_EPSILON_PER_QUERY
,且為0.001
到1e+15
之間的 JSON 數字。DELTA_PER_QUERY:結果中任何資料列無法達到 epsilon 差異化隱私的機率。這個值是 JSON 數字,介於
1e-15
到1
之間。DELTA_BUDGET:delta 預算,代表可用於檢視畫面上所有差異化私人查詢的總 delta。這個值必須大於
DELTA_PER_QUERY
,且為1e-15
到1000
之間的 JSON 數字。MAX_GROUPS_CONTRIBUTED (選用):限制隱私單位欄中的實體可貢獻群組數量。這個值必須是 JSON 整數,且不得為負數。
join_restriction_policy
(選用):差異化隱私分析規則的選用彙整限制政策。JOIN_CONDITION:要在檢視畫面上強制執行的彙整限制類型。可為下列其中一個值:
JOIN_ALL
:join_allowed_columns
中的所有欄都必須進行內部聯結,才能查詢這個檢視畫面。JOIN_ANY
:必須彙整join_allowed_columns
中至少一個資料欄,才能查詢這個檢視畫面。JOIN_BLOCKED
:這個檢視畫面無法與任何資料欄彙整。在這種情況下,請勿設定join_allowed_columns
。JOIN_NOT_REQUIRED
:查詢這個檢視畫面不需要彙整。如果使用了彙整,則只能使用join_allowed_columns
中的資料欄。
JOIN_ALLOWED_COLUMNS:可用於彙整作業的資料欄。
QUERY:檢視畫面的查詢。
範例:
在以下範例中,我們會在名為 ExamView
的檢視畫面上建立差異化隱私分析規則。ExamView
參照名為 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.
如要查看 CREATE VIEW
的 privacy_policy
語法,請參閱 CREATE VIEW
中的 OPTIONS
清單。
更新檢視畫面的差異化隱私分析規則
您可以在資料無塵室中,或使用 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 } }''' )
如要進一步瞭解上述語法中可為隱私權政策設定的值,請參閱「為檢視畫面定義差異化隱私權分析規則」。
範例:
在以下範例中,我們會在名為 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.
如要查看 ALTER VIEW
的 privacy_policy
語法,請參閱 ALTER VIEW SET OPTIONS
中的 OPTIONS
清單。
查詢差異化隱私分析規則強制執行的檢視畫面
您可以使用 DIFFERENTIAL_PRIVACY
子句查詢含有差異化隱私分析規則的檢視項目。如要查看 DIFFERENTIAL_PRIVACY
子句的語法和其他範例,請參閱 DIFFERENTIAL_PRIVACY
子句。
範例:
在以下範例中,系統會針對名為 ExamView
的檢視表查詢差異化隱私分析規則。ExamView
應成功傳回差異隱私資料,因為 epsilon
、delta
和 max_groups_contributed
都符合 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 |
*---------+--------------------*/
封鎖超出範圍的 epsilon 查詢
您可以使用 Epsilon 新增或移除雜訊。值越大,加入的雜訊就越少。如要確保差異化隱私權查詢的雜訊量降到最低,請仔細留意差異化隱私權分析規則中的 max_epsilon_per_query
值。
範例:
在下列查詢中,由於 DIFFERENTIAL_PRIVACY
子句中的 epsilon
大於 ExamView
中的 max_epsilon_per_query
,因此查詢會遭到封鎖並傳回錯誤:
-- 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.
建立檢視畫面後,請稍候片刻,然後執行下列查詢:
-- 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;
封鎖超出ε值預算的查詢
您可以使用 Epsilon 新增或移除雜訊。較低的 epsilon 會增加雜訊,較高的 epsilon 則會減少雜訊。即使雜訊很高,對同一份資料執行多次查詢,最終還是可以找出沒有雜訊的資料。如要避免這種情況發生,您可以建立 epsilon 預算。如要新增 epsilon 預算,請查看檢視畫面的差異隱私權分析規則中 epsilon_budget
的值。
範例:
執行下列查詢三次。第三次時,查詢會遭到封鎖,因為使用的總 Epsilon 為 30
,但 ExamView
中的 epsilon_budget
只允許 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.
建立檢視畫面後,請稍候片刻,然後執行下列查詢三次:
-- 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;
名單重疊分析規則
只有符合清單重疊規則的資料列,才能在彙整作業後進行查詢。您可以使用 DDL 陳述式或資料無塵室,對檢視表強制執行這項規則。
包含這項分析規則的檢視畫面只能包含彙整限制政策。
為檢視畫面定義清單重疊分析規則
您可以在資料無塵室中,或使用 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;
定義:
join_restriction_policy
:清單重疊分析規則的彙整限制政策。JOIN_CONDITION:要強制套用至檢視區塊的清單重疊類型。可為下列其中一個值:
JOIN_ALL
:join_allowed_columns
中的所有欄都必須進行內部聯結,才能查詢這個檢視畫面。JOIN_ANY
:必須彙整join_allowed_columns
中至少一個資料欄,才能查詢這個檢視畫面。
JOIN_ALLOWED_COLUMNS:可用於彙整作業的資料欄。
QUERY:檢視畫面的查詢。
範例:
在以下範例中,系統會在名為 ExamView
的檢視表上建立清單重疊分析規則。ExamView
參照名為 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 );
更新檢視項目的清單重疊分析規則
您可以使用資料無塵室或 ALTER VIEW
陳述式,變更檢視畫面的清單重疊分析規則:
ALTER VIEW VIEW_NAME SET OPTIONS ( privacy_policy= '''{ "join_restriction_policy": { "join_condition": "JOIN_CONDITION", "join_allowed_columns": JOIN_ALLOWED_COLUMNS } }''' )
如要進一步瞭解上述語法中可為隱私權政策設定的值,請參閱「為檢視項目定義名單重疊分析規則」。
範例:
在以下範例中,系統會在名為 ExamView
的檢視畫面上更新清單重疊分析規則。
ALTER VIEW mydataset.ExamView
SET OPTIONS(
privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_id", "test_score"]}}'
);
如要查看 ALTER VIEW
的 privacy_policy
語法,請參閱 ALTER VIEW SET OPTIONS
中的 OPTIONS
清單。
查詢名單重疊分析規則強制執行的檢視畫面
您可以在含有清單重疊分析規則的檢視畫面上執行彙整作業。如要查看 JOIN
運算子的語法,請參閱「彙整運算」。
封鎖不重疊的彙整作業
如果彙整作業未包含至少一個與必要欄重疊的欄,您可以封鎖該作業。
範例:
在以下查詢中,名為 ExamView
的檢視表會與名為 StudentTable
的資料表彙整。由於檢視畫面包含 JOIN_ANY
清單重疊分析規則,因此至少需要 ExamView
和 StudentTable
中至少有一個重疊的資料列。由於至少有一個重疊項目,因此查詢可順利執行。
-- 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 |
*------------+-----------+---------+-------------*/
封鎖內部聯結作業,但不完全重疊
如果彙整作業不包含與所有必要欄重疊的欄,您可以封鎖該作業。
範例:
在以下範例中,系統嘗試對名為 ExamView
的檢視畫面和名為 StudentTable
的資料表執行彙整作業,但查詢失敗。發生錯誤的原因是,ExamView
清單重疊分析規則要求彙整彙整限制政策中顯示的所有資料欄。由於名為 StudentTable
的資料表不含這些欄,因此並非所有資料列都重疊,因此會產生錯誤。
-- 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);
搭配其他政策使用彙整限制政策
彙整閾值和差異化隱私分析規則中的其他政策,可搭配使用匯入限制政策。不過,一旦您將結合限制政策與其他政策搭配使用,就無法再變更該其他政策。
範例:
在以下範例中,匯總閾值分析規則會使用彙整限制政策:
-- 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 );
封鎖沒有必要資料欄的彙整作業
如果彙整作業未包含至少一個必要資料欄,您可以封鎖該作業。如要這麼做,請在清單重疊分析規則中加入下列部分:
"join_restriction_policy": { "join_condition": "JOIN_ANY", "join_allowed_columns": ["column_name", ...] }
範例:
在下列查詢中,查詢會因未包含 ExamView
和 StudentTable
中 test_score
或 test_id
資料欄的任何彙整作業而遭到封鎖:
-- 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);
如要執行上述查詢,請在 USING
子句中將 last_name
替換為 test_score
。
封鎖沒有彙整作業的查詢
如果查詢必須包含彙整作業,您可以使用下列任一清單重疊分析規則,在沒有彙整作業的情況下封鎖查詢:
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED" }
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED", "join_allowed_columns": [] }
範例:
在下列查詢中,由於查詢中沒有與 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;
封鎖沒有彙整作業且沒有必要欄位的查詢
如果查詢必須包含彙整作業,且彙整作業必須包含至少一個必要欄,請在清單重疊分析規則中加入下列部分:
"join_restriction_policy": { "join_condition": "JOIN_NOT_REQUIRED", "join_allowed_columns": ["column_name", ...] }
範例:
在下列查詢中,由於彙整作業未納入 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);
如要執行上述查詢,請在 USING
子句中將 last_name
替換為 test_score
。
封鎖所有彙整作業
您可以封鎖所有彙整作業。如要這麼做,請在清單重疊分析規則中只加入下列部分:
"join_restriction_policy": { "join_condition": "JOIN_BLOCKED", }
範例:
在下列查詢中,由於有與名為 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);
如要執行上述查詢,請移除 INNER JOIN
運算。
封鎖未包含所有必要欄位的內部聯結作業
如果內部聯結作業未納入所有必要的資料欄,您可以封鎖該作業。如要這麼做,請在清單重疊分析規則中加入下列部分:
"join_restriction_policy": { "join_condition": "JOIN_ALL", "join_allowed_columns": ["column_name", ...] }
範例:
在下列查詢中,由於查詢未在與名為 ExamView
的檢視畫面進行彙整作業時納入 test_score
,因此查詢會遭到封鎖並顯示錯誤:
-- 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);
如要執行先前的查詢,請將 USING (last_name)
替換為 USING (last_name, test_score)
。
範例表格
本文件中的多個範例都參照了名為 ExamTable
和 StudentTable
的兩個資料表。ExamTable
包含學生的測驗成績清單,StudentTable
則包含學生和測驗成績清單。
如要測試本文中的範例,請先在專案中加入下列範例資料表:
-- 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);
限制
分析規則有下列限制:
- 如果您已在檢視畫面中新增分析規則,就無法在匯總閾值分析規則和差異隱私權分析規則之間切換。
匯總門檻分析規則有下列限制:
- 您只能在匯總門檻分析規則強制執行的檢視畫面上,針對查詢使用支援的匯總函式。
- 您無法在具體化檢視畫面中新增匯總閾值分析規則。
- 如果在匯總門檻查詢中使用匯總門檻分析規則強制執行的檢視畫面,則兩者在隱私權單位欄中必須具有相同的值。
- 如果匯總門檻查詢中使用匯總門檻分析規則強制執行的檢視畫面,查詢中的門檻必須大於或等於檢視畫面中的門檻。
- 對於含有匯總資料閾值分析規則的任何檢視畫面,系統都會停用時間旅行功能。
差異化隱私分析規則有下列限制:
- 一旦檢視表的隱私權預算用盡,就無法使用該檢視表,您必須建立新的檢視表。
名單重疊分析規則有下列限制:
- 如果您將匯總門檻分析規則或差異化隱私權分析規則與清單重疊分析規則結合,但未在清單重疊分析規則中將
privacy_unit_column
設為join_allowed_column
,則在某些情況下可能無法彙整任何欄。
定價
- 將分析規則附加至檢視畫面不會產生額外費用。
- 適用標準的 BigQuery 分析費用。