

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Apa itu AWS Clean Rooms?
<a name="what-is"></a>

AWS Clean Rooms membantu Anda dan mitra Anda menganalisis dan berkolaborasi dalam kumpulan data kolektif Anda untuk mendapatkan wawasan baru tanpa mengungkapkan data yang mendasarinya satu sama lain. AWS Clean Rooms adalah ruang kerja kolaborasi yang aman, tempat Anda membuat kamar bersih sendiri dalam hitungan menit, dan menganalisis kumpulan data kolektif Anda hanya dengan beberapa langkah. Anda memilih mitra dengan siapa Anda ingin berkolaborasi, memilih kumpulan data mereka, dan mengonfigurasi kontrol peningkatan privasi untuk mitra tersebut. 

Dengan AWS Clean Rooms, Anda dapat berkolaborasi dengan ribuan perusahaan yang sudah menggunakan AWS. Kolaborasi tidak memerlukan pemindahan data dari AWS atau memuatnya ke penyedia layanan cloud lain. Saat Anda menjalankan kueri atau pekerjaan, AWS Clean Rooms membaca data dari lokasi asli data tersebut dan menerapkan aturan analisis bawaan untuk membantu Anda mempertahankan kendali atas data tersebut. 

AWS Clean Rooms menyediakan kontrol akses data bawaan dan kontrol dukungan audit yang dapat Anda konfigurasi. Kontrol ini meliputi: 
+ [Aturan analisis](analysis-rules.md) untuk membatasi kueri SQL dan memberikan kendala keluaran.
+ [Komputasi Kriptografi Clean Rooms untuk](crypto-computing.md) menjaga data terenkripsi, bahkan saat kueri diproses, untuk mematuhi kebijakan penanganan data yang ketat.
+ [Log analisis](query-logs.md) untuk meninjau kueri dan pekerjaan di AWS Clean Rooms dan membantu mendukung audit.
+ [Privasi diferensial](differential-privacy.md) untuk melindungi dari upaya identifikasi pengguna. AWS Clean Rooms Privasi Diferensial adalah kemampuan yang dikelola sepenuhnya yang melindungi privasi pengguna Anda dengan teknik yang didukung secara matematis dan kontrol intuitif yang dapat Anda terapkan dalam beberapa langkah.
+ [AWS Clean Rooms](machine-learning.md) untuk memungkinkan dua pihak mengidentifikasi pengguna serupa dalam data mereka tanpa perlu berbagi data satu sama lain. Pihak pertama membuat dan mengonfigurasi model yang mirip dari data pelatihan mereka. Kemudian, data benih dibawa ke kolaborasi untuk membuat segmen mirip yang menyerupai data pelatihan.

Video berikut menjelaskan lebih lanjut tentang AWS Clean Rooms.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/0S6icreVCO0/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/0S6icreVCO0)


## Apakah Anda AWS Clean Rooms pengguna pertama kali?
<a name="first-time-user"></a>

Jika Anda adalah pengguna pertama kali AWS Clean Rooms, kami sarankan Anda mulai dengan membaca bagian berikut:
+ [Bagaimana cara AWS Clean Rooms kerja](#how-it-works)
+ [Mengakses AWS Clean Rooms](#accessing-service)
+ [Menyiapkan AWS Clean Rooms](setting-up.md)
+ [AWS Clean Rooms Glosarium](glossary.md)

## Bagaimana cara AWS Clean Rooms kerja
<a name="how-it-works"></a>

Di AWS Clean Rooms, Anda membuat kolaborasi dan menambahkan Akun AWS yang ingin Anda undang, atau membuat keanggotaan untuk bergabung dengan kolaborasi yang telah diundang. Anda kemudian menautkan sumber daya data yang diperlukan untuk kasus penggunaan Anda: tabel yang dikonfigurasi untuk data peristiwa, model yang dikonfigurasi untuk pemodelan ML, atau ruang nama ID untuk resolusi entitas. Anda memiliki opsi untuk membuat atau menyetujui templat analisis untuk menyetujui terlebih dahulu pada pertanyaan dan pekerjaan yang tepat yang ingin Anda izinkan dalam kolaborasi. Terakhir, Anda menganalisis data bersama dengan menjalankan kueri atau PySpark pekerjaan SQL pada tabel yang dikonfigurasi, melakukan resolusi entitas dalam tabel pemetaan ID, atau menggunakan pemodelan ML untuk menghasilkan segmen audiens yang mirip. 

Diagram berikut menunjukkan cara AWS Clean Rooms kerja.

![\[Diagram menjelaskan cara kerja AWS Clean Rooms\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/images/how-it-works.png)


## Layanan terkait
<a name="related-services"></a>

### AWS layanan
<a name="related-services-aws"></a>

 Layanan AWS Berikut ini terkait dengan AWS Clean Rooms:
+ **Amazon Athena**

  Anggota kolaborasi dapat menyimpan data yang mereka bawa AWS Clean Rooms sebagai AWS Glue Data Catalog tampilan di Amazon Athena. Untuk informasi selengkapnya, lihat topik berikut:

  Untuk informasi selengkapnya, lihat topik berikut:

  [Mempersiapkan tabel data untuk kueri di AWS Clean Rooms](prepare-data.md)

  [Membuat tabel yang dikonfigurasi - sumber data Amazon Athena](create-config-table-athena.md)

  [Apa itu Amazon Athena?](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) di Panduan *Pengguna Amazon Athena*
+ **CloudFormation**

  Buat sumber daya berikut di CloudFormation: kolaborasi, tabel yang dikonfigurasi, asosiasi tabel yang dikonfigurasi, dan keanggotaan

  Untuk informasi selengkapnya, lihat [Menciptakan AWS Clean Rooms sumber daya dengan AWS CloudFormation](creating-resources-with-cloudformation.md).
+ **AWS CloudTrail**

  Gunakan AWS Clean Rooms dengan CloudTrail log untuk meningkatkan analisis Layanan AWS aktivitas Anda.

  Untuk informasi selengkapnya, lihat [Pencatatan panggilan AWS Clean Rooms API menggunakan AWS CloudTrail](logging-using-cloudtrail.md).
+ **Resolusi Entitas AWS**

  Gunakan AWS Clean Rooms dengan Resolusi Entitas AWS untuk melakukan resolusi entitas.

  Untuk informasi selengkapnya, lihat [Resolusi Entitas AWS di AWS Clean Rooms](working-with-entity-resolution.md).
+ **AWS Glue** 

  Anggota kolaborasi dapat membuat AWS Glue tabel dari data mereka di Amazon S3 untuk digunakan. AWS Clean Rooms

  Untuk informasi selengkapnya, lihat topik berikut:

  [Mempersiapkan tabel data untuk kueri di AWS Clean Rooms](prepare-data.md)

  [Apa itu AWS Glue?](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) di *Panduan Developer AWS Glue *
+ **Amazon Simple Storage Service** (Amazon S3) 

  Anggota kolaborasi dapat menyimpan data yang mereka bawa AWS Clean Rooms di Amazon S3. 

  Untuk informasi selengkapnya, lihat topik berikut:

  [Mempersiapkan tabel data untuk kueri di AWS Clean Rooms](prepare-data.md)

  [Membuat tabel yang dikonfigurasi - sumber data Amazon S3](create-config-table-s3.md)

  [Apa itu Amazon S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) di *Panduan Pengguna Layanan Penyimpanan Sederhana Amazon*
+ **AWS Secrets Manager**

  Anggota kolaborasi dapat membuat rahasia untuk mengakses dan membaca data yang disimpan di Snowflake.

  Untuk informasi selengkapnya, lihat topik berikut:

  [Buat peran layanan untuk membaca data dari Snowflake](setting-up-roles.md#create-service-role-third-party)

  [Mempersiapkan tabel data untuk kueri di AWS Clean Rooms](prepare-data.md)

  [Apa itu AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) dalam *AWS Secrets Manager Panduan Penggguna*

### Layanan pihak ketiga
<a name="third-party-servies-list"></a>

Layanan pihak ketiga berikut ini terkait dengan AWS Clean Rooms:
+ **Kepingan salju**

  Anggota kolaborasi dapat menyimpan data yang mereka bawa ke gudang AWS Clean Rooms Snowflake.

  Untuk informasi selengkapnya, lihat topik berikut:

  [Mempersiapkan tabel data untuk kueri di AWS Clean Rooms](prepare-data.md)

  [Membuat tabel yang dikonfigurasi — Sumber data Snowflake](create-config-table-snowflake.md)

## Mengakses AWS Clean Rooms
<a name="accessing-service"></a>

Anda dapat mengakses AWS Clean Rooms melalui opsi berikut:
+ Langsung melalui AWS Clean Rooms konsol di [https://console.aws.amazon.com/cleanrooms/](https://console.aws.amazon.com/cleanrooms/).
+ Secara terprogram melalui API. AWS Clean Rooms Untuk informasi lebih lanjut, lihat [Referensi API *AWS Clean Rooms *](https://docs.aws.amazon.com/clean-rooms/latest/apireference/Welcome.html).

## Harga untuk AWS Clean Rooms
<a name="pricing"></a>

Untuk informasi harga, lihat [Harga AWS Clean Rooms](https://aws.amazon.com/clean-rooms/pricing/).

**catatan**  
Untuk anggota kolaborasi yang mengaitkan data yang disimpan di Snowflake, Anda akan dikenakan biaya oleh penyedia gudang data atau penyedia cloud masing-masing untuk keluar data dan komputasi setiap kali kueri dijalankan yang menggunakan data yang disimpan di lokasi tersebut.

## Tagihan untuk AWS Clean Rooms
<a name="billing"></a>

AWS Clean Rooms memberikan pencipta kolaborasi kemampuan untuk menunjuk anggota mana yang membayar untuk kueri atau biaya komputasi pekerjaan dalam kolaborasi. 

Dalam kebanyakan kasus, [anggota yang dapat menanyakan](glossary.md#glossary-member-who-can-query) dan [anggota yang membayar biaya komputasi kueri](glossary.md#glossary-member-paying-for-query-compute) adalah sama. Namun, jika anggota yang dapat melakukan kueri dan anggota yang membayar biaya komputasi kueri berbeda, maka, ketika anggota yang dapat melakukan kueri menjalankan kueri terhadap sumber daya keanggotaan mereka sendiri, sumber daya keanggotaan anggota yang membayar biaya komputasi kueri akan ditagih. 

Anggota yang membayar biaya komputasi kueri tidak melihat peristiwa apa pun untuk kueri yang dijalankan dalam riwayat CloudTrail Acara mereka karena pembayar bukanlah orang yang menjalankan kueri maupun pemilik sumber daya tempat kueri dijalankan. Namun, pembayar memang melihat biaya yang dihasilkan pada sumber daya keanggotaan mereka untuk semua kueri yang dijalankan oleh anggota yang dapat menjalankan kueri dalam kolaborasi.

Untuk informasi selengkapnya tentang cara membuat kolaborasi dan mengonfigurasi anggota yang membayar biaya komputasi kueri, lihat[Menciptakan kolaborasi](create-collaboration.md).

# Aturan analisis di AWS Clean Rooms
<a name="analysis-rules"></a>

Sebagai bagian dari mengaktifkan tabel untuk digunakan AWS Clean Rooms untuk analisis kolaborasi, anggota kolaborasi harus mengonfigurasi *aturan analisis*.

Aturan analisis adalah kontrol peningkatan privasi yang disiapkan oleh setiap pemilik data pada tabel yang dikonfigurasi. Aturan analisis menentukan bagaimana tabel yang dikonfigurasi dapat dianalisis.

Aturan analisis adalah kontrol tingkat akun pada tabel yang dikonfigurasi (sumber daya tingkat akun) dan diberlakukan dalam kolaborasi apa pun di mana tabel yang dikonfigurasi dikaitkan. Jika tidak ada aturan analisis yang dikonfigurasi, tabel yang dikonfigurasi dapat dikaitkan dengan kolaborasi tetapi tidak dapat ditanyakan. Kueri hanya dapat mereferensikan tabel yang dikonfigurasi dengan jenis aturan analisis yang sama. 

Untuk mengonfigurasi aturan analisis, pertama-tama Anda memilih jenis analisis dan kemudian menentukan aturan analisis. Untuk kedua langkah tersebut, Anda harus mempertimbangkan kasus penggunaan yang ingin Anda aktifkan dan bagaimana Anda ingin melindungi data yang mendasarinya. 

AWS Clean Rooms memberlakukan kontrol yang lebih ketat di semua tabel yang dikonfigurasi yang direferensikan dalam kueri. 

Contoh berikut menggambarkan kontrol restriktif.

**Example Kontrol restriktif: Kendala keluaran**  
+ Kolaborator A memiliki kendala keluaran pada kolom pengidentifikasi 100. 
+ Kolaborator B memiliki kendala keluaran pada kolom pengidentifikasi 150. 

  Kueri agregasi yang mereferensikan kedua tabel yang dikonfigurasikan memerlukan setidaknya 150 nilai pengidentifikasi yang berbeda dalam baris keluaran agar dapat ditampilkan dalam output kueri. Output kueri tidak menunjukkan bahwa hasil dihapus karena kendala keluaran. 

**Example Kontrol restriktif: Template analisis tidak disetujui**  
+ Kolaborator A telah mengizinkan templat analisis dengan kueri yang mereferensikan tabel yang dikonfigurasi dari Kolaborator A dan Kolaborator B dalam aturan analisis kustom mereka. 
+ Kolaborator B tidak mengizinkan template analisis. 

  Karena Collaborator B tidak mengizinkan templat analisis, anggota yang dapat melakukan kueri tidak dapat menjalankan templat analisis tersebut. 

## Jenis aturan analisis
<a name="summary-table"></a>

Ada tiga jenis aturan analisis: [agregasi](analysis-rules-aggregation.md), [daftar](analysis-rules-list.md), dan [kustom](analysis-rules-custom.md). Tabel berikut membandingkan jenis aturan analisis. Setiap jenis memiliki bagian terpisah yang menjelaskan menentukan aturan analisis.

**catatan**  
Ada jenis aturan analisis yang disebut aturan analisis tabel pemetaan ID. Namun, aturan analisis ini dikelola oleh AWS Clean Rooms dan tidak dapat dimodifikasi. Untuk informasi selengkapnya, lihat [Aturan analisis tabel pemetaan ID](analysis-rules-id-mapping-table.md).

Bagian berikut menjelaskan kasus penggunaan dan kontrol yang didukung untuk setiap jenis aturan analisis.

### Kasus penggunaan yang didukung
<a name="supported-use-cases"></a>

Tabel berikut menunjukkan ringkasan perbandingan kasus penggunaan yang didukung untuk setiap jenis aturan analisis.


| Kasus penggunaan | [Agregasi](analysis-rules-aggregation.md) | [Daftar](analysis-rules-list.md) | [Kustom](analysis-rules-custom.md) | 
| --- | --- | --- | --- | 
| Analisis yang didukung | Kueri yang menggabungkan statistik menggunakan fungsi COUNT, SUM, dan AVG sepanjang dimensi opsional  | Kueri yang menampilkan daftar tingkat baris dari tumpang tindih antara beberapa tabel  | Analisis kustom apa pun selama templat analisis atau pembuat analisis telah ditinjau dan diizinkan  | 
| Kasus penggunaan umum | Analisis segmen, pengukuran, atribusi  | Pengayaan, pembangunan segmen  | Atribusi sentuhan pertama, analisis inkremental, penemuan audiens  | 
| Konstruksi SQL |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/analysis-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/analysis-rules.html)  | Mayoritas fungsi SQL dan konstruksi SQL tersedia dengan perintah SELECT | 
| Subquery dan ekspresi tabel umum () CTEs  | Tidak | Tidak | Ya | 
| Template analisis | Tidak | Tidak | Ya | 

### Kontrol yang didukung
<a name="supported-controls"></a>

Tabel berikut menunjukkan ringkasan perbandingan tentang bagaimana setiap jenis aturan analisis melindungi data dasar Anda.


| Pengendalian | [Agregasi](analysis-rules-aggregation.md) | [Daftar](analysis-rules-list.md) | [Kustom](analysis-rules-custom.md) | 
| --- | --- | --- | --- | 
| Mekanisme kontrol | Kontrol bagaimana data dalam tabel dapat digunakan dalam kueri*(Misalnya, izinkan COUNT dan SUM kolom hashed\$1email.)* | Kontrol bagaimana data dalam tabel dapat digunakan dalam kueri*(Misalnya, izinkan penggunaan kolom hashed\$1email hanya untuk bergabung.)* | Kontrol kueri apa yang diizinkan untuk berjalan di atas meja*(Misalnya, izinkan hanya kueri yang ditentukan dalam templat analisis “Kueri khusus 1".)* | 
| Teknik peningkatan privasi bawaan |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/analysis-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/analysis-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/analysis-rules.html)  | 
| Tinjau kueri sebelum dapat dijalankan | Tidak | Tidak | Ya, menggunakan templat analisis | 

Untuk informasi selengkapnya tentang aturan analisis yang tersedia AWS Clean Rooms, lihat topik berikut. 
+ [Aturan analisis agregasi](analysis-rules-aggregation.md)
+ [Aturan analisis daftar](analysis-rules-list.md)
+ [Aturan analisis kustom di AWS Clean Rooms](analysis-rules-custom.md)

# Aturan analisis agregasi
<a name="analysis-rules-aggregation"></a>

Dalam AWS Clean Rooms, *aturan analisis agregasi* menghasilkan statistik agregat menggunakan fungsi COUNT, SUM, and/or AVG sepanjang dimensi opsional. Ketika aturan analisis agregasi ditambahkan ke tabel yang dikonfigurasi, ini memungkinkan anggota yang dapat melakukan kueri untuk menjalankan kueri pada tabel yang dikonfigurasi.

Aturan analisis agregasi mendukung penggunaan kasus seperti perencanaan kampanye, jangkauan media, pengukuran frekuensi, dan atribusi. 

Struktur kueri dan sintaks yang didukung didefinisikan dalam[Struktur kueri agregasi dan sintaks](#agg-query-structure-syntax).

Parameter aturan analisis, yang didefinisikan dalam[Aturan analisis agregasi - kontrol kueri](#agg-query-controls), termasuk kontrol kueri dan kontrol hasil kueri. Kontrol kuerinya mencakup kemampuan untuk mengharuskan tabel yang dikonfigurasi digabungkan ke setidaknya satu tabel yang dikonfigurasi yang dimiliki oleh anggota yang dapat melakukan kueri, baik secara langsung maupun transitif. Persyaratan ini memungkinkan Anda untuk memastikan bahwa kueri dijalankan di persimpangan (INNERJOIN) tabel Anda dan mereka.

## Struktur kueri agregasi dan sintaks
<a name="agg-query-structure-syntax"></a>

Kueri pada tabel yang memiliki aturan analisis agregasi harus mematuhi sintaks berikut.

```
--select_aggregate_function_expression
SELECT 
aggregation_function(column_name) [[AS] column_alias ] [, ...]

 --select_grouping_column_expression                        
  [, {column_name|scalar_function(arguments)} [[AS] column_alias ]][, ...]   

--table_expression
FROM table_name [[AS] table_alias ]
  [[INNER] JOIN table_name [[AS] table_alias] ON join_condition] [...]

--where_expression
[WHERE where_condition]          

--group_by_expression                          
[GROUP BY {column_name|scalar_function(arguments)}, ...]]                  

--having_expression
[HAVING having_condition]                               

--order_by_expression    
[ORDER BY {column_name|scalar_function(arguments)} [{ASC|DESC}]] [,...]]
```

Tabel berikut menjelaskan setiap ekspresi yang tercantum dalam sintaks sebelumnya.


| Ekspresi | Definisi | Contoh | 
| --- | --- | --- | 
| select\$1aggregate\$1function\$1expression |  Daftar dipisahkan koma yang berisi ekspresi berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/analysis-rules-aggregation.html)  Harus ada setidaknya satu `select_aggregation_function_expression` di`select_aggregate_expression`.    |  `SELECT SUM(PRICE), user_segment`  | 
| select\$1aggregation\$1function\$1expression |  Satu atau lebih fungsi agregasi yang didukung diterapkan pada satu atau beberapa kolom. Hanya kolom yang diizinkan sebagai argumen fungsi agregasi.  Harus ada setidaknya satu `select_aggregation_function_expression` di`select_aggregate_expression`.    |  `AVG(PRICE)` `COUNT(DISTINCT user_id)`  | 
| select\$1grouping\$1column\$1expression |  Ekspresi yang dapat berisi ekspresi apa pun menggunakan berikut ini: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/analysis-rules-aggregation.html)  `select_aggregate_expression`dapat alias kolom dengan atau tanpa `AS` parameter. Untuk informasi selengkapnya, lihat [Referensi AWS Clean Rooms SQL](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html).   |  `TRUNC(timestampColumn)`  `UPPER(campaignName)`   | 
| table\$1expression |  Sebuah tabel, atau gabungan tabel, menghubungkan menggabungkan ekspresi kondisional dengan`join_condition`. `join_condition`mengembalikan Boolean.  `table_expression`Dukungan: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/analysis-rules-aggregation.html)  |  <pre>FROM consumer_table <br />INNER JOIN provider_table<br />ON<br />consumer_table.identifier1 = provider_table.identifier1<br />AND<br />consumer_table.identifier2 = provider_table.identifier2</pre>  | 
| where\$1expression |  Ekspresi kondisional yang mengembalikan Boolean. Ini mungkin terdiri dari yang berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/analysis-rules-aggregation.html) Kondisi perbandingan yang didukung adalah (`=, >, <, <=, >=, <>, !=, NOT, IN, NOT IN, LIKE, IS NULL, IS NOT NULL`).  Operator logis yang didukung adalah (`AND, OR`). `where_expression`Itu opsional.  |  `WHERE where_condition` `WHERE price > 100`  `WHERE TRUNC(timestampColumn) = '1/1/2022'`  `WHERE timestampColumn = timestampColumn2 - 14`   | 
| group\$1by\$1expression |  Daftar ekspresi yang dipisahkan koma yang cocok dengan persyaratan untuk. `select_grouping_column_expression`   |  `GROUP BY TRUNC(timestampColumn), UPPER(campaignName), segment`  | 
| having\$1expression |  Ekspresi kondisional yang mengembalikan Boolean. Mereka memiliki fungsi agregasi yang didukung diterapkan ke satu kolom (misalnya,`SUM(price)`) dan dibandingkan dengan literal numerik. Kondisi yang didukung adalah (`=, >, <, <=, >=, <>, !=`).  Operator logis yang didukung adalah (`AND, OR`). `having_expression`Itu opsional.  |  `HAVING SUM(SALES) > 500`  | 
| order\$1by\$1expression |  Daftar ekspresi yang dipisahkan koma yang kompatibel dengan persyaratan yang sama yang didefinisikan dalam `select_aggregate_expression` didefinisikan sebelumnya.  `order_by_expression`Itu opsional.  `order_by_expression`izin `ASC` dan `DESC` parameter. Untuk informasi selengkapnya, lihat parameter ASC DESC di Referensi [AWS Clean Rooms SQL](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html).   |  `ORDER BY SUM(SALES), UPPER(campaignName)`  | 

Untuk struktur kueri agregasi dan sintaks, perhatikan hal berikut:
+ Perintah SQL selain SELECT tidak didukung.
+ Sub-kueri dan ekspresi tabel umum (misalnya,WITH) tidak didukung.
+ Operator yang menggabungkan beberapa kueri (misalnya,UNION) tidak didukung. 
+ TOP,LIMIT, dan OFFSET parameter tidak didukung.

## Aturan analisis agregasi - kontrol kueri
<a name="agg-query-controls"></a>

Dengan kontrol kueri agregasi, Anda dapat mengontrol bagaimana kolom dalam tabel Anda digunakan untuk menanyakan tabel. Misalnya, Anda dapat mengontrol kolom mana yang digunakan untuk bergabung, kolom mana yang dapat dihitung, atau kolom mana yang dapat digunakan dalam WHERE pernyataan.

Bagian berikut menjelaskan setiap kontrol.

**Topics**
+ [Kontrol agregasi](#agg-functions)
+ [Bergabunglah dengan kontrol](#join-controls)
+ [Kontrol dimensi](#dimension-controls)
+ [Fungsi skalar](#scalar-functions)

### Kontrol agregasi
<a name="agg-functions"></a>

Dengan menggunakan *kontrol agregasi*, Anda dapat menentukan fungsi agregasi mana yang akan diizinkan, dan kolom apa yang harus diterapkan. Fungsi agregasi dapat digunakan dalamSELECT,HAVING, dan ORDER BY ekspresi.


| Kontrol | Definisi | Penggunaan | 
| --- | --- | --- | 
| aggregateColumns | Kolom kolom tabel dikonfigurasi yang Anda izinkan untuk digunakan dalam fungsi agregasi. |  `aggregateColumns`dapat digunakan di dalam fungsi agregasi diSELECT,HAVING, dan ORDER BY ekspresi. Beberapa juga `aggregateColumns` dapat dikategorikan sebagai `joinColumn` (didefinisikan nanti). Diberikan tidak `aggregateColumn` dapat juga dikategorikan sebagai `dimensionColumn` (didefinisikan nanti).  | 
| function | Fungsi COUNT, SUM, dan AVG yang Anda izinkan untuk digunakan di atas. aggregateColumns |  `function`dapat diterapkan pada `aggregateColumns` yang terkait dengannya.   | 

### Bergabunglah dengan kontrol
<a name="join-controls"></a>

Sebuah `JOIN` klausa digunakan untuk menggabungkan baris dari dua atau lebih tabel, berdasarkan kolom terkait di antara mereka.

Anda dapat menggunakan *kontrol Gabung* untuk mengontrol bagaimana tabel Anda dapat digabungkan ke tabel lain di`table_expression`. AWS Clean Rooms hanya mendukung INNERJOIN. INNERJOINpernyataan hanya dapat menggunakan kolom yang telah dikategorikan secara eksplisit sebagai `joinColumn` aturan analisis Anda, tunduk pada kontrol yang Anda tentukan. 

INNERJOINHarus beroperasi pada `joinColumn` dari tabel yang dikonfigurasi dan `joinColumn` dari tabel lain yang dikonfigurasi dalam kolaborasi. Anda memutuskan kolom mana dari tabel Anda dapat digunakan sebagai`joinColumn`.

Setiap kondisi kecocokan dalam ON klausa diperlukan untuk menggunakan kondisi perbandingan kesetaraan (`=`) antara dua kolom. 

Beberapa kondisi pertandingan dalam suatu ON klausa dapat berupa: 
+ Dikombinasikan menggunakan operator `AND` logis
+ Dipisahkan menggunakan operator `OR` logis

**catatan**  
Semua kondisi JOIN pertandingan harus cocok dengan satu baris dari setiap sisiJOIN. Semua kondisional yang dihubungkan oleh `OR` atau operator `AND` logis harus mematuhi persyaratan ini juga.

Berikut ini adalah contoh dari query dengan operator `AND` logis.

```
SELECT some_col, other_col 
FROM table1 
    JOIN table2 
    ON table1.id = table2.id AND table1.name = table2.name
```

Berikut ini adalah contoh dari query dengan operator `OR` logis.

```
SELECT some_col, other_col 
FROM table1 
    JOIN table2 
    ON table1.id = table2.id OR table1.name = table2.name
```


| Kontrol | Definisi | Penggunaan | 
| --- | --- | --- | 
| joinColumns | Kolom (jika ada) yang ingin Anda izinkan anggota yang dapat kueri untuk digunakan dalam INNER JOIN pernyataan. |  Spesifik juga `joinColumn` dapat dikategorikan sebagai `aggregateColumn` (lihat[Kontrol agregasi](#agg-functions)). Kolom yang sama tidak dapat digunakan sebagai `joinColumn` dan `dimensionColumns` (lihat nanti). Kecuali itu juga telah dikategorikan sebagai`aggregateColumn`, a tidak `joinColumn` dapat digunakan di bagian lain dari kueri selain. INNER JOIN  | 
| joinRequired | Kontrol apakah Anda memerlukan tabel INNER JOIN yang dikonfigurasi dari anggota yang dapat melakukan kueri.  |  Jika Anda mengaktifkan parameter ini, INNER JOIN diperlukan. Jika Anda tidak mengaktifkan parameter ini, INNER JOIN adalah opsional. Dengan asumsi Anda mengaktifkan parameter ini, anggota yang dapat melakukan kueri diminta untuk menyertakan tabel yang mereka miliki di INNERJOIN. Mereka harus meja JOIN Anda dengan mereka, baik secara langsung atau transitif (yaitu, menggabungkan meja mereka ke meja lain, yang dengan sendirinya bergabung dengan meja Anda).  | 

Berikut ini adalah contoh transitivitas.

```
ON 
my_table.identifer = third_party_table.identifier
....
ON
third_party_table.identifier = member_who_can_query_table.id
```

**catatan**  
Anggota yang dapat melakukan query juga dapat menggunakan `joinRequired` parameter. Dalam hal ini, kueri harus menggabungkan tabel mereka dengan setidaknya satu tabel lainnya. 

### Kontrol dimensi
<a name="dimension-controls"></a>

*Kontrol dimensi mengontrol* kolom di mana kolom agregasi dapat disaring, dikelompokkan, atau digabungkan.


| Kontrol | Definisi | Penggunaan | 
| --- | --- | --- | 
| dimensionColumns |  Kolom (jika ada) yang Anda izinkan anggota yang dapat kueri untuk digunakanSELECT,WHERE, GROUPBY, dan ORDERBY.  |  A `dimensionColumn` dapat digunakan dalam SELECT (`select_grouping_column_expression`),WHERE, GROUPBY, dan ORDERBY. Kolom yang sama tidak bisa berupa a`dimensionColumn`, a`joinColumn`, and/or an`aggregateColumn`.  | 

### Fungsi skalar
<a name="scalar-functions"></a>

Fungsi *skalar mengontrol fungsi* skalar mana yang dapat digunakan pada kolom dimensi.


| Kontrol | Definisi | Penggunaan | 
| --- | --- | --- | 
| scalarFunctions |  Fungsi skalar yang dapat digunakan `dimensionColumns` dalam kueri.  |  Menentukan fungsi skalar (jika ada) yang Anda izinkan (misalnya,CAST) untuk diterapkan pada. `dimensionColumns`  Fungsi skalar tidak dapat digunakan di atas fungsi lain atau di dalam fungsi lainnya. Argumen fungsi skalar dapat berupa kolom, literal string, atau literal numerik.  | 

Fungsi skalar berikut didukung:
+ Fungsi matematika - ABS, CEILING, FLOOR, LOG, LN, ROUND, SQRT
+ Fungsi pemformatan tipe data - CAST, CONVERT, TO\$1CHAR, TO\$1DATE, TO\$1NUMBER, TO\$1TIMESTAMP
+ Fungsi string - BAWAH, ATAS, TRIM, RTRIM, SUBSTRING
  + Untuk RTRIM, set karakter khusus untuk dipangkas tidak diperbolehkan. 
+ Ekspresi bersyarat - COALESCE
+ Fungsi tanggal - EXTRACT, GETDATE, CURRENT\$1DATE, DATEADD
+ Fungsi lainnya - TRUNC

Untuk detail selengkapnya, lihat [Referensi AWS Clean Rooms SQL](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html).

## Aturan analisis agregasi - kontrol hasil kueri
<a name="agg-query-results-controls"></a>

Dengan kontrol hasil kueri agregasi, Anda dapat mengontrol hasil mana yang dikembalikan dengan menentukan satu atau beberapa kondisi yang harus dipenuhi oleh setiap baris keluaran agar dapat dikembalikan. AWS Clean Rooms mendukung kendala agregasi dalam bentuk. `COUNT (DISTINCT column) >= X` Formulir ini mengharuskan setiap baris menggabungkan setidaknya X nilai pilihan yang berbeda dari tabel Anda yang dikonfigurasi (misalnya, jumlah minimum `user_id` nilai yang berbeda). Ambang batas minimum ini secara otomatis diberlakukan, bahkan jika kueri yang dikirimkan itu sendiri tidak menggunakan kolom yang ditentukan. Mereka diberlakukan secara kolektif di setiap tabel yang dikonfigurasi dalam kueri dari tabel yang dikonfigurasi dari setiap anggota dalam kolaborasi. 

Setiap tabel yang dikonfigurasi harus memiliki setidaknya satu batasan agregasi dalam aturan analisisnya. Pemilik tabel yang dikonfigurasi dapat menambahkan beberapa `columnName` dan terkait `minimum` dan diberlakukan secara kolektif. 

### Kendala agregasi
<a name="agg-constraints"></a>

*Batasan agregasi* mengontrol baris mana dalam hasil kueri yang dikembalikan. Untuk dikembalikan, baris harus memenuhi jumlah minimum yang ditentukan dari nilai berbeda di setiap kolom yang ditentukan dalam batasan agregasi. Persyaratan ini berlaku bahkan jika kolom tidak disebutkan secara eksplisit dalam kueri atau di bagian lain dari aturan analisis.


| Kontrol | Definisi | Penggunaan | 
| --- | --- | --- | 
| columnName |  `aggregateColumn`Yang digunakan dalam kondisi bahwa setiap baris output harus memenuhi.  |  Dapat berupa kolom apa pun di tabel yang dikonfigurasi.  | 
| minimum |  Jumlah minimum nilai berbeda untuk yang terkait `aggregateColumn` yang harus dimiliki baris keluaran (misalnya, COUNT DISTINCT) agar dapat dikembalikan dalam hasil kueri.   |  `minimum`Harus minimal nilai 2.  | 

## Struktur aturan analisis agregasi
<a name="agg-analysis-rule-template"></a>

Contoh berikut menunjukkan struktur yang telah ditetapkan untuk aturan analisis agregasi. 

Dalam contoh berikut, *`MyTable`* mengacu pada tabel data Anda. Anda dapat mengganti masing-masing *user input placeholder* dengan informasi Anda sendiri. 

```
{
  "aggregateColumns": [
    {
      "columnNames": [MyTable column names], "function": [Allowed Agg Functions]
    },
  ],
  "joinRequired": ["QUERY_RUNNER"],  
  "joinColumns": [MyTable column names],
  "dimensionColumns": [MyTable column names],
  "scalarFunctions": [Allowed Scalar functions],
  "outputConstraints": [
    {
      "columnName": [MyTable column names], "minimum": [Numeric value] 
    },
  ]
}
```

## Aturan analisis agregasi - contoh
<a name="agg-analysis-rule-example"></a>

Contoh berikut menunjukkan bagaimana dua perusahaan dapat berkolaborasi dalam AWS Clean Rooms menggunakan analisis agregasi.

Perusahaan A memiliki data pelanggan dan penjualan. Perusahaan A tertarik untuk memahami aktivitas pengembalian produk. Perusahaan B adalah salah satu pengecer Perusahaan A dan memiliki data pengembalian. Perusahaan B juga memiliki atribut segmen pada pelanggan yang berguna bagi Perusahaan A (misalnya, membeli produk terkait, menggunakan layanan pelanggan dari pengecer). Perusahaan B tidak ingin memberikan data pengembalian pelanggan tingkat baris dan informasi atribut. Perusahaan B hanya ingin mengaktifkan serangkaian kueri untuk Perusahaan A untuk mendapatkan statistik agregat tentang pelanggan yang tumpang tindih pada ambang agregasi minimum. 

Perusahaan A dan Perusahaan B memutuskan untuk berkolaborasi sehingga Perusahaan A dapat memahami aktivitas pengembalian produk dan memberikan produk yang lebih baik di Perusahaan B dan saluran lainnya. 

Untuk membuat kolaborasi dan menjalankan analisis agregasi, perusahaan melakukan hal berikut: 

1. Perusahaan A menciptakan kolaborasi dan menciptakan keanggotaan. Kolaborasi ini menjadikan Perusahaan B sebagai anggota lain dalam kolaborasi tersebut. Perusahaan A memungkinkan pencatatan kueri dalam kolaborasi, dan memungkinkan pencatatan kueri di akun mereka. 

1. Perusahaan B menciptakan keanggotaan dalam kolaborasi. Ini memungkinkan pencatatan kueri di akunnya. 

1. Perusahaan A membuat tabel penjualan yang dikonfigurasi.

1. Perusahaan A menambahkan aturan analisis agregasi berikut ke tabel yang dikonfigurasi penjualan.

   ```
   {
     "aggregateColumns": [
       {
         "columnNames": [
           "identifier"
         ],
         "function": "COUNT_DISTINCT"
       },
       {
         "columnNames": [
           "purchases"
         ],
         "function": "AVG"
       },
       {
         "columnNames": [
           "purchases"
         ],
         "function": "SUM"
       }
     ],
     "joinColumns": [
       "hashedemail"
     ],
     "dimensionColumns": [
       "demoseg",
       "purchasedate",
       "productline"
     ],
     "scalarFunctions": [
       "CAST",
       "COALESCE",
       "TRUNC"
     ],
     "outputConstraints": [
       {
         "columnName": "hashedemail",
         "minimum": 2,
         "type": "COUNT_DISTINCT"
       },
     ]
   }
   ```

   `aggregateColumns`Perusahaan A ingin menghitung jumlah pelanggan unik dalam tumpang tindih antara data penjualan dan data pengembalian. Perusahaan A juga ingin menjumlahkan jumlah yang `purchases` dibuat untuk dibandingkan dengan jumlah`returns`.

   `joinColumns`— Perusahaan A ingin menggunakan `identifier` untuk mencocokkan pelanggan dari data penjualan ke pelanggan dari data pengembalian. Ini akan membantu perusahaan A match kembali ke pembelian yang tepat. Ini juga membantu segmen Perusahaan A tumpang tindih pelanggan.

   `dimensionColumns`— Perusahaan A menggunakan `dimensionColumns` untuk memfilter berdasarkan produk tertentu, membandingkan pembelian dan pengembalian selama periode waktu tertentu, memastikan tanggal pengembalian setelah tanggal produk, dan membantu segmen pelanggan yang tumpang tindih. 

   `scalarFunctions`— Perusahaan A memilih fungsi `CAST` skalar untuk membantu memperbarui format tipe data jika diperlukan berdasarkan tabel yang dikonfigurasi Perusahaan A terkait dengan kolaborasi. Ini juga menambahkan fungsi skalar untuk membantu memformat kolom jika diperlukan. 

   `outputConstraints`— Perusahaan A menetapkan batasan output minimum. Tidak perlu membatasi hasil karena analis diizinkan untuk melihat data tingkat baris dari tabel penjualan mereka 
**catatan**  
Perusahaan A tidak termasuk `joinRequired` dalam aturan analisis. Ini memberikan fleksibilitas bagi analis mereka untuk menanyakan tabel penjualan saja.

1. Perusahaan B membuat tabel yang dikonfigurasi pengembalian.

1. Perusahaan B menambahkan aturan analisis agregasi berikut ke tabel pengembalian yang dikonfigurasi.

   ```
   {
     "aggregateColumns": [
       {
         "columnNames": [
           "identifier"
         ],
         "function": "COUNT_DISTINCT"
       },
       {
         "columnNames": [
           "returns"
         ],
         "function": "AVG"
       },
       {
         "columnNames": [
           "returns"
         ],
         "function": "SUM"
       }
     ],
     "joinColumns": [
       "hashedemail"
     ],
     "joinRequired": [
       "QUERY_RUNNER"
     ],
     "dimensionColumns": [
       "state",
       "popularpurchases",
       "customerserviceuser",
       "productline",
       "returndate"
     ],
     "scalarFunctions": [
       "CAST",
       "LOWER",
       "UPPER",
       "TRUNC"
     ],
     "outputConstraints": [
       {
         "columnName": "hashedemail",
         "minimum": 100,
         "type": "COUNT_DISTINCT"
       },
       {
         "columnName": "producttype",
         "minimum": 2,
         "type": "COUNT_DISTINCT"
       }
     ]
   }
   ```

   `aggregateColumns`— Perusahaan B memungkinkan Perusahaan A untuk menjumlahkan `returns` untuk dibandingkan dengan jumlah pembelian. Mereka memiliki setidaknya satu kolom agregat karena mereka mengaktifkan kueri agregat. 

   `joinColumns`— Perusahaan B memungkinkan Perusahaan A untuk bergabung `identifier` untuk mencocokkan pelanggan dari data pengembalian ke pelanggan dari data penjualan. `identifier`data sangat sensitif dan memilikinya sebagai `joinColumn` memastikan bahwa data tidak akan pernah dikeluarkan dalam kueri. 

   `joinRequired`— Perusahaan B membutuhkan kueri pada data pengembalian agar tumpang tindih dengan data penjualan. Mereka tidak ingin mengaktifkan Perusahaan A untuk menanyakan semua individu dalam kumpulan data mereka. Mereka juga menyetujui pembatasan itu dalam perjanjian kolaborasi mereka. 

   `dimensionColumns`— Perusahaan B memungkinkan Perusahaan A untuk memfilter dan mengelompokkan berdasarkan `state``popularpurchases`,, dan `customerserviceuser` yang merupakan atribut unik yang dapat membantu membuat analisis untuk Perusahaan A. Perusahaan B memungkinkan Perusahaan A untuk menggunakan `returndate` untuk menyaring output pada `returndate` yang terjadi setelahnya`purchasedate`. Dengan penyaringan ini, output lebih akurat untuk mengevaluasi dampak perubahan produk. 

   `scalarFunctions`— Perusahaan B memungkinkan hal-hal berikut: 
   + TRUNC untuk tanggal
   + LOWER dan UPPER jika `producttype` dimasukkan dalam format yang berbeda dalam data mereka
   + CASTjika Perusahaan A perlu mengonversi tipe data dalam penjualan agar sama dengan tipe data dalam pengembalian

   Perusahaan A tidak mengaktifkan fungsi skalar lainnya karena mereka tidak percaya bahwa mereka diperlukan untuk kueri.

   `outputConstraints`Perusahaan B menetapkan batasan output minimum `hashedemail` untuk membantu mengurangi kemampuan untuk mengidentifikasi kembali pelanggan. Ini juga menambahkan kendala keluaran minimum `producttype` untuk mengurangi kemampuan mengidentifikasi kembali produk tertentu yang dikembalikan. Jenis produk tertentu bisa lebih dominan berdasarkan dimensi output (misalnya,`state`). Kendala output mereka akan selalu diberlakukan terlepas dari kendala output yang ditambahkan oleh Perusahaan A ke data mereka. 

1. Perusahaan A menciptakan asosiasi tabel penjualan untuk kolaborasi.

1. Perusahaan B menciptakan asosiasi tabel pengembalian untuk kolaborasi.

1. Perusahaan A menjalankan kueri, seperti contoh berikut, untuk lebih memahami jumlah pengembalian di Perusahaan B dibandingkan dengan total pembelian berdasarkan lokasi pada tahun 2022.

   ```
   SELECT
     companyB.state,
     SUM(companyB.returns),
     COUNT(DISTINCT companyA.hashedemail)
   FROM
     sales companyA
     INNER JOIN returns companyB ON companyA.identifier = companyB.identifier
   WHERE
     companyA.purchasedate BETWEEN '2022-01-01' AND '2022-12-31' AND
     TRUNC(companyB.returndate) > companyA.purchasedate
   GROUP BY
     companyB.state;
   ```

1. Perusahaan A dan Perusahaan B meninjau log kueri. Perusahaan B memverifikasi bahwa kueri sejalan dengan apa yang disepakati dalam perjanjian kolaborasi. 

## Memecahkan masalah aturan analisis agregasi
<a name="troubleshooting-agg-analysis-rule"></a>

Gunakan informasi di sini untuk membantu Anda mendiagnosis dan memperbaiki masalah umum saat Anda bekerja dengan aturan analisis agregasi. 

**Topics**
+ [Kueri saya tidak mengembalikan hasil apa pun](#query-no-results)

### Kueri saya tidak mengembalikan hasil apa pun
<a name="query-no-results"></a>

Hal ini dapat terjadi ketika tidak ada hasil yang cocok atau ketika hasil yang cocok tidak memenuhi satu atau lebih ambang agregasi minimum. 

Untuk informasi selengkapnya tentang ambang agregasi minimum, lihat. [Aturan analisis agregasi - contoh](#agg-analysis-rule-example)

# Aturan analisis daftar
<a name="analysis-rules-list"></a>

Dalam AWS Clean Rooms, *aturan analisis daftar* menampilkan daftar tingkat baris tumpang tindih antara tabel yang dikonfigurasi yang ditambahkan dan tabel yang dikonfigurasi dari anggota yang dapat melakukan kueri. Anggota yang dapat melakukan kueri menjalankan kueri yang menyertakan aturan analisis daftar.

Jenis aturan analisis daftar mendukung penggunaan kasus seperti pengayaan dan pembangunan audiens. 

Untuk informasi selengkapnya tentang struktur kueri dan sintaks yang telah ditentukan untuk aturan analisis ini, lihat. [Daftar aturan analisis struktur yang telah ditentukan](#intersection-list-params-template)

Parameter aturan analisis daftar, didefinisikan dalam[Aturan analisis daftar - kontrol kueri](#parameters-list-query-controls), memiliki kontrol kueri. Kontrol kuerinya mencakup kemampuan untuk memilih kolom yang dapat dicantumkan dalam output. Kueri diperlukan untuk memiliki setidaknya satu gabungan dengan tabel yang dikonfigurasi dari anggota yang dapat melakukan kueri, baik secara langsung maupun transitif.

Tidak ada kontrol hasil kueri seperti yang ada untuk [aturan analisis Agregasi](analysis-rules-aggregation.md). 

Kueri daftar hanya dapat menggunakan operator matematika. Mereka tidak dapat menggunakan fungsi lain (seperti agregasi atau skalar).

**Topics**
+ [Daftar struktur kueri dan sintaks](#list-query-controls)
+ [Aturan analisis daftar - kontrol kueri](#parameters-list-query-controls)
+ [Daftar aturan analisis struktur yang telah ditentukan](#intersection-list-params-template)
+ [Aturan analisis daftar - contoh](#list-example)

## Daftar struktur kueri dan sintaks
<a name="list-query-controls"></a>

Kueri pada tabel yang memiliki aturan analisis daftar harus mematuhi sintaks berikut. 

```
--select_list_expression
SELECT DISTINCT column_name [[AS] column_alias ] [, ...] 

--table_expression
FROM table_name [[AS] table_alias ]
  [[INNER] JOIN table_name [[AS] table_alias] ON join_condition] [...]

--where_expression
[WHERE where_condition]          

--limit_expression
[LIMIT number]
```

Tabel berikut menjelaskan setiap ekspresi yang tercantum dalam sintaks sebelumnya. 


| Ekspresi | Definisi | Contoh | 
| --- | --- | --- | 
| select\$1list\$1expression |  Daftar dipisahkan koma yang berisi setidaknya satu nama kolom tabel. Diperlukan `DISTINCT` parameter.   Kolom alias `select_list_expression` kaleng dengan atau tanpa `AS` parameter.  Untuk informasi selengkapnya, lihat [Referensi AWS Clean Rooms SQL](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html).   |  `SELECT DISTINCT segment`  | 
| table\$1expression |  Sebuah tabel, atau gabungan tabel, dengan `join_condition` untuk menghubungkannya`join_condition`.  `join_condition`mengembalikan Boolean.  `table_expression`Dukungan: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/analysis-rules-list.html)  |  <pre>FROM consumer_table <br />INNER JOIN provider_table<br />ON<br />consumer_table.identifier1 = provider_table.identifier1<br />AND<br />consumer_table.identifier2 = provider_table.identifier2</pre>  | 
| where\$1expression | Ekspresi kondisional yang mengembalikan Boolean. Ini dapat terdiri dari yang berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/analysis-rules-list.html)Kondisi perbandingan yang didukung adalah (`=, >, <, <=, >=, <>, !=, NOT, IN, NOT IN, LIKE, IS NULL, IS NOT NULL`). Operator logika yang didukung adalah (`AND, OR`).`where_expression`Itu opsional. |  `WHERE state + '_' + city = 'NY_NYC'` `WHERE timestampColumn = timestampColumn2 - 14`   | 
| limit\$1expression |  Ekspresi ini harus mengambil bilangan bulat positif. `limit_expression`Itu opsional.   |  `LIMIT 100`  | 

Untuk struktur kueri daftar dan sintaks, perhatikan hal berikut:
+ Perintah SQL selain SELECT tidak didukung.
+ Subkueri dan ekspresi tabel umum (misalnya,WITH) tidak didukung
+ BYKlausul HAVING GROUPBY,, dan ORDER tidak didukung
+ Parameter OFFSET tidak didukung

## Aturan analisis daftar - kontrol kueri
<a name="parameters-list-query-controls"></a>

Dengan kontrol kueri daftar, Anda dapat mengontrol bagaimana kolom dalam tabel Anda digunakan untuk menanyakan tabel. Misalnya, Anda dapat mengontrol kolom mana yang digunakan untuk bergabung, atau kolom mana yang dapat digunakan dalam pernyataan dan WHERE klausa SELECT.

Bagian berikut menjelaskan setiap kontrol.

**Topics**
+ [Bergabunglah dengan kontrol](#list-controls-join-controls)
+ [Kontrol daftar](#list-controls)

### Bergabunglah dengan kontrol
<a name="list-controls-join-controls"></a>

Dengan *kontrol Gabung*, Anda dapat mengontrol bagaimana tabel Anda dapat digabungkan ke tabel lain di **table\$1expression**. AWS Clean Rooms hanya mendukung INNER JOIN. Dalam aturan analisis daftar, setidaknya satu INNER JOIN diperlukan dan anggota yang dapat melakukan kueri diminta untuk menyertakan tabel yang mereka miliki di INNER JOIN. Ini berarti mereka harus menggabungkan meja Anda dengan meja mereka, baik secara langsung maupun transitif.

Berikut ini adalah contoh transitivitas.

```
ON 
my_table.identifer = third_party_table.identifier 
.... 
ON 
third_party_table.identifier = member_who_can_query_table.id
```

INNERPernyataan JOIN hanya dapat menggunakan kolom yang secara eksplisit dikategorikan sebagai aturan analisis `joinColumn` Anda. 

INNERJOIN harus beroperasi pada `joinColumn` dari tabel yang dikonfigurasi dan `joinColumn` dari tabel lain yang dikonfigurasi dalam kolaborasi. Anda memutuskan kolom mana dari tabel Anda dapat digunakan sebagai`joinColumn`. 

Setiap kondisi kecocokan dalam ON klausa diperlukan untuk menggunakan kondisi perbandingan kesetaraan (`=`) antara dua kolom. 

Beberapa kondisi pertandingan dalam suatu ON klausa dapat berupa:
+ Dikombinasikan menggunakan operator `AND` logis
+ Dipisahkan menggunakan operator `OR` logis

**catatan**  
Semua kondisi JOIN pertandingan harus cocok dengan satu baris dari setiap sisiJOIN. Semua kondisional yang dihubungkan oleh `OR` atau operator `AND` logis harus mematuhi persyaratan ini juga.

Berikut ini adalah contoh dari query dengan operator `AND` logis.

```
SELECT some_col, other_col 
FROM table1 
    JOIN table2 
    ON table1.id = table2.id AND table1.name = table2.name
```

Berikut ini adalah contoh dari query dengan operator `OR` logis.

```
SELECT some_col, other_col 
FROM table1 
    JOIN table2 
    ON table1.id = table2.id OR table1.name = table2.name
```


| Kontrol | Definisi | Penggunaan | 
| --- | --- | --- | 
| joinColumns | Kolom yang ingin Anda izinkan anggota yang dapat kueri untuk digunakan dalam pernyataan INNER JOIN. |  Kolom yang sama tidak dapat dikategorikan sebagai a `joinColumn` dan `listColumn` (lihat[Kontrol daftar](#list-controls)). `joinColumn`tidak dapat digunakan di bagian lain dari kueri selain INNER JOIN.  | 

### Kontrol daftar
<a name="list-controls"></a>

*Kontrol daftar mengontrol* kolom yang dapat dicantumkan dalam output kueri (yaitu, digunakan dalam pernyataan SELECT) atau digunakan untuk memfilter hasil (yaitu, digunakan dalam WHERE pernyataan).


| Kontrol | Definisi | Penggunaan | 
| --- | --- | --- | 
| listColumns | Kolom yang Anda izinkan anggota yang dapat kueri untuk digunakan dalam SELECT dan WHERE | A listColumn dapat digunakan di SELECT danWHERE.Kolom yang sama tidak dapat digunakan sebagai a `listColumn` dan`joinColumn`. | 

## Daftar aturan analisis struktur yang telah ditentukan
<a name="intersection-list-params-template"></a>

Contoh berikut mencakup struktur yang telah ditentukan yang menunjukkan bagaimana Anda menyelesaikan aturan analisis daftar. 

Dalam contoh berikut, *`MyTable`* mengacu pada tabel data Anda. Anda dapat mengganti masing-masing *user input placeholder* dengan informasi Anda sendiri. 

```
{
  "joinColumns": [MyTable column name(s)],
  "listColumns": [MyTable column name(s)],
}
```

## Aturan analisis daftar - contoh
<a name="list-example"></a>

Contoh berikut menunjukkan bagaimana dua perusahaan dapat berkolaborasi dalam AWS Clean Rooms menggunakan analisis daftar.

Perusahaan A memiliki data manajemen hubungan pelanggan (CRM). Perusahaan A ingin mendapatkan data segmen tambahan pada pelanggannya untuk mempelajari lebih lanjut tentang pelanggan mereka dan berpotensi menggunakan atribut sebagai masukan ke dalam analisis lain. Perusahaan B memiliki data segmen yang terdiri dari atribut segmen unik yang mereka buat berdasarkan data pihak pertama mereka. Perusahaan B ingin memberikan atribut segmen unik kepada Perusahaan A hanya pada pelanggan yang tumpang tindih antara data mereka dan data Perusahaan A. 

Perusahaan memutuskan untuk berkolaborasi sehingga Perusahaan A dapat memperkaya data yang tumpang tindih. Perusahaan A adalah anggota yang dapat menanyakan, dan Perusahaan B adalah kontributor.

Untuk membuat kolaborasi dan menjalankan analisis daftar secara kolaborasi, perusahaan melakukan hal berikut: 

1. Perusahaan A menciptakan kolaborasi dan menciptakan keanggotaan. Kolaborasi ini memiliki Perusahaan B sebagai anggota lain dalam kolaborasi tersebut. Perusahaan A memungkinkan pencatatan kueri dalam kolaborasi, dan memungkinkan pencatatan kueri di akunnya. 

1. Perusahaan B menciptakan keanggotaan dalam kolaborasi. Ini memungkinkan pencatatan kueri di akunnya. 

1. Perusahaan A membuat tabel yang dikonfigurasi CRM

1. Perusahaan A menambahkan aturan analisis ke tabel yang dikonfigurasi pelanggan, seperti yang ditunjukkan pada contoh berikut.

   ```
   {
     "joinColumns": [
       "identifier1",
       "identifier2"
     ],
     "listColumns": [
       "internalid",
       "segment1",
       "segment2",
       "customercategory"
     ]
   }
   ```

   `joinColumns`Perusahaan A ingin menggunakan `hashedemail` and/or `thirdpartyid` (diperoleh dari vendor identitas) untuk mencocokkan pelanggan dari data CRM ke pelanggan dari data segmen. Ini akan membantu memastikan Perusahaan A mencocokkan data yang diperkaya untuk pelanggan yang tepat. Mereka memiliki dua JoinColumns untuk berpotensi meningkatkan tingkat kecocokan analisis. 

   `listColumns`— Perusahaan A menggunakan `listColumns` untuk mendapatkan kolom yang diperkaya di samping yang `internalid` mereka gunakan dalam sistem mereka sendiri. Mereka menambahkan`segment1`,`segment2`, dan `customercategory` berpotensi membatasi pengayaan ke segmen tertentu dengan menggunakannya dalam filter. 

1. Perusahaan B membuat tabel yang dikonfigurasi segmen.

1. Perusahaan B menambahkan aturan analisis ke tabel yang dikonfigurasi segmen. 

   ```
   {
     "joinColumns": [
       "identifier2"
     ],
     "listColumns": [
       "segment3",
       "segment4"
     ]
   }
   ```

   `joinColumns`— Perusahaan B memungkinkan Perusahaan A untuk bergabung `identifier2` untuk mencocokkan pelanggan dari data segmen ke data CRM. Perusahaan A dan Perusahaan B bekerja dengan vendor identitas untuk mendapatkan `identifier2` mana yang cocok untuk kolaborasi ini. Mereka tidak menambahkan yang lain `joinColumns` karena mereka percaya `identifier2` memberikan tingkat kecocokan tertinggi dan paling akurat dan pengidentifikasi lain tidak diperlukan untuk kueri. 

   `listColumns`Perusahaan B memungkinkan Perusahaan A untuk memperkaya data mereka dengan `segment3` dan `segment4` atribut yang merupakan atribut unik yang telah mereka buat, kumpulkan, dan selaraskan (dengan pelanggan A) untuk menjadi bagian dari pengayaan data. Mereka ingin Perusahaan A mendapatkan segmen ini untuk tumpang tindih pada tingkat baris karena ini adalah kolaborasi pengayaan data. 

1. Perusahaan A menciptakan asosiasi tabel CRM untuk kolaborasi.

1. Perusahaan B menciptakan asosiasi tabel segmen untuk kolaborasi.

1. Perusahaan A menjalankan kueri, seperti yang berikut untuk memperkaya data pelanggan yang tumpang tindih. 

   ```
   SELECT companyA.internalid, companyB.segment3, companyB.segment4
   INNER JOIN returns companyB
    ON companyA.identifier2 = companyB.identifier2
   WHERE companyA.customercategory > 'xxx'
   ```

1. Perusahaan A dan Perusahaan B meninjau log kueri. Perusahaan B memverifikasi bahwa kueri sejalan dengan apa yang disepakati dalam perjanjian kolaborasi.

# Aturan analisis kustom di AWS Clean Rooms
<a name="analysis-rules-custom"></a>

Dalam AWS Clean Rooms, *aturan analisis kustom* adalah jenis aturan analisis baru yang memungkinkan kueri kustom dijalankan pada tabel yang dikonfigurasi. [Kueri SQL khusus masih dibatasi untuk hanya memiliki SELECT perintah tetapi dapat menggunakan lebih banyak konstruksi SQL daripada [agregasi](analysis-rules-aggregation.md#agg-query-controls) dan kueri [daftar](analysis-rules-list.md#list-query-controls) (misalnya, fungsi jendela, OUTER JOIN CTEs, atau subquery; lihat Referensi SQL untuk daftar lengkap).AWS Clean Rooms](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html) [Kueri SQL kustom tidak harus mengikuti struktur kueri seperti [agregasi](analysis-rules-aggregation.md#agg-query-structure-syntax) dan kueri daftar.](analysis-rules-list.md#list-query-controls) 

Aturan analisis kustom mendukung kasus penggunaan yang lebih maju daripada yang dapat didukung oleh aturan agregasi dan analisis daftar seperti analisis atribusi khusus, pembandingan, analisis inkrementalitas, dan penemuan audiens. Ini merupakan tambahan dari superset kasus penggunaan yang didukung oleh agregasi dan aturan analisis daftar. 

Aturan analisis kustom juga mendukung privasi diferensial. Privasi diferensial adalah kerangka kerja yang ketat secara matematis untuk perlindungan privasi data. Untuk informasi selengkapnya, lihat [AWS Clean Rooms Privasi Diferensial](differential-privacy.md). Saat Anda membuat templat analisis, Privasi AWS Clean Rooms Diferensial memeriksa templat untuk menentukan apakah templat tersebut kompatibel dengan struktur kueri tujuan umum untuk AWS Clean Rooms Privasi Diferensial. Validasi ini memastikan bahwa Anda tidak membuat templat analisis yang tidak diizinkan dengan tabel yang dilindungi privasi diferensial.

Untuk mengonfigurasi aturan analisis kustom, pemilik data dapat memilih untuk mengizinkan kueri khusus tertentu, yang disimpan dalam [templat analisis](create-analysis-template.md), untuk dijalankan pada tabel yang dikonfigurasi. Pemilik data meninjau templat analisis sebelum menambahkannya ke kontrol analisis yang diizinkan dalam aturan analisis khusus. Template analisis tersedia dan hanya terlihat dalam kolaborasi di mana mereka dibuat (bahkan jika tabel dikaitkan dengan kolaborasi lain) dan hanya dapat dijalankan oleh anggota yang dapat melakukan kueri dalam kolaborasi itu.

Atau, anggota dapat memilih untuk mengizinkan anggota lain (penyedia kueri) untuk membuat kueri tanpa ulasan. Anggota menambahkan akun penyedia kueri yang dikendalikan oleh penyedia kueri yang diizinkan dalam aturan analisis kustom. Jika penyedia kueri adalah anggota yang dapat melakukan kueri, mereka dapat menjalankan kueri apa pun secara langsung pada tabel yang dikonfigurasi. Penyedia kueri juga dapat membuat kueri dengan [membuat templat analisis](create-analysis-template.md). Setiap kueri yang telah dibuat oleh penyedia kueri secara otomatis diizinkan untuk berjalan di atas meja di semua kolaborasi di mana Akun AWS ada dan tabel terkait.

Pemilik data hanya dapat mengizinkan templat analisis atau akun untuk membuat kueri, bukan keduanya. Jika pemilik data membiarkannya kosong, anggota yang dapat melakukan kueri tidak dapat menjalankan kueri pada tabel yang dikonfigurasi.

**Topics**
+ [Aturan analisis kustom struktur yang telah ditentukan](#custom-predefined-structure)
+ [Contoh aturan analisis kustom](#custom-example)
+ [Aturan analisis khusus dengan privasi diferensial](#custom-diff-privacy)

## Aturan analisis kustom struktur yang telah ditentukan
<a name="custom-predefined-structure"></a>

Contoh berikut mencakup struktur yang telah ditentukan yang menunjukkan kepada Anda cara menyelesaikan aturan analisis kustom dengan privasi diferensial diaktifkan. `userIdentifier`*Nilai adalah kolom yang secara unik mengidentifikasi pengguna Anda, seperti user\$1id.* Bila Anda memiliki dua atau lebih tabel dengan privasi diferensial diaktifkan dalam kolaborasi, AWS Clean Rooms Anda harus mengonfigurasi kolom yang sama dengan kolom pengenal pengguna di kedua aturan analisis untuk mempertahankan definisi pengguna yang konsisten di seluruh tabel. 

```
{
  "allowedAnalyses": ["ANY_QUERY"] | string[],
  "allowedAnalysisProviders": [],
  "differentialPrivacy": {
    "columns": [
      {
        "name": "userIdentifier"
      }
    ]
  }
}
```

Anda dapat: 
+ Tambahkan template analisis ARNs ke kontrol analisis yang diizinkan. Dalam hal ini, `allowedAnalysisProviders` kontrol tidak termasuk.

  ```
  {
    allowedAnalyses: string[]
  }
  ```
+ Tambahkan anggota Akun AWS IDs ke `allowedAnalysisProviders` kontrol. Dalam hal ini, Anda `ANY_QUERY` menambah `allowedAnalyses` kontrol. 

  ```
  {
    allowedAnalyses: ["ANY_QUERY"],
    allowedAnalysisProviders: string[]
  }
  ```

## Contoh aturan analisis kustom
<a name="custom-example"></a>

Contoh berikut menunjukkan bagaimana dua perusahaan dapat berkolaborasi dalam AWS Clean Rooms menggunakan aturan analisis kustom.

Perusahaan A memiliki data pelanggan dan penjualan. Perusahaan A tertarik untuk memahami peningkatan penjualan kampanye iklan di situs Perusahaan B. Perusahaan B memiliki data pemirsa dan atribut segmen yang berguna bagi Perusahaan (misalnya, perangkat yang mereka gunakan saat melihat iklan). 

Perusahaan A memiliki kueri inkrementalitas tertentu yang ingin mereka jalankan dalam kolaborasi. 

Untuk membuat kolaborasi dan menjalankan analisis kustom dalam kolaborasi, perusahaan melakukan hal berikut: 

1. Perusahaan A menciptakan kolaborasi dan menciptakan keanggotaan. Kolaborasi ini memiliki Perusahaan B sebagai anggota lain dalam kolaborasi tersebut. Perusahaan A memungkinkan pencatatan kueri dalam kolaborasi, dan memungkinkan pencatatan kueri di akunnya. 

1. Perusahaan B menciptakan keanggotaan dalam kolaborasi. Ini memungkinkan pencatatan kueri di akunnya. 

1. Perusahaan A membuat tabel yang dikonfigurasi CRM

1. Perusahaan A menambahkan aturan analisis kustom kosong ke tabel penjualan yang dikonfigurasi.

1. Perusahaan A mengaitkan tabel penjualan yang dikonfigurasi untuk kolaborasi.

1. Perusahaan B membuat tabel yang dikonfigurasi pemirsa.

1. Perusahaan B menambahkan aturan analisis kustom kosong ke tabel yang dikonfigurasi pemirsa.

1. Perusahaan B mengaitkan tabel yang dikonfigurasi pemirsa dengan kolaborasi.

1. Perusahaan A melihat tabel penjualan dan tabel pemirsa yang terkait dengan kolaborasi dan membuat templat analisis, menambahkan kueri inkrementalitas dan parameter untuk bulan kampanye.

   ```
   {
       "analysisParameters": [
       {
           "defaultValue": ""
           "type": "DATE"
           "name": "campaign_month"
       }
       ],
       "description": "Monthly incrementality query using sales and viewership data"
       "format": "SQL"
       "name": "Incrementality analysis"
       "source": 
           "WITH labeleddata AS
           (
           SELECT hashedemail, deviceid, purchases, unitprice, purchasedate,
           CASE
               WHEN testvalue IN ('value1', 'value2', 'value3') THEN 0
               ELSE 1
           END AS testgroup
           FROM viewershipdata
           )
           SELECT labeleddata.purchases, provider.impressions
           FROM labeleddata 
           INNER JOIN salesdata
             ON labeleddata.hashedemail = provider.hashedemail
           WHERE MONTH(labeleddata.purchasedate) > :campaignmonth
           AND testgroup = :group
          "
   }
   ```

1. Perusahaan A menambahkan akun mereka (misalnya, 444455556666) ke kontrol penyedia analisis yang diizinkan dalam aturan analisis khusus. Mereka menggunakan kontrol penyedia analisis yang diizinkan karena mereka ingin mengizinkan kueri apa pun yang mereka buat berjalan di tabel yang dikonfigurasi penjualan mereka.

   ```
   {
     "allowedAnalyses": [
       "ANY_QUERY"
     ],
     "allowedAnalysisProviders": [
       "444455556666"
     ]
   }
   ```

1. Perusahaan B melihat template analisis yang dibuat dalam kolaborasi dan meninjau isinya termasuk string kueri dan parameter.

1. Perusahaan B menentukan bahwa templat analisis mencapai kasus penggunaan inkrementalitas dan memenuhi persyaratan privasi mereka tentang bagaimana tabel yang dikonfigurasi pemirsa mereka dapat ditanyakan.

1. Perusahaan B menambahkan templat analisis ARN ke kontrol analisis yang diizinkan dalam aturan analisis khusus dari tabel pemirsa. Mereka menggunakan kontrol analisis yang diizinkan karena mereka hanya ingin mengizinkan kueri inkrementalitas berjalan pada tabel yang dikonfigurasi pemirsa mereka.

   ```
   {
     "allowedAnalyses": [
       "arn:aws:cleanrooms:us-east-1:111122223333:membership/41327cc4-bbf0-43f1-b70c-a160dddceb08/analysistemplate/1ff1bf9d-781c-418d-a6ac-2b80c09d6292"
     ]
   }
   ```

1. Perusahaan A menjalankan template analisis dan menggunakan nilai parameter`05-01-2023`.

## Aturan analisis khusus dengan privasi diferensial
<a name="custom-diff-privacy"></a>

Pada tahun AWS Clean Rooms, aturan analisis kustom mendukung privasi diferensial. Privasi diferensial adalah kerangka kerja yang ketat secara matematis untuk perlindungan privasi data yang membantu Anda melindungi data Anda dari upaya identifikasi ulang.

Privasi diferensial mendukung analisis agregat seperti perencanaan kampanye iklan, post-ad-campaign pengukuran, pembandingan dalam konsorsium lembaga keuangan, dan pengujian A/B untuk penelitian kesehatan.

Struktur kueri dan sintaks yang didukung didefinisikan dalam[Struktur kueri dan sintaks](#dp-query-structure-syntax).

### Aturan analisis khusus dengan contoh privasi diferensial
<a name="custom-diff-privacy-example"></a>

**catatan**  
AWS Clean Rooms Privasi Diferensial hanya tersedia untuk kolaborasi di mana data disimpan di Amazon S3.

Pertimbangkan [contoh aturan analisis kustom](#custom-example) yang disajikan di bagian sebelumnya. Contoh ini menunjukkan bagaimana Anda dapat menggunakan privasi diferensial untuk melindungi data Anda dari upaya identifikasi ulang sambil memungkinkan mitra Anda mempelajari wawasan penting bisnis dari data Anda. Asumsikan bahwa Perusahaan B, yang memiliki data pemirsa, ingin melindungi data mereka menggunakan privasi diferensial. Untuk menyelesaikan pengaturan privasi diferensial, Perusahaan B menyelesaikan langkah-langkah berikut:

1. Perusahaan B mengaktifkan privasi diferensial sambil menambahkan aturan analisis kustom ke tabel yang dikonfigurasi pemirsa. Perusahaan B memilih `viewershipdata.hashedemail` sebagai kolom pengenal pengguna.

1. Perusahaan B [menambahkan kebijakan privasi diferensial](configure-differential-privacy.md) dalam kolaborasi untuk membuat tabel data pemirsa mereka tersedia untuk kueri. Perusahaan B memilih kebijakan default untuk menyelesaikan penyiapan dengan cepat.

Perusahaan A, yang ingin memahami peningkatan penjualan kampanye iklan di situs Perusahaan B, menjalankan templat analisis. Karena kueri kompatibel dengan [struktur kueri](#dp-query-structure-syntax) tujuan umum Privasi AWS Clean Rooms Diferensial, kueri berjalan dengan sukses. 

### Struktur kueri dan sintaks
<a name="dp-query-structure-syntax"></a>

Kueri yang berisi setidaknya satu tabel yang mengaktifkan privasi diferensial harus mematuhi sintaks berikut.

```
query_statement:
    [cte, ...] final_select

 cte:
    WITH sub_query AS (
       inner_select
       [ UNION | INTERSECT | UNION_ALL | EXCEPT/MINUS ]
       [ inner_select ]
    )
   
 inner_select:
     SELECT [user_id_column, ] expression [, ...] 
     FROM table_reference [, ...] 
     [ WHERE condition ]
     [ GROUP BY user_id_column[, expression] [, ...] ] 
     [ HAVING condition ] 

 final_select:
     SELECT [expression, ...] | COUNT | COUNT_DISTINCT | SUM | AVG | STDDEV
     FROM table_reference [, ...]
     [ WHERE condition ]
     [ GROUP BY expression [, ...] ] 
     [ HAVING COUNT | COUNT_DISTINCT | SUM | AVG | STDDEV | condition ]
     [ ORDER BY column_list ASC | DESC ] 
     [ OFFSET literal ]
     [ LIMIT literal ]

 expression:
    column_name [, ...] | expression AS alias | aggregation_functions | window_functions_on_user_id | scalar_function | CASE | column_name math_expression [, expression]  
    
 window_functions_on_user_id:
    function () OVER (PARTITION BY user_id_column, [column_name] [ORDER BY column_list ASC|DESC])
```

**catatan**  
Untuk struktur dan sintaks kueri privasi diferensial, perhatikan hal-hal berikut:   
Sub-kueri tidak didukung. 
Common Table Expressions (CTEs) harus memancarkan kolom pengenal pengguna jika tabel atau CTE melibatkan data yang dilindungi oleh privasi diferensial. Filter, pengelompokan, dan agregasi harus dilakukan di tingkat pengguna.
Final\$1select memungkinkan fungsi agregat COUNT DISTINCT, COUNT, SUM, AVG, dan STDDEV.

Untuk detail selengkapnya tentang kata kunci SQL yang didukung untuk privasi diferensial, lihat. [Kemampuan SQL dari AWS Clean Rooms Differential Privacy](dp-sql-capabilities.md)

# Aturan analisis tabel pemetaan ID
<a name="analysis-rules-id-mapping-table"></a>

Dalam AWS Clean Rooms, *aturan analisis tabel pemetaan ID bukanlah aturan* analisis mandiri. Jenis aturan analisis ini dikelola oleh AWS Clean Rooms dan digunakan untuk menggabungkan data identitas yang berbeda untuk memfasilitasi kueri. Ini secara otomatis ditambahkan ke tabel pemetaan ID dan tidak dapat diedit. Ini mewarisi perilaku aturan analisis lain dalam kolaborasi — selama aturan analisis tersebut homogen.

Aturan analisis tabel pemetaan ID memberlakukan keamanan pada tabel pemetaan ID. Ini membatasi anggota kolaborasi dari langsung memilih atau memeriksa populasi yang tidak tumpang tindih antara kumpulan data kedua anggota menggunakan tabel pemetaan ID. Aturan analisis tabel pemetaan ID digunakan untuk melindungi data sensitif dalam tabel pemetaan ID saat digunakan dalam kueri dengan aturan analisis lainnya secara implisit.

Dengan aturan analisis tabel pemetaan ID, AWS Clean Rooms memberlakukan tumpang tindih di kedua sisi tabel pemetaan ID di SQL yang diperluas. Ini memungkinkan Anda untuk melakukan tugas-tugas berikut: 
+ Gunakan tumpang tindih tabel pemetaan ID dalam JOIN pernyataan.

  AWS Clean Rooms memungkinkanINNER,LEFT, atau RIGHT bergabung pada tabel pemetaan ID jika menghormati tumpang tindih. Untuk melindungi informasi pemetaan sensitif, tabel pemetaan ID harus selalu berada di sisi "inner" dari operasi apa punJOIN. Misalnya, JOIN operasi berikut ini valid:
  + table LEFT JOIN id\$1mapping\$1table
  + id\$1mapping\$1table RIGHT JOIN table
  + table INNER JOIN id\$1mapping\$1table

  JOINOperasi berikut tidak valid:
  + id\$1mapping\$1table LEFT JOIN table
  + table RIGHT JOIN id\$1mapping\$1table

  Ini mencegah eksposur catatan pemetaan yang tidak memiliki kecocokan yang sesuai dalam kumpulan data Anda. Mengizinkan operasi semacam itu berpotensi mengungkapkan informasi sensitif tentang pemetaan data anggota kolaborasi lainnya.
+ Gunakan kolom tabel pemetaan dalam JOIN pernyataan. 

  Anda tidak dapat menggunakan kolom tabel pemetaan dalam pernyataan berikut:SELECT,,, WHERE HAVINGGROUP BY, atau ORDER BY (kecuali perlindungan diubah pada asosiasi namespace ID sumber atau asosiasi namespace ID target).
+ Dalam SQL diperluas, AWS Clean Rooms juga mendukung, implisit OUTER JOINJOIN, dan CROSS. JOIN Penggabungan ini tidak dapat memenuhi persyaratan tumpang tindih. Sebagai gantinya, AWS Clean Rooms gunakan `requireOverlap` untuk menentukan kolom mana yang harus digabungkan.

Struktur kueri dan sintaks yang didukung didefinisikan dalam. [Struktur kueri tabel pemetaan ID dan sintaks](#id-mapping-table-query-controls)

Parameter aturan analisis, didefinisikan dalam[Kontrol kueri aturan analisis tabel pemetaan ID](#parameters-id-mapping-query-controls), termasuk kontrol kueri dan kontrol hasil kueri. Kontrol kuerinya mencakup kemampuan untuk memerlukan tumpang tindih tabel pemetaan ID dalam JOIN pernyataan (yaitu,`requireOverlap`).

**Topics**
+ [Struktur kueri tabel pemetaan ID dan sintaks](#id-mapping-table-query-controls)
+ [Kontrol kueri aturan analisis tabel pemetaan ID](#parameters-id-mapping-query-controls)
+ [Aturan analisis tabel pemetaan ID struktur yang telah ditentukan](#id-mapping-table-predefined-structure)
+ [Aturan analisis tabel pemetaan ID - contoh](#id-mapping-table-example)

## Struktur kueri tabel pemetaan ID dan sintaks
<a name="id-mapping-table-query-controls"></a>

Kueri pada tabel yang memiliki aturan analisis tabel pemetaan ID harus mematuhi sintaks berikut.

```
--select_list_expression
SELECT 
provider.data_col, consumer.data_col 

--table_expression
FROM provider

JOIN idMappingTable idmt ON provider.id = idmt.sourceId

JOIN consumer ON consumer.id = idmt.targetId
```

### Tabel kolaborasi
<a name="collab-table-structure"></a>

Tabel berikut mewakili tabel dikonfigurasi yang ada dalam AWS Clean Rooms kolaborasi. Kolom **id** di tabel **cr\$1drivers\$1license dan **cr\$1insurance**** mewakili kolom yang cocok dengan tabel pemetaan ID.

**cr\$1drivers\$1license**


|  |  |  | 
| --- |--- |--- |
| id | driver\$1name | state\$1of\$1registrasi | 
| 1 | Eduard | TX | 
| 2 | Dana | MA | 
| 3 | Gweneth | IL | 

**cr\$1asuransi**


|  |  |  | 
| --- |--- |--- |
| id | pemegang kebijakan\$1email | policy\$1number | 
| a | eduardo@internal.company.com | 17f9d04e-f5be-4426-bdc4-250ed59c6529 | 
| b | gwen@internal.company.com | 3f0092db-2316-48a8-8d44-09cf8f6e6c64 | 
| c | rosa@internal.company.com | d7692e84-3d3c-47b8-b46d-a0d5345f0601 | 

### Tabel pemetaan ID
<a name="id-mapping-table-structure"></a>

**Tabel berikut merupakan tabel pemetaan ID yang ada yang cocok pada tabel **cr\$1drivers\$1license dan cr\$1insurance**.** Tidak semua entri akan dimiliki IDs untuk kedua tabel kolaborasi.


|  |  | 
| --- |--- |
| cr\$1drivers\$1license\$1id | cr\$1insurance\$1id | 
| 1 | a | 
| 2 | null | 
| 3 | b | 
| null | c | 

Aturan analisis tabel pemetaan ID hanya memungkinkan kueri berjalan pada kumpulan data yang tumpang tindih, yang akan terlihat sebagai berikut:


|  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |
| cr\$1drivers\$1license\$1id | cr\$1insurance\$1id | driver\$1name | state\$1of\$1registrasi | pemegang kebijakan\$1email | policy\$1number | 
| 1 | a | Eduard | TX | eduardo@internal.company.com | 17f9d04e-f5be-4426-bdc4-250ed59c6529 | 
| 3 | b | Gweneth | IL | gwen@internal.company.com | 3f0092db-2316-48a8-8d44-09cf8f6e6c64 | 

### Kueri contoh
<a name="id-mapping-table-example-queries"></a>

Contoh berikut menunjukkan lokasi yang valid untuk bergabung dengan tabel pemetaan ID:

```
-- Single ID mapping table
SELECT
    [ select_items ]FROM
    cr_drivers_license cr_dl
    [ INNER | LEFT ] JOIN cr_identity_mapping_table idmt ON idmt.cr_drivers_license_id = cr_dl.id
    [ INNER | RIGHT ] JOIN cr_insurance cr_in            ON idmt.cr_insurance_id       = cr_in.id
;
-- Single ID mapping table (Subquery)
SELECT
    [ select_items ]FROM (
    SELECT
        [ select_items ]
    FROM
        cr_drivers_license cr_dl
        [ INNER | LEFT ] JOIN cr_identity_mapping_table idmt ON idmt.cr_drivers_license_id = cr_dl.id
        [ INNER | RIGHT ] JOIN cr_insurance cr_in            ON idmt.cr_insurance_id       = cr_in.id
)
;
-- Single ID mapping table (CTE)
WITH
    matched_ids AS (
        SELECT
            [ select_items ]
        FROM
            cr_drivers_license cr_dl
            [ INNER | LEFT ] JOIN cr_identity_mapping_table idmt ON idmt.cr_drivers_license_id = cr_dl.id
            [ INNER | RIGHT ] JOIN cr_insurance cr_in            ON idmt.cr_insurance_id       = cr_in.id
    )SELECT
    [ select_items ]FROM
    matched_ids
;
```

### Pertimbangan-pertimbangan
<a name="id-mapping-table-considerations"></a>

Untuk struktur kueri tabel pemetaan ID dan sintaks, perhatikan hal berikut:
+ Anda tidak dapat mengeditnya.
+ Ini diterapkan ke tabel pemetaan ID secara default.
+ Ini menggunakan asosiasi namespace ID sumber dan target di dalam kolaborasi. 
+ Tabel pemetaan ID dikonfigurasi secara default untuk memberikan perlindungan default untuk kolom yang berasal dari namepsace ID. Anda dapat memodifikasi konfigurasi ini sehingga kolom yang berasal dari namespace ID (salah satu `sourceID` atau`targetID`) dapat diizinkan di mana saja dalam kueri. Untuk informasi selengkapnya, lihat [Ruang nama ID di AWS Clean Rooms](working-with-id-namespaces.md).
+ Aturan analisis tabel pemetaan ID mewarisi batasan SQL dari aturan analisis lainnya dalam kolaborasi.

## Kontrol kueri aturan analisis tabel pemetaan ID
<a name="parameters-id-mapping-query-controls"></a>

Dengan kontrol kueri tabel pemetaan ID, AWS Clean Rooms mengontrol bagaimana kolom dalam tabel Anda digunakan untuk menanyakan tabel. Misalnya, ia mengontrol kolom mana yang digunakan untuk bergabung, dan kolom mana yang memerlukan tumpang tindih. Aturan analisis tabel pemetaan ID juga mencakup fungsionalitas yang memungkinkan Anda mengizinkan`sourceID`,`targetID`, atau keduanya, diproyeksikan tanpa memerlukan JOIN. 

Tabel berikut menjelaskan setiap kontrol.


| Kontrol | Definisi | Penggunaan | 
| --- | --- | --- | 
| joinColumns | Kolom yang dapat digunakan anggota yang dapat kueri dalam pernyataan INNER JOIN. | Anda tidak dapat menggunakan joinColumns di bagian lain dari kueri selain INNER JOIN.Untuk informasi selengkapnya, lihat [Bergabunglah dengan kontrol](analysis-rules-aggregation.md#join-controls). | 
| dimensionColumns  | Kolom (jika ada) yang dapat digunakan anggota yang dapat kueri dalam pernyataan SELECT dan GROUP BY.  |  A `dimensionColumn` dapat digunakan di SELECT dan GROUPBY. A `dimensionColumn` dapat muncul sebagai`joinKeys`.  Anda hanya dapat menggunakan `dimensionColumns` dalam klausa JOIN jika Anda menentukannya dalam tanda kurung.  | 
| queryContraints:RequireOverlap |  Kolom dalam tabel pemetaan ID yang harus digabungkan sehingga kueri dapat berjalan.  |  Kolom ini harus digunakan untuk BERGABUNG dengan tabel Pemetaan ID dan tabel kolaborasi.  | 

## Aturan analisis tabel pemetaan ID struktur yang telah ditentukan
<a name="id-mapping-table-predefined-structure"></a>

Struktur yang ditentukan sebelumnya untuk aturan analisis tabel pemetaan ID dilengkapi dengan perlindungan default yang diterapkan pada dan. `sourceID` `targetID` Ini berarti bahwa kolom dengan perlindungan yang diterapkan harus digunakan dalam kueri.

Anda dapat mengonfigurasi aturan analisis tabel pemetaan ID dengan cara berikut:
+ Keduanya `sourceID` dan `targetID` dilindungi

  Dalam konfigurasi ini, `sourceID` dan keduanya tidak `targetID` dapat diproyeksikan. `sourceID`Dan `targetID` harus digunakan dalam JOIN ketika tabel pemetaan ID direferensikan.
+ Hanya `targetID` dilindungi

  Dalam konfigurasi ini, tidak `targetID` dapat diproyeksikan. `targetID`Harus digunakan dalam JOIN ketika tabel pemetaan ID direferensikan. Ini `sourceID` dapat digunakan dalam kueri.
+ Hanya `sourceID` dilindungi

  Dalam konfigurasi ini, tidak `sourceID` dapat diproyeksikan. `sourceID`Harus digunakan dalam JOIN ketika tabel pemetaan ID direferensikan. Ini `targetID` dapat digunakan dalam kueri.
+ Tidak ada `sourceID` atau `targetID` dilindungi

  Dalam konfigurasi ini, tabel pemetaan ID tidak tunduk pada penegakan khusus apa pun yang dapat digunakan dalam kueri.

Contoh berikut menunjukkan struktur yang telah ditentukan sebelumnya untuk aturan analisis tabel pemetaan ID dengan perlindungan default yang diterapkan pada dan. `sourceID` `targetID` Dalam contoh ini, aturan analisis tabel pemetaan ID hanya mengizinkan INNER JOIN pada `sourceID` kolom dan `targetID` kolom. 

```
{
  "joinColumns": [
    "source_id",
    "target_id"
  ],
  "queryConstraints": [
    {
      "requireOverlap": {
        "columns": [
          "source_id",
          "target_id"
        ]
      }
    }
  ],
  "dimensionColumns": [] // columns that can be used in SELECT and JOIN
}
```

Contoh berikut menunjukkan struktur yang telah ditentukan sebelumnya untuk aturan analisis tabel pemetaan ID dengan perlindungan yang diterapkan pada. `targetID` Dalam contoh ini, aturan analisis tabel pemetaan ID hanya mengizinkan INNER JOIN pada `sourceID` kolom. 

```
{
  "joinColumns": [
    "source_id",
    "target_id"
  ],
  "queryConstraints": [
    {
      "requireOverlap": {
        "columns": [
          "target_id"
        ]
      }
    }
  ],
  "dimensionColumns": [
    "source_id"
  ]
}
```

Contoh berikut menunjukkan struktur yang telah ditentukan sebelumnya untuk aturan analisis tabel pemetaan ID dengan perlindungan yang diterapkan pada. `sourceID` Dalam contoh ini, aturan analisis tabel pemetaan ID hanya mengizinkan INNER JOIN pada `targetID` kolom. 

```
{
  "joinColumns": [
    "source_id",
    "target_id"
  ],
  "queryConstraints": [
    {
      "requireOverlap": {
        "columns": [
          "source_id"
        ]
      }
    }
  ],
  "dimensionColumns": [
    "target_id"
  ]
}
```

Contoh berikut menunjukkan struktur yang ditentukan sebelumnya untuk aturan analisis tabel pemetaan ID tanpa perlindungan yang diterapkan pada or. `sourceID` `targetID` Dalam contoh ini, aturan analisis tabel pemetaan ID memungkinkan INNER JOIN pada `sourceID` kolom dan `targetID` kolom. 

```
{
  "joinColumns": [
    "source_id",
    "target_id"
  ],
  "queryConstraints": [
    {
      "requireOverlap": {
        "columns": []
      }
    }
  ],
  "dimensionColumns": [
    "source_id",
    "target_id"
  ]
}
```

## Aturan analisis tabel pemetaan ID - contoh
<a name="id-mapping-table-example"></a>

Daripada menulis pernyataan air terjun panjang yang merujuk Informasi Identifikasi Pribadi (PII), misalnya, perusahaan dapat menggunakan aturan analisis tabel pemetaan ID untuk menggunakan transcoding multi-pihak. LiveRamp Contoh berikut menunjukkan bagaimana Anda dapat berkolaborasi dalam AWS Clean Rooms menggunakan aturan analisis tabel pemetaan ID.

Perusahaan A adalah pengiklan yang memiliki data pelanggan dan penjualan, yang akan digunakan sebagai sumber. Perusahaan A juga melakukan transcoding atas nama para pihak dalam kolaborasi, dan membawa LiveRamp kredensialnya.

Perusahaan B adalah penerbit yang memiliki data peristiwa, yang akan digunakan sebagai target.

**catatan**  
Baik Perusahaan A atau Perusahaan B dapat memberikan kredensi LiveRamp transcoding dan melakukan transcoding.

Untuk membuat kolaborasi yang memungkinkan analisis tabel pemetaan ID bekerja sama, perusahaan melakukan hal berikut:

1. Perusahaan A menciptakan kolaborasi dan menciptakan keanggotaan. Ini menambahkan Perusahaan B, yang juga menciptakan keanggotaan dalam kolaborasi.

1. Perusahaan A mengaitkan sumber namespace ID yang ada atau membuat yang baru dalam Resolusi Entitas AWS menggunakan konsol. AWS Clean Rooms 

   Perusahaan A membuat tabel yang dikonfigurasi dengan data penjualannya dan kolom yang dikunci `sourceId` pada tabel pemetaan ID.

   Sumber namespace ID menyediakan data untuk transkode.

1. Perusahaan B mengaitkan target namespace ID yang ada atau membuat yang baru dalam Resolusi Entitas AWS menggunakan konsol. AWS Clean Rooms 

   Perusahaan B membuat tabel yang dikonfigurasi dengan data peristiwa mereka dan kolom yang dikunci ke `targetId` dalam tabel pemetaan ID.

   Target namespace ID tidak menyediakan data untuk ditranskode, hanya metadata di sekitar konfigurasi. LiveRamp 

1. Perusahaan A menemukan dua ruang nama ID yang terkait dengan kolaborasi dan membuat serta mengisi tabel pemetaan ID.

1. Perusahaan A menjalankan kueri di dua kumpulan data dengan bergabung pada tabel pemetaan ID.

   ```
   --- this would be valid for Custom or List
   SELECT provider.data_col, consumer.data_col
   FROM provider
     JOIN idMappingTable-123123123123-myMappingWFName idmt 
        ON provider.id = idmt.sourceId
     JOIN consumer 
        ON consumer.id = idmt.targetId
   ```

# AWS Clean Rooms Privasi Diferensial
<a name="differential-privacy"></a>

AWS Clean Rooms Privasi Diferensial membantu Anda melindungi privasi pengguna Anda dengan teknik yang didukung secara matematis yang diimplementasikan dengan kontrol intuitif dalam beberapa klik. Sebagai kemampuan yang dikelola sepenuhnya, tidak diperlukan pengalaman privasi diferensial sebelumnya untuk membantu Anda mencegah identifikasi ulang pengguna Anda. AWS Clean Rooms secara otomatis menambahkan jumlah noise yang dikalibrasi dengan hati-hati ke hasil kueri saat runtime untuk membantu melindungi data tingkat individu Anda.

AWS Clean Rooms Privasi Diferensial mendukung berbagai kueri analitis dan cocok untuk berbagai kasus penggunaan, di mana sejumlah kecil kesalahan dalam hasil kueri tidak akan membahayakan kegunaan analisis Anda. Dengan itu, mitra Anda dapat menghasilkan wawasan penting bisnis tentang kampanye iklan, keputusan investasi, penelitian klinis, dan banyak lagi, semuanya tanpa memerlukan pengaturan tambahan dari mitra Anda.

AWS Clean Rooms Privasi Diferensial melindungi dari overflow atau kesalahan cast tidak valid yang menggunakan fungsi skalar atau simbol operator matematika dengan cara yang berbahaya. 

Untuk informasi selengkapnya tentang Privasi AWS Clean Rooms Diferensial, lihat topik berikut.

**Topics**
+ [Privasi diferensial](#dp-overview)
+ [Bagaimana Privasi Diferensial bekerja AWS Clean Rooms](#dp-how-it-works)
+ [Kebijakan privasi diferensial](dp-settings.md)
+ [Kemampuan SQL dari AWS Clean Rooms Differential Privacy](dp-sql-capabilities.md)
+ [Kiat dan contoh kueri Privasi Diferensial](dp-query-tips-examples.md)
+ [Batasan Privasi AWS Clean Rooms Diferensial](dp-limitations.md)

## Privasi diferensial
<a name="dp-overview"></a>

Privasi diferensial hanya memungkinkan wawasan agregat dan mengaburkan kontribusi data individu dalam wawasan tersebut. Privasi diferensial melindungi data kolaborasi dari anggota yang dapat menerima hasil belajar tentang individu tertentu. Tanpa privasi diferensial, anggota yang dapat menerima hasil dapat mencoba menyimpulkan data pengguna individu dengan menambahkan atau menghapus catatan tentang individu dan mengamati perbedaan dalam hasil kueri. 

Ketika privasi diferensial diaktifkan, jumlah noise tertentu ditambahkan ke hasil kueri untuk mengaburkan kontribusi pengguna individu. Jika anggota yang dapat menerima hasil mencoba mengamati perbedaan hasil kueri setelah menghapus catatan tentang individu dari kumpulan data mereka, variabilitas dalam hasil kueri membantu mencegah identifikasi data individu. AWS Clean Rooms Privasi Diferensial menggunakan [SampCert](https://github.com/leanprover/SampCert)sampler, implementasi sampler yang terbukti benar yang dikembangkan oleh. AWS

## Bagaimana Privasi Diferensial bekerja AWS Clean Rooms
<a name="dp-how-it-works"></a>

Alur kerja untuk mengaktifkan privasi diferensial AWS Clean Rooms memerlukan langkah-langkah tambahan berikut saat [menyelesaikan alur kerja untuk](what-is.md#how-it-works): AWS Clean Rooms

1. Anda mengaktifkan privasi diferensial saat menambahkan [aturan analisis khusus](analysis-rules-custom.md).

1. [Anda mengonfigurasi kebijakan privasi diferensial untuk kolaborasi](configure-differential-privacy.md) agar tabel data Anda dilindungi dengan privasi diferensial yang tersedia untuk kueri.

Setelah Anda menyelesaikan langkah-langkah ini, anggota yang dapat melakukan kueri dapat mulai menjalankan kueri pada data yang dilindungi privasi diferensial. AWS Clean Rooms mengembalikan hasil yang sesuai dengan kebijakan privasi diferensial. AWS Clean Rooms Privasi Diferensial melacak perkiraan jumlah kueri yang tersisa yang dapat Anda jalankan, mirip dengan pengukur gas di mobil yang menunjukkan tingkat bahan bakar mobil saat ini. Jumlah kueri yang dapat dijalankan oleh anggota yang dapat melakukan kueri dibatasi oleh **anggaran Privasi** dan **Kebisingan yang ditambahkan per parameter kueri** yang diatur dalam[Kebijakan privasi diferensial](dp-settings.md).

### Pertimbangan-pertimbangan
<a name="dp-considerations"></a>

Saat menggunakan privasi diferensial di AWS Clean Rooms, pertimbangkan hal berikut:
+ Anggota yang dapat menerima hasil tidak dapat menggunakan privasi diferensial. Mereka akan mengonfigurasi aturan analisis khusus dengan privasi diferensial dimatikan untuk tabel yang dikonfigurasi.
+ Anggota yang dapat melakukan kueri tidak dapat menggabungkan tabel dari dua atau lebih penyedia data ketika keduanya mengaktifkan privasi diferensial.

# Kebijakan privasi diferensial
<a name="dp-settings"></a>

Kebijakan privasi diferensial mengontrol berapa banyak fungsi agregasi yang diizinkan oleh anggota yang dapat kueri untuk dijalankan dalam suatu kolaborasi. **Anggaran Privasi** mendefinisikan sumber daya umum dan terbatas yang diterapkan semua tabel dalam kolaborasi. **Kebisingan yang ditambahkan per kueri** mengatur tingkat di mana anggaran privasi habis.

Kebijakan privasi diferensial diperlukan untuk membuat tabel yang dilindungi privasi diferensial Anda tersedia untuk pertanyaan. Ini adalah langkah satu kali dalam kolaborasi dan mencakup dua input:
+ **Anggaran privasi** — Dikukur dalam hal epsilon, anggaran privasi mengontrol tingkat perlindungan privasi. Ini adalah sumber daya umum dan terbatas yang diterapkan untuk semua tabel Anda yang dilindungi dengan privasi diferensial dalam kolaborasi, karena tujuannya adalah untuk menjaga privasi pengguna Anda yang informasinya dapat hadir dalam beberapa tabel.

  **Anggaran Privasi** dikonsumsi setiap kali kueri dijalankan di tabel Anda. Ketika anggaran privasi sepenuhnya habis, anggota kolaborasi yang dapat melakukan kueri tidak dapat menjalankan kueri tambahan hingga ditingkatkan atau di-refresh. Dengan menetapkan anggaran privasi yang lebih besar, anggota yang dapat menerima hasil dapat mengurangi ketidakpastian mereka tentang individu dalam data. Pilih anggaran privasi yang menyeimbangkan persyaratan kolaborasi Anda dengan kebutuhan privasi Anda dan setelah berkonsultasi dengan pengambil keputusan bisnis.

  Anda dapat memilih **Segarkan anggaran privasi setiap bulan** untuk secara otomatis membuat anggaran privasi baru setiap bulan kalender, jika Anda berencana untuk secara teratur membawa data baru ke dalam kolaborasi. Memilih opsi ini memungkinkan jumlah informasi yang sewenang-wenang untuk diungkapkan tentang baris data ketika berulang kali ditanyakan di seluruh penyegaran. Hindari memilih ini jika baris yang sama akan berulang kali ditanyakan antara penyegaran anggaran privasi.
+ **Kebisingan yang ditambahkan per kueri** diukur dalam hal jumlah pengguna yang kontribusinya ingin Anda kaburkan. Nilai ini mengatur tingkat di mana anggaran privasi habis. Nilai noise yang lebih besar mengurangi tingkat di mana anggaran privasi habis, dan karenanya memungkinkan lebih banyak kueri untuk dijalankan pada data Anda. Namun, ini harus diimbangi dengan merilis wawasan data yang kurang akurat. Pertimbangkan akurasi yang diinginkan untuk wawasan kolaborasi saat menetapkan nilai ini.

Anda dapat menggunakan kebijakan privasi diferensial default untuk menyelesaikan pengaturan dengan cepat atau menyesuaikan kebijakan privasi diferensial Anda sesuai kasus penggunaan Anda. AWS Clean Rooms Privasi Diferensial menyediakan kontrol intuitif untuk mengonfigurasi kebijakan. AWS Clean Rooms Privasi Diferensial memungkinkan Anda melihat pratinjau utilitas dalam hal jumlah agregasi yang mungkin di semua kueri pada data Anda dan memperkirakan berapa banyak kueri yang dapat dijalankan dalam kolaborasi data.

Anda dapat menggunakan contoh interaktif untuk memahami bagaimana nilai yang berbeda dari **anggaran Privasi** dan **Kebisingan yang ditambahkan per kueri** akan memengaruhi hasil untuk berbagai jenis kueri SQL. Secara umum, Anda perlu menyeimbangkan kebutuhan privasi Anda dengan jumlah pertanyaan yang ingin Anda izinkan dan keakuratan pertanyaan tersebut. **Anggaran Privasi** yang lebih kecil atau **Noise yang lebih besar yang ditambahkan per kueri** dapat melindungi privasi pengguna dengan lebih baik, tetapi memberikan wawasan yang kurang berarti bagi mitra kolaborasi Anda.

Jika Anda meningkatkan **anggaran Privasi** sambil menjaga parameter **Noise yang ditambahkan per kueri** tetap sama, anggota yang dapat melakukan kueri dapat menjalankan lebih banyak agregasi pada tabel Anda dalam kolaborasi. Anda dapat meningkatkan **anggaran Privasi** kapan saja selama kolaborasi. Jika Anda mengurangi **anggaran Privasi** sambil menjaga parameter **Noise yang ditambahkan per kueri** tetap sama, anggota yang dapat melakukan kueri dapat menjalankan agregasi yang lebih sedikit. Anda tidak dapat mengurangi **anggaran Privasi** setelah anggota yang dapat melakukan kueri mulai menganalisis data Anda.

Jika Anda meningkatkan **Noise yang ditambahkan per kueri** sambil menjaga input **anggaran Privasi** tetap sama, anggota yang dapat melakukan kueri dapat menjalankan lebih banyak agregasi pada tabel Anda dalam kolaborasi. Jika Anda mengurangi **Noise yang ditambahkan per kueri** sambil menjaga input **anggaran Privasi** tetap sama, anggota yang dapat melakukan kueri dapat menjalankan agregasi yang lebih sedikit. Anda dapat menambah atau mengurangi **Noise yang ditambahkan per kueri** kapan saja selama kolaborasi.

Kebijakan privasi diferensial dikelola oleh tindakan API templat anggaran privasi.

# Kemampuan SQL dari AWS Clean Rooms Differential Privacy
<a name="dp-sql-capabilities"></a>

AWS Clean Rooms Privasi Diferensial menggunakan struktur kueri tujuan umum untuk mendukung kueri SQL yang kompleks. Template analisis kustom divalidasi terhadap struktur ini untuk memastikan bahwa mereka dapat berjalan pada tabel yang dilindungi oleh privasi diferensial. Tabel berikut menunjukkan fungsi mana yang didukung. Untuk informasi selengkapnya, lihat [Struktur kueri dan sintaks](analysis-rules-custom.md#dp-query-structure-syntax).


| Kategori | Konstruksi SQL didukung di mesin analitik Spark | Ekspresi tabel umum (CTEs) | Klausul SELECT akhir | 
| --- |--- |--- |--- |
| Fungsi agregat |    Fungsi ANY\$1VALUE   PERKIRAAN fungsi PERCENTILE\$1DISC   Fungsi AVG   Fungsi COUNT dan COUNT DISTINCT   Fungsi MAX   Fungsi MEDIAN   Fungsi MIN   Fungsi PERCENTILE\$1CONT   Fungsi STDDEV\$1SAMP dan STDDEV\$1POP   Fungsi SUM dan SUM DISTINCT   Fungsi VAR\$1SAMP dan VAR\$1POP    | Didukung dengan syarat bahwa CTEs menggunakan tabel yang dilindungi privasi diferensial harus menghasilkan data dengan catatan tingkat pengguna. Anda harus menulis ekspresi SELECT pada mereka yang CTEs menggunakan `SELECT userIdentifierColumn...' format. | Agregasi yang didukung: AVG, COUNT, COUNT DISTINCT, STDDEV, dan SUM. | 
| CTEs | DENGAN klausa, DENGAN klausa subquery | Didukung dengan syarat bahwa CTEs menggunakan tabel yang dilindungi privasi diferensial harus menghasilkan data dengan catatan tingkat pengguna. Anda harus menulis ekspresi SELECT pada mereka yang CTEs menggunakan `SELECT userIdentifierColumn...' format. | N/A | 
| Subkueri |    SELECT   MEMILIKI   BERGABUNG   Kondisi BERGABUNG   FROM   WHERE    | Anda dapat memiliki subquery yang tidak mereferensikan hubungan privasi diferensial dalam konstruksi ini. Anda dapat memiliki subquery yang mereferensikan hubungan privasi diferensial dalam klausa FROM dan JOIN saja. | 
| Bergabung klausa |    BERGABUNG DALAM   KIRI BERGABUNG   KIRI SEMI BERGABUNG   KIRI ANTI BERGABUNG   BERGABUNG DENGAN BENAR   BERGABUNG PENUH   [BERGABUNG] ATAU operator   CROSS JOIN    |  Didukung dengan syarat bahwa hanya fungsi JOIN yang equi-join pada kolom pengenal pengguna yang didukung dan wajib saat menanyakan dua atau lebih tabel dengan privasi diferensial diaktifkan. Pastikan bahwa kondisi equi-join wajib sudah benar. Konfirmasikan bahwa pemilik tabel telah mengonfigurasi kolom pengenal pengguna yang sama di semua tabel sehingga definisi pengguna tetap konsisten di seluruh tabel. Fungsi CROSS JOIN tidak didukung saat menggabungkan dua atau lebih relasi dengan privasi diferensial diaktifkan.  | 
| Tetapkan operator | UNION, UNION ALL, INTERSECT, KECUALI \$1 MINUS (ini adalah sinonim) | UNION, UNION ALL, INTERSECT, KECUALI \$1 MINUS (ini adalah sinonim) | Tidak didukung | 
| Fungsi jendela |  Fungsi agregat   Fungsi jendela AVG   Fungsi jendela COUNT   Fungsi jendela CUME\$1DIST   Fungsi jendela DENSE\$1RANK   Fungsi jendela FIRST\$1VALUE   Fungsi jendela LAG   Fungsi jendela LAST\$1VALUE   Fungsi jendela LEAD   Fungsi jendela MAX   Fungsi jendela MEDIAN   Fungsi jendela MIN   Fungsi jendela NTH\$1VALUE   Fungsi jendela STDDEV\$1SAMP dan STDDEV\$1POP (STDDEV\$1SAMP dan STDDEV adalah sinonim)   Fungsi jendela SUM   Fungsi jendela VAR\$1SAMP dan VAR\$1POP (VAR\$1SAMP dan VARIANCE adalah sinonim)   Fungsi peringkat   Fungsi jendela DENSE\$1RANK   Fungsi jendela NTILE   Fungsi jendela PERCENT\$1RANK   Fungsi jendela RANK   Fungsi jendela ROW\$1NUMBER    | Semua didukung dengan kondisi bahwa kolom pengenal pengguna di klausa partisi fungsi jendela diperlukan saat Anda menanyakan hubungan dengan privasi diferensial diaktifkan. | Tidak didukung | 
| Ekspresi bersyarat |    Ekspresi kondisi CASE   Ekspresi COALESCE   Fungsi TERBESAR dan PALING KECIL   Fungsi NVL dan COALESCE   NVL2 fungsi   Fungsi NULLIF    | Semua didukung | Semua didukung | 
| Ketentuan |    Kondisi perbandingan   Kondisi logis   Kondisi pencocokan pola   ANTARA kondisi rentang   Kondisi nol    | EXISTSdan tidak IN dapat digunakan karena mereka memerlukan subquery. Semua yang lain didukung. | Semua didukung | 
| Fungsi tanggal-waktu |    Fungsi tanggal dan waktu dalam transaksi   Operator penggabungan   Fungsi ADD\$1MONTHS   Fungsi CONVERT\$1TIMEZONE   Fungsi CURRENT\$1DATE   Fungsi DATEADD   Fungsi DATEDIFF   fungsi DATE\$1PART   Fungsi DATE\$1TRUNC   Fungsi EKSTRAK   Fungsi TO\$1TIMESTAMP   Bagian tanggal untuk fungsi tanggal atau stempel waktu    | Semua didukung | Semua didukung | 
| Fungsi string |    \$1\$1 Operator (penggabungan)   Fungsi BTRIM   Fungsi CHAR\$1LENGTH   Fungsi CHARACTER\$1LENGTH   Fungsi CONCAT   Fungsi KIRI dan KANAN   Fungsi LEN   Fungsi PANJANG   Fungsi LOWER   Fungsi LPAD dan RPAD   Fungsi LTRIM   Fungsi POSISI   Fungsi REGEXP\$1COUNT   Fungsi REGEXP\$1INSTR   Fungsi REGEXP\$1REPLACE   Fungsi REGEXP\$1SUBSTR   Fungsi REPEAT   GANTI fungsi   Fungsi REVERSE   Fungsi RTRIM   Fungsi SPLIT\$1PART   Fungsi SUBSTRING   FUNGSI TRANSLATE   Fungsi TRIM   Fungsi UPPER    | Semua didukung | Semua didukung | 
| Fungsi pemformatan tipe data |    Fungsi CAST   TO\$1CHAR   Fungsi TO\$1DATE   TO\$1NUMBER   String format datetime   String format numerik    | Semua didukung | Semua didukung | 
| Fungsi hash |    AES\$1ENCRYPT   AES\$1DEKRIPSI   MENGKODEKAN   MEMECAHKAN KODE   MD5 fungsi   SHA1 fungsi   SHA2 fungsi   XX\$1 HASH64    | Semua didukung | Semua didukung | 
| Simbol operator matematika | \$1, -, \$1,/,%, dan @ | Semua didukung | Semua didukung | 
| Fungsi matematika |    Fungsi ABS   Fungsi ACOS   Fungsi ASIN   Fungsi ATAN   ATAN2 fungsi   Fungsi CBRT   Fungsi CEILING (atau CEIL)   Fungsi COS   Fungsi COT   Fungsi DERAJAT   Fungsi LTRIM   Fungsi EXP   Fungsi FLOOR   Fungsi LN   Fungsi LOG   Fungsi MOD   Fungsi PI   Fungsi POWER   Fungsi RADIANS   fungsi RANDOM   Fungsi ROUND   Fungsi SIGN   Fungsi SIN   Fungsi SQRT   Fungsi TRUNC    | Semua didukung | Semua didukung | 
| Fungsi VARBYTE |    UNHEX,   UNBASE64   SIHIR    HLL\$1SKETCH\$1AGG,    HLL\$1SKETCH\$1ESTIMATE   HLL\$1UNION   HLL\$1UNION\$1AGG    | Semua didukung | Semua didukung | 
| JSON |    TO\$1JSON   GET\$1JSON\$1OBJEK    | Semua didukung | Semua didukung | 
| Fungsi array |    ARRAY\$1CONTAINS   ARRAY\$1DISTINCT   ARRAY\$1KECUALI   ARRAY\$1BERPOTONGAN   ARRAY\$1JOIN   ARRAY\$1REMOVE   ARRAY\$1SORT   ARRAY\$1UNION    | Tidak didukung | Tidak didukung | 
| GRUP Diperpanjang OLEH | SET PENGELOMPOKAN, ROLLUP, KUBUS | Tidak didukung | Tidak didukung | 
| Urutkan operasi | ORDER BY | Didukung dengan syarat bahwa klausa ORDER BY hanya didukung dalam klausa partisi fungsi jendela saat menanyakan tabel dengan privasi diferensial diaktifkan. | Didukung | 
| Batas baris | BATAS, OFFSET | Tidak didukung dalam CTEs menggunakan tabel yang dilindungi privasi diferensial | Semua didukung | 
| Aliasing tabel dan kolom |   | Didukung | Didukung | 
| Fungsi matematika pada fungsi agregat |   | Didukung | Didukung | 
| Fungsi skalar dalam fungsi agregat |   | Didukung | Didukung | 

## Alternatif umum untuk konstruksi SQL yang tidak didukung
<a name="common-alternatives"></a>


| Kategori | Konstruksi SQL | Alternatif | 
| --- |--- |--- |
|  Fungsi jendela  |    LISTAGG   PERSENTILE\$1CONT   PERCENTILE\$1DISC    | Anda dapat menggunakan fungsi agregat setara dengan GROUP BY. | 
| Simbol operator matematika |    \$1 kolom \$1\$1/ 2   \$1 kolom \$1/ 2   \$1 kolom ^ 2    |    CBRT   SQRT   DAYA (\$1 kolom, 2)    | 
| Fungsi skalar |    SYSDATE   \$1 kolom: :integer   mengkonversi (jenis, \$1 kolom)    |    CURRENT\$1DATE   CAST \$1 kolom AS integer   CAST \$1 kolom tipe AS    | 
| Literal | INTERVAL '1 DETIK' | INTERVAL '1' DETIK | 
| Pembatasan baris | TOP n | BATAS n | 
| Join |    MENGGUNAKAN   ALAMI    | Klausa ON harus secara eksplisit berisi kriteria gabungan. | 

# Kiat dan contoh kueri Privasi Diferensial
<a name="dp-query-tips-examples"></a>

AWS Clean Rooms Privasi Diferensial menggunakan [struktur kueri tujuan umum](dp-sql-capabilities.md) untuk mendukung berbagai macam konstruksi SQL seperti Common Table Expressions (CTEs) untuk persiapan data dan fungsi agregat yang umum digunakan seperti, atau. `COUNT` `SUM` Untuk mengaburkan kontribusi pengguna yang mungkin dalam data Anda dengan menambahkan noise ke hasil kueri agregat saat run-time, Privasi AWS Clean Rooms Diferensial mengharuskan fungsi agregat di final dijalankan pada data tingkat pengguna. `SELECT statement` 

Contoh berikut menggunakan dua tabel bernama `socialco_impressions` dan `socialco_users` dari penerbit media yang ingin melindungi data menggunakan privasi diferensial saat berkolaborasi dengan merek atletik dengan data. `athletic_brand_sales` Penerbit media telah mengonfigurasi `user_id` kolom sebagai kolom pengenal pengguna sambil mengaktifkan privasi diferensial. AWS Clean Rooms Pengiklan tidak memerlukan perlindungan privasi diferensial dan ingin menjalankan kueri menggunakan CTEs data gabungan. Karena CTE mereka menggunakan tabel yang dilindungi privasi diferensial, pengiklan menyertakan kolom pengenal pengguna dari tabel yang dilindungi tersebut dalam daftar kolom CTE dan bergabung dengan tabel yang dilindungi pada kolom pengenal pengguna. 

```
WITH matches_table AS(
     SELECT si.user_id, si.campaign_id, s.sale_id, s.sale_price
     FROM socialco_impressions si
     JOIN socialco_users su
         ON su.user_id = si.user_id
     JOIN athletic_brand_sales s
         ON s.emailsha256 = su.emailsha256
     WHERE s.timestamp > si.timestamp
    
UNION ALL
 
     SELECT si.user_id, si.campaign_id, s.sale_id, s.sale_price
     FROM socialco_impressions si
     JOIN socialco_users su
         ON su.user_id = si.user_id
     JOIN athletic_brand_sales s
         ON s.phonesha256 = su.phonesha256
     WHERE s.timestamp > si.timestamp
)
        
SELECT COUNT (DISTINCT user_id) as unique_users
FROM matches_table
GROUP BY campaign_id
ORDER BY COUNT (DISTINCT user_id) DESC
LIMIT 5
```

Demikian pula, jika Anda ingin menjalankan fungsi jendela pada tabel data yang dilindungi privasi diferensial, Anda harus menyertakan kolom pengenal pengguna dalam klausa. `PARTITION BY`

```
ROW_NUMBER() OVER (PARTITION BY conversion_id, user_id ORDER BY match_type, match_age) AS row
```

# Batasan Privasi AWS Clean Rooms Diferensial
<a name="dp-limitations"></a>

AWS Clean Rooms Privasi Diferensial tidak membahas situasi berikut:

1. AWS Clean Rooms Privasi Diferensial hanya mendukung kueri dengan tabel yang didukung Amazon AWS Glue S3. Itu tidak mendukung kueri dengan tabel Snowflake atau Amazon Athena.

1. AWS Clean Rooms Privasi Diferensial tidak mengatasi serangan waktu. Misalnya, serangan ini dimungkinkan dalam skenario di mana pengguna individu menyumbangkan sejumlah besar baris dan menambahkan atau menghapus pengguna ini secara signifikan mengubah waktu perhitungan kueri.

1. AWS Clean Rooms Privasi Diferensial tidak menjamin privasi diferensial ketika kueri SQL dapat mengakibatkan overflow atau kesalahan cast tidak valid pada waktu berjalan karena penggunaan konstruksi SQL tertentu. 

   Tabel berikut adalah daftar beberapa, tetapi tidak semua, konstruksi SQL yang dapat menghasilkan kesalahan run-time dan harus diverifikasi dalam template analisis. Sebaiknya Anda menyetujui templat analisis yang meminimalkan kemungkinan kesalahan waktu proses tersebut dan meninjau log kueri secara berkala untuk menentukan apakah kueri sesuai dengan perjanjian kolaborasi.

   Konstruksi SQL berikut rentan terhadap kesalahan overflow:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/dp-limitations.html)

1. Fungsi pemformatan tipe data CAST rentan terhadap kesalahan cast yang tidak valid.

   Anda dapat mengonfigurasi [CloudWatch untuk membuat filter metrik untuk grup log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CreateMetricFilterProcedure.html) dan kemudian [membuat CloudWatch alarm](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Alarm-On-Logs.html) pada filter metrik tersebut untuk menerima peringatan jika terjadi kemungkinan kesalahan overflow atau cast. 

   Secara khusus, Anda harus memantau kode kesalahan`CastError`,`OverflowError`,`ConversionError`. Kehadiran kode kesalahan ini menunjukkan potensi serangan saluran samping, tetapi mungkin menunjukkan kueri SQL yang salah.

   Lihat informasi yang lebih lengkap di [Analisis masuk AWS Clean Rooms](query-logs.md).

# AWS Clean Room ML
<a name="machine-learning"></a>

AWS Clean Rooms MLmemungkinkan dua pihak atau lebih untuk menjalankan model pembelajaran mesin pada data mereka tanpa perlu berbagi data satu sama lain. Layanan ini menyediakan kontrol peningkatan privasi yang memungkinkan pemilik data untuk menjaga data dan IP model mereka dengan aman. Anda dapat menggunakan model yang AWS ditulis atau membawa model kustom Anda sendiri.

Untuk penjelasan lebih rinci tentang cara kerjanya, lihat[Lowongan kerja lintas akun](ml-behaviors.md#ml-behaviors-cross-account-jobs).

Untuk informasi selengkapnya tentang kemampuan model Clean Rooms MS, lihat topik berikut. 

**Topics**
+ [Terminologi AWS Clean Rooms](#ml-terminology)
+ [Cara AWS Clean Rooms MLbekerja dengan AWS model](#ml-how-it-works)
+ [Cara AWS Clean Rooms MLbekerja dengan model khusus](#custML-how-it-works)
+ [AWS model dalam Kamar Bersih](aws-models.md)
+ [Model kustom di Kamar Bersih ML](custom-models.md)

## Terminologi AWS Clean Rooms
<a name="ml-terminology"></a>

Penting untuk memahami terminologi berikut saat menggunakan Clean Rooms Ml:
+ *Penyedia data pelatihan* — Pihak yang menyumbangkan data pelatihan, membuat dan mengonfigurasi model yang mirip, dan kemudian mengaitkan model yang mirip dengan kolaborasi.
+ *Penyedia data benih* — Pihak yang menyumbangkan data benih, menghasilkan segmen yang mirip, dan mengekspor segmen mirip mereka.
+ *Data pelatihan* — Data penyedia data pelatihan, yang digunakan untuk menghasilkan model yang mirip. Data pelatihan digunakan untuk mengukur kesamaan dalam perilaku pengguna.

  Data pelatihan harus berisi ID pengguna, ID item, dan kolom stempel waktu. Secara opsional, data pelatihan dapat berisi interaksi lain sebagai fitur numerik atau kategoris. Contoh interaksi adalah daftar video yang ditonton, item yang dibeli, atau artikel yang dibaca. 
+ *Data benih* — Data penyedia data benih, yang digunakan untuk membuat segmen yang mirip. Data benih dapat diberikan secara langsung atau dapat berasal dari hasil AWS Clean Rooms kueri. Output segmen mirip adalah sekumpulan pengguna dari data pelatihan yang paling mirip dengan pengguna benih.
+ Model *Lookalike — Model* pembelajaran mesin dari data pelatihan yang digunakan untuk menemukan pengguna serupa di kumpulan data lain.

  Saat menggunakan API, istilah *model audiens* digunakan secara setara dengan model yang mirip. Misalnya, Anda menggunakan [CreateAudienceModel](https://docs.aws.amazon.com/cleanrooms-ml/latest/APIReference/API_CreateAudienceModel.html)API untuk membuat model yang mirip.
+ *Segmen mirip* — Subset dari data pelatihan yang paling mirip dengan data benih.

  Saat menggunakan API, Anda membuat segmen mirip dengan API. [StartAudienceGenerationJob](https://docs.aws.amazon.com/cleanrooms-ml/latest/APIReference/API_StartAudienceGenerationJob.html)

Data penyedia data pelatihan tidak pernah dibagikan dengan penyedia data benih dan data penyedia data benih tidak pernah dibagikan dengan penyedia data pelatihan. Output segmen yang mirip dibagikan dengan penyedia data pelatihan, tetapi tidak pernah penyedia data benih.

## Cara AWS Clean Rooms MLbekerja dengan AWS model
<a name="ml-how-it-works"></a>

![\[Gambaran umum tentang cara AWS Clean Rooms MLbekerja dengan AWS model.\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/images/howItWorksML.png)


Bekerja dengan model yang mirip mengharuskan dua pihak, penyedia data pelatihan dan penyedia data benih, bekerja secara berurutan AWS Clean Rooms untuk membawa data mereka ke dalam kolaborasi. Ini adalah alur kerja yang harus diselesaikan oleh penyedia data pelatihan terlebih dahulu:

1. Data penyedia data pelatihan harus disimpan dalam tabel katalog AWS Glue data interaksi item pengguna. Minimal, data pelatihan harus berisi kolom ID pengguna, kolom ID interaksi, dan kolom stempel waktu.

1. Penyedia data pelatihan mendaftarkan data pelatihan dengan AWS Clean Rooms.

1. Penyedia data pelatihan membuat model mirip yang dapat dibagikan dengan beberapa penyedia data benih. Model mirip adalah jaringan saraf dalam yang dapat memakan waktu hingga 24 jam untuk dilatih. Ini tidak dilatih ulang secara otomatis dan kami sarankan Anda melatih ulang model setiap minggu.

1. Penyedia data pelatihan mengonfigurasi model yang mirip, termasuk apakah akan berbagi metrik relevansi dan lokasi Amazon S3 dari segmen keluaran. Penyedia data pelatihan dapat membuat beberapa model mirip yang dikonfigurasi dari satu model mirip.

1. Penyedia data pelatihan mengaitkan model audiens yang dikonfigurasi dengan kolaborasi yang dibagikan dengan penyedia data benih.

Ini adalah alur kerja yang harus diselesaikan oleh penyedia data seed selanjutnya:

1. Data penyedia data seed dapat disimpan dalam bucket Amazon S3 atau dapat berasal dari hasil kueri.

1. Penyedia data benih membuka kolaborasi yang mereka bagikan dengan penyedia data pelatihan.

1. Penyedia data seed membuat segmen mirip dari tab Clean Rooms di halaman kolaborasi. 

1. Penyedia data benih dapat mengevaluasi metrik relevansi, jika dibagikan, dan mengekspor segmen yang mirip untuk digunakan di luar. AWS Clean Rooms

## Cara AWS Clean Rooms MLbekerja dengan model khusus
<a name="custML-how-it-works"></a>

Dengan Clean Rooms, anggota kolaborasi dapat menggunakan algoritma model kustom dockerized yang disimpan di Amazon ECR untuk bersama-sama menganalisis data mereka. Untuk melakukan ini, *penyedia model* harus membuat gambar dan menyimpannya di Amazon ECR. Ikuti langkah-langkah di [Amazon Elastic Container Registry User Guide](https://docs.aws.amazon.com/AmazonECR/latest/userguide/) untuk membuat repositori pribadi yang akan berisi model HTML kustom. 

Setiap anggota kolaborasi dapat menjadi *penyedia model*, asalkan mereka memiliki izin yang benar. Semua anggota kolaborasi dapat menyumbangkan data pelatihan, data inferensi, atau keduanya ke model. Untuk tujuan panduan ini, data yang berkontribusi anggota disebut sebagai *penyedia data*. Anggota yang menciptakan kolaborasi adalah *pembuat kolaborasi*, dan anggota ini dapat berupa *penyedia model*, salah satu *penyedia data*, atau keduanya.

Pada level tertinggi, berikut adalah langkah-langkah yang harus diselesaikan untuk melakukan pemodelan ML kustom:

1. Pembuat kolaborasi menciptakan kolaborasi dan menugaskan setiap anggota kemampuan anggota dan konfigurasi pembayaran yang tepat. Pembuat kolaborasi harus menetapkan kemampuan anggota untuk menerima keluaran model atau menerima hasil inferensi kepada anggota yang sesuai dalam langkah ini karena tidak dapat diperbarui setelah kolaborasi dibuat. Untuk informasi selengkapnya, lihat [Membuat dan bergabung dengan kolaborasi di AWS Clean Rooms ML](create-custom-ml-collaboration.md).

1. Penyedia model mengonfigurasi dan mengaitkan model HTML kontainerisasi mereka ke kolaborasi dan memastikan batasan privasi ditetapkan untuk data yang diekspor. Untuk informasi selengkapnya, lihat [Mengonfigurasi algoritme model di AWS Clean Rooms ML](configure-model-algorithm.md).

1. Penyedia data menyumbangkan data mereka untuk kolaborasi dan memastikan kebutuhan privasi mereka ditentukan. Penyedia data harus mengizinkan model untuk mengakses data mereka. Untuk informasi selengkapnya, lihat [Menyumbangkan data pelatihan di AWS Clean Rooms MS](custom-model-training-data.md) dan [Mengaitkan algoritma model yang dikonfigurasi di AWS Clean Rooms MS](associate-model-algorithm.md).

1. Anggota kolaborasi membuat konfigurasi ML, yang menentukan ke mana artefak model atau hasil inferensi diekspor.

1. Anggota kolaborasi membuat saluran input ML yang memberikan masukan ke wadah pelatihan atau wadah inferensi. Saluran input ML adalah kueri yang mendefinisikan data yang akan digunakan dalam konteks algoritma model.

1. Anggota kolaborasi memanggil pelatihan model menggunakan saluran input ML dan algoritma model yang dikonfigurasi. Untuk informasi selengkapnya, lihat [Membuat model terlatih di AWS Clean Rooms ML](create-trained-model.md).

1. (Opsional) Pelatih model memanggil pekerjaan ekspor model dan artefak model dikirim ke penerima hasil model. Hanya anggota dengan konfigurasi ML yang valid dan kemampuan anggota untuk menerima keluaran model yang dapat menerima artefak model. Untuk informasi selengkapnya, lihat [Mengekspor artefak model dari AWS Clean Rooms](export-model-artifacts.md).

1. (Opsional) Seorang anggota kolaborasi memanggil inferensi model menggunakan saluran input ML, ARN model terlatih, dan algoritma model yang dikonfigurasi inferensi. Hasil inferensi dikirim ke penerima keluaran inferensi. Hanya anggota dengan konfigurasi ML yang valid dan kemampuan anggota untuk menerima output inferensi yang dapat menerima hasil inferensi.

Berikut langkah-langkah yang harus diselesaikan oleh *penyedia model*:

1. Buat image docker Amazon ECR yang kompatibel dengan SageMaker AI. Clean Rooms MLhanya mendukung gambar docker yang kompatibel dengan SageMaker AI.

1. Setelah Anda membuat gambar docker yang kompatibel dengan SageMaker AI, dorong gambar ke Amazon ECR. Ikuti petunjuk di [Amazon Elastic Container Registry User Guide](https://docs.aws.amazon.com/AmazonECR/latest/userguide/) untuk membuat gambar pelatihan kontainer.

1. Konfigurasikan algoritma model untuk digunakan di Clean Rooms Ml.

   1. Berikan tautan repositori Amazon ECR dan argumen apa pun yang diperlukan untuk mengonfigurasi algoritma model.

   1. Menyediakan peran akses layanan yang memungkinkan Clean Rooms MS mengakses repositori Amazon ECR.

   1. Kaitkan algoritma model yang dikonfigurasi dengan kolaborasi. Ini termasuk menyediakan kebijakan privasi yang mendefinisikan kontrol untuk log kontainer, log kegagalan, CloudWatch metrik, dan batasan tentang berapa banyak data yang dapat diekspor dari hasil penampung.

Berikut adalah langkah-langkah yang harus diselesaikan oleh *penyedia data* untuk berkolaborasi dengan model HTML kustom:

1. Konfigurasikan AWS Glue tabel yang ada dengan aturan analisis kustom. Hal ini memungkinkan serangkaian kueri tertentu yang telah disetujui sebelumnya atau akun yang telah disetujui sebelumnya untuk menggunakan data Anda.

1. Kaitkan tabel yang dikonfigurasi dengan kolaborasi dan berikan peran akses layanan yang dapat mengakses AWS Glue tabel Anda.

1. [Tambahkan aturan analisis kolaborasi](add-collaboration-analysis-rule.md) ke tabel yang memungkinkan asosiasi algoritma model yang dikonfigurasi untuk mengakses tabel yang dikonfigurasi.

1. Setelah model dan data dikaitkan dan dikonfigurasi di Clean Rooms, anggota dengan kemampuan untuk menjalankan kueri menyediakan kueri SQL dan memilih algoritma model yang akan digunakan.

 Setelah pelatihan model selesai, anggota tersebut memulai ekspor artefak pelatihan model atau hasil inferensi. Artefak atau hasil ini dikirim ke anggota dengan kemampuan untuk menerima keluaran model terlatih. Penerima hasil harus mengkonfigurasi mereka `MachineLearningConfiguration` sebelum mereka dapat menerima output model.

# AWS model dalam Kamar Bersih
<a name="aws-models"></a>

AWS Clean Rooms MLmenyediakan metode pelestarian privasi bagi dua pihak untuk mengidentifikasi pengguna serupa dalam data mereka tanpa perlu berbagi data satu sama lain. Pihak pertama membawa data pelatihan AWS Clean Rooms sehingga mereka dapat membuat dan mengonfigurasi model yang mirip dan mengaitkannya dengan kolaborasi. Kemudian, data benih dibawa ke kolaborasi untuk membuat segmen mirip yang menyerupai data pelatihan.

Untuk penjelasan lebih rinci tentang cara kerjanya, lihat[Lowongan kerja lintas akun](ml-behaviors.md#ml-behaviors-cross-account-jobs).

Topik berikut memberikan informasi tentang cara membuat dan mengkonfigurasi AWS model di Clean Rooms ML.

**Topics**
+ [Perlindungan privasi AWS Clean Rooms](ml-privacy.md)
+ [Persyaratan data pelatihan untuk Clean Rooms](ml-training-data-requirements.md)
+ [Persyaratan data benih untuk Kamar Bersih ML](ml-seed-data-requirements.md)
+ [Metrik evaluasi model AWS Clean Rooms](ml-metrics.md)

# Perlindungan privasi AWS Clean Rooms
<a name="ml-privacy"></a>

Clean Rooms ML dirancang untuk mengurangi risiko *serangan inferensi keanggotaan* di mana penyedia data pelatihan dapat mempelajari siapa yang ada dalam data benih dan penyedia data benih dapat mempelajari siapa yang ada dalam data pelatihan. Beberapa langkah diambil untuk mencegah serangan ini.

Pertama, penyedia data benih tidak secara langsung mengamati output Clean Rooms ML dan penyedia data pelatihan tidak akan pernah dapat mengamati data benih. Penyedia data benih dapat memilih untuk memasukkan data benih di segmen output.

Selanjutnya, model mirip dibuat dari sampel acak data pelatihan. Sampel ini mencakup sejumlah besar pengguna yang tidak cocok dengan audiens benih. Proses ini membuat lebih sulit untuk menentukan apakah pengguna tidak ada dalam data, yang merupakan jalan lain untuk inferensi keanggotaan.

Selanjutnya, beberapa pelanggan benih dapat digunakan untuk setiap parameter pelatihan model mirip spesifik benih. Ini membatasi seberapa banyak model yang dapat disesuaikan, dan dengan demikian berapa banyak yang dapat disimpulkan tentang pengguna. Sebagai hasilnya, kami merekomendasikan bahwa ukuran minimum data benih adalah 500 pengguna. 

Akhirnya, metrik tingkat pengguna tidak pernah diberikan kepada penyedia data pelatihan, yang menghilangkan jalan lain untuk serangan inferensi keanggotaan.

# Persyaratan data pelatihan untuk Clean Rooms
<a name="ml-training-data-requirements"></a>

Agar berhasil membuat model yang mirip, data pelatihan Anda harus memenuhi persyaratan berikut:
+ Data pelatihan harus dalam format Parket, CSV, atau JSON.
**catatan**  
Data Parket terkompresi Zstandard (ZSTD) tidak didukung.
+ Data pelatihan Anda harus dikatalogkan. AWS Glue Untuk informasi selengkapnya, lihat [Memulai Katalog Data AWS Glue](https://docs.aws.amazon.com//glue/latest/dg/start-data-catalog.html) di Panduan AWS Glue Pengembang. Sebaiknya gunakan AWS Glue crawler untuk membuat tabel Anda karena skema disimpulkan secara otomatis.
+ Bucket Amazon S3 yang berisi data pelatihan dan data benih berada di AWS wilayah yang sama dengan sumber daya Clean Rooms Anda yang lain.
+ Data pelatihan harus berisi setidaknya 100.000 pengguna unik IDs dengan setidaknya dua interaksi item masing-masing.
+ Data pelatihan harus berisi setidaknya 1 juta catatan.
+ Skema yang ditentukan dalam [CreateTrainingDataset](https://docs.aws.amazon.com/cleanrooms-ml/latest/APIReference/API_CreateTrainingDataset.html)tindakan harus sejajar dengan skema yang ditentukan saat AWS Glue tabel dibuat.
+ Bidang wajib, sebagaimana didefinisikan dalam tabel yang disediakan, didefinisikan dalam [CreateTrainingDataset](https://docs.aws.amazon.com/cleanrooms-ml/latest/APIReference/API_CreateTrainingDataset.html)tindakan.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/ml-training-data-requirements.html)
+ Secara opsional, Anda dapat menyediakan hingga 10 fitur kategoris atau numerik total.

Berikut adalah contoh kumpulan data pelatihan yang valid dalam format CSV

```
USER_ID,ITEM_ID,TIMESTAMP,EVENT_TYPE(CATEGORICAL FEATURE),EVENT_VALUE (NUMERICAL FEATURE)
196,242,881250949,click,15
186,302,891717742,click,13
22,377,878887116,click,10
244,51,880606923,click,20
166,346,886397596,click,10
```

# Persyaratan data benih untuk Kamar Bersih ML
<a name="ml-seed-data-requirements"></a>

Data benih untuk model yang mirip dapat datang langsung dari bucket Amazon S3 atau dari hasil kueri SQL. 

Data benih yang diberikan secara langsung harus memenuhi persyaratan berikut:
+ Data benih harus dalam format baris JSON dengan daftar pengguna IDs.
+ Ukuran benih harus antara 25 dan 500.000 pengguna IDs unik.
+ Jumlah minimum pengguna seed harus sesuai dengan nilai ukuran benih pencocokan minimum yang ditentukan saat Anda membuat model audiens yang dikonfigurasi.

Berikut ini adalah contoh kumpulan data pelatihan yang valid dalam format CSV

```
{"user_id": "abc"}
{"user_id": "def"}
{"user_id": "ghijkl"}
{"user_id": "123"}
{"user_id": "456"}
{"user_id": "7890"}
```

# Metrik evaluasi model AWS Clean Rooms
<a name="ml-metrics"></a>

Clean Rooms MLmenghitung *skor *recall* dan relevansi* untuk menentukan seberapa baik kinerja model Anda. Recall membandingkan kesamaan antara data mirip dan data pelatihan. Skor relevansi digunakan untuk memutuskan seberapa besar audiens seharusnya, bukan apakah model tersebut berkinerja baik.

*Ingat* adalah ukuran yang tidak bias tentang seberapa mirip segmen yang mirip dengan data pelatihan. Recall adalah persentase pengguna yang paling mirip (secara default, 20% paling mirip) dari sampel data pelatihan yang disertakan dalam audiens benih oleh pekerjaan pembuatan audiens. Nilai berkisar dari 0-1, nilai yang lebih besar menunjukkan audiens yang lebih baik. Nilai recall kira-kira sama dengan persentase bin maksimum menunjukkan bahwa model audiens setara dengan pemilihan acak.

Kami menganggap ini sebagai metrik evaluasi yang lebih baik daripada akurasi, presisi, dan skor F1 karena Clean Rooms MLtidak secara akurat memberi label pengguna negatif sejati saat membangun modelnya.

*Skor relevansi* tingkat segmen adalah ukuran kesamaan dengan nilai mulai dari -1 (paling tidak mirip) hingga 1 (paling mirip). Clean Rooms MLmenghitung serangkaian skor relevansi untuk berbagai ukuran segmen untuk membantu Anda menentukan ukuran segmen terbaik untuk data Anda. Skor relevansi menurun secara monoton seiring bertambahnya ukuran segmen, sehingga seiring bertambahnya ukuran segmen, hal itu bisa kurang mirip dengan data benih. Ketika skor relevansi tingkat segmen mencapai 0, model memprediksi bahwa semua pengguna di segmen mirip berasal dari distribusi yang sama dengan data benih. Meningkatkan ukuran output kemungkinan akan menyertakan pengguna di segmen mirip yang tidak berasal dari distribusi yang sama dengan data benih.

Skor relevansi dinormalisasi dalam satu kampanye dan tidak boleh digunakan untuk membandingkan di seluruh kampanye. Skor relevansi tidak boleh digunakan sebagai bukti bersumber tunggal untuk hasil bisnis apa pun karena dipengaruhi oleh beberapa faktor kompleks selain relevansi, seperti kualitas inventaris, jenis inventaris, waktu iklan, dan sebagainya.

Skor relevansi tidak boleh digunakan untuk menilai kualitas benih, melainkan jika dapat ditingkatkan atau diturunkan. Pertimbangkan contoh berikut:
+ Semua skor positif — Ini menunjukkan bahwa ada lebih banyak pengguna keluaran yang diprediksi serupa daripada yang termasuk dalam segmen mirip. Ini umum untuk data benih yang merupakan bagian dari pasar besar, seperti semua orang yang telah membeli pasta gigi dalam sebulan terakhir. Kami merekomendasikan untuk melihat data benih yang lebih kecil, seperti semua orang yang telah membeli pasta gigi lebih dari sekali dalam sebulan terakhir.
+ Semua skor negatif atau negatif untuk ukuran segmen mirip yang Anda inginkan — Ini menunjukkan bahwa Clean Rooms MS memprediksi tidak ada cukup pengguna serupa dalam ukuran segmen mirip yang diinginkan. Ini bisa jadi karena data benih terlalu spesifik atau pasarnya terlalu kecil. Kami merekomendasikan untuk menerapkan lebih sedikit filter ke data benih atau memperluas pasar. Misalnya, jika data benih asli adalah pelanggan yang membeli kereta dorong dan kursi mobil, Anda dapat memperluas pasar ke pelanggan yang membeli beberapa produk bayi.

Penyedia data pelatihan menentukan apakah skor relevansi diekspos dan keranjang tempat skor relevansi dihitung.

# Model kustom di Kamar Bersih ML
<a name="custom-models"></a>

Dengan Clean Rooms, anggota kolaborasi dapat menggunakan algoritma model kustom dockerized yang disimpan di Amazon ECR untuk bersama-sama menganalisis data mereka. Untuk melakukan ini, *penyedia model* harus membuat gambar dan menyimpannya di Amazon ECR. Ikuti langkah-langkah di [Amazon Elastic Container Registry User Guide](https://docs.aws.amazon.com/AmazonECR/latest/userguide/) untuk membuat repositori pribadi yang akan berisi model HTML kustom. 

Setiap anggota kolaborasi dapat menjadi *penyedia model*, asalkan mereka memiliki izin yang benar. Semua anggota kolaborasi dapat menyumbangkan data ke model. Untuk tujuan panduan ini, data yang berkontribusi anggota disebut sebagai *penyedia data*. Anggota yang menciptakan kolaborasi adalah *pembuat kolaborasi*, dan anggota ini dapat berupa *penyedia model*, salah satu *penyedia data*, atau keduanya.

Topik berikut menjelaskan informasi yang diperlukan untuk membuat model ML kustom

**Topics**
+ [Prasyarat pemodelan HTML khusus](custom-model-prerequisites.md)
+ [Pedoman penulisan model untuk wadah pelatihan](custom-model-guidelines.md)
+ [Pedoman pembuatan model untuk wadah inferensi](inference-model-guidelines.md)
+ [Menerima log dan metrik model](custom-model-logs.md)

# Prasyarat pemodelan HTML khusus
<a name="custom-model-prerequisites"></a>

Sebelum Anda dapat melakukan pemodelan HTML kustom, Anda harus mempertimbangkan hal berikut:
+ Tentukan apakah pelatihan model dan inferensi pada model yang dilatih akan dilakukan dalam kolaborasi.
+ Tentukan peran yang akan dilakukan setiap anggota kolaborasi dan berikan mereka kemampuan yang sesuai.
  + Tetapkan `CAN_QUERY` kemampuan kepada anggota yang akan melatih model dan menjalankan inferensi pada model yang dilatih.
  + Tetapkan `CAN_RECEIVE_RESULTS` untuk setidaknya satu anggota kolaborasi.
  + Tetapkan `CAN_RECEIVE_MODEL_OUTPUT` atau `CAN_RECEIVE_INFERENCE_OUTPUT` kemampuan kepada anggota yang akan menerima ekspor model terlatih atau output inferensi, masing-masing. Anda dapat memilih untuk menggunakan kedua kemampuan jika diperlukan oleh kasus penggunaan Anda.
+ Tentukan ukuran maksimum artefak model terlatih atau hasil inferensi yang akan Anda izinkan untuk diekspor.
+ Kami menyarankan agar semua pengguna memiliki `CleanrooomsFullAccess` dan `CleanroomsMLFullAccess` kebijakan yang melekat pada peran mereka. Menggunakan model ML khusus memerlukan penggunaan AWS Clean Rooms AWS Clean Rooms dan AWS Clean Rooms SDKs.
+ Pertimbangkan informasi berikut tentang peran IAM.
  + Semua penyedia data harus memiliki peran akses layanan yang memungkinkan AWS Clean Rooms untuk membaca data dari AWS Glue katalog dan tabel mereka, dan lokasi Amazon S3 yang mendasarinya. Peran ini mirip dengan yang diperlukan untuk query SQL. Ini memungkinkan Anda untuk menggunakan `CreateConfiguredTableAssociation` tindakan. Untuk informasi selengkapnya, lihat [Membuat peran layanan untuk membuat asosiasi tabel yang dikonfigurasi](ml-roles.md#ml-roles-custom-configure-table). 
  + Semua anggota yang ingin menerima metrik harus memiliki peran akses layanan yang memungkinkan mereka menulis CloudWatch metrik dan log. Peran ini digunakan oleh Clean Rooms MLuntuk menulis semua metrik model dan log ke anggota Akun AWS selama pelatihan model dan inferensi. Kami juga menyediakan kontrol privasi untuk menentukan anggota mana yang memiliki akses ke metrik dan log. Ini memungkinkan Anda untuk menggunakan `CreateMLConfiguration` tindakan. Untuk informasi selengkapnya, lihat [Buat peran layanan untuk pemodelan ML kustom - Konfigurasi ML](ml-roles.md#ml-roles-custom-configure). 

    Anggota yang menerima hasil harus menyediakan peran akses layanan dengan izin untuk menulis ke bucket Amazon S3 mereka. Peran ini memungkinkan Clean Rooms MLuntuk mengekspor hasil (artefak model terlatih atau hasil inferensi) ke bucket Amazon S3. Ini memungkinkan Anda untuk menggunakan `CreateMLConfiguration` tindakan. Untuk informasi selengkapnya, lihat [Buat peran layanan untuk pemodelan ML kustom - Konfigurasi ML](ml-roles.md#ml-roles-custom-configure). 
  + Penyedia model harus menyediakan peran akses layanan dengan izin untuk membaca repositori dan gambar Amazon ECR mereka. Ini memungkinkan Anda untuk menggunakan `CreateConfigureModelAlgorithm` tindakan. Untuk informasi selengkapnya, lihat [Buat peran layanan untuk menyediakan model ML kustom](ml-roles.md#ml-roles-custom-model-provider). 
  + Anggota yang membuat `MLInputChannel` untuk menghasilkan kumpulan data untuk pelatihan atau inferensi harus menyediakan peran akses layanan yang memungkinkan Clean Rooms MLuntuk menjalankan kueri SQL di. AWS Clean Rooms Ini memungkinkan Anda untuk menggunakan `CreateTrainedModel` dan `StartTrainedModelInferenceJob` tindakan. Untuk informasi selengkapnya, lihat [Membuat peran layanan untuk menanyakan kumpulan data](ml-roles.md#ml-roles-custom-query-dataset). 
+ Penulis model harus mengikuti [Pedoman penulisan model untuk wadah pelatihan](custom-model-guidelines.md) dan [Pedoman pembuatan model untuk wadah inferensiMenerima log dan metrik model](inference-model-guidelines.md) untuk memastikan input dan output model dikonfigurasi seperti yang diharapkan oleh. AWS Clean Rooms

# Pedoman penulisan model untuk wadah pelatihan
<a name="custom-model-guidelines"></a>

Bagian ini merinci pedoman yang harus diikuti oleh penyedia model saat membuat algoritme model ML khusus untuk Clean Rooms.
+ Gunakan gambar dasar kontainer yang didukung pelatihan SageMaker AI yang sesuai, seperti yang dijelaskan dalam Panduan [Pengembang SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths.html). Kode berikut memungkinkan Anda untuk menarik gambar dasar kontainer yang didukung dari titik akhir SageMaker AI publik.

  ```
  ecr_registry_endpoint='763104351884.dkr.ecr.$REGION.amazonaws.com'
  base_image='pytorch-training:2.3.0-cpu-py311-ubuntu20.04-sagemaker'
  aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ecr_registry_endpoint
  docker pull $ecr_registry_endpoint/$base_image
  ```
+ Saat membuat model secara lokal, pastikan hal berikut sehingga Anda dapat menguji model Anda secara lokal, pada instance pengembangan, pada Pelatihan SageMaker AI di Anda Akun AWS, dan di Clean Rooms MS.
  + Kami merekomendasikan menulis skrip pelatihan yang mengakses properti yang berguna tentang lingkungan pelatihan melalui berbagai variabel lingkungan. Clean Rooms MS menggunakan argumen berikut untuk menjalankan pelatihan pada kode model Anda:`SM_MODEL_DIR`,, `SM_OUTPUT_DIR``SM_CHANNEL_TRAIN`, dan`FILE_FORMAT`. Default ini digunakan oleh Clean Rooms untuk melatih model ML Anda di lingkungan eksekusinya sendiri dengan data dari semua pihak.
  + Clean Rooms MLmembuat saluran input pelatihan Anda tersedia melalui `/opt/ml/input/data/channel-name` direktori di wadah docker. Setiap saluran input ML dipetakan berdasarkan yang sesuai yang `channel_name` disediakan dalam `CreateTrainedModel` permintaan.

    ```
    parser = argparse.ArgumentParser()# Data, model, and output directories
    
    parser.add_argument('--model_dir', type=str, default=os.environ.get('SM_MODEL_DIR', "/opt/ml/model"))
    parser.add_argument('--output_dir', type=str, default=os.environ.get('SM_OUTPUT_DIR', "/opt/ml/output/data"))
    parser.add_argument('--train_dir', type=str, default=os.environ.get('SM_CHANNEL_TRAIN', "/opt/ml/input/data/train"))
    parser.add_argument('--train_file_format', type=str, default=os.environ.get('FILE_FORMAT', "csv"))
    ```
  + Pastikan Anda dapat menghasilkan dataset sintetis atau pengujian berdasarkan skema kolaborator yang akan digunakan dalam kode model Anda.
  + Pastikan Anda dapat menjalankan pekerjaan pelatihan SageMaker AI sendiri Akun AWS sebelum mengaitkan algoritma model dengan AWS Clean Rooms kolaborasi.

    Kode berikut berisi contoh file Docker yang kompatibel dengan pengujian lokal, pengujian lingkungan Pelatihan SageMaker AI, dan Clean Rooms

    ```
    FROM  763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-training:2.3.0-cpu-py311-ubuntu20.04-sagemaker
    MAINTAINER $author_name
    
    ENV PYTHONDONTWRITEBYTECODE=1 \
        PYTHONUNBUFFERED=1 \
        LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib"
    
    ENV PATH="/opt/ml/code:${PATH}"
    
    # this environment variable is used by the SageMaker PyTorch container to determine our user code directory
    ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code
    
    # copy the training script inside the container
    COPY train.py /opt/ml/code/train.py
    # define train.py as the script entry point
    ENV SAGEMAKER_PROGRAM train.py
    ENTRYPOINT ["python", "/opt/ml/code/train.py"]
    ```
+ Untuk memantau kegagalan kontainer dengan sebaik-baiknya, kami sarankan untuk mengekspor log dan debugging untuk alasan kegagalan. Sebagai `GetTrainedModel` tanggapan, Clean Rooms MLmengembalikan 1024 karakter pertama dari file ini di bawah`StatusDetails`. 
+ Setelah Anda menyelesaikan perubahan model apa pun dan Anda siap untuk mengujinya di lingkungan SageMaker AI, jalankan perintah berikut dalam urutan yang disediakan.

  ```
  export ACCOUNT_ID=xxx
  export REPO_NAME=xxx
  export REPO_TAG=xxx
  export REGION=xxx
  
  docker build -t $ACCOUNT_ID.dkr.ecr.us-west-2.amazonaws.com/$REPO_NAME:$REPO_TAG
  
  # Sign into AWS $ACCOUNT_ID/ Run aws configure
  # Check the account and make sure it is the correct role/credentials
  aws sts get-caller-identity
  aws ecr create-repository --repository-name $REPO_NAME --region $REGION
  aws ecr describe-repositories --repository-name $REPO_NAME --region $REGION
  
  # Authenticate Doker
  aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
  
  # Push To ECR Images
  docker push  $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com$REPO_NAME:$REPO_TAG
  
  # Create Sagemaker Training job
  # Configure the training_job.json with
  # 1. TrainingImage
  # 2. Input DataConfig
  # 3. Output DataConfig
  aws sagemaker create-training-job --cli-input-json file://training_job.json --region $REGION
  ```

  Setelah pekerjaan SageMaker AI selesai dan Anda puas dengan algoritme model Anda, Anda dapat mendaftarkan Amazon ECR Registry dengan AWS Clean Rooms ML. Gunakan `CreateConfiguredModelAlgorithm` tindakan untuk mendaftarkan algoritma model dan `CreateConfiguredModelAlgorithmAssociation` mengaitkannya dengan kolaborasi.

# Pedoman pembuatan model untuk wadah inferensi
<a name="inference-model-guidelines"></a>

Bagian ini merinci pedoman yang harus diikuti oleh penyedia model saat membuat algoritme inferensi untuk Clean Rooms ML.
+ Gunakan gambar dasar kontainer yang didukung inferensi SageMaker AI yang sesuai, seperti yang dijelaskan dalam Panduan Pengembang [SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths.html). Kode berikut memungkinkan Anda untuk menarik gambar dasar kontainer yang didukung dari titik akhir SageMaker AI publik.

  ```
  ecr_registry_endpoint='763104351884.dkr.ecr.$REGION.amazonaws.com'
  base_image='pytorch-inference:2.3.0-cpu-py311-ubuntu20.04-sagemaker'
  aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ecr_registry_endpoint
  docker pull $ecr_registry_endpoint/$base_image
  ```
+ Saat membuat model secara lokal, pastikan hal berikut sehingga Anda dapat menguji model Anda secara lokal, pada instance pengembangan, pada Transformasi SageMaker Batch AI di Anda Akun AWS, dan di Clean Rooms MS.
  + Clean Rooms MLmembuat artefak model Anda dari inferensi tersedia untuk digunakan oleh kode inferensi Anda melalui `/opt/ml/model` direktori di wadah docker.
  + Clean Rooms MLmembagi input demi baris, menggunakan strategi `MultiRecord` batch, dan menambahkan karakter baris baru di akhir setiap catatan yang diubah.
  + Pastikan Anda dapat menghasilkan kumpulan data inferensi sintetis atau pengujian berdasarkan skema kolaborator yang akan digunakan dalam kode model Anda.
  + Pastikan Anda dapat menjalankan pekerjaan transformasi batch SageMaker AI sendiri Akun AWS sebelum mengaitkan algoritme model dengan AWS Clean Rooms kolaborasi.

    Kode berikut berisi contoh file Docker yang kompatibel dengan pengujian lokal, pengujian lingkungan transformasi SageMaker AI, dan Clean Rooms

    ```
    FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-inference:1.12.1-cpu-py38-ubuntu20.04-sagemaker
    
    ENV PYTHONUNBUFFERED=1
    
    COPY serve.py /opt/ml/code/serve.py
    COPY inference_handler.py /opt/ml/code/inference_handler.py
    COPY handler_service.py /opt/ml/code/handler_service.py
    COPY model.py /opt/ml/code/model.py
    
    RUN chmod +x /opt/ml/code/serve.py
    
    ENTRYPOINT ["/opt/ml/code/serve.py"]
    ```
+ Setelah Anda menyelesaikan perubahan model apa pun dan Anda siap untuk mengujinya di lingkungan SageMaker AI, jalankan perintah berikut dalam urutan yang disediakan.

  ```
  export ACCOUNT_ID=xxx
  export REPO_NAME=xxx
  export REPO_TAG=xxx
  export REGION=xxx
  
  docker build -t $ACCOUNT_ID.dkr.ecr.us-west-2.amazonaws.com/$REPO_NAME:$REPO_TAG
  
  # Sign into AWS $ACCOUNT_ID/ Run aws configure
  # Check the account and make sure it is the correct role/credentials
  aws sts get-caller-identity
  aws ecr create-repository --repository-name $REPO_NAME --region $REGION
  aws ecr describe-repositories --repository-name $REPO_NAME --region $REGION
  
  # Authenticate Docker
  aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
  
  # Push To ECR Repository
  docker push $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com$REPO_NAME:$REPO_TAG
  
  # Create Sagemaker Model
  # Configure the create_model.json with
  # 1. Primary container - 
      # a. ModelDataUrl - S3 Uri of the model.tar from your training job
  aws sagemaker create-model --cli-input-json file://create_model.json --region $REGION
  
  # Create Sagemaker Transform Job
  # Configure the transform_job.json with
  # 1. Model created in the step above 
  # 2. MultiRecord batch strategy
  # 3. Line SplitType for TransformInput
  # 4. AssembleWith Line for TransformOutput
  aws sagemaker create-transform-job --cli-input-json file://transform_job.json --region $REGION
  ```

  Setelah pekerjaan SageMaker AI selesai dan Anda puas dengan transformasi batch Anda, Anda dapat mendaftarkan Amazon ECR Registry dengan AWS Clean Rooms ML. Gunakan `CreateConfiguredModelAlgorithm` tindakan untuk mendaftarkan algoritma model dan `CreateConfiguredModelAlgorithmAssociation` mengaitkannya dengan kolaborasi.

# Menerima log dan metrik model
<a name="custom-model-logs"></a>

Untuk menerima log dan metrik dari pelatihan atau inferensi model kustom, anggota harus telah [membuat Konfigurasi ML](https://docs.aws.amazon.com/clean-rooms/latest/userguide/create-custom-ml-collaboration.html) dengan peran valid yang memberikan CloudWatch izin yang diperlukan (lihat [Membuat peran layanan untuk pemodelan HTML kustom - Konfigurasi ML](https://docs.aws.amazon.com/clean-rooms/latest/userguide/ml-roles.html#ml-roles-custom-configure)).

**Metrik sistem**

Metrik sistem untuk pelatihan dan inferensi, seperti CPU dan pemanfaatan memori, dipublikasikan ke semua anggota dalam kolaborasi dengan Konfigurasi ML yang valid. Metrik ini dapat dilihat saat pekerjaan berlangsung melalui CloudWatch Metrik di `/aws/cleanroomsml/TrainedModels` atau ruang `/aws/cleanroomsml/TrainedModelInferenceJobs` nama, masing-masing.

**Log model**

Akses ke log model disediakan oleh kebijakan konfigurasi privasi dari setiap algoritma model yang dikonfigurasi. Penulis model menetapkan kebijakan konfigurasi privasi saat mengaitkan algoritma model yang dikonfigurasi (baik melalui konsol atau `CreateConfiguredModelAlgorithmAssociation` API) ke kolaborasi. Menyetel kebijakan konfigurasi privasi mengontrol anggota mana yang dapat menerima log model.

Selain itu, pembuat model dapat mengatur pola filter dalam kebijakan konfigurasi privasi untuk memfilter peristiwa log. Semua log yang dikirim oleh wadah model ke `stdout` atau `stderr` dan yang cocok dengan pola filter (jika disetel), dikirim ke Amazon CloudWatch Logs. Log model tersedia dalam grup CloudWatch log `/aws/cleanroomsml/TrainedModels` atau`/aws/cleanroomsml/TrainedModelInferenceJobs`, masing-masing.

**Metrik yang ditentukan khusus**

Saat Anda mengonfigurasi algoritme model (baik melalui konsol atau `CreateConfiguredModelAlgorithm` API), pembuat model dapat memberikan nama metrik dan pernyataan regex tertentu untuk dicari di log keluaran. Ini dapat dilihat saat pekerjaan berlangsung melalui CloudWatch Metrik di namespace. `/aws/cleanroomsml/TrainedModels` Saat mengaitkan algoritme model yang dikonfigurasi, pembuat model dapat menetapkan tingkat kebisingan opsional dalam konfigurasi privasi metrik untuk menghindari keluaran data mentah sambil tetap memberikan visibilitas ke tren metrik khusus. Jika tingkat kebisingan diatur, metrik dipublikasikan di akhir pekerjaan daripada secara real time.

# Komputasi Kriptografi untuk Clean Rooms
<a name="crypto-computing"></a>

Komputasi Kriptografi untuk Clean Rooms (C3R) adalah kemampuan AWS Clean Rooms yang dapat digunakan selain aturan [analisis](analysis-rules.md). Dengan C3R, organisasi dapat menyatukan data sensitif untuk memperoleh wawasan baru dari analitik data sementara secara kriptografis membatasi apa yang dapat dipelajari oleh pihak mana pun dalam prosesnya. C3R dapat digunakan oleh dua pihak atau lebih yang ingin berkolaborasi dengan data sensitif mereka tetapi diharuskan hanya menggunakan data terenkripsi di cloud. 

Klien enkripsi C3R adalah alat enkripsi sisi klien yang dapat Anda gunakan untuk [mengenkripsi data](glossary.md#glossary-encryption) Anda untuk digunakan. AWS Clean Rooms Saat Anda menggunakan klien enkripsi C3R, data tetap dilindungi secara kriptografis saat digunakan dalam kolaborasi. AWS Clean Rooms Seperti halnya AWS Clean Rooms kolaborasi reguler, data input adalah tabel database relasional, dan komputasi dinyatakan sebagai query SQL. Namun, C3R hanya mendukung subset terbatas dari kueri SQL pada data terenkripsi.

Secara khusus, C3R mendukung SQL JOIN and SELECT pernyataan tentang data yang dilindungi secara kriptografi. Setiap kolom dalam tabel input dapat digunakan tepat di salah satu jenis pernyataan SQL berikut: 
+ Kolom yang dilindungi secara kriptografi untuk digunakan JOIN Pernyataan disebut **fingerprint kolom**. 
+ Kolom yang dilindungi secara kriptografi untuk digunakan SELECT Pernyataan disebut **sealed kolom**. 
+ Kolom yang tidak dilindungi secara kriptografi untuk digunakan JOIN atau SELECT Pernyataan disebut **cleartext kolom**.

Dalam beberapa kasus, GROUP BY pernyataan didukung pada fingerprint kolom. Untuk informasi selengkapnya, lihat [Fingerprintkolom](crypto-computing-column-types.md#fingerprint-columns). Saat ini, C3R tidak mendukung penggunaan konstruksi SQL lainnya pada data terenkripsi, seperti WHERE klausa atau fungsi agregat seperti SUM and AVERAGE, bahkan jika mereka diizinkan oleh aturan analisis yang relevan.

C3R dirancang untuk melindungi data dalam sel individual tabel. Menggunakan konfigurasi default untuk C3R, data dasar yang disediakan pelanggan kepada pihak ketiga melalui kolaborasi tetap dienkripsi saat konten sedang digunakan di dalamnya. AWS Clean Rooms C3R menggunakan enkripsi AES-GCM standar industri untuk semua sealed kolom dan fungsi pseudorandom standar industri, yang dikenal sebagai Hash Based Message Authentication Code (HMAC), untuk melindungi fingerprint kolom.

Meskipun C3R mengenkripsi data dalam tabel Anda, informasi berikut mungkin masih dapat disimpulkan:
+ Informasi tentang tabel itu sendiri, termasuk jumlah kolom, nama kolom, dan jumlah baris dalam tabel Anda.
+ Seperti kebanyakan bentuk enkripsi standar, C3R tidak mencoba menyembunyikan panjang nilai terenkripsi. C3R memang menawarkan kemampuan untuk memasukkan nilai terenkripsi untuk menyembunyikan panjang teks yang tepat. Namun, batas atas pada panjang cleartext di setiap kolom masih bisa diungkapkan ke pihak lain.
+ Informasi tingkat pencatatan, seperti ketika baris tertentu ditambahkan ke tabel C3R terenkripsi.

Untuk informasi selengkapnya tentang C3R, lihat topik berikut. 

**Topics**
+ [Pertimbangan saat menggunakan Komputasi Kriptografi untuk Clean Rooms](crypto-computing-considerations.md)
+ [Jenis file dan data yang didukung dalam Komputasi Kriptografi untuk Clean Rooms](crypto-computing-file-types.md)
+ [Nama kolom dalam Komputasi Kriptografi untuk Clean Rooms](crypto-computing-column-names.md)
+ [Jenis kolom dalam Komputasi Kriptografi untuk Clean Rooms](crypto-computing-column-types.md)
+ [Parameter komputasi kriptografi](crypto-computing-parameters.md)
+ [Bendera opsional dalam Komputasi Kriptografi untuk Clean Rooms](crypto-computing-optional-flags.md)
+ [Kueri dengan Komputasi Kriptografi untuk Clean Rooms](crypto-computing-queries.md)
+ [Pedoman untuk klien enkripsi C3R](crypto-computing-guidelines.md)

# Pertimbangan saat menggunakan Komputasi Kriptografi untuk Clean Rooms
<a name="crypto-computing-considerations"></a>

Cryptographic Computing for Clean Rooms (C3R) berupaya memaksimalkan perlindungan data. Namun, beberapa kasus penggunaan mungkin mendapat manfaat dari tingkat perlindungan data yang lebih rendah dengan imbalan fungsionalitas tambahan. Anda dapat membuat pengorbanan khusus ini dengan memodifikasi C3R dari konfigurasi yang paling aman. Sebagai pelanggan, Anda harus menyadari pengorbanan ini dan menentukan apakah mereka sesuai untuk kasus penggunaan Anda. Pengorbanan untuk dipertimbangkan meliputi yang berikut: 

**Topics**
+ [Mengizinkan data campuran cleartext dan terenkripsi dalam tabel Anda](#allow-mixed-plaintext-and-encrypted-data)
+ [Mengizinkan nilai berulang dalam fingerprint kolom](#allow-repeated-values)
+ [Melonggarkan pembatasan tentang bagaimana fingerprint kolom diberi nama](#loose-restrictions-on-join-column-names)
+ [Menentukan bagaimana NULL nilai direpresentasikan](#determine-null-values)

Untuk informasi selengkapnya tentang cara mengatur parameter untuk skenario ini, lihat[Parameter komputasi kriptografi](crypto-computing-parameters.md).

## Mengizinkan data campuran cleartext dan terenkripsi dalam tabel Anda
<a name="allow-mixed-plaintext-and-encrypted-data"></a>

Memiliki semua data dienkripsi sisi klien memberikan perlindungan data maksimum. Namun, ini membatasi jenis kueri tertentu (misalnya, fungsi SUM agregat). Risiko mengizinkan cleartext data adalah layak bahwa siapa pun yang memiliki akses ke tabel terenkripsi dapat menyimpulkan beberapa informasi tentang nilai terenkripsi. Ini dapat dilakukan dengan melakukan analisis statistik pada cleartext dan data terkait. 

Misalnya, bayangkan Anda memiliki kolom `City` dan`State`. `City`Kolom adalah cleartext dan `State` kolom dienkripsi. Ketika Anda melihat nilai `Chicago` di `City` kolom, itu membantu Anda menentukan dengan probabilitas tinggi bahwa `State` itu`Illinois`. Sebaliknya, jika satu kolom `City` dan kolom lainnya`EmailAddress`, a cleartext `City` tidak mungkin mengungkapkan apa pun tentang terenkripsi`EmailAddress`. 

Untuk informasi selengkapnya tentang parameter untuk skenario ini, lihat[Izinkan parameter cleartext kolom](crypto-computing-parameters.md#parameter-allowcleartext).

## Mengizinkan nilai berulang dalam fingerprint kolom
<a name="allow-repeated-values"></a>

Untuk pendekatan yang paling aman, kami berasumsi bahwa fingerprint kolom apa pun berisi persis satu instance variabel. Tidak ada item yang dapat diulang dalam fingerprint kolom. Klien enkripsi C3R memetakan cleartext nilai-nilai ini menjadi nilai unik yang tidak dapat dibedakan dari nilai acak. Oleh karena itu, tidak mungkin untuk menyimpulkan informasi tentang cleartext dari nilai-nilai acak ini.

Risiko nilai berulang dalam fingerprint kolom adalah bahwa nilai berulang akan menghasilkan nilai yang tampak acak berulang. Dengan demikian, siapa pun yang memiliki akses ke tabel terenkripsi dapat, secara teori, melakukan analisis statistik fingerprint kolom yang mungkin mengungkapkan informasi tentang cleartext nilai. 

Sekali lagi, misalkan fingerprint kolomnya`State`, dan setiap baris tabel sesuai dengan rumah tangga AS. Dengan melakukan analisis frekuensi, seseorang dapat menyimpulkan keadaan mana `California` dan mana `Wyoming` dengan probabilitas tinggi. Kesimpulan ini dimungkinkan karena `California` memiliki lebih banyak penduduk daripada`Wyoming`. Sebaliknya, katakanlah fingerprint kolom berada pada pengidentifikasi rumah tangga dan setiap rumah tangga muncul dalam database antara 1 dan 4 kali dalam database jutaan entri. Tidak mungkin analisis frekuensi akan mengungkapkan informasi yang berguna.

Untuk informasi selengkapnya tentang parameter untuk skenario ini, lihat[Izinkan parameter duplikat](crypto-computing-parameters.md#parameter-allowduplicates).

## Melonggarkan pembatasan tentang bagaimana fingerprint kolom diberi nama
<a name="loose-restrictions-on-join-column-names"></a>

Secara default, kami berasumsi bahwa ketika dua tabel digabungkan menggunakan kolom terenkripsi, fingerprint kolom tersebut memiliki nama yang sama di setiap tabel. Alasan teknis untuk hasil ini adalah bahwa, secara default, kami memperoleh kunci kriptografi yang berbeda untuk mengenkripsi setiap kolom. fingerprint Kunci itu berasal dari kombinasi kunci rahasia bersama untuk kolaborasi dan nama kolom. Jika kami mencoba menggabungkan dua kolom dengan nama kolom yang berbeda, kami memperoleh kunci yang berbeda dan kami tidak dapat menghitung gabungan yang valid. 

Untuk mengatasi masalah ini, Anda dapat menonaktifkan fitur yang memperoleh kunci dari setiap nama kolom. Kemudian, klien enkripsi C3R menggunakan kunci turunan tunggal untuk semua fingerprint kolom. Risikonya adalah bahwa jenis lain dari analisis frekuensi dapat dilakukan yang mungkin mengungkapkan informasi. 

Mari kita gunakan `State` contoh `City` dan lagi. Jika kita memperoleh nilai acak yang sama untuk setiap fingerprint kolom (dengan tidak memasukkan nama kolom). `New York`memiliki nilai acak yang sama di `State` kolom `City` dan. New York adalah salah satu dari beberapa kota di AS di mana `City` namanya sama dengan `State` namanya. Sebaliknya, jika kumpulan data Anda memiliki nilai yang sama sekali berbeda di setiap kolom, tidak ada informasi yang bocor.

Untuk informasi selengkapnya tentang parameter untuk skenario ini, lihat[Izinkan JOIN kolom dengan parameter nama yang berbeda](crypto-computing-parameters.md#parameter-allowjoin).

## Menentukan bagaimana NULL nilai direpresentasikan
<a name="determine-null-values"></a>

Opsi yang tersedia untuk Anda adalah apakah akan memproses nilai kriptografi (enkripsi dan HMAC) seperti NULL nilai lainnya. Jika Anda tidak memproses NULL nilai seperti nilai lainnya, informasi mungkin akan terungkap. 

Misalnya, anggaplah bahwa NULL di `Middle Name` kolom di cleartext menunjukkan orang tanpa nama tengah. Jika Anda tidak mengenkripsi nilai-nilai tersebut, Anda membocorkan baris mana dalam tabel terenkripsi yang digunakan untuk orang tanpa nama tengah. Informasi itu mungkin menjadi sinyal pengenal bagi beberapa orang di beberapa populasi. Tetapi jika Anda memproses NULL nilai secara kriptografi, kueri SQL tertentu bertindak berbeda. Misalnya, GROUP BY klausa tidak akan mengelompokkan fingerprint NULL nilai dalam fingerprint kolom bersama-sama. 

Untuk informasi selengkapnya tentang parameter untuk skenario ini, lihat[Pertahankan parameter NULL nilai](crypto-computing-parameters.md#parameter-preservenulls).

# Jenis file dan data yang didukung dalam Komputasi Kriptografi untuk Clean Rooms
<a name="crypto-computing-file-types"></a>

Klien enkripsi C3R mengenali jenis file berikut: 
+ Berkas CSV
+ Parquetberkas

Anda dapat menggunakan `--fileFormat` bendera di klien enkripsi C3R untuk menentukan format file secara eksplisit. Ketika ditentukan secara eksplisit, format file tidak ditentukan oleh ekstensi file.

**Topics**
+ [Berkas CSV](#csv-file-type)
+ [Parquetberkas](#parquet-file-type)
+ [Mengenkripsi nilai non-string](#encrypt-non-string-values)

## Berkas CSV
<a name="csv-file-type"></a>

File dengan ekstensi.csv diasumsikan berformat CSV dan berisi teks yang dikodekan UTF-8. Klien enkripsi C3R memperlakukan semua nilai sebagai string.

### Properti yang didukung dalam file.csv
<a name="csv-properties"></a>

Klien enkripsi C3R mensyaratkan bahwa file.csv memiliki properti berikut:
+ Mungkin atau mungkin tidak berisi baris header awal yang secara unik menamai setiap kolom.
+ Dibatasi koma. (Saat ini, pembatas khusus tidak didukung.)
+ Teks yang dikodekan UTF-8.

#### Pemangkasan ruang putih dari entri .csv
<a name="whitespace-trimming"></a>

Spasi putih depan dan belakang dipangkas dari entri .csv.

#### NULLPengkodean khusus untuk file.csv
<a name="custom-null-encoding"></a>

File.csv dapat menggunakan pengkodean khususNULL.

Dengan klien enkripsi C3R, Anda dapat menentukan pengkodean kustom untuk NULL entri dalam data input dengan menggunakan bendera. `--csvInputNULLValue=<csv-input-null>` Klien enkripsi C3R dapat menggunakan pengkodean khusus dalam file keluaran yang dihasilkan untuk entri NULL dengan menggunakan bendera. `--csvOutputNULLValue=<csv-output-null>`

**catatan**  
NULLEntri dianggap *kurang* konten, khususnya dalam konteks format tabel yang lebih kaya seperti tabel SQL. Meskipun .csv tidak secara eksplisit mendukung karakterisasi ini karena alasan historis, itu adalah konvensi umum untuk mempertimbangkan entri kosong yang hanya berisi spasi putih. NULL Oleh karena itu, itulah perilaku default klien enkripsi C3R dan dapat disesuaikan sesuai kebutuhan.

### Bagaimana entri .csv ditafsirkan oleh C3R
<a name="interpretation-csv-entries"></a>

Tabel berikut memberikan contoh bagaimana entri .csv disusun (cleartextcleartextuntuk kejelasan) berdasarkan nilai (jika ada) yang disediakan untuk dan flag. `--csvInputNULLValue=<csv-input-null>` `--csvOutputNULLValue=<csv-output-null>` Memimpin dan membuntuti ruang putih di luar tanda kutip dipangkas sebelum C3R menafsirkan makna nilai apa pun.


| `<csv-input-null>` | `<csv-output-null>` | Masukan entri | Entri keluaran | 
| --- |--- |--- |--- |
| Tidak ada | Tidak ada | ,AnyProduct, | ,AnyProduct, | 
| Tidak ada | Tidak ada | , AnyProduct , | ,AnyProduct, | 
| Tidak ada | Tidak ada | ,"AnyProduct", | ,AnyProduct, | 
| Tidak ada | Tidak ada | , "AnyProduct" , | ,AnyProduct, | 
| Tidak ada | Tidak ada | ,, | ,, | 
| Tidak ada | Tidak ada | , , | ,, | 
| Tidak ada | Tidak ada | ,"", | ,, | 
| Tidak ada | Tidak ada | ," ", | ," ", | 
| Tidak ada | Tidak ada | , " " , | ," ", | 
| "AnyProduct" | "NULL" | ,AnyProduct, | ,NULL, | 
| "AnyProduct" | "NULL" | , AnyProduct , | ,NULL, | 
| "AnyProduct" | "NULL" | ,"AnyProduct", | ,NULL, | 
| "AnyProduct" | "NULL" | , "AnyProduct" , | ,NULL, | 
| Tidak ada | "NULL" | ,, | ,NULL, | 
| Tidak ada | "NULL" | , , | ,NULL, | 
| Tidak ada | "NULL" | ,"", | ,NULL, | 
| Tidak ada | "NULL" | ," ", | ," ", | 
| Tidak ada | "NULL" | , " " , | ," ", | 
| "" | "NULL" | ,, | ,NULL, | 
| "" | "NULL" | , , | ,NULL, | 
| "" | "NULL" | ,"", | ,"", | 
| "" | "NULL" | ," ", | ," ", | 
| "" | "NULL" | , " " , | ," ", | 
| "\$1"\$1"" | "NULL" | ,, | ,, | 
| "\$1"\$1"" | "NULL" | , , | ,, | 
| "\$1"\$1"" | "NULL" | ,"", | ,NULL, | 
| "\$1"\$1"" | "NULL" | ," ", | ," ", | 
| "\$1"\$1"" | "NULL" | , " " , | ," ", | 

### File CSV tanpa header
<a name="csv-file-no-headers"></a>

File sumber.csv tidak perlu memiliki header di baris pertama yang secara unik memberi nama setiap kolom. Namun, file.csv tanpa baris header memerlukan skema enkripsi posisi. Skema enkripsi posisi diperlukan alih-alih skema pemetaan khas yang digunakan untuk file.csv dengan baris header dan file. Parquet

Skema enkripsi posisi menentukan kolom keluaran berdasarkan posisi, bukan dengan nama. Skema enkripsi yang dipetakan memetakan nama kolom sumber untuk menargetkan nama kolom. Untuk informasi lebih lanjut, termasuk diskusi rinci dan contoh dari kedua format skema, lihat[Skema tabel yang dipetakan dan posisi](create-schema.md#mapped-and-positional-schemas).

## Parquetberkas
<a name="parquet-file-type"></a>

File dengan .parquet ekstensi diasumsikan dalam Apache Parquet format.

### Tipe Parquet data yang didukung
<a name="supported-parquet-data-types"></a>

Klien enkripsi C3R dapat memproses data non-kompleks (yaitu tipe primitif) dalam Parquet file yang mewakili tipe data yang didukung oleh. AWS Clean Rooms

Namun, hanya kolom string yang dapat digunakan untuk sealed kolom.

Tipe data Parket berikut didukung:
+ `Binary`tipe primitif dengan anotasi logis berikut:
  + Tidak ada jika `--parquetBinaryAsString` diatur (tipe `STRING` data)
  + `Decimal(scale, precision)`(tipe `DECIMAL` data)
  + `String`(tipe `STRING` data)
+ `Boolean`tipe data primitif tanpa anotasi logis (tipe `BOOLEAN` data)
+ `Double`tipe data primitif tanpa anotasi logis (tipe `DOUBLE` data)
+ `Fixed_Len_Binary_Array`tipe primitif dengan anotasi `Decimal(scale, precision)` logis (tipe `DECIMAL` data)
+ `Float`tipe data primitif tanpa anotasi logis (tipe `FLOAT` data)
+ `Int32`tipe primitif dengan anotasi logis berikut:
  + Tidak ada (tipe `INT` data)
  + `Date`(tipe `DATE` data)
  + `Decimal(scale, precision)`(tipe `DECIMAL` data)
  + `Int(16, true)`(tipe `SMALLINT` data)
  + `Int(32, true)`(tipe `INT` data)
+ `Int64`tipe data primitif dengan anotasi logis berikut:
  + Tidak ada (tipe `BIGINT` data)
  + `Decimal(scale, precision)`(tipe `DECIMAL` data)
  + `Int(64, true)`(tipe `BIGINT` data)
  + `Timestamp(isUTCAdjusted, TimeUnit.MILLIS)`(tipe `TIMESTAMP` data)
  + `Timestamp(isUTCAdjusted, TimeUnit.MICROS)`(tipe `TIMESTAMP` data)
  + `Timestamp(isUTCAdjusted, TimeUnit.NANOS)`(tipe `TIMESTAMP` data)

## Mengenkripsi nilai non-string
<a name="encrypt-non-string-values"></a>

Saat ini, hanya nilai string yang didukung untuk sealed kolom. 

Untuk file.csv, klien enkripsi C3R memperlakukan semua nilai sebagai teks yang dikodekan UTF-8 dan tidak berusaha untuk menafsirkannya secara berbeda sebelum enkripsi. 

Untuk kolom sidik jari, jenis dikelompokkan ke dalam kelas ekivalensi. Kelas kesetaraan adalah sekumpulan tipe data yang dapat dibandingkan secara jelas untuk kesetaraan melalui tipe data yang representatif.

Kelas kesetaraan memungkinkan sidik jari identik untuk ditetapkan ke nilai semantik yang sama terlepas dari representasi aslinya. Namun, nilai yang sama dalam dua kelas ekivalensi tidak akan menghasilkan kolom sidik jari yang sama.

Misalnya, `INTEGRAL` nilai `42` akan diberikan sidik jari yang sama terlepas dari apakah itu awalnya`SMALLINT`,`INT`, atau`BIGINT`. Juga, `INTEGRAL` nilai tidak `0` akan pernah cocok dengan `BOOLEAN` nilai `FALSE` (yang diwakili oleh nilai`0`).

Kelas kesetaraan berikut dan tipe AWS Clean Rooms data yang sesuai didukung oleh kolom sidik jari:


| Kelas kesetaraan | Tipe AWS Clean Rooms data yang didukung | 
| --- | --- | 
| BOOLEAN | BOOLEAN | 
| DATE | DATE | 
| INTEGRAL | BIGINT, INT, SMALLINT | 
|  STRING | CHAR, STRING, VARCHAR | 

# Nama kolom dalam Komputasi Kriptografi untuk Clean Rooms
<a name="crypto-computing-column-names"></a>

Secara default, nama-nama kolom penting dalam Komputasi Kriptografi untukClean Rooms.

Jika nilai **Izinkan JOIN kolom dengan parameter nama yang berbeda** **salah**, nama kolom digunakan selama enkripsi fingerprint kolom. Untuk alasan ini, secara default, kolaborator harus berkoordinasi terlebih dahulu dan menggunakan nama kolom target yang sama untuk data yang akan menggunakan JOIN pernyataan dalam kueri. Secara default, kolom yang dienkripsi JOIN dengan nama berbeda tidak berhasil JOIN pada nilai apa pun.

Jika nilai **Izinkan JOIN kolom dengan parameter nama yang berbeda** **benar**, JOIN pernyataan di seluruh kolom dienkripsi sebagai fingerprint kolom berhasil. Mengenkripsi data dengan parameter ini mungkin memungkinkan beberapa inferensi nilai. cleartext Misalnya, jika baris memiliki nilai Kode Otentikasi Pesan (HMAC) berbasis Hash yang sama di `City` kolom dan `State` kolom, nilainya mungkin. `New York`

## Normalisasi nama header kolom
<a name="column-header-names-normalization"></a>

Nama header kolom dinormalisasi oleh klien enkripsi C3R. Setiap spasi putih depan dan belakang dihapus, dan nama kolom dibuat huruf kecil untuk output yang diubah.

Normalisasi diterapkan sebelum semua perhitungan, perhitungan, atau operasi lain yang mungkin dapat dipengaruhi oleh nama kolom. File keluaran yang dipancarkan hanya berisi nama yang dinormalisasi.

# Jenis kolom dalam Komputasi Kriptografi untuk Clean Rooms
<a name="crypto-computing-column-types"></a>

Topik ini memberikan informasi tentang jenis kolom dalam Komputasi Kriptografi untukClean Rooms.

**Topics**
+ [Fingerprintkolom](#fingerprint-columns)
+ [Kolom tertutup](#sealed-columns)
+ [Cleartextkolom](#cleartext-columns)

## Fingerprintkolom
<a name="fingerprint-columns"></a>

*Fingerprintkolom* adalah kolom yang dilindungi secara kriptografis untuk digunakan dalam JOIN pernyataan.

Data dari fingerprint kolom tidak dapat didekripsi. Hanya data dari kolom tertutup yang dapat didekripsi.

Fingerprintkolom hanya boleh digunakan dalam klausa dan fungsi SQL berikut:
+ JOIN (INNER, OUTER, LEFT, RIGHT, or FULL)terhadap fingerprint kolom lain: 
  + Jika nilai `allowJoinsOnColumnsWithDifferentNames` parameter diatur ke`false`, kedua fingerprint kolom juga JOIN harus memiliki nama yang sama.
+ `SELECT COUNT()`
+ `SELECT COUNT(DISTINCT )`
+ `GROUP BY`(Hanya gunakan jika kolaborasi telah menetapkan nilai `preserveNulls` parameter ke`true`.)

Kueri yang melanggar batasan ini mungkin menghasilkan hasil yang salah.

## Kolom tertutup
<a name="sealed-columns"></a>

*Kolom tertutup* adalah kolom yang dilindungi secara kriptografis untuk digunakan dalam SELECT pernyataan. 

Kolom tertutup hanya boleh digunakan dalam klausa dan fungsi SQL berikut:
+ `SELECT`
+ `SELECT ... AS`
+ `SELECT COUNT()`
**catatan**  
`SELECT COUNT(DISTINCT )` tidak didukung.

Kueri yang melanggar batasan ini mungkin menghasilkan hasil yang salah.

### Padding data untuk sealed kolom sebelum enkripsi
<a name="padding-data"></a>

Saat Anda menentukan bahwa kolom harus berupa sealed kolom, C3R menanyakan *padding* jenis apa yang harus dipilih. Padding data sebelum enkripsi adalah opsional. Tanpa padding (tipe pad`none`), panjang data terenkripsi menunjukkan ukuran. cleartext Dalam beberapa keadaan, ukuran cleartext dapat mengekspos plaintext. Dengan padding (tipe pad `fixed` atau`max`), semua nilai pertama-tama diempuk ke ukuran umum dan kemudian dienkripsi. Dengan padding, panjang data terenkripsi tidak memberikan informasi tentang cleartext panjang aslinya, selain memberikan batas atas pada ukurannya.

Jika Anda ingin padding untuk kolom dan panjang byte maksimal data di kolom itu diketahui, gunakan `fixed` padding. Gunakan `length` nilai yang setidaknya sebesar panjang byte dari nilai terpanjang di kolom itu. 

**catatan**  
Terjadi kesalahan dan enkripsi gagal jika nilai lebih panjang dari yang disediakan`length`.

Jika Anda ingin padding untuk kolom dan panjang byte maksimal data di kolom itu tidak diketahui, gunakan `max` padding. Mode padding ini membungkus semua data dengan panjang nilai terpanjang ditambah `length` byte tambahan.

**catatan**  
Anda mungkin ingin mengenkripsi data dalam batch, atau memperbarui tabel Anda dengan data baru secara berkala. Ketahuilah bahwa `max` padding akan memasukkan entri ke panjang (plus `length` byte) dari entri plaintext terpanjang dalam batch tertentu. Ini berarti bahwa panjang ciphertext dapat bervariasi dari batch ke batch. Oleh karena itu, jika Anda mengetahui panjang byte maksimum untuk kolom, maka Anda harus menggunakan `fixed` sebagai gantinya. `max`

## Cleartextkolom
<a name="cleartext-columns"></a>

*Cleartextkolom* adalah kolom yang tidak dilindungi secara kriptografis untuk digunakan dalam JOIN atau SELECT pernyataan.

Cleartextkolom dapat digunakan di bagian manapun dari query SQL.

# Parameter komputasi kriptografi
<a name="crypto-computing-parameters"></a>

[Parameter komputasi kriptografi tersedia untuk kolaborasi menggunakan Cryptographic Computing for Clean Rooms (C3R) saat membuat kolaborasi.](create-collaboration.md) Anda dapat membuat kolaborasi menggunakan AWS Clean Rooms konsol atau operasi `CreateCollaboration` API. Di konsol, Anda dapat mengatur nilai untuk parameter dalam **parameter komputasi kriptografi** setelah Anda mengaktifkan opsi **komputasi kriptografi Support**. Untuk informasi selengkapnya, lihat topik berikut.

**Topics**
+ [Izinkan parameter cleartext kolom](#parameter-allowcleartext)
+ [Izinkan parameter duplikat](#parameter-allowduplicates)
+ [Izinkan JOIN kolom dengan parameter nama yang berbeda](#parameter-allowjoin)
+ [Pertahankan parameter NULL nilai](#parameter-preservenulls)

## Izinkan parameter cleartext kolom
<a name="parameter-allowcleartext"></a>

Di konsol, Anda dapat mengatur parameter **Izinkan cleartext kolom** saat [membuat kolaborasi](create-collaboration.md) untuk menentukan apakah cleartext data diizinkan dalam tabel dengan data terenkripsi.

Tabel berikut menjelaskan nilai-nilai untuk parameter **Izinkan cleartext kolom**.


| Nilai parameter | Deskripsi | 
| --- | --- | 
| Tidak |  Cleartextkolom tidak diizinkan dalam tabel terenkripsi. Semua data dilindungi secara kriptografi.  | 
| Ya |  Cleartextkolom diperbolehkan dalam tabel terenkripsi. Cleartextkolom tidak dilindungi secara kriptografis dan disertakan sebagai. cleartext Anda harus mencatat apa yang mungkin diungkapkan oleh cleartext data baris Anda tentang data lain dalam tabel. Untuk menjalankan SUM atau AVG pada kolom tertentu, kolom harus masukcleartext.  | 

Menggunakan operasi `CreateCollaboration` API, untuk `dataEncryptionMetadata` parameter, Anda dapat mengatur nilai `allowCleartext` ke `true` atau`false`. Untuk informasi selengkapnya tentang operasi API, lihat [Referensi AWS Clean Rooms API](https://docs.aws.amazon.com/clean-rooms/latest/apireference/Welcome.html).

Cleartextkolom sesuai dengan kolom yang diklasifikasikan sebagai cleartext dalam skema khusus tabel. Data dalam kolom ini tidak dienkripsi dan dapat digunakan dengan cara apa pun. Cleartextkolom dapat berguna jika data tidak sensitif and/or jika lebih banyak fleksibilitas diperlukan daripada sealed kolom atau fingerprint kolom terenkripsi memungkinkan.

## Izinkan parameter duplikat
<a name="parameter-allowduplicates"></a>

Di konsol, Anda dapat mengatur parameter **Izinkan duplikat** saat [membuat kolaborasi untuk menentukan apakah kolom yang](create-collaboration.md) dienkripsi untuk JOIN kueri dapat berisi duplikat non-nilai. NULL

**penting**  
Parameter **Izinkan duplikat**, [**JOINIzinkan kolom dengan nama yang berbeda**](#parameter-allowjoin), dan [**Pertahankan NULL nilai**](#parameter-preservenulls) memiliki efek terpisah tetapi terkait.

Tabel berikut menjelaskan nilai untuk parameter **Izinkan duplikat**.


| Nilai parameter | Deskripsi | 
| --- | --- | 
| Tidak  |  Nilai berulang tidak diperbolehkan dalam fingerprint kolom. Semua nilai dalam satu fingerprint kolom harus unik.  | 
| Ya |  Nilai berulang diperbolehkan dalam fingerprint kolom.  Jika Anda perlu menggabungkan kolom dengan nilai berulang, atur nilai ini ke **Ya**. Ketika diatur ke **Ya**, pola frekuensi yang muncul dalam fingerprint kolom dalam tabel C3R atau hasil mungkin menyiratkan beberapa informasi tambahan tentang struktur data. cleartext   | 

Menggunakan operasi `CreateCollaboration` API, untuk `dataEncryptionMetadata` parameter Anda dapat mengatur nilai `allowDuplicates` ke `true` atau`false`. Untuk informasi selengkapnya tentang operasi API, lihat [Referensi AWS Clean Rooms API](https://docs.aws.amazon.com/clean-rooms/latest/apireference/Welcome.html).

Secara default, jika data terenkripsi harus digunakan dalam JOIN kueri, klien enkripsi C3R mengharuskan kolom tersebut tidak memiliki nilai duplikat. Persyaratan ini merupakan upaya untuk meningkatkan perlindungan data. Perilaku ini dapat membantu memastikan bahwa pola berulang dalam data tidak dapat diamati. Namun, jika Anda ingin bekerja dengan data terenkripsi dalam JOIN kueri dan tidak peduli tentang nilai duplikat, parameter **Izinkan duplikat dapat menonaktifkan pemeriksaan** konservatif ini.

## Izinkan JOIN kolom dengan parameter nama yang berbeda
<a name="parameter-allowjoin"></a>

Di konsol, Anda dapat mengatur parameter **Izinkan JOIN kolom dengan nama yang berbeda** saat [membuat kolaborasi](create-collaboration.md) untuk menentukan apakah JOIN pernyataan antara kolom dengan nama berbeda didukung.

Untuk informasi selengkapnya, lihat [Normalisasi nama header kolom](crypto-computing-column-names.md#column-header-names-normalization)

Tabel berikut menjelaskan nilai untuk **Izinkan JOIN kolom dengan parameter nama yang berbeda**.


| Nilai parameter | Deskripsi | 
| --- | --- | 
| Tidak  |  Gabungan fingerprint kolom dengan nama berbeda tidak didukung. JOINpernyataan hanya memberikan hasil yang akurat pada kolom yang memiliki nama yang sama.  Nilai **No** memberikan peningkatan keamanan informasi tetapi mengharuskan peserta kolaborasi untuk menyetujui sebelumnya tentang nama kolom. Jika dua kolom memiliki nama yang berbeda ketika dienkripsi sebagai fingerprint kolom dan **Izinkan JOIN kolom dengan nama yang berbeda** diatur ke **Tidak**, JOIN pernyataan pada kolom tersebut tidak menghasilkan hasil. Ini karena tidak ada nilai pasca-enkripsi yang dibagi di antara mereka.    | 
| Ya |  Gabungan fingerprint kolom dengan nama berbeda didukung. Untuk fleksibilitas tambahan, pengguna dapat mengatur nilai ini ke **Ya**, yang memungkinkan JOIN pernyataan pada kolom terlepas dari nama kolom mereka.  Jika disetel ke **Ya**, klien enkripsi C3R tidak mempertimbangkan nama kolom saat melindungi fingerprint kolom. Akibatnya, nilai umum di fingerprint kolom yang berbeda dapat diamati dalam tabel C3R.  Misalnya, jika baris memiliki JOIN nilai terenkripsi yang sama di `City` kolom dan `State` kolom, mungkin masuk akal untuk menyimpulkan bahwa nilainya adalah. `New York`  | 

Menggunakan operasi `CreateCollaboration` API, untuk `dataEncryptionMetadata` parameter, Anda dapat mengatur nilai `allowJoinsOnColumnsWithDifferentNames` ke `true` atau`false`. Untuk informasi selengkapnya tentang operasi API, lihat [Referensi AWS Clean Rooms API](https://docs.aws.amazon.com/clean-rooms/latest/apireference/Welcome.html).

Secara default, enkripsi fingerprint kolom dipengaruhi oleh kolom `targetHeader` untuk itu, diatur[Langkah 4: Buat skema enkripsi untuk file tabular](gen-encryption-schema-csv.md). Oleh karena itu, cleartext nilai yang sama memiliki representasi terenkripsi yang berbeda di setiap fingerprint kolom yang berbeda yang dienkripsi untuknya.

Parameter ini dapat berguna untuk mencegah inferensi cleartext nilai dalam beberapa kasus. Misalnya, melihat nilai terenkripsi yang sama di fingerprint kolom `City` dan `State` dapat digunakan untuk menyimpulkan nilainya secara wajar. `New York` Namun, penggunaan parameter ini memerlukan koordinasi tambahan terlebih dahulu, sehingga semua kolom yang akan digabungkan dalam kueri memiliki nama bersama.

Anda dapat menggunakan **Izinkan JOIN kolom dengan parameter nama yang berbeda** untuk melonggarkan batasan ini. Ketika nilai parameter disetel ke`Yes`, ini memungkinkan kolom apa pun yang dienkripsi JOIN untuk digunakan bersama terlepas dari nama.

## Pertahankan parameter NULL nilai
<a name="parameter-preservenulls"></a>

Di konsol, Anda dapat mengatur parameter **Pertahankan NULL nilai** saat [membuat kolaborasi](create-collaboration.md) untuk menunjukkan bahwa tidak ada nilai yang ada untuk kolom tersebut.

Tabel berikut menjelaskan nilai untuk parameter **Preserve NULL values**.


| Nilai parameter | Deskripsi | 
| --- | --- | 
| Tidak |  NULLnilai-nilai tidak dipertahankan. NULLnilai tidak muncul seperti NULL dalam tabel terenkripsi. NULLnilai muncul sebagai nilai acak unik dalam tabel C3R.   | 
| Ya | NULLnilai-nilai dipertahankan. NULLnilai muncul seperti NULL dalam tabel terenkripsi. Jika Anda memerlukan semantik SQL NULL nilai, Anda dapat mengatur nilai ini ke Ya. Akibatnya, NULL entri muncul seperti NULL pada tabel C3R, terlepas dari apakah kolom dienkripsi dan terlepas dari pengaturan parameter untuk Izinkan duplikat.  | 

Menggunakan operasi `CreateCollaboration` API, untuk `dataEncryptionMetadata` parameter, Anda dapat mengatur nilai `preserveNulls` ke `true` atau`false`. Untuk informasi selengkapnya tentang operasi API, lihat [Referensi AWS Clean Rooms API](https://docs.aws.amazon.com/clean-rooms/latest/apireference/Welcome.html).

Saat parameter **Pertahankan NULL nilai** disetel ke **Tidak** untuk kolaborasi:

1. NULLentri dalam `cleartext` kolom tidak berubah.

1. NULLentri dalam `fingerprint` kolom terenkripsi dienkripsi sebagai nilai acak untuk menyembunyikan isinya. Bergabung di kolom terenkripsi dengan NULL entri di cleartext kolom tidak menghasilkan kecocokan apa pun untuk entri mana pun. NULL Tidak ada kecocokan yang dibuat karena mereka masing-masing menerima konten acak unik mereka sendiri.

1. NULLentri dalam `sealed` kolom terenkripsi dienkripsi.

Ketika nilai parameter **Pertahankan NULL nilai** disetel ke **Ya** untuk kolaborasi, NULL entri dari semua kolom tetap sebagai NULL terlepas dari apakah kolom dienkripsi.

Parameter **Preserve NULL values** berguna dalam skenario seperti pengayaan data, di mana Anda ingin berbagi kekurangan informasi yang dinyatakan sebagai. NULL Parameter **Preserve NULL values** juga berguna dalam format fingerprint atau HMAC jika Anda memiliki NULL nilai di kolom yang Anda inginkan JOIN atauGROUP BY.

Jika nilai parameter **Izinkan duplikat** dan **Pertahankan NULL nilai** diatur ke **Tidak**, memiliki lebih dari satu NULL entri dalam fingerprint kolom menghasilkan kesalahan dan menghentikan enkripsi. Jika nilai salah satu parameter disetel ke **Ya**, tidak ada kesalahan seperti itu terjadi.

# Bendera opsional dalam Komputasi Kriptografi untuk Clean Rooms
<a name="crypto-computing-optional-flags"></a>

Bagian berikut menjelaskan flag opsional yang dapat Anda atur saat Anda [mengenkripsi data menggunakan klien enkripsi](encrypt-data.md) C3R untuk kustomisasi dan pengujian file tabular.

**Topics**
+ [`--csvInputNULLValue`bendera](#optional-flags-CSVinputNullValue)
+ [`--csvOutputNULLValue`bendera](#optional-flags-CSVoutputNullValue)
+ [`--enableStackTraces`bendera](#optional-flags-enablestacktraces)
+ [`--dryRun`bendera](#optional-flags-dry-run)
+ [`--tempDir`bendera](#optional-flags-working-dir)

## `--csvInputNULLValue`bendera
<a name="optional-flags-CSVinputNullValue"></a>

Anda dapat menggunakan `--csvInputNULLValue` bendera untuk menentukan pengkodean kustom untuk NULL entri dalam data input saat Anda [mengenkripsi data menggunakan klien enkripsi C3R](encrypt-data.md). 

Tabel berikut merangkum penggunaan dan parameter flag ini.


| Penggunaan | Parameter | 
| --- | --- | 
| Tidak wajib. Pengguna dapat menentukan pengkodean khusus untuk NULL entri dalam data input. | Pengkodean NULL nilai yang ditentukan pengguna dalam file CSV input | 

NULLEntri adalah entri yang dianggap kurang konten, khususnya dalam konteks format tabel yang lebih kaya seperti tabel SQL. Meskipun .csv tidak secara eksplisit mendukung karakterisasi ini karena alasan historis, itu adalah konvensi umum untuk mempertimbangkan entri kosong yang hanya berisi spasi putih. NULL Oleh karena itu, itulah perilaku default klien enkripsi C3R dan dapat disesuaikan sesuai kebutuhan.

## `--csvOutputNULLValue`bendera
<a name="optional-flags-CSVoutputNullValue"></a>

Anda dapat menggunakan `--csvOutputNULLValue` bendera untuk menentukan pengkodean kustom untuk NULL entri dalam data keluaran saat Anda [mengenkripsi data menggunakan klien enkripsi C3R](encrypt-data.md). 

Tabel berikut merangkum penggunaan dan parameter flag ini.


| Penggunaan | Parameter | 
| --- | --- | 
| Tidak wajib. Pengguna dapat menentukan pengkodean khusus dalam file keluaran yang dihasilkan untuk NULL entri.  | Pengkodean NULL nilai yang ditentukan pengguna dalam file CSV keluaran | 

NULLEntri adalah entri yang dianggap kurang konten, khususnya dalam konteks format tabel yang lebih kaya seperti tabel SQL. Meskipun .csv tidak secara eksplisit mendukung karakterisasi ini karena alasan historis, itu adalah konvensi umum untuk mempertimbangkan entri kosong yang hanya berisi spasi putih. NULL Oleh karena itu, itulah perilaku default klien enkripsi C3R dan dapat disesuaikan sesuai kebutuhan.

## `--enableStackTraces`bendera
<a name="optional-flags-enablestacktraces"></a>

Saat Anda [mengenkripsi data](encrypt-data.md) menggunakan klien enkripsi C3R, gunakan `--enableStackTraces` tanda untuk memberikan informasi kontekstual tambahan untuk pelaporan kesalahan saat C3R menemukan kesalahan.

AWS tidak mengumpulkan kesalahan. Jika Anda mengalami kesalahan, gunakan jejak tumpukan untuk memecahkan masalah kesalahan sendiri atau mengirim jejak tumpukan Dukungan untuk mendapatkan bantuan. 

Tabel berikut merangkum penggunaan dan parameter flag ini.


| Penggunaan | Parameter | 
| --- | --- | 
| Tidak wajib. Digunakan untuk memberikan informasi kontekstual tambahan untuk pelaporan kesalahan ketika klien enkripsi C3R mengalami kesalahan. | Tidak ada | 

## `--dryRun`bendera
<a name="optional-flags-dry-run"></a>

[Enkripsi](encrypt-data.md) dan [dekripsi perintah klien enkripsi](decrypt-data.md) C3R menyertakan bendera opsional. `--dryRun` Bendera mengambil semua argumen yang disediakan pengguna dan memeriksa validitas dan konsistensi.

Anda dapat menggunakan `--dryRun` bendera untuk memeriksa apakah file skema Anda valid dan konsisten dengan file input yang sesuai. 

Tabel berikut merangkum penggunaan dan parameter flag ini.


| Penggunaan | Parameter | 
| --- | --- | 
| Tidak wajib. Menyebabkan klien enkripsi C3R mengurai parameter dan memeriksa file, tetapi tidak melakukan enkripsi atau dekripsi. | Tidak ada | 

## `--tempDir`bendera
<a name="optional-flags-working-dir"></a>

Anda mungkin ingin menggunakan direktori sementara karena file terenkripsi terkadang bisa lebih besar dari file yang tidak dienkripsi, tergantung pada pengaturannya. Kumpulan data juga harus dienkripsi per kolaborasi agar berfungsi dengan benar.

Saat Anda [mengenkripsi data](encrypt-data.md) menggunakan C3R, gunakan `--tempDir` bendera untuk menentukan lokasi di mana file sementara dapat dibuat saat memproses input.

Tabel berikut merangkum penggunaan dan parameter flag ini.


| Penggunaan | Parameter | 
| --- | --- | 
| Pengguna dapat menentukan lokasi di mana file sementara dapat dibuat saat memproses input.  | Default ke direktori sementara sistem. | 

# Kueri dengan Komputasi Kriptografi untuk Clean Rooms
<a name="crypto-computing-queries"></a>

Topik ini memberikan informasi tentang menulis kueri yang menggunakan tabel data yang telah dienkripsi menggunakan Cryptographic Computing untuk. Clean Rooms

**Topics**
+ [Kueri yang bercabang di NULL](#queries-branch-on-null)
+ [Memetakan satu kolom sumber ke beberapa kolom target](#queries-mapping)
+ [Menggunakan data yang sama untuk keduanya JOIN dan SELECT kueri](#queries-using-same-data)

## Kueri yang bercabang di NULL
<a name="queries-branch-on-null"></a>

Untuk memiliki cabang kueri pada NULL pernyataan berarti menggunakan sintaks seperti`IF x IS NULL THEN 0 ELSE 1`.

Kueri selalu dapat bercabang pada NULL pernyataan di cleartext kolom. 

Kueri dapat bercabang pada NULL pernyataan di sealed kolom dan fingerprint kolom hanya jika nilai parameter **Preserve NULL values** (`preserveNulls`) diatur ke. `true`

Kueri yang melanggar batasan ini mungkin menghasilkan hasil yang salah.

## Memetakan satu kolom sumber ke beberapa kolom target
<a name="queries-mapping"></a>

Satu kolom sumber dapat dipetakan ke beberapa kolom target. Misalnya, Anda mungkin ingin keduanya JOIN dan SELECT pada kolom. 

Untuk informasi selengkapnya, lihat [Menggunakan data yang sama untuk keduanya JOIN dan SELECT kueri](#queries-using-same-data).

## Menggunakan data yang sama untuk keduanya JOIN dan SELECT kueri
<a name="queries-using-same-data"></a>

Jika data dalam kolom tidak sensitif, itu dapat muncul di kolom cleartext target, yang memungkinkannya digunakan untuk tujuan apa pun.

Jika data dalam kolom sensitif dan harus digunakan untuk keduanya JOIN dan SELECT kueri, petakan kolom sumber itu ke dua kolom target dalam file output. Satu kolom dienkripsi dengan `type` sebagai fingerprint kolom, dan satu kolom dienkripsi dengan kolom `type` sebagai tertutup. Pembuatan skema interaktif dari klien enkripsi C3R menyarankan sufiks header dan. `_fingerprint` `_sealed` Sufiks header ini dapat menjadi konvensi yang berguna untuk membedakan kolom tersebut dengan cepat.

# Pedoman untuk klien enkripsi C3R
<a name="crypto-computing-guidelines"></a>

Klien enkripsi C3R adalah alat yang memungkinkan organisasi untuk menyatukan data sensitif untuk mendapatkan wawasan baru dari analisis data. Alat ini secara kriptografis membatasi apa yang dapat dipelajari oleh pihak mana pun dan AWS dalam prosesnya. Meskipun ini sangat penting, proses pengamanan data secara kriptografis dapat menambah overhead yang signifikan baik dalam hal sumber daya komputasi maupun penyimpanan. Oleh karena itu, penting untuk memahami pengorbanan menggunakan setiap pengaturan dan cara mengoptimalkan pengaturan sambil tetap mempertahankan jaminan kriptografi yang diinginkan. Topik ini berfokus pada implikasi kinerja dari pengaturan yang berbeda dalam klien dan skema enkripsi C3R. 

Semua pengaturan enkripsi klien enkripsi C3R memberikan jaminan kriptografi yang berbeda. Pengaturan tingkat kolaborasi paling aman secara default. Mengaktifkan fungsionalitas tambahan sambil membuat kolaborasi melemahkan jaminan privasi, memungkinkan aktivitas seperti analisis frekuensi dilakukan pada ciphertext. Untuk informasi lebih lanjut tentang bagaimana pengaturan ini digunakan dan apa implikasinya, lihat[Komputasi Kriptografi untuk Clean Rooms](crypto-computing.md).

**Topics**
+ [Implikasi kinerja untuk jenis kolom](#performance-implications)
+ [Memecahkan masalah peningkatan ukuran ciphertext yang tidak terduga](#troubleshooting-ciphertext-size)

## Implikasi kinerja untuk jenis kolom
<a name="performance-implications"></a>

C3R menggunakan tiga jenis kolom:cleartext,fingerprint, dan. sealed Masing-masing jenis kolom ini memberikan jaminan kriptografi yang berbeda dan memiliki tujuan penggunaan yang berbeda. Pada bagian berikut, implikasi kinerja dari jenis kolom dibahas dan dampak kinerja dari setiap pengaturan.

**Topics**
+ [Cleartextkolom](#cleartext-columns)
+ [Fingerprintkolom](#guidelines-fingerprint-columns)
+ [Sealedkolom](#guidelines-sealed-columns)

### Cleartextkolom
<a name="cleartext-columns"></a>

Cleartextkolom tidak diubah dari format aslinya dan tidak diproses secara kriptografi dengan cara apa pun. Jenis kolom ini tidak dapat dikonfigurasi dan tidak memengaruhi kinerja penyimpanan atau komputasi.

### Fingerprintkolom
<a name="guidelines-fingerprint-columns"></a>

Fingerprintkolom dimaksudkan untuk digunakan untuk menggabungkan data di beberapa tabel. Untuk tujuan ini, ukuran ciphertext yang dihasilkan harus selalu sama. Namun, kolom ini dipengaruhi oleh pengaturan tingkat kolaborasi. Fingerprintkolom mungkin memiliki berbagai tingkat dampak pada ukuran file output tergantung pada yang cleartext terkandung dalam input.

**Topics**
+ [Basis overhead untuk kolom fingerprint](#fingerprint-columns-base-overhead)
+ [Pengaturan kolaborasi untuk fingerprint kolom](#fingerprint-columns-collab-settings)
+ [Contoh data untuk fingerprint kolom](#collab-set-sample-data)
+ [Kolom pemecahan masalah fingerprint](#fingerprint-columns-troubleshooting)

#### Basis overhead untuk kolom fingerprint
<a name="fingerprint-columns-base-overhead"></a>

Ada overhead dasar untuk fingerprint kolom. Overhead ini konstan dan menggantikan ukuran cleartext byte.

Data dalam fingerprint kolom diproses secara kriptografis melalui fungsi Kode Otentikasi Pesan berbasis Hash (HMAC), yang mengubah data menjadi kode otentikasi pesan 32 byte (MAC). Data ini kemudian diproses melalui encoder base64, menambahkan sekitar 33 persen ke ukuran byte. Ini pra-penandaan dengan penunjukan C3R 8 byte untuk menunjuk jenis kolom yang dimiliki data dan versi klien yang menghasilkannya. Hasil akhirnya adalah 52 byte. Hasil ini kemudian dikalikan dengan jumlah baris untuk mendapatkan total overhead basis (gunakan jumlah total `null` non-nilai jika `preserveNulls` disetel ke true).

Gambar berikut menunjukkan bagaimana *`BASE_OVERHEAD = `*`C3R_DESIGNATION + `*`(MAC * 1.33)`***

![\[Basis overhead 52 byte untuk fingerprint kolom.\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/images/base-overhead-fingerprint.PNG)


Output ciphertext dalam fingerprint kolom akan selalu 52 byte. Ini bisa menjadi penurunan penyimpanan yang signifikan jika cleartext data input rata-rata lebih dari 52 byte (misalnya, alamat jalan lengkap). Ini bisa menjadi peningkatan penyimpanan yang signifikan jika cleartext data input rata-rata kurang dari 52 byte (misalnya, usia pelanggan).

#### Pengaturan kolaborasi untuk fingerprint kolom
<a name="fingerprint-columns-collab-settings"></a>

##### Setelan `preserveNulls`
<a name="collab-set-preserve-nulls"></a>

Ketika pengaturan `preserveNulls` tingkat kolaborasi `false` (default), setiap `null` nilai diganti dengan 32 byte acak yang unik dan diproses seolah-olah tidak. `null` Hasilnya adalah bahwa setiap `null` nilai sekarang 52 byte. Ini dapat menambahkan persyaratan penyimpanan yang signifikan untuk tabel yang berisi data yang sangat jarang dibandingkan dengan saat pengaturan ini `true` dan `null` nilai dilewatkan sebagai`null`.

Jika Anda tidak memerlukan jaminan privasi dari pengaturan ini dan lebih memilih untuk mempertahankan `null` nilai dalam kumpulan data Anda, aktifkan `preserveNulls` pengaturan pada saat kolaborasi dibuat. `preserveNulls`Pengaturan tidak dapat diubah setelah kolaborasi dibuat.

#### Contoh data untuk fingerprint kolom
<a name="collab-set-sample-data"></a>

Berikut ini adalah contoh kumpulan data input dan output untuk fingerprint kolom dengan pengaturan untuk mereproduksi. Pengaturan tingkat kolaborasi lainnya menyukai `allowCleartext` dan `allowDuplicates` tidak memengaruhi hasil dan dapat disetel sebagai `true` atau `false` jika mencoba mereproduksi secara lokal.

**Contoh rahasia bersama**: `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`

**Contoh ID kolaborasi**: `a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`

**allowJoinsOnColumnsWithDifferentNames**: Pengaturan `True` ini tidak memengaruhi kinerja atau persyaratan penyimpanan. Namun, pengaturan ini membuat pilihan nama kolom tidak relevan saat mereproduksi nilai yang ditunjukkan dalam tabel berikut.


**Contoh 1**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| Deterministik | Yes | 
| Byte masukan | 0 | 
| Byte keluaran | 0 | 


**Contoh 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:hmac:3lkFjthvV3IUu6mMvFc1a\$1XAHwgw/ElmOq4p3Yg25kk= | 
| Deterministik | No | 
| Byte masukan | 0 | 
| Byte keluaran | 52 | 


**Contoh 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:hmac:oKTgi3Gba\$1eUb3JteSz2EMgXUkF1WgM77UP0Ydw5kPQ= | 
| Deterministik | Yes | 
| Byte masukan | 0 | 
| Byte keluaran | 52 | 


**Contoh 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:hmac:kU/IqwG7FMmzzshr0B9scomE0UJUEE7j9keTctplGww= | 
| Deterministik | Yes | 
| Byte masukan | 26 | 
| Byte keluaran | 52 | 


**Contoh 5**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:hmac:ks3htnQbw2vdhCRFF6JNzW5LMndJaHG57uvE26mBtSs= | 
| Deterministik | Yes | 
| Byte masukan | 62 | 
| Byte keluaran | 52 | 

#### Kolom pemecahan masalah fingerprint
<a name="fingerprint-columns-troubleshooting"></a>

**Mengapa ciphertext di fingerprint kolom saya beberapa kali lebih besar dari ukuran cleartext yang masuk ke dalamnya?**

Ciphertext dalam fingerprint kolom selalu 52 byte panjangnya. Jika data input Anda kecil (misalnya, usia pelanggan), itu akan menunjukkan peningkatan ukuran yang signifikan. Ini juga bisa terjadi jika `preserveNulls` pengaturan diatur ke`false`.

**Mengapa ciphertext di fingerprint kolom saya beberapa kali lebih kecil dari ukuran cleartext yang masuk ke dalamnya?**

Ciphertext dalam fingerprint kolom selalu 52 byte panjangnya. Jika data input Anda besar (misalnya, alamat jalan lengkap pelanggan), itu akan menunjukkan penurunan ukuran yang signifikan.

**Bagaimana saya tahu jika saya membutuhkan jaminan kriptografi yang disediakan oleh? `preserveNulls`**

Sayangnya, jawabannya adalah itu tergantung. Minimal, [Parameter komputasi kriptografi](crypto-computing-parameters.md) harus ditinjau untuk bagaimana `preserveNulls` pengaturan melindungi data Anda. Namun, kami menyarankan Anda untuk mereferensikan persyaratan penanganan data organisasi Anda dan kontrak apa pun yang berlaku untuk kolaborasi masing-masing. 

**Mengapa saya harus mengeluarkan biaya overhead base64?**

Untuk memungkinkan kompatibilitas dengan format file tabular seperti CSV, pengkodean base64 diperlukan. Meskipun beberapa format file seperti Parquet mungkin mendukung representasi biner data, penting bahwa semua peserta dalam kolaborasi mewakili data dengan cara yang sama untuk memastikan hasil kueri yang tepat.

### Sealedkolom
<a name="guidelines-sealed-columns"></a>

Sealedkolom dimaksudkan untuk digunakan untuk mentransfer data antara anggota kolaborasi. Ciphertext dalam kolom ini bersifat non-deterministik dan memiliki dampak signifikan pada kinerja dan penyimpanan berdasarkan bagaimana kolom dikonfigurasi. Kolom ini dapat dikonfigurasi secara individual dan seringkali memiliki dampak terbesar pada kinerja klien enkripsi C3R dan ukuran file keluaran yang dihasilkan.

**Topics**
+ [Basis overhead untuk kolom sealed](#sealed-columns-base-overhead)
+ [Pengaturan kolaborasi untuk sealed kolom](#sealed-columns-collab-settings)
+ [sealedKolom pengaturan skema: jenis padding](#sealed-collab-pad-type)
+ [Contoh data untuk sealed kolom](#sealed-collab-sample-data)
+ [Kolom pemecahan masalah sealed](#troubleshooting-sealed-columns)

#### Basis overhead untuk kolom sealed
<a name="sealed-columns-base-overhead"></a>

Ada overhead dasar untuk sealed kolom. Overhead ini konstan dan selain ukuran byte cleartext dan padding (jika ada).

Sebelum enkripsi apa pun, data dalam sealed kolom pra-pended dengan karakter 1 byte yang menunjuk jenis data apa yang terkandung. Jika padding dipilih, data kemudian empuk dan ditambahkan dengan 2 byte yang menyatakan ukuran pad. Setelah byte ini ditambahkan, data diproses secara kriptografi dengan menggunakan AES-GCM dan disimpan dengan IV (12 byte), (32 byte), dan nonce (16 byte). Auth Tag Data ini kemudian diproses melalui encoder base64, menambahkan sekitar 33 persen ke ukuran byte. Data pra-penandaan dengan penunjukan C3R 7 byte untuk menentukan jenis kolom apa yang dimiliki data dan versi klien yang digunakan untuk memproduksinya. Hasilnya adalah overhead basis akhir 91 byte. Hasil ini kemudian dapat dikalikan dengan jumlah baris untuk mendapatkan total overhead basis (gunakan jumlah total nilai non-null jika `preserveNulls` disetel ke true).

Gambar berikut menunjukkan bagaimana *`BASE_OVERHEAD = C3R_DESIGNATION + ((NONCE + IV + DATA_TYPE + PAD_SIZE + AUTH_TAG) * 1.33)`*

![\[Overhead basis 91 byte untuk sealed kolom.\]](http://docs.aws.amazon.com/id_id/clean-rooms/latest/userguide/images/base-overhead-sealed.PNG)


#### Pengaturan kolaborasi untuk sealed kolom
<a name="sealed-columns-collab-settings"></a>

##### Setelan `preserveNulls`
<a name="sealed-collab-set-preserve-nulls"></a>

Ketika pengaturan `preserveNulls` tingkat kolaborasi `false` (default), setiap `null` nilai unik, acak 32 byte dan diproses seolah-olah tidak. `null` Hasilnya adalah bahwa setiap `null` nilai sekarang 91 byte (lebih jika empuk). Ini dapat menambahkan persyaratan penyimpanan yang signifikan untuk tabel yang berisi data yang sangat jarang dibandingkan dengan saat pengaturan ini `true` dan `null` nilai dilewatkan sebagai`null`.

Jika Anda tidak memerlukan jaminan privasi dari pengaturan ini dan lebih memilih untuk mempertahankan `null` nilai dalam kumpulan data Anda, aktifkan `preserveNulls` pengaturan pada saat kolaborasi dibuat. `preserveNulls`Pengaturan tidak dapat diubah setelah kolaborasi dibuat.

#### sealedKolom pengaturan skema: jenis padding
<a name="sealed-collab-pad-type"></a>

**Topics**
+ [Jenis pad `none`](#pad-type-none)
+ [Jenis pad `fixed`](#pad-type-fixed)
+ [Jenis pad `max`](#pad-type-max)

##### Jenis pad `none`
<a name="pad-type-none"></a>

Memilih jenis pad `none` tidak menambahkan padding apa pun ke cleartext dan tidak menambahkan overhead tambahan ke overhead dasar yang dijelaskan sebelumnya. Tidak ada padding yang menghasilkan ukuran output yang paling hemat ruang. Namun, itu tidak memberikan jaminan privasi yang sama dengan tipe `fixed` dan `max` padding. Ini karena ukuran yang mendasarinya cleartext dapat dilihat dari ukuran ciphertext.

##### Jenis pad `fixed`
<a name="pad-type-fixed"></a>

Memilih jenis pad `fixed` adalah ukuran pelestarian privasi untuk menyembunyikan panjang data yang terkandung dalam kolom. Hal ini dilakukan dengan padding semua cleartext ke yang disediakan `pad_length` sebelum dienkripsi. Setiap data yang melebihi ukuran itu menyebabkan klien enkripsi C3R gagal.

Mengingat bahwa padding ditambahkan ke cleartext sebelum dienkripsi, AES-GCM memiliki pemetaan 1-ke-1 untuk byte ciphertext. cleartext Pengkodean base64 akan menambah 33 persen. Overhead penyimpanan tambahan dari padding dapat dihitung dengan mengurangi panjang rata-rata dari cleartext dari nilai `pad_length` dan mengalikannya dengan 1,33. Hasilnya adalah overhead rata-rata padding per record. Hasil ini kemudian dapat dikalikan dengan jumlah baris untuk mendapatkan overhead padding total (gunakan jumlah total `null` non-nilai jika `preserveNulls` diatur ke). `true`

 `PADDING_OVERHEAD = (PAD_LENGTH - AVG_CLEARTEXT_LENGTH) * 1.33 * ROW_COUNT`

Kami menyarankan Anda memilih minimum `pad_length` yang mencakup nilai terbesar dalam kolom. Misalnya, jika nilai terbesar adalah 50 byte, a `pad_length` dari 50 sudah cukup. Nilai yang lebih besar dari itu hanya akan menambah overhead penyimpanan tambahan.

Padding tetap tidak menambahkan overhead komputasi yang signifikan.

##### Jenis pad `max`
<a name="pad-type-max"></a>

Memilih jenis pad `max` adalah ukuran pelestarian privasi untuk menyembunyikan panjang data yang terkandung dalam kolom. Hal ini dilakukan dengan padding semua cleartext ke nilai terbesar di kolom ditambah tambahan `pad_length` sebelum dienkripsi. Umumnya, `max` padding memberikan jaminan yang sama dengan `fixed` padding untuk satu kumpulan data sementara memungkinkan untuk tidak mengetahui nilai terbesar cleartext di kolom. Namun, `max` padding mungkin tidak memberikan jaminan privasi yang sama seperti `fixed` padding di seluruh pembaruan karena nilai terbesar dalam kumpulan data individu mungkin berbeda.

Kami menyarankan Anda memilih tambahan `pad_length` 0 saat menggunakan `max` padding. Panjang ini bantalan semua nilai menjadi ukuran yang sama dengan nilai terbesar di kolom. Nilai yang lebih besar dari itu hanya akan menambah overhead penyimpanan tambahan.

Jika cleartext nilai terbesar diketahui untuk kolom tertentu, kami sarankan Anda menggunakan jenis `fixed` pad sebagai gantinya. Menggunakan `fixed` padding menciptakan konsistensi di seluruh kumpulan data yang diperbarui. Menggunakan `max` padding menghasilkan setiap subset data yang diempuk ke nilai terbesar yang ada di subset.

#### Contoh data untuk sealed kolom
<a name="sealed-collab-sample-data"></a>

Berikut ini adalah contoh kumpulan data input dan output untuk sealed kolom dengan pengaturan untuk mereproduksi. Pengaturan tingkat kolaborasi lainnya seperti`allowCleartext`,`allowJoinsOnColumnsWithDifferentNames`, dan `allowDuplicates` tidak memengaruhi hasil dan dapat disetel sebagai `true` atau `false` jika mencoba mereproduksi secara lokal. Meskipun ini adalah pengaturan dasar untuk mereproduksi, sealed kolom tidak deterministik dan nilai akan berubah setiap saat. Tujuannya adalah untuk menunjukkan byte dalam dibandingkan dengan byte keluar. Contoh `pad_length` nilai dipilih dengan sengaja. Mereka menunjukkan bahwa `fixed` padding menghasilkan nilai yang sama dengan `max` padding dengan `pad_length` pengaturan minimum yang disarankan atau ketika padding tambahan diinginkan.

**Contoh rahasia bersama**: `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`

**Contoh ID kolaborasi**: `a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`

**Topics**
+ [Jenis pad `none`](#sealed-pad-type-none)
+ [Jenis pad `fixed` (Contoh 1)](#sealed-pad-type-fixed)
+ [Jenis pad `fixed` (Contoh 2)](#sealed-pad-type-fixed-2)
+ [Jenis pad `max` (Contoh 1)](#sealed-pad-type-max)
+ [Jenis pad `max` (Contoh 2)](#sealed-pad-type-max-2)

##### Jenis pad `none`
<a name="sealed-pad-type-none"></a>


**Contoh 1**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| Deterministik | Yes | 
| Byte masukan | 0 | 
| Byte keluaran | 0 | 


**Contoh 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSPbNIJfG3iXmu6cbCUrizuV | 
| Deterministik | No | 
| Byte masukan | 0 | 
| Byte keluaran | 91 | 


**Contoh 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSPEM6qR8DWC2PB2GMlX41YK | 
| Deterministik | No | 
| Byte masukan | 0 | 
| Byte keluaran | 91 | 


**Contoh 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9sGL5VLDQeHzh6DmPpyWNuI= | 
| Deterministik | No | 
| Byte masukan | 26 | 
| Byte keluaran | 127 | 


**Contoh 5**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6plwtH/8tRFnn2rF91bcB9G4\$1n8GiRfJNmqdP4/QOQ3cXb/pbvPcnnohrHIGSX54ua\$11/JfcVjc= | 
| Deterministik | No | 
| Byte masukan | 62 | 
| Byte keluaran | 175 | 

##### Jenis pad `fixed` (Contoh 1)
<a name="sealed-pad-type-fixed"></a>

Dalam contoh ini, `pad_length` adalah 62 dan masukan terbesar adalah 62 byte.


**Contoh 1**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| Deterministik | Yes | 
| Byte masukan | 0 | 
| Byte keluaran | 0 | 


**Contoh 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoNpATs0GzbnLkor4L\$1/aSuA= | 
| Deterministik | No | 
| Byte masukan | 0 | 
| Byte keluaran | 175 | 


**Contoh 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoLB53l07VZpA6OwkuXu29CA= | 
| Deterministik | No | 
| Byte masukan | 0 | 
| Byte keluaran | 175 | 


**Contoh 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcutBAcO\$1Mb9tuU2KIHH31AWg= | 
| Deterministik | No | 
| Byte masukan | 26 | 
| Byte keluaran | 175 | 


**Contoh 5**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6plwtH/8tRFnn2rF91bcB9G4\$1n8GiRfJNmqdP4/QOQ3cXb/pbvPcnnohrHIGSX54ua\$11/JfcVjc= | 
| Deterministik | No | 
| Byte masukan | 62 | 
| Byte keluaran | 175 | 

##### Jenis pad `fixed` (Contoh 2)
<a name="sealed-pad-type-fixed-2"></a>

Dalam contoh ini, `pad_length` adalah 162 dan masukan terbesar adalah 62 byte.


**Contoh 1**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| Deterministik | Yes | 
| Byte masukan | 0 | 
| Byte keluaran | 0 | 


**Contoh 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv/xAySX\$1xcntotL703aBTBb | 
| Deterministik | No | 
| Byte masukan | 0 | 
| Byte keluaran | 307 | 


**Contoh 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv84lVaT9Yd\$16oQx65/\$1gdVT | 
| Deterministik | No | 
| Byte masukan | 0 | 
| Byte keluaran | 307 | 


**Contoh 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwtX5Hnl\$1WyfO6ks3QMaRDGSf | 
| Deterministik | No | 
| Byte masukan | 26 | 
| Byte keluaran | 307 | 


**Contoh 5**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6plwtH/8tRFnn2rF91bcB9G4\$1n8GiRfJNmqdP4/QOQ3cXb/pbvPcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwjkJXQZOgPdeFX9Yr/8alV5i | 
| Deterministik | No | 
| Byte masukan | 62 | 
| Byte keluaran | 307 | 

##### Jenis pad `max` (Contoh 1)
<a name="sealed-pad-type-max"></a>

Dalam contoh ini, `pad_length` adalah 0 dan masukan terbesar adalah 62 byte.


**Contoh 1**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| Deterministik | Yes | 
| Masukan Byte | 0 | 
| Byte Keluaran | 0 | 


**Contoh 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoNpATs0GzbnLkor4L\$1/aSuA= | 
| Deterministik | No | 
| Byte masukan | 0 | 
| Byte keluaran | 175 | 


**Contoh 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcoLB53l07VZpA6OwkuXu29CA= | 
| Deterministik | No | 
| Byte masukan | 0 | 
| Byte keluaran | 175 | 


**Contoh 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcutBAcO\$1Mb9tuU2KIHH31AWg= | 
| Deterministik | No | 
| Byte masukan | 26 | 
| Byte keluaran | 175 | 


**Contoh 5**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6plwtH/8tRFnn2rF91bcB9G4\$1n8GiRfJNmqdP4/QOQ3cXb/pbvPcnnohrHIGSX54ua\$11/JfcVjc= | 
| Deterministik | No | 
| Byte masukan | 62 | 
| Byte keluaran | 175 | 

##### Jenis pad `max` (Contoh 2)
<a name="sealed-pad-type-max-2"></a>

Dalam contoh ini, `pad_length` adalah 100 dan masukan terbesar adalah 62 byte.


**Contoh 1**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | TRUE | 
| Output | null | 
| Deterministik | Yes | 
| Byte masukan | 0 | 
| Byte keluaran | 0 | 


**Contoh 2**  

|  |  | 
| --- |--- |
| Input | null | 
| preserveNulls | FALSE | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfssGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv/xAySX\$1xcntotL703aBTBb | 
| Deterministik | No | 
| Byte masukan | 0 | 
| Byte keluaran | 307 | 


**Contoh 3**  

|  |  | 
| --- |--- |
| Input | empty string | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfstGSNWfMRp7nSb7SMX2s3JKLOhK1\$17r75Tk\$1Mx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwv84lVaT9Yd\$16oQx65/\$1gdVT | 
| Deterministik | No | 
| Byte masukan | 0 | 
| Byte keluaran | 307 | 


**Contoh 4**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyz | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6pkx9jy48Fcg1yOPvBqRSZ7oqy1V3UKfYTLEZb/hCz7oaIneVsrcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwtX5Hnl\$1WyfO6ks3QMaRDGSf | 
| Deterministik | No | 
| Byte masukan | 26 | 
| Byte keluaran | 307 | 


**Contoh 5**  

|  |  | 
| --- |--- |
| Input | abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | 
| preserveNulls | - | 
| Output | 01:enc:bm9uY2UwMTIzNDU2Nzg5MG5vbmNlMDEyMzQ1Njc4OTBqfRYZ98t5KU6aWfsteEE1GKEPiRzyh0h7t6OmWMLTWCvO2ckr6plwtH/8tRFnn2rF91bcB9G4\$1n8GiRfJNmqdP4/QOQ3cXb/pbvPcnkB0xbLWD7zNdAqQGR0rXoSESdW0I0vpNoGcBfv4cJbG0A3h1DvtkSSVc2B80OOGppzdDqhrUVN5wFNyn8vgfPMqDaeJk5bn\$18o4WtG/ClipNcjDXvXVtK4vfCohcCA6uwrmwjkJXQZOgPdeFX9Yr/8alV5i | 
| Deterministik | No | 
| Byte masukan | 62 | 
| Byte keluaran | 307 | 

#### Kolom pemecahan masalah sealed
<a name="troubleshooting-sealed-columns"></a>

**Mengapa ciphertext di sealed kolom saya beberapa kali lebih besar dari ukuran cleartext yang masuk ke dalamnya?**

Ini tergantung pada beberapa faktor. Untuk satu, ciphertext dalam Cleartext kolom selalu setidaknya 91 byte panjangnya. Jika data input Anda kecil (misalnya, usia pelanggan), itu akan menunjukkan peningkatan ukuran yang signifikan. Kedua, jika `preserveNulls` disetel ke `false` dan data input Anda berisi banyak `null` nilai, masing-masing `null` nilai tersebut akan berubah menjadi 91 byte ciphertext. Akhirnya, jika Anda menggunakan padding, menurut definisi byte ditambahkan ke cleartext data sebelum dienkripsi.

**Sebagian besar data saya di sealed kolom sangat kecil, dan saya perlu menggunakan padding. Bisakah saya menghapus nilai besar dan memprosesnya secara terpisah untuk menghemat ruang?**

Kami tidak menyarankan Anda menghapus nilai besar dan memprosesnya secara terpisah. Melakukan hal itu mengubah jaminan privasi yang disediakan oleh klien enkripsi C3R. Sebagai model ancaman, asumsikan bahwa pengamat dapat melihat kedua kumpulan data terenkripsi. Jika pengamat melihat bahwa satu subset data memiliki kolom yang dilapisi secara signifikan lebih atau kurang dari subset lain, mereka dapat membuat kesimpulan tentang ukuran data di setiap subset. Misalnya, asumsikan `fullName` kolom diempuk dengan total 40 byte dalam satu file dan diempuk hingga 800 byte di file lain. Seorang pengamat mungkin dapat berasumsi bahwa satu kumpulan data berisi nama terpanjang di dunia747 byte).

**Apakah saya perlu memberikan padding tambahan saat menggunakan tipe `max` padding?**

Tidak. Saat menggunakan `max` padding, kami merekomendasikan bahwa`pad_length`, juga dikenal sebagai padding tambahan *di luar* nilai terbesar di kolom, diatur ke 0.

**Bisakah saya memilih yang besar `pad_length` saat menggunakan `fixed` padding untuk menghindari kekhawatiran jika nilai terbesar akan cocok?**

Ya, tetapi panjang pad yang besar tidak efisien dan menggunakan lebih banyak penyimpanan dari yang diperlukan. Kami menyarankan Anda untuk memeriksa untuk melihat seberapa besar nilai terbesar dan menetapkan `pad_length` ke nilai itu.

**Bagaimana saya tahu jika saya membutuhkan jaminan kriptografi yang disediakan oleh? `preserveNulls`**

Sayangnya, jawabannya adalah itu tergantung. Minimal, [Komputasi Kriptografi untuk Clean Rooms](crypto-computing.md) harus ditinjau untuk bagaimana `preserveNulls` pengaturan melindungi data Anda. Namun, kami menyarankan Anda untuk mereferensikan persyaratan penanganan data organisasi Anda dan kontrak apa pun yang berlaku untuk kolaborasi masing-masing. 

**Mengapa saya harus mengeluarkan biaya overhead base64?**

Untuk memungkinkan kompatibilitas dengan format file tabular seperti CSV, pengkodean base64 diperlukan. Meskipun beberapa format file seperti Parquet mungkin mendukung representasi biner data, penting bahwa semua peserta dalam kolaborasi mewakili data dengan cara yang sama untuk memastikan hasil kueri yang tepat.

## Memecahkan masalah peningkatan ukuran ciphertext yang tidak terduga
<a name="troubleshooting-ciphertext-size"></a>

Katakanlah Anda mengenkripsi data Anda, dan ukuran data yang dihasilkan sangat besar. Langkah-langkah berikut dapat membantu Anda mengidentifikasi di mana peningkatan ukuran terjadi dan apa, jika ada, tindakan yang dapat Anda ambil.

### Mengidentifikasi di mana peningkatan ukuran terjadi
<a name="where-size-increase-occurred"></a>

Sebelum Anda dapat memecahkan masalah mengapa data terenkripsi Anda secara signifikan lebih besar daripada cleartext data Anda, Anda harus terlebih dahulu mengidentifikasi di mana peningkatan ukurannya. Cleartextkolom dapat diabaikan dengan aman karena tidak berubah. Lihatlah yang tersisa fingerprint dan sealed kolom, dan pilih salah satu yang tampak signifikan.

### Mengidentifikasi alasan peningkatan ukuran terjadi
<a name="why-size-increase-occurred"></a>

fingerprintKolom atau sealed kolom mungkin berkontribusi pada peningkatan ukuran.

**Topics**
+ [Apakah peningkatan ukuran berasal dari fingerprint kolom?](#size-increase-from-fingerprint)
+ [Apakah peningkatan ukuran berasal dari sealed kolom?](#size-increase-from-sealed)

#### Apakah peningkatan ukuran berasal dari fingerprint kolom?
<a name="size-increase-from-fingerprint"></a>

Jika kolom yang paling berkontribusi terhadap peningkatan penyimpanan adalah fingerprint kolom, ini mungkin karena cleartext datanya kecil (misalnya, usia pelanggan). Setiap fingerprint ciphertext yang dihasilkan panjangnya 52 byte. Sayangnya, tidak ada yang bisa dilakukan tentang masalah ini column-by-column atas dasar. Untuk informasi selengkapnya, lihat [Basis overhead untuk kolom fingerprint](#fingerprint-columns-base-overhead) detail tentang kolom ini, termasuk dampaknya terhadap persyaratan penyimpanan. 

Kemungkinan penyebab lain dari peningkatan ukuran dalam fingerprint kolom adalah pengaturan kolaborasi,`preserveNulls`. Jika pengaturan kolaborasi untuk `preserveNulls` dinonaktifkan (pengaturan default), semua `null` nilai dalam fingerprint kolom akan menjadi 52 byte ciphertext. Tidak ada yang bisa dilakukan untuk ini dalam kolaborasi saat ini. `preserveNulls`Pengaturan diatur pada saat kolaborasi dibuat dan semua kolaborator harus menggunakan pengaturan yang sama untuk memastikan hasil kueri yang benar. Untuk informasi selengkapnya tentang `preserveNulls` pengaturan dan bagaimana pengaktifannya memengaruhi jaminan privasi data Anda, lihat. [Komputasi Kriptografi untuk Clean Rooms](crypto-computing.md)

#### Apakah peningkatan ukuran berasal dari sealed kolom?
<a name="size-increase-from-sealed"></a>

Jika kolom yang paling berkontribusi terhadap peningkatan penyimpanan adalah sealed kolom, ada beberapa detail yang dapat berkontribusi pada peningkatan ukuran. 

Jika cleartext data kecil (misalnya, usia pelanggan), setiap sealed ciphertext yang dihasilkan setidaknya 91 byte panjangnya. Sayangnya, tidak ada yang bisa dilakukan tentang masalah ini. Untuk informasi selengkapnya, lihat [Basis overhead untuk kolom sealed](#sealed-columns-base-overhead) detail tentang kolom ini, termasuk dampaknya terhadap persyaratan penyimpanan.

Penyebab utama kedua untuk peningkatan penyimpanan sealed kolom adalah padding. Padding menambahkan byte ekstra ke cleartext sebelum dienkripsi untuk menyembunyikan ukuran nilai individual dalam kumpulan data. Kami menyarankan Anda mengatur padding ke nilai minimum yang mungkin untuk kumpulan data Anda. Minimal, `pad_length` untuk `fixed` padding harus diatur untuk mencakup nilai terbesar yang mungkin di kolom. Pengaturan yang lebih tinggi dari itu tidak menambahkan jaminan privasi tambahan. Misalnya, jika Anda tahu nilai terbesar yang mungkin dalam kolom bisa 50 byte, kami sarankan Anda menyetel `pad_length` ke 50 byte. Namun, jika sealed kolom menggunakan `max` padding, kami sarankan Anda mengatur `pad_length` ke 0 byte. Ini karena `max` padding mengacu pada padding *tambahan* di luar nilai terbesar di kolom.

Kemungkinan penyebab akhir dari peningkatan ukuran dalam sealed kolom adalah pengaturan kolaborasi,`preserveNulls`. Jika pengaturan kolaborasi untuk `preserveNulls` dinonaktifkan (pengaturan default), semua `null` nilai dalam sealed kolom akan menjadi 91 byte ciphertext. Tidak ada yang bisa dilakukan untuk ini dalam kolaborasi saat ini. `preserveNulls`Pengaturan diatur pada saat kolaborasi dibuat, dan semua kolaborator harus menggunakan pengaturan yang sama untuk memastikan hasil kueri yang benar. Untuk informasi selengkapnya tentang pengaturan ini dan bagaimana cara mengaktifkannya memengaruhi jaminan privasi data Anda, lihat. [Komputasi Kriptografi untuk Clean Rooms](crypto-computing.md)