Membatasi akses data menggunakan aturan analisis

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

Apa yang dimaksud dengan aturan analisis?

Aturan analisis menerapkan kebijakan untuk berbagi data. Kebijakan mewakili kondisi yang perlu dipenuhi sebelum kueri dapat dijalankan. Dengan BigQuery, Anda dapat menerapkan aturan analisis pada tampilan, menggunakan ruang bersih data atau dengan menerapkan aturan analisis langsung ke tampilan. Saat menerapkan aturan analisis, Anda memastikan bahwa semua orang yang membuat kueri tabel virtual tersebut harus mematuhi aturan analisis tersebut dalam tabel virtual. Jika aturan analisis terpenuhi, kueri akan menghasilkan output yang memenuhi aturan analisis. Jika kueri tidak memenuhi aturan analisis, error akan muncul.

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 DDL atau ruang bersih data. Aturan ini mendukung kebijakan nilai minimum agregasi dan kebijakan batasan penggabungan.

  • 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 DDL atau ruang bersih data. Aturan ini mendukung kebijakan privasi diferensial dan kebijakan batasan penggabungan.

  • Aturan analisis tumpang-tindih daftar: Baris yang tumpang-tindih hanya dapat dikueri setelah operasi join, yang sesuai dengan aturan. Anda dapat menerapkan aturan ini pada tampilan, menggunakan pernyataan DDL atau ruang bersih data. Aturan ini mendukung kebijakan batasan join.

Aturan analisis nilai minimum agregasi

Aturan analisis nilai minimum agregasi menerapkan jumlah minimum entity berbeda yang harus berkontribusi pada baris output kueri, sehingga baris output disertakan dalam hasil kueri.

Jika diterapkan, aturan analisis nilai minimum agregasi akan mengelompokkan data di berbagai 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 harus menyertakan kebijakan nilai minimum agregasi dan secara opsional dapat menyertakan kebijakan pembatasan join.

Menentukan aturan analisis nilai minimum agregasi untuk tampilan

Anda dapat menentukan aturan analisis nilai minimum agregasi untuk tampilan di ruang bersih data atau dengan pernyataan 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;

Definisi:

  • aggregation_threshold_policy: Kebijakan nilai minimum agregasi untuk aturan analisis nilai minimum agregasi.

    • VIEW_NAME: Jalur dan nama tabel virtual.

    • THRESHOLD: Jumlah minimum unit privasi berbeda yang perlu berkontribusi pada setiap baris dalam hasil kueri. Jika baris potensial tidak memenuhi nilai minimum 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.

  • join_restriction_policy (opsional): Kebijakan batasan join opsional untuk aturan analisis nilai minimum agregasi.

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

      • JOIN_ALL: Semua kolom di join_allowed_columns harus dihubungkan secara dalam agar tampilan ini dapat dikueri.

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

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

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

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

  • QUERY: Kueri untuk tabel virtual.

Contoh:

Dalam contoh berikut, aturan analisis nilai minimum agregasi dibuat di tampilan yang disebut ExamView. ExamView mereferensikan tabel bernama 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 );

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 ALTER VIEW:

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

Untuk informasi selengkapnya tentang nilai yang dapat Anda tetapkan untuk kebijakan privasi dalam sintaksis sebelumnya, lihat Menentukan aturan analisis nilai minimum agregasi untuk tampilan.

Contoh:

Pada contoh berikut, aturan analisis nilai minimum agregasi diperbarui di tampilan yang disebut ExamView.

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.

Membuat kueri tampilan yang menerapkan aturan analisis nilai minimum agregasi

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

Contoh:

Dalam contoh berikut, aturan analisis nilai minimum agregasi dikueri di tampilan yang disebut 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             |
 *---------+---------------*/

Aturan analisis nilai minimum agregasi juga dapat menyertakan kebijakan batasan penggabungan secara opsional. Untuk mempelajari cara menggunakan kebijakan batasan join dengan aturan analisis, lihat Kebijakan batasan join dalam aturan analisis.

Untuk meninjau contoh tambahan untuk 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 saat data dilindungi dengan privasi diferensial. Anggaran privasi mencegah pelanggan membuat kueri data bersama saat jumlah semua epsilon atau delta kueri mencapai total epsilon atau nilai delta total. Anda dapat menggunakan aturan analisis ini dalam tampilan.

Tampilan yang menyertakan aturan analisis ini harus menyertakan kebijakan privasi diferensial dan secara opsional dapat menyertakan kebijakan pembatasan join.

Menentukan aturan analisis privasi diferensial untuk tabel virtual

Anda dapat menentukan aturan analisis privasi diferensial untuk tampilan di ruang bersih data atau dengan pernyataan 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;

Definisi:

  • differential_privacy_policy: Kebijakan privasi diferensial untuk aturan analisis privasi diferensial.

    • PRIVACY_UNIT_COLUMN: Kolom yang mengidentifikasi entity dalam set data yang dilindungi menggunakan aturan analisis privasi. Nilai ini adalah string JSON.

    • MAX_EPSILON_PER_QUERY: Menentukan jumlah derau yang ditambahkan ke hasil per kueri dan mencegah total epsilon dicapai oleh satu kueri. Nilai ini adalah angka JSON dari 0.001 hingga 1e+15.

    • EPSILON_BUDGET: Anggaran epsilon yang mewakili total epsilon yang dapat digunakan di semua kueri yang bersifat pribadi secara diferensial pada tampilan. Nilai ini harus lebih besar dari MAX_EPSILON_PER_QUERY, dan merupakan angka JSON dari 0.001 hingga 1e+15.

    • DELTA_PER_QUERY: Probabilitas bahwa baris apa pun dalam hasil gagal menjadi epsilon-differential private. Nilai ini adalah angka JSON dari 1e-15 hingga 1.

    • DELTA_BUDGET: Anggaran delta, yang mewakili total delta yang dapat digunakan di semua kueri yang bersifat pribadi secara diferensial pada tampilan. Nilai ini harus lebih besar dari DELTA_PER_QUERY, dan merupakan angka JSON dari 1e-15 hingga 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.

  • join_restriction_policy (opsional): Kebijakan pembatasan join opsional untuk aturan analisis privasi diferensial.

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

      • JOIN_ALL: Semua kolom di join_allowed_columns harus dihubungkan secara dalam agar tampilan ini dapat dikueri.

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

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

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

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

  • QUERY: Kueri untuk tabel virtual.

Contoh:

Dalam contoh berikut, aturan analisis privasi diferensial dibuat di tampilan yang disebut ExamView. ExamView mereferensikan tabel bernama 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.

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

Memperbarui aturan analisis privasi diferensial untuk tabel virtual

Anda dapat mengubah aturan analisis privasi diferensial untuk tampilan di ruang bersih data atau dengan pernyataan 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
    }
  }'
)

Untuk informasi selengkapnya tentang nilai yang dapat Anda tetapkan untuk kebijakan privasi dalam sintaksis sebelumnya, lihat Menentukan aturan analisis privasi diferensial untuk tampilan.

Contoh:

Pada contoh berikut, aturan analisis privasi diferensial diperbarui pada tampilan yang disebut 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.

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

Membuat kueri tabel virtual yang menerapkan aturan analisis privasi diferensial

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

Contoh:

Dalam contoh berikut, aturan analisis privasi diferensial dikueri pada tampilan yang disebut ExamView. Data privasi diferensial harus berhasil ditampilkan dari ExamView karena epsilon, delta, dan max_groups_contributed semuanya memenuhi kondisi aturan analisis diferensial di 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 |
 *---------+--------------------*/

Memblokir kueri dengan epsilon di luar batas

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

Contoh:

Dalam kueri berikut, kueri diblokir dengan error karena epsilon dalam klausa DIFFERENTIAL_PRIVACY lebih tinggi dari max_epsilon_per_query di 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.

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

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

Memblokir kueri yang telah melampaui anggaran epsilon

Epsilon dapat digunakan untuk menambahkan atau menghapus derau. Semakin sedikit epsilon, semakin banyak derau, semakin banyak epsilon, semakin sedikit derau. Meskipun derau tinggi, beberapa kueri pada data yang sama pada akhirnya dapat mengungkapkan versi data yang tidak berisi derau. Untuk mencegah hal ini terjadi, Anda dapat membuat anggaran epsilon. Jika Anda ingin menambahkan anggaran epsilon, tinjau nilai untuk epsilon_budget dalam aturan analisis privasi diferensial untuk tampilan Anda.

Contoh:

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

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

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

Mencantumkan aturan analisis tumpang-tindih

Hanya baris yang tumpang-tindih yang dapat dikueri setelah operasi join, yang sesuai dengan aturan tumpang-tindih daftar. Anda dapat menerapkan aturan ini pada tampilan, menggunakan pernyataan DDL atau ruang bersih data.

Tampilan yang menyertakan aturan analisis ini hanya boleh menyertakan kebijakan pembatasan join.

Menentukan aturan analisis tumpang-tindih daftar untuk tampilan

Anda dapat menentukan aturan analisis tumpang-tindih daftar untuk tampilan di ruang bersih data atau dengan pernyataan 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;

Definisi:

  • join_restriction_policy: Kebijakan batasan penggabungan untuk aturan analisis tumpang-tindih daftar.

    • JOIN_CONDITION: Jenis tumpang-tindih daftar untuk diterapkan pada tampilan. Ini dapat berupa salah satu dari nilai berikut ini:

      • JOIN_ALL: Semua kolom di join_allowed_columns harus dihubungkan secara dalam agar tampilan ini dapat dikueri.

      • JOIN_ANY: Setidaknya satu 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.

Contoh:

Dalam contoh berikut, aturan analisis tumpang-tindih daftar dibuat di tampilan yang disebut ExamView. ExamView mereferensikan tabel bernama 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 );

Memperbarui aturan analisis tumpang-tindih daftar untuk tampilan

Anda dapat mengubah aturan analisis tumpang-tindih daftar untuk tampilan dengan ruang bersih data atau dengan pernyataan ALTER VIEW:

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

Untuk informasi selengkapnya tentang nilai yang dapat Anda tetapkan untuk kebijakan privasi dalam sintaksis sebelumnya, lihat Menentukan aturan analisis tumpang-tindih daftar untuk tampilan.

Contoh:

Pada contoh berikut, aturan analisis tumpang-tindih daftar diperbarui di tampilan yang disebut ExamView.

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.

Membuat kueri tampilan yang diberlakukan aturan analisis tumpang-tindih daftar

Anda dapat melakukan operasi join pada tampilan yang memiliki aturan analisis tumpang-tindih daftar. Untuk meninjau sintaksis operasi JOIN, lihat Operasi join.

Memblokir operasi join tanpa tumpang-tindih

Anda dapat memblokir operasi join jika tidak menyertakan setidaknya satu tumpang-tindih dengan kolom yang diperlukan.

Contoh:

Dalam kueri berikut, tampilan bernama ExamView digabungkan dengan tabel bernama StudentTable. Karena tampilan berisi aturan analisis tumpang-tindih daftar JOIN_ANY, setidaknya satu baris yang tumpang-tindih dari ExamView dan StudentTable diperlukan. Karena setidaknya ada satu tumpang-tindih, kueri berhasil berjalan.

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

Memblokir operasi join dalam tanpa seluruh tumpang-tindih

Anda dapat memblokir operasi join jika tidak menyertakan tumpang-tindih dengan semua kolom yang diperlukan.

Contoh:

Dalam contoh berikut, operasi join dicoba pada tampilan bernama ExamView dan tabel bernama StudentTable, tetapi kueri gagal. Kegagalan terjadi karena aturan analisis tumpang-tindih daftar ExamView memerlukan penggabungan pada semua kolom yang ada dalam kebijakan batasan penggabungan. Karena tabel yang disebut StudentTable tidak berisi kolom ini, tidak semua baris tumpang-tindih dan error akan dihasilkan.

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

Menggunakan kebijakan batasan bergabung dengan kebijakan lain

Kebijakan batasan penggabungan dapat digunakan dengan kebijakan lain dalam nilai minimum agregasi dan aturan analisis privasi diferensial. Namun, setelah menggunakan kebijakan batasan bergabung dengan kebijakan lain, Anda tidak dapat mengubah kebijakan lain tersebut setelahnya.

Contoh:

Pada contoh berikut, kebijakan batasan join digunakan dalam aturan analisis nilai minimum agregasi:

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

Memblokir operasi join tanpa kolom yang diperlukan

Anda dapat memblokir operasi join jika tidak menyertakan setidaknya satu kolom yang diperlukan. Untuk melakukannya, sertakan bagian berikut dalam aturan analisis tumpang-tindih daftar Anda:

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

Contoh:

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

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

Memblokir kueri tanpa operasi join

Jika kueri harus memiliki operasi join, Anda dapat memblokir kueri jika tidak ada operasi join menggunakan salah satu aturan analisis tumpang-tindih daftar berikut:

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

Contoh:

Dalam kueri berikut, kueri diblokir karena tidak ada operasi join dengan ExamViewdalam kueri:

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

Memblokir kueri tanpa operasi join dan tanpa kolom wajib

Jika kueri harus memiliki operasi join dan operasi join harus memiliki setidaknya satu kolom yang diperlukan, sertakan bagian berikut dalam aturan analisis tumpang-tindih daftar Anda:

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

Contoh:

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

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

Memblokir semua operasi join

Anda dapat memblokir semua operasi join. Untuk melakukannya, hanya sertakan bagian berikut dalam aturan analisis tumpang-tindih daftar:

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

Contoh:

Dalam kueri berikut, kueri diblokir karena ada operasi join dengan tampilan yang disebut 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);

Agar kueri sebelumnya dapat berjalan, hapus operasi INNER JOIN.

Memblokir operasi join dalam tanpa semua kolom yang diperlukan

Anda dapat memblokir operasi join dalam jika tidak menyertakan semua kolom yang diperlukan. Untuk melakukannya, sertakan bagian berikut dalam aturan analisis tumpang-tindih daftar Anda:

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

Contoh:

Dalam kueri berikut, kueri diblokir dengan error karena kueri tidak menyertakan test_score dalam operasi join dengan tampilan yang disebut 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);

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

Contoh tabel

Beberapa contoh dalam dokumen ini mereferensikan dua tabel yang disebut ExamTable dan StudentTable. ExamTable berisi daftar nilai ujian yang dihasilkan oleh siswa dan StudentTable berisi daftar siswa beserta nilai ujian mereka.

Untuk menguji contoh dalam dokumen ini, tambahkan tabel contoh berikut ke project Anda terlebih dahulu:

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

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

Aturan analisis nilai minimum agregasi memiliki batasan berikut:

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

Aturan analisis privasi diferensial memiliki batasan berikut:

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

Aturan analisis tumpang-tindih daftar memiliki batasan berikut:

  • Jika Anda menggabungkan aturan analisis nilai minimum agregasi atau aturan analisis privasi diferensial dengan aturan analisis tumpang-tindih daftar dan tidak menempatkan privacy_unit_column sebagai join_allowed_column dalam aturan analisis tumpang-tindih daftar, Anda mungkin tidak dapat menggabungkan kolom apa pun dalam situasi tertentu.

Harga