View a markdown version of this page

Contoh - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog yang diterbitkan pada 30 Juni 2025.

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

Contoh

Bagian ini berisi contoh untuk digunakan HyperLogLog dengan Amazon Redshift.

Contoh: Mengembalikan kardinalitas dalam subquery

Contoh berikut mengembalikan kardinalitas untuk setiap sketsa dalam subquery untuk tabel bernama Sales.

CREATE TABLE Sales (customer VARCHAR, country VARCHAR, amount BIGINT); INSERT INTO Sales VALUES ('David Joe', 'Greece', 14.5), ('David Joe', 'Greece', 19.95), ('John Doe', 'USA', 29.95), ('John Doe', 'USA', 19.95), ('George Spanos', 'Greece', 9.95), ('George Spanos', 'Greece', 2.95);

Kueri berikut menghasilkan sketsa HLL untuk pelanggan dari setiap negara dan mengekstrak kardinalitas. Ini menunjukkan pelanggan unik dari setiap negara.

SELECT hll_cardinality(sketch), country FROM (SELECT hll_create_sketch(customer) AS sketch, country FROM Sales GROUP BY country) AS hll_subquery; hll_cardinality | country ----------------+--------- 1 | USA 2 | Greece ...

Contoh: Mengembalikan tipe HLLSKETCH dari sketsa gabungan dalam subquery

Contoh berikut mengembalikan tipe HLLSKETCH tunggal yang mewakili kombinasi sketsa individu dari subquery. Sketsa digabungkan dengan menggunakan fungsi agregat HLL_COMBINE.

SELECT hll_combine(sketch) FROM (SELECT hll_create_sketch(customer) AS sketch FROM Sales GROUP BY country) AS hll_subquery hll_combine -------------------------------------------------------------------------------------------- {"version":1,"logm":15,"sparse":{"indices":[29808639,35021072,47612452],"values":[1,1,1]}} (1 row)

Contoh: Mengembalikan HyperLogLog sketsa dari menggabungkan beberapa sketsa

Untuk contoh berikut, misalkan tabel page-users menyimpan sketsa praagregasi untuk setiap halaman yang dikunjungi pengguna di situs web tertentu. Setiap baris dalam tabel ini berisi HyperLogLog sketsa yang mewakili semua ID pengguna yang menunjukkan halaman yang dikunjungi.

page_users -- +----------------+-------------+--------------+ -- | _PARTITIONTIME | page | sketch | -- +----------------+-------------+--------------+ -- | 2019-07-28 | homepage | CHAQkAQYA... | -- | 2019-07-28 | Product A | CHAQxPnYB... | -- +----------------+-------------+--------------+

Contoh berikut menggabungkan beberapa sketsa yang telah digabungkan sebelumnya dan menghasilkan satu sketsa. Sketsa ini merangkum kardinalitas kolektif yang dienkapsulasi setiap sketsa.

SELECT hll_combine(sketch) as sketch FROM page_users

Output-nya akan terlihat serupa dengan yang berikut ini.

-- +-----------------------------------------+ -- | sketch | -- +-----------------------------------------+ -- | CHAQ3sGoCxgCIAuCB4iAIBgTIBgqgIAgAwY.... | -- +-----------------------------------------+

Ketika sketsa baru dibuat, Anda dapat menggunakan fungsi HLL_CARDINALITY untuk mendapatkan nilai berbeda kolektif, seperti yang ditunjukkan berikut.

SELECT hll_cardinality(sketch) FROM ( SELECT hll_combine(sketch) as sketch FROM page_users ) AS hll_subquery

Output-nya akan terlihat serupa dengan yang berikut ini.

-- +-------+ -- | count | -- +-------+ -- | 54356 | -- +-------+

Contoh: Menghasilkan HyperLogLog sketsa di atas data S3 menggunakan tabel eksternal

Contoh berikut menyimpan HyperLogLog sketsa untuk menghindari akses langsung ke Amazon S3 untuk estimasi kardinalitas.

Anda dapat melakukan praagregasi dan menyimpan HyperLogLog sketsa dalam cache di tabel eksternal yang didefinisikan untuk menyimpan data Amazon S3. Dengan melakukan ini, Anda dapat mengekstrak perkiraan kardinalitas tanpa mengakses data dasar yang mendasarinya.

Misalnya, Anda telah membongkar sekumpulan file teks yang dibatasi tab ke Amazon S3. Anda menjalankan kueri berikut untuk menentukan tabel eksternal bernama sales dalam skema eksternal Amazon Redshift bernamaspectrum. Bucket Amazon S3 untuk contoh ini ada di AS Timur (Virginia Utara) Wilayah AWS.

create external table spectrum.sales( salesid integer, listid integer, sellerid smallint, buyerid smallint, eventid integer, dateid integer, qtysold integer, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp) row format delimited fields terminated by '\t' stored as textfile location 's3://redshift-downloads/tickit/spectrum/sales/';

Misalkan Anda ingin menghitung pembeli berbeda yang membeli barang pada tanggal yang berubah-ubah. Untuk melakukannya, contoh berikut menghasilkan sketsa untuk ID pembeli untuk setiap hari dalam setahun dan menyimpan hasilnya di tabel hll_sales Amazon Redshift.

CREATE TABLE hll_sales AS SELECT saletime, hll_create_sketch(buyerid) AS sketch FROM spectrum.sales GROUP BY saletime; SELECT TOP 5 * FROM hll_sales;

Output-nya akan terlihat serupa dengan yang berikut ini.

-- hll_sales -- | saletime | sketch | -- +-----------------+---------------------------------------------------------------------+ -- | 7/22/2008 8:30 | {"version":1,"logm":15,"sparse":{"indices":[9281416],"values":[1]}} -- | 2/19/2008 0:38 | {"version":1,"logm":15,"sparse":{"indices":[48735497],"values":[3]}} -- | 11/5/2008 4:49 | {"version":1,"logm":15,"sparse":{"indices":[27858661],"values":[1]}} -- | 10/27/2008 4:08 | {"version":1,"logm":15,"sparse":{"indices":[65295430],"values":[2]}} -- | 2/16/2008 9:37 | {"version":1,"logm":15,"sparse":{"indices":[56869618],"values":[2]}} -- +---------------- +---------------------------------------------------------------------+

Kueri berikut menunjukkan perkiraan jumlah pembeli berbeda yang membeli barang selama Jumat setelah Thanksgiving di tahun 2008.

SELECT hll_cardinality(hll_combine(sketch)) as distinct_buyers FROM hll_sales WHERE trunc(saletime) = '2008-11-28';

Output-nya akan terlihat serupa dengan yang berikut ini.

distinct_buyers --------------- 386

Misalkan Anda menginginkan jumlah pengguna berbeda yang membeli item pada rentang tanggal tertentu. Contohnya mungkin dari Jumat setelah Thanksgiving hingga Senin berikutnya. Untuk mendapatkan ini, query berikut menggunakan fungsi hll_combine agregat. Dengan fungsi ini, Anda dapat menghindari penghitungan ganda pembeli yang membeli item pada lebih dari satu hari dari kisaran yang dipilih.

SELECT hll_cardinality(hll_combine(sketch)) as distinct_buyers FROM hll_sales WHERE saletime BETWEEN '2008-11-28' AND '2008-12-01';

Output-nya akan terlihat serupa dengan yang berikut ini.

distinct_buyers --------------- 1166

Untuk menjaga hll_sales tabel tetap terkini, jalankan kueri berikut di akhir setiap hari. Melakukan hal ini menghasilkan HyperLogLog sketsa berdasarkan ID pembeli yang membeli item hari ini dan menambahkannya ke hll_sales tabel.

INSERT INTO hll_sales SELECT saletime, hll_create_sketch(buyerid) FROM spectrum.sales WHERE TRUNC(saletime) = to_char(GETDATE(), 'YYYY-MM-DD') GROUP BY saletime;