Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Kontrol perbandingan
Di SQL, perbandingan literal mencocokkan kolom dari dataset Anda dengan nilai literal yang diketik langsung ke kueri. Perbandingan kolom mencocokkan nilai dari dua kolom yang berbeda satu sama lain, baik dalam tabel yang sama atau di seluruh tabel yang digabungkan.
Perilaku default
Kontrol perbandingan adalah daftar izin. Setelah Anda mengaturallowedLiteralComparisonColumns, hanya kolom yang Anda daftarkan yang dapat dibandingkan dengan nilai literal, dan setiap kolom yang tidak Anda daftarkan diblokir. Hal yang sama berlaku allowedColumnComparisonColumns untuk perbandingan kolom-ke-kolom. Menambahkan kolom ke satu allowlist tidak menambahkannya ke yang lain.
Jika Anda tidak mengonfigurasicomparisonControls, tidak AWS Clean Rooms menerapkan batasan perbandingan — kueri dapat membandingkan kolom apa pun dengan nilai literal atau kolom lain.
Jika Anda tidak mengonfigurasi comparisonControls tetapi menetapkan ambang agregasi minimum, perbandingan tetap tidak dibatasi. Namun, jangan AWS Clean Rooms pernah mengizinkan perbandingan literal pada kolom yang tercantum diidentityColumns. Pembatasan itu berasal dari ambang itu sendiri, sehingga berlaku apakah Anda mengonfigurasi kontrol perbandingan atau tidak. Untuk informasi selengkapnya, lihat Ambang batas agregasi minimum.
Jika Anda mengonfigurasi comparisonControls bersama dengan kolom keluaran yang tidak diizinkan, kedua kontrol bersifat independen dan keduanya berlaku. Kontrol perbandingan mengatur kolom mana yang dapat dibandingkan kueri; kolom keluaran yang tidak diizinkan mengatur kolom mana yang dapat muncul dalam hasil kueri. Sebuah kolom dapat diizinkan dalam perbandingan dan masih dilarang dari hasilnya. Untuk informasi selengkapnya, lihat Kolom keluaran yang tidak diizinkan.
Perbandingan literal
Perbandingan literal mengevaluasi kolom terhadap konstanta hardcode tunggal (string, angka, atau tanggal). Sisi kanan operator tidak pernah berubah selama eksekusi query. Contoh sintaks meliputi:
-
WHEREstatus = 'Aktif'
-
WHEREharga > 49.99
Saat Anda menggunakanAmbang batas agregasi minimum, AWS Clean Rooms tidak memungkinkan perbandingan literal pada identityColumns nilai. Ini mencegah pelari kueri mengirimkan kueri yang difilter ke individu atau kumpulan pengguna tertentu. Hindari mengizinkan perbandingan literal pada kolom kardinalitas rendah yang dapat memilih kelompok kecil atau subjek data individu.
{ "comparisonControls": { "allowedLiteralComparisonColumns": [ "status", "price" ] } }
Memilih kolom untuk perbandingan literal
Izinkan perbandingan literal hanya pada kolom yang tidak mengidentifikasi individu atau kelompok kecil. Hindari mengizinkannya pada kolom kardinalitas rendah (misalnya, age_band, kode wilayah kasar). Meskipun kolom ini bukan identityColumns nilai yang dikonfigurasi, membandingkannya dengan literal dapat mempersempit hasil ke populasi kecil yang dapat diidentifikasi. High-cardinality, dimensi yang tidak dapat diidentifikasi seperti campaign_id atau merupakan pilihan product_sku yang lebih aman.
Contoh: Mengizinkan perbandingan literal pada kolom kampanye
Penerbit mengonfigurasi aturan analisis kustom dengan ambang agregasi minimum sehingga setiap baris keluaran mewakili setidaknya 100 pengguna berbeda (user_id). Pengiklan menjalankan kueri terhadap tabel ini tetapi perlu memasukkan analisisnya ke kampanye iklan tertentu — misalnya, untuk mengukur jangkauan untuk satu kampanye pada satu waktu.
Karena user_id merupakan kolom identitas, itu tidak dapat dibandingkan dengan literal, mencegah pengiklan memfilter hasil ke satu pengguna. Tetapi dimensi kardinalitas tinggi campaign_id dan event_date tidak dapat mengidentifikasi, sehingga penerbit menambahkannyaallowedLiteralComparisonColumns, yang memungkinkan pengiklan memfilter berdasarkan kampanye dan mencakup analisis ke rentang tanggal:
{ "aggregationThresholds": [ { "identityColumns": ["user_id"], "minimumIdentityCount": 100 } ], "comparisonControls": { "allowedLiteralComparisonColumns": ["campaign_id", "event_date"] } }
Mengingat konfigurasi sebelumnya, kueri ini diperbolehkan:
-- Allowed: campaign_id and event_date are both in allowedLiteralComparisonColumns SELECT campaign_id, COUNT(DISTINCT user_id) AS reach FROM impressions WHERE campaign_id = 'CMP-1024' AND event_date >= '2026-01-01' GROUP BY campaign_id;
Dengan konfigurasi yang sama, kueri ini diblokir:
-- Blocked: user_id is the identity column and can never be compared to a literal SELECT campaign_id, COUNT(DISTINCT user_id) AS reach FROM impressions WHERE user_id = 'U-88231' GROUP BY campaign_id;
Kueri pertama masih mengembalikan hanya baris yang didukung oleh setidaknya 100 pengguna berbeda, sedangkan perbandingan literal pada campaign_id dan mem event_date filter baris mana yang dipertimbangkan. Kueri kedua ditolak karena mencoba untuk memilih subjek data individu.
Perbandingan kolom
Perbandingan kolom mengevaluasi nilai satu kolom terhadap nilai kolom lain secara dinamis untuk setiap baris tunggal. Contoh sintaks meliputi:
-
WHEREharga eceran < harga grosir
-
WHEREusers.id = orders.user_id
Saat menggunakanAmbang batas agregasi minimum, penyedia data dapat mengizinkan perbandingan kolom pada identityColumns nilai untuk kasus penggunaan yang memerlukan penggabungan antar tabel, seperti laporan tumpang tindih audiens.
{ "comparisonControls": { "allowedColumnComparisonColumns": [ "user_id" ] } }
Contoh: Mengizinkan perbandingan kolom pada kolom identitas untuk laporan tumpang tindih
Penerbit dan pengiklan ingin mengukur tumpang tindih audiens mereka — berapa banyak pengguna yang muncul di kedua kumpulan data mereka — tanpa salah satu pihak mengetahui siapa pengguna individu mana pun. Ini membutuhkan penggabungan dua tabeluser_id, yang merupakan perbandingan kolom-ke-kolom. Penerbit mengizinkan pengiklan menjalankan analisis tumpang tindih pemirsa yang dicakup ke ID kampanye tertentu.
Karena user_id merupakan kolom identitas, penerbit telah memblokir perbandingan literal di atasnya (sehingga tidak ada yang dapat memfilter ke orang tertentu). Untuk mengaktifkan gabungan di seluruh tabel, penerbit menambahkan user_id keallowedColumnComparisonColumns. Untuk mengaktifkan pemfilteran kampanye, penerbit menambahkan campaign_id keallowedLiteralComparisonColumns.
{ "aggregationThresholds": [ { "identityColumns": ["user_id"], "minimumIdentityCount": 100 } ], "comparisonControls": { "allowedLiteralComparisonColumns": ["campaign_id"], "allowedColumnComparisonColumns": ["user_id"] } }
Mengingat konfigurasi sebelumnya, kueri ini diperbolehkan:
-- Allowed: user_id is compared against another column (column-to-column join) SELECT COUNT(DISTINCT p.user_id) AS overlapping_users FROM publisher_audience p JOIN advertiser_audience a ON p.user_id = a.user_id;
Dengan konfigurasi yang sama, kueri ini diblokir:
-- Blocked: email is not in allowedColumnComparisonColumns SELECT COUNT(DISTINCT p.user_id) AS overlapping_users FROM publisher_audience p JOIN advertiser_audience a ON p.email = a.email;
Gabungan berhasil karena perbandingan kolom-ke-kolom mengevaluasi secara dinamis per baris dan tidak membiarkan pelari kueri menargetkan nilai yang diketahui. Hasilnya memberlakukan ambang agregasi minimum, memastikan jumlah tumpang tindih hanya dikembalikan jika mewakili setidaknya 100 pengguna yang berbeda. Kueri kedua diblokir karena tidak email ada dalam allowedColumnComparisonColumns daftar izin dan tidak dapat digunakan dalam perbandingan — hanya user_id bisa.
Kontrol dan ekspresi perbandingan
Kontrol perbandingan mengikuti perbandingan literal tidak langsung, bukan hanya WHERE column = 'literal' predikat langsung. Jika Anda mengi ANY_EXPRESSION zinkan fungsi agregat dalam masukallowedAggregateExpressionType, kontrol perbandingan masih memblokir perbandingan literal pada kolom yang tidak adaallowedLiteralComparisonColumns. Ini berlaku bahkan ketika literal bersarang di dalam ekspresi.
Contoh berikut menunjukkan kueri yang tetap diblokir karena tidak zip_code ada dalam daftar izin, meskipun literal berada di dalam CASE ekspresi daripada ditulis sebagai predikat langsung:
-- Blocked: zip_code is not in allowedLiteralComparisonColumns, -- even though the literal comparison is nested inside a CASE expression SELECT SUM(CASE WHEN zip_code = '00001' THEN salary ELSE 0 END) AS total FROM employees;
Inilah sebabnya mengapa kedua kontrol saling melengkapi: mengizinkan ekspresi di dalam agregat memperluas apa yang dapat dihitung kueri, sementara kontrol perbandingan masih membatasi kolom mana yang dapat dipilih kueri berdasarkan nilai. Untuk informasi selengkapnya, lihat Mengizinkan ekspresi bersarang dalam fungsi agregat.