Membatasi akses data menggunakan aturan analisis

Dokumen ini memberikan informasi umum tentang aturan analisis di GoogleSQL untuk BigQuery.

Apa itu aturan analisis?

Aturan analisis memberlakukan suatu kondisi untuk berbagi data. Dengan BigQuery, Anda dapat menerapkan aturan analisis pada tampilan, menggunakan ruang bersih data, atau dengan menerapkan aturan analisis langsung ke tampilan tersebut. Saat menerapkan aturan analisis, Anda menerapkan bahwa setiap orang yang membuat kueri tampilan tersebut harus mematuhi aturan analisis tersebut pada tampilan. Jika aturan analisis terpenuhi, kueri akan menghasilkan output yang memenuhi aturan analisis. Jika kueri tidak memenuhi aturan analisis, error akan terjadi.

Aturan analisis yang didukung

Aturan analisis berikut didukung:

  • Aturan analisis nilai minimum agregasi: Menerapkan jumlah minimum entity berbeda yang harus ada dalam set data. Anda dapat menerapkan aturan ini pada tampilan, menggunakan pernyataan, atau ruang bersih data.
  • Aturan analisis privasi diferensial: Menerapkan anggaran privasi, yang membatasi data yang diungkapkan kepada pelanggan saat data dilindungi dengan privasi diferensial. Anda dapat menerapkan aturan ini pada tampilan, menggunakan pernyataan, atau ruang bersih data.
  • Aturan analisis batasan join: Membatasi jenis join yang dapat digunakan dengan kolom tertentu. Gabungan tidak perlu ada dalam kueri dan kolom tertentu dapat diblokir. Dapat disertakan dengan aturan analisis nilai minimum agregasi atau aturan analisis privasi diferensial. Anda dapat menerapkan aturan ini pada tampilan, menggunakan pernyataan, atau ruang bersih data.
  • Daftar aturan analisis tumpang-tindih: Mirip dengan aturan analisis batasan join, tetapi tidak dapat digunakan dengan aturan analisis lainnya. Anda dapat menerapkan aturan ini pada tampilan, menggunakan ruang pembersihan data.

Aturan analisis nilai minimum agregasi

Aturan analisis nilai minimum agregasi menerapkan jumlah minimum entity berbeda yang harus ada dalam set data, sehingga statistik pada set data tersebut disertakan dalam hasil kueri.

Jika diterapkan, aturan analisis nilai minimum agregasi akan mengelompokkan data di seluruh dimensi, sekaligus memastikan nilai minimum agregasi terpenuhi. Nilai ini menghitung jumlah unit privasi yang berbeda (diwakili oleh kolom unit privasi) untuk setiap grup, dan hanya menghasilkan output grup dengan jumlah unit privasi berbeda yang memenuhi batas agregasi.

Tampilan yang menyertakan aturan analisis ini juga dapat menyertakan aturan analisis batasan join.

Menentukan aturan analisis nilai minimum agregasi untuk tampilan

Anda dapat menentukan aturan analisis nilai minimum agregasi untuk tampilan dalam ruang bersih data atau dengan pernyataan berikut:

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "aggregation_threshold_policy": {
        "threshold" : THRESHOLD,
        "privacy_unit_column": "PRIVACY_UNIT_COLUMN"
      }
    }'
  )
  AS QUERY;

Ganti nilai berikut:

  • VIEW_NAME: Jalur dan nama tabel virtual.
  • THRESHOLD: Jumlah minimum unit privasi berbeda yang harus berkontribusi pada setiap baris dalam hasil kueri. Jika baris potensial tidak memenuhi batas ini, baris tersebut akan dihilangkan dari hasil kueri.
  • PRIVACY_UNIT_COLUMN: Menampilkan kolom unit privasi. Kolom unit privasi adalah ID unik untuk unit privasi. Unit privasi adalah nilai dari kolom unit privasi yang mewakili entity dalam kumpulan data yang dilindungi.

    Anda hanya dapat menggunakan satu kolom unit privasi, dan jenis data untuk kolom unit privasi harus dapat dikelompokkan.

    Nilai dalam kolom unit privasi tidak dapat diproyeksikan langsung melalui kueri, dan Anda hanya dapat menggunakan fungsi agregat yang didukung aturan analisis untuk menggabungkan data dalam kolom ini.

  • QUERY: Kueri untuk tabel virtual.

Dalam contoh berikut, aturan analisis nilai minimum agregasi dibuat:

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

Guna meninjau sintaksis privacy_policy untuk CREATE VIEW, lihat daftar OPTIONS di CREATE VIEW.

Memperbarui aturan analisis nilai minimum agregasi untuk tampilan

Anda dapat mengubah aturan analisis nilai minimum agregasi untuk tampilan di ruang bersih data atau dengan pernyataan berikut:

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

Ganti nilai berikut:

  • VIEW_NAME: Jalur dan nama tabel virtual.
  • THRESHOLD: Jumlah minimum unit privasi berbeda yang harus berkontribusi pada setiap baris dalam hasil kueri. Jika baris potensial tidak memenuhi batas ini, baris tersebut akan dihilangkan dari hasil kueri.
  • PRIVACY_UNIT_COLUMN: Menampilkan kolom unit privasi. Kolom unit privasi adalah ID unik untuk unit privasi. Unit privasi adalah nilai dari kolom unit privasi yang mewakili entity dalam kumpulan data yang dilindungi.

    Anda hanya dapat menggunakan satu kolom unit privasi, dan jenis data untuk kolom unit privasi harus dapat dikelompokkan.

    Nilai dalam kolom unit privasi tidak dapat diproyeksikan langsung melalui kueri, dan Anda hanya dapat menggunakan fungsi agregat yang didukung aturan analisis untuk menggabungkan data dalam kolom ini.

Pada contoh berikut, aturan analisis nilai minimum agregasi diperbarui:

ALTER VIEW mydataset.ExamView
SET OPTIONS (
  privacy_policy= '{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_column": "last_name"}}'
);

Guna meninjau sintaksis privacy_policy untuk ALTER VIEW, lihat daftar OPTIONS di ALTER VIEW SET OPTIONS.

Mengkueri tampilan yang diterapkan aturan analisis nilai minimum agregasi

Anda dapat membuat kueri tampilan yang memiliki aturan analisis nilai minimum agregasi dengan klausa AGGREGATION_THRESHOLD. Kueri harus menyertakan fungsi agregasi, dan Anda hanya dapat menggunakan fungsi agregat yang didukung aturan analisis dalam kueri ini.

Pada contoh berikut, tampilan dengan aturan analisis nilai minimum agregasi dikueri:

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

Untuk meninjau contoh tambahan terkait klausa AGGREGATION_THRESHOLD, lihat klausa AGGREGATION_THRESHOLD.

Aturan analisis privasi diferensial

Aturan analisis privasi diferensial menerapkan anggaran privasi, yang membatasi data yang diungkapkan kepada pelanggan jika data dilindungi dengan privasi diferensial. Anggaran privasi mencegah pelanggan membuat kueri data bersama saat jumlah semua epsilon atau delta kueri mencapai total epsilon atau total nilai delta. Anda dapat menggunakan aturan analisis ini dalam tampilan. Tampilan yang menyertakan aturan analisis ini juga dapat menyertakan aturan analisis batasan join.

Menentukan aturan analisis privasi diferensial untuk tampilan

Anda dapat menentukan aturan analisis privasi diferensial untuk tampilan dalam ruang bersih data atau dengan pernyataan berikut:

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;

Ganti nilai berikut:

  • PRIVACY_UNIT_COLUMN: Kolom yang mengidentifikasi entity dalam set data yang dilindungi menggunakan aturan analisis privasi. Nilai ini berupa string JSON.
  • MAX_EPSILON_PER_QUERY: Menentukan kekuatan jaminan privasi per kueri dan mencegah total epsilon dijangkau oleh satu kueri. Nilai ini adalah nomor JSON dari 0.001 hingga 1e+15.
  • EPSILON_BUDGET: Anggaran epsilon yang menunjukkan keunggulan dari jaminan privasi secara keseluruhan. Ini digunakan secara total untuk semua kueri pribadi diferensial pada tampilan. Nilai ini harus lebih besar dari MAX_EPSILON_PER_QUERY, dan merupakan nomor JSON dari 0.001 sampai 1e+15.
  • DELTA_PER_QUERY: Probabilitas maksimum kehilangan privasi per kueri di luar jaminan yang ditentukan oleh total epsilon. Mencegah total delta tidak tercapai oleh satu kueri. Nilai ini adalah nomor JSON dari 1e-15 sampai 1.
  • DELTA_BUDGET: Anggaran delta, yang mewakili probabilitas maksimum kehilangan privasi secara keseluruhan di luar jaminan yang ditentukan oleh total epsilon. Ini digunakan secara total untuk semua kueri pribadi diferensial pada tampilan. Nilai ini harus lebih besar dari DELTA_PER_QUERY, dan merupakan nomor JSON dari 1e-15 sampai 1000.
  • MAX_GROUPS_CONTRIBUTED: Opsional. Membatasi jumlah grup yang dapat dikontribusikan oleh entity dalam kolom unit privasi. Nilai ini harus berupa bilangan bulat JSON non-negatif.
  • QUERY: Kueri untuk tabel virtual.

Pada contoh berikut, aturan analisis privasi diferensial dibuat:

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

Guna meninjau sintaksis privacy_policy untuk CREATE VIEW, lihat daftar OPTIONS di CREATE VIEW.

Memperbarui aturan analisis privasi diferensial untuk tampilan

Anda dapat mengubah aturan analisis privasi diferensial untuk tampilan di data clean room atau dengan pernyataan berikut:

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
    }
  }'
)

Ganti nilai berikut:

  • PRIVACY_UNIT_COLUMN: Kolom yang mengidentifikasi entity dalam set data yang dilindungi menggunakan aturan analisis privasi. Nilai ini berupa string JSON.
  • MAX_EPSILON_PER_QUERY: Menentukan kekuatan jaminan privasi per kueri dan mencegah total epsilon dijangkau oleh satu kueri. Nilai ini adalah nomor JSON dari 0.001 hingga 1e+15.
  • EPSILON_BUDGET: Anggaran epsilon yang menunjukkan keunggulan dari jaminan privasi secara keseluruhan. Ini digunakan secara total untuk semua kueri pribadi diferensial pada tampilan. Nilai ini harus lebih besar dari MAX_EPSILON_PER_QUERY, dan merupakan nomor JSON dari 0.001 sampai 1e+15.
  • DELTA_PER_QUERY: Probabilitas maksimum kehilangan privasi per kueri di luar jaminan yang ditentukan oleh total epsilon. Mencegah total delta tidak tercapai oleh satu kueri. Nilai ini adalah nomor JSON dari 1e-15 sampai 1.
  • DELTA_BUDGET: Anggaran delta, yang mewakili probabilitas maksimum kehilangan privasi secara keseluruhan di luar jaminan yang ditentukan oleh total epsilon. Ini digunakan secara total untuk semua kueri pribadi diferensial pada tampilan. Nilai ini harus lebih besar dari DELTA_PER_QUERY, dan merupakan nomor JSON dari 1e-15 sampai 1000.
  • MAX_GROUPS_CONTRIBUTED: Opsional. Membatasi jumlah grup yang dapat dikontribusikan oleh entity dalam kolom unit privasi. Nilai ini harus berupa bilangan bulat JSON non-negatif.

Pada contoh berikut, aturan analisis privasi diferensial diperbarui:

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.

Guna meninjau sintaksis privacy_policy untuk ALTER VIEW, lihat daftar OPTIONS di ALTER VIEW SET OPTIONS.

Mengkueri tampilan yang diterapkan aturan analisis privasi diferensial

Anda dapat membuat kueri tampilan yang memiliki aturan analisis privasi diferensial dengan klausa DIFFERENTIAL_PRIVACY. Untuk meninjau sintaksis dan contoh tambahan untuk klausa DIFFERENTIAL_PRIVACY, lihat klausa DIFFERENTIAL_PRIVACY.

Pastikan kueri pribadi diferensial berjalan

Buat kueri pribadi diferensial untuk tampilan yang diterapkan aturan analisis, dan pastikan kueri tersebut berjalan.

Misalnya, dalam kueri berikut, data pribadi diferensial berhasil ditampilkan dari ExamView karena epsilon, delta, dan max_groups_contributed semuanya memenuhi kondisi aturan analisis diferensial dalam 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": 1000.01, "epsilon_budget": 1000.0, "delta_per_query": 0.01, "delta_budget": 1000.0, "max_groups_contributed": 2}}'
)
AS ( SELECT * FROM mydataset.ExamTable );

Setelah Anda membuat tampilan, tunggu sebentar, lalu jika Anda yakin tampilan telah dibuat, jalankan kueri berikut:

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

Memblokir kueri dengan epsilon yang tidak sesuai batas

Epsilon dapat digunakan untuk menambahkan atau menghilangkan derau. Lebih banyak epsilon berarti lebih sedikit noise yang ditambahkan. Jika Anda ingin memastikan bahwa kueri pribadi diferensial memiliki jumlah derau minimal, perhatikan dengan cermat nilai max_epsilon_per_query dalam aturan analisis privasi diferensial Anda.

Misalnya, dalam kueri berikut, kueri diblokir dengan error karena epsilon dalam klausa DIFFERENTIAL_PRIVACY lebih tinggi dari max_epsilon_per_query dalam 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 );

Setelah Anda membuat tampilan, tunggu sebentar, lalu jalankan kueri berikut:

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

Memblokir kueri yang tidak memiliki jumlah delta tertentu

Delta mewakili nilai minimum yang menentukan apakah data mungkin bocor secara tidak sengaja. Semakin sedikit delta menaikkan nilai minimum, semakin banyak delta yang menurunkan batas. Untuk memastikan kueri pribadi diferensial memiliki batas tertentu, perbarui setelan delta_per_query dalam aturan analisis privasi diferensial Anda.

Misalnya, dalam kueri berikut, kueri diblokir dengan error karena delta dalam klausa DIFFERENTIAL_PRIVACY tidak cocok dengan delta_per_query di 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 );

Setelah Anda membuat tampilan, tunggu sebentar, lalu jalankan kueri berikut:

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

Blokir kueri yang telah melampaui anggaran epsilon

Epsilon dapat digunakan untuk menambahkan atau menghilangkan derau. Semakin sedikit epsilon mengurangi kebisingan, semakin banyak epsilon mengurangi kebisingan. Meskipun derau tinggi, beberapa kueri atas data yang sama pada akhirnya dapat menampilkan versi data yang tidak memiliki derau. Untuk menghentikan hal ini, Anda dapat membuat anggaran epsilon. Jika Anda ingin menambahkan anggaran epsilon, tinjau nilai untuk epsilon_budget dalam aturan analisis privasi diferensial untuk tampilan Anda.

Jalankan kueri berikut tiga kali. Pada ketiga kalinya, kueri diblokir karena total epsilon yang digunakan adalah 30, tetapi epsilon_budget di ExamView hanya mengizinkan 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 );

Setelah Anda membuat tampilan, tunggu sebentar, lalu jalankan kueri berikut tiga kali:

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

Blokir kueri yang telah melebihi anggaran delta

Delta mewakili nilai minimum yang menentukan apakah data mungkin bocor secara tidak sengaja. Semakin sedikit delta menaikkan nilai minimum, semakin banyak delta yang menurunkan batas. Meskipun batasnya tinggi, beberapa kueri atas data yang sama pada akhirnya dapat mengungkap data pribadi diferensial. Agar hal ini tidak terjadi, Anda dapat membuat anggaran delta. Jika Anda ingin menambahkan anggaran delta, tinjau nilai untuk delta_budget dalam aturan analisis privasi diferensial untuk tampilan Anda.

Jalankan kueri berikut tujuh kali. Pada kali ketujuh, kueri diblokir karena total delta yang digunakan adalah 0.7, tetapi delta_budget di ExamView hanya mengizinkan 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 );

Setelah membuat tampilan, tunggu sebentar, lalu jalankan kueri berikut tujuh kali:

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

Memblokir kueri yang memungkinkan terlalu banyak kontribusi grup

Anda dapat membatasi jumlah grup yang dapat dikontribusikan oleh setiap entity dalam kueri pribadi diferensial. Jika Anda ingin memastikan bahwa kueri pribadi diferensial memiliki jumlah grup terbatas yang dapat dikontribusikan oleh setiap entity, perhatikan dengan cermat nilai untuk max_groups_contributed dalam aturan analisis privasi diferensial Anda.

Misalnya, dalam kueri berikut, kueri diblokir dengan error karena max_groups_contributed dalam klausa DIFFERENTIAL_PRIVACY lebih tinggi dari max_groups_contributed dalam 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 );

Setelah Anda membuat tampilan, tunggu sebentar, lalu jalankan kueri berikut:

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

Aturan analisis pembatasan bergabung

Aturan analisis batasan gabungan membatasi jenis gabungan yang dapat digunakan dengan kolom tertentu dalam tampilan. Anda dapat menggunakan aturan analisis ini dalam tampilan. Tampilan yang menyertakan aturan analisis ini juga dapat menyertakan aturan analisis nilai minimum agregasi atau aturan analisis privasi diferensial.

Menentukan aturan analisis batasan gabungan untuk tampilan

Anda dapat menentukan aturan analisis batasan gabungan untuk tampilan dalam ruang bersih data atau dengan pernyataan berikut.

CREATE OR REPLACE VIEW VIEW_NAME
  OPTIONS (
    privacy_policy= '{
      "join_restriction_policy": {
        "join_condition": "JOIN_CONDITION",
        "join_allowed_columns": JOIN_ALLOWED_COLUMNS
      }
    }'
  )
  AS QUERY;

Ganti nilai berikut:

  • JOIN_CONDITION: Jenis batasan penggabungan yang akan diterapkan pada tampilan. Ini dapat berupa salah satu dari nilai berikut ini:

    • JOIN_NOT_REQUIRED: Gabungan tidak diperlukan untuk membuat kueri tampilan ini. Jika join digunakan, hanya kolom di join_allowed_columns yang dapat digunakan.

    • JOIN_BLOCKED: Tampilan ini tidak dapat digabungkan di kolom mana pun. Jangan tetapkan join_allowed_columns dalam kasus ini.

    • JOIN_ANY: Setidaknya satu kolom di join_allowed_columns harus digabungkan agar tampilan ini dapat dikueri.

    • JOIN_ALL: Semua kolom di join_allowed_columns harus digabungkan agar tampilan ini dapat dikueri.

  • JOIN_ALLOWED_COLUMNS: Kolom yang dapat menjadi bagian dari operasi join.

  • QUERY: Kueri untuk tabel virtual.

Pada contoh berikut, aturan analisis batasan gabungan dibuat:

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

Menggunakan aturan analisis batasan gabungan dengan aturan analisis lain

Anda dapat menggunakan aturan analisis batasan gabungan dengan aturan analisis nilai minimum agregasi atau aturan analisis privasi diferensial. Namun, setelah menggunakan batasan penggabungan dengan aturan analisis lain pada tampilan, Anda tidak dapat mengubah aturan analisis lainnya tersebut.

Dalam contoh berikut, aturan analisis batasan gabungan dan aturan analisis nilai minimum agregasi digunakan bersama:

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

Memperbarui aturan analisis batasan penggabungan untuk tampilan

Anda dapat mengubah aturan analisis batasan join untuk tampilan dengan data clean room atau dengan pernyataan berikut:

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

Ganti nilai berikut:

  • JOIN_CONDITION: Jenis batasan penggabungan yang akan diterapkan pada tampilan. Ini dapat berupa salah satu dari nilai berikut ini:

    • JOIN_NOT_REQUIRED: Gabungan tidak diperlukan untuk membuat kueri tampilan ini. Jika join digunakan, hanya kolom di join_allowed_columns yang dapat digunakan.

    • JOIN_BLOCKED: Tampilan ini tidak dapat digabungkan di kolom mana pun. Jangan tetapkan join_allowed_columns dalam kasus ini.

    • JOIN_ANY: Setidaknya satu kolom di join_allowed_columns harus digabungkan agar tampilan ini dapat dikueri.

    • JOIN_ALL: Semua kolom di join_allowed_columns harus digabungkan agar tampilan ini dapat dikueri.

  • JOIN_ALLOWED_COLUMNS: Kolom yang dapat menjadi bagian dari operasi join.

  • QUERY: Kueri untuk tabel virtual.

Pada contoh berikut, aturan analisis batasan gabungan diperbarui:

ALTER VIEW mydataset.ExamView
SET OPTIONS(
  privacy_policy= '{"join_restriction_policy": {"join_condition": "JOIN_ALL", "join_allowed_columns": ["test_id", "test_score"]}}'
);

Guna meninjau sintaksis privacy_policy untuk ALTER VIEW, lihat daftar OPTIONS di ALTER VIEW SET OPTIONS.

Mengkueri tampilan yang diterapkan aturan analisis batasan gabungan

Anda dapat melakukan operasi gabungan pada tampilan yang memiliki aturan analisis batasan join. Untuk meninjau sintaksis operasi JOIN, lihat Bergabung dengan operasi.

Memastikan bahwa kueri batasan gabungan berjalan

Anda harus menguji untuk memastikan bahwa kueri gabungan Anda yang dibatasi berjalan.

Misalnya, dalam kueri berikut, data yang digabungkan berhasil ditampilkan dari ExamView dan 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     | ???                |
 *---------+--------------------*/

Memblokir operasi gabungan tanpa kolom wajib

Anda dapat memblokir operasi gabungan jika tidak menyertakan setidaknya satu kolom yang diperlukan. Untuk melakukannya, sertakan bagian berikut dalam aturan analisis pembatasan gabungan:

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

Misalnya, dalam kueri berikut, kueri diblokir dengan error karena kueri tidak berisi operasi gabungan apa pun pada kolom test_score atau test_id di ExamView dan 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", "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;

Agar kueri sebelumnya berjalan, dalam klausa USING, ganti last_name dengan test_score.

Memblokir kueri tanpa operasi gabungan

Jika kueri harus memiliki operasi gabungan, Anda dapat memblokir kueri tersebut jika tidak ada operasi gabungan dengan menggunakan salah satu aturan analisis pembatasan join berikut:

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

Misalnya, dalam kueri berikut, kueri diblokir karena tidak ada operasi gabungan dalam kueri:

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

Memblokir kueri tanpa operasi gabungan dan tanpa kolom wajib

Jika kueri harus memiliki operasi gabungan dan operasi gabungan harus memiliki setidaknya satu kolom yang diperlukan, sertakan bagian berikut dalam aturan analisis pembatasan gabungan Anda:

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

Misalnya, dalam kueri berikut, kueri diblokir karena operasi join tidak menyertakan kolom dalam 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;

Agar kueri sebelumnya berjalan, dalam klausa USING, ganti last_name dengan test_score.

Memblokir semua operasi gabungan

Anda dapat memblokir semua operasi gabungan. Untuk melakukannya, hanya sertakan bagian berikut dalam aturan analisis batasan penggabungan:

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

Misalnya, dalam kueri berikut, kueri diblokir karena ada operasi join:

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

Agar kueri sebelumnya berjalan, hapus operasi INNER JOIN.

Memblokir operasi gabungan dalam tanpa semua kolom yang wajib diisi

Anda dapat memblokir operasi gabungan dalam jika tidak menyertakan semua kolom yang diperlukan. Untuk melakukannya, sertakan bagian berikut dalam aturan analisis pembatasan gabungan:

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

Misalnya, dalam kueri berikut, kueri diblokir dengan error karena kueri tidak menyertakan test_score dalam operasi gabungan:

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

Agar kueri sebelumnya berjalan, ganti USING (last_name) dengan USING (last_name, test_score).

Mencantumkan aturan analisis tumpang-tindih

Membatasi jenis gabungan yang dapat digunakan dengan kolom tertentu. Gabungan harus ada dalam kueri dan kolom tertentu tidak dapat diblokir. Anda dapat menentukan dan memperbarui aturan analisis tumpang-tindih daftar untuk tampilan di ruang pembersihan data. Untuk informasi selengkapnya, lihat Berbagi data sensitif dengan ruang bersih data.

Batasan

Aturan analisis memiliki batasan berikut:

  • Jika sudah menambahkan aturan analisis ke tampilan, Anda tidak dapat beralih antara aturan analisis nilai minimum agregasi dan aturan analisis diferensial.

Aturan analisis nilai minimum agregasi memiliki batasan berikut:

  • Anda hanya dapat menggunakan fungsi agregat yang didukung dalam kueri pada tampilan yang diterapkan aturan analisis nilai minimum agregasi.
  • Anda tidak dapat menambahkan aturan analisis nilai minimum agregasi ke tampilan terwujud.
  • Jika Anda menggunakan tampilan yang diterapkan aturan analisis nilai minimum agregasi dalam kueri nilai minimum agregasi, keduanya harus memiliki nilai yang sama untuk kolom unit privasi.
  • Jika Anda menggunakan tampilan yang diterapkan aturan analisis nilai minimum agregasi dalam kueri nilai minimum agregasi, nilai minimum dalam kueri harus lebih besar dari atau sama dengan nilai minimum dalam tampilan.
  • Perjalanan waktu dinonaktifkan di setiap tampilan yang memiliki aturan analisis nilai minimum agregasi.

Aturan analisis privasi diferensial memiliki batasan berikut:

  • Setelah anggaran privasi habis untuk sebuah tampilan, tampilan tersebut tidak dapat digunakan dan Anda harus membuat tampilan baru.

Aturan analisis batasan gabungan memiliki batasan berikut:

  • Jika Anda tidak menempatkan privacy_unit_column sebagai join_allowed_column dalam aturan analisis batasan gabungan, Anda mungkin tidak dapat menggabungkan kolom apa pun dalam situasi tertentu.

Harga