Membatasi akses data menggunakan aturan analisis

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

Apa itu aturan analisis?

Aturan analisis menerapkan kebijakan untuk berbagi data. Kebijakan merepresentasikan kondisi yang harus 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 Anda 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 tersebut. 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 pembatasan gabungan.

  • 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 pembatasan gabungan.

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

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 penggabungan dan secara opsional dapat menyertakan kebijakan pembatasan gabungan.

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 pembatasan bergabung opsional untuk aturan analisis nilai minimum agregasi.

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

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

      • JOIN_ANY: Setidaknya satu kolom di join_allowed_columns harus digabungkan agar tabel virtual 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: Gabungan tidak diperlukan untuk membuat kueri tampilan ini. Jika penggabungan digunakan, hanya kolom di join_allowed_columns yang dapat digunakan.

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

  • QUERY: Kueri untuk tabel virtual.

Contoh:

Dalam contoh berikut, aturan analisis nilai minimum agregasi dibuat pada tampilan bernama 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 batas 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 mengetahui informasi selengkapnya tentang nilai yang dapat Anda tetapkan untuk kebijakan privasi dalam sintaksis sebelumnya, lihat Menentukan aturan analisis nilai minimum agregasi untuk tabel virtual.

Contoh:

Dalam contoh berikut, aturan analisis nilai minimum agregasi diperbarui pada 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 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 pada tampilan bernama 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 secara opsional menyertakan kebijakan pembatasan gabungan. Untuk mempelajari cara menggunakan kebijakan pembatasan gabungan dengan aturan analisis, lihat Kebijakan pembatasan gabungan 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 jika jumlah epsilon atau delta semua kueri mencapai nilai total epsilon atau total delta. 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 gabungan.

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 merepresentasikan total epsilon yang dapat digunakan di semua kueri privasi 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 setiap baris dalam hasil gagal menjadi privasi diferensial epsilon. Nilai ini adalah angka JSON dari 1e-15 hingga 1.

    • DELTA_BUDGET: Anggaran delta, yang menampilkan total delta yang dapat digunakan di semua kueri privasi 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 bergabung opsional untuk aturan analisis privasi diferensial.

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

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

      • JOIN_ANY: Setidaknya satu kolom di join_allowed_columns harus digabungkan agar tabel virtual 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: Gabungan tidak diperlukan untuk membuat kueri tampilan ini. Jika penggabungan digunakan, hanya kolom di join_allowed_columns yang dapat digunakan.

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

  • QUERY: Kueri untuk tabel virtual.

Contoh:

Dalam contoh berikut, aturan analisis privasi diferensial dibuat pada tampilan bernama 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 mengetahui informasi selengkapnya tentang nilai yang dapat Anda tetapkan untuk kebijakan privasi dalam sintaksis sebelumnya, lihat Menentukan aturan analisis privasi diferensial untuk tabel virtual.

Contoh:

Pada contoh berikut, aturan analisis privasi diferensial diperbarui pada tampilan bernama 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 yang memiliki privasi diferensial akan 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. Nilai epsilon yang lebih besar berarti lebih sedikit derau yang akan ditambahkan. Jika Anda ingin memastikan bahwa kueri pribadi diferensial memiliki jumlah derau minimal, perhatikan baik-baik 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 daripada max_epsilon_per_query dalam 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. Epsilon yang lebih kecil akan meningkatkan derau, sedangkan epsilon yang lebih besar akan mengurangi derau. Meskipun noise tinggi, beberapa kueri pada data yang sama pada akhirnya dapat mengungkapkan versi data yang tidak memiliki noise. 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 gabungan, 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 gabungan.

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 pembatasan gabungan untuk aturan analisis tumpang-tindih daftar.

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

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

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

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

  • QUERY: Kueri untuk tabel virtual.

Contoh:

Dalam contoh berikut, aturan analisis tumpang-tindih daftar dibuat di tampilan bernama 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 mengetahui informasi selengkapnya tentang nilai yang dapat Anda tetapkan untuk kebijakan privasi dalam sintaksis sebelumnya, lihat Menentukan aturan analisis tumpang-tindih daftar untuk tabel virtual.

Contoh:

Dalam contoh berikut, aturan analisis tumpang-tindih daftar diperbarui pada tampilan bernama 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 menerapkan aturan analisis tumpang-tindih daftar

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

Memblokir operasi penggabungan tanpa tumpang-tindih

Anda dapat memblokir operasi gabungan jika tidak menyertakan setidaknya satu tumpang-tindih dengan kolom wajib diisi.

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 ada setidaknya satu tumpang-tindih, kueri berhasil dijalankan.

-- 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 gabungan dalam tanpa tumpang-tindih seluruhnya

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

Contoh:

Dalam contoh berikut, operasi gabungan 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 pembatasan gabungan. Karena tabel yang disebut StudentTable tidak berisi kolom ini, tidak semua baris tumpang-tindih dan error akan terjadi.

-- 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 pembatasan gabungan dapat digunakan dengan kebijakan lain dalam aturan analisis nilai minimum agregasi dan privasi diferensial. Namun, setelah Anda menggunakan kebijakan pembatasan gabungan dengan kebijakan lain, Anda tidak dapat mengubah kebijakan lain tersebut setelahnya.

Contoh:

Dalam contoh berikut, kebijakan pembatasan gabungan 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 gabungan tanpa kolom wajib diisi

Anda dapat memblokir operasi gabung jika tidak menyertakan setidaknya satu kolom wajib diisi. 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 gabungan 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 dijalankan, di klausa USING, ganti last_name dengan test_score.

Memblokir kueri tanpa operasi gabungan

Jika kueri harus memiliki operasi gabungan, Anda dapat memblokir kueri jika tidak ada operasi gabungan dengan 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 gabungan dengan ExamView dalam 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 gabungan dan tanpa kolom wajib diisi

Jika kueri harus memiliki operasi gabungan dan operasi gabungan 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 penggabungan tidak menyertakan kolom dalam array 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);

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

Memblokir semua operasi gabung

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

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

Contoh:

Dalam kueri berikut, kueri diblokir karena ada operasi penggabungan 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 dijalankan, hapus operasi INNER JOIN.

Memblokir operasi inner join tanpa semua kolom yang diperlukan

Anda dapat memblokir operasi inner join 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 gabungan 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 dapat dijalankan, 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 skor tes yang dihasilkan oleh siswa dan StudentTable berisi daftar siswa dan skor tes mereka.

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

-- 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 telah menambahkan aturan analisis ke tampilan, Anda tidak dapat beralih antara aturan analisis nilai minimum penggabungan dan aturan analisis privasi diferensial.

Aturan analisis nilai minimum agregasi memiliki batasan berikut:

  • Anda hanya dapat menggunakan fungsi agregat yang didukung dalam kueri di tabel virtual 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 tampilan 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 tampilan.
  • Time travel dinonaktifkan di 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 penggabungan atau aturan analisis privasi diferensial dengan aturan analisis tumpang-tindih daftar dan Anda 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

  • Tidak ada biaya tambahan untuk melampirkan aturan analisis ke tampilan.
  • Harga BigQuery standar untuk analisis berlaku.