Contoh - Amazon Redshift

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

Contoh

Contoh: Kembalikan 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 HLL sketsa 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 HLLSKETCH jenis dari sketsa gabungan dalam subquery

Contoh berikut mengembalikan satu HLLSKETCH jenis yang mewakili kombinasi sketsa individu dari subquery. Sketsa digabungkan dengan menggunakan fungsi COMBINE agregat HLL _.

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: Kembalikan HyperLogLog sketsa dari menggabungkan beberapa sketsa

Untuk contoh berikut, anggaplah tabel page-users menyimpan sketsa pra-agregat untuk setiap halaman yang dikunjungi pengguna di situs web tertentu. Setiap baris dalam tabel ini berisi HyperLogLog sketsa yang mewakili semua pengguna IDs yang menampilkan halaman yang dikunjungi.

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

Contoh berikut menyatukan beberapa sketsa yang telah dikumpulkan sebelumnya dan menghasilkan sketsa tunggal. Sketsa ini merangkum kardinalitas kolektif yang dirangkum oleh setiap sketsa.

SELECT hll_combine(sketch) as sketch FROM page_users

Output-nya akan terlihat serupa dengan yang berikut ini.

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

Saat sketsa baru dibuat, Anda dapat menggunakan CARDINALITY fungsi HLL _ untuk mendapatkan nilai kolektif yang berbeda, 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 atas data S3 menggunakan tabel eksternal

Berikut contoh cache HyperLogLog sketsa untuk menghindari langsung mengakses Amazon S3 untuk estimasi kardinalitas.

Anda dapat melakukan pra-agregat dan cache HyperLogLog sketsa dalam tabel eksternal yang ditentukan untuk menyimpan data Amazon S3. Dengan melakukan ini, Anda dapat mengekstrak perkiraan kardinalitas tanpa mengakses data dasar yang mendasarinya.

Misalnya, anggaplah Anda telah menurunkan satu set file teks yang dibatasi tab ke Amazon S3. Anda menjalankan kueri berikut untuk menentukan tabel eksternal bernama sales dalam skema eksternal Amazon Redshift bernama. spectrum Bucket Amazon S3 untuk contoh ini ada di AS Timur (Virginia N.) 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 sewenang-wenang. Untuk melakukannya, contoh berikut menghasilkan sketsa untuk pembeli IDs untuk setiap hari dalam setahun dan menyimpan hasilnya di tabel Amazon hll_sales 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]}} -- +---------------- +---------------------------------------------------------------------+

Permintaan berikut menunjukkan perkiraan jumlah pembeli berbeda yang membeli barang selama hari Jumat setelah Thanksgiving pada 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 hari Jumat setelah Thanksgiving hingga Senin berikutnya. Untuk mendapatkan ini, query berikut menggunakan fungsi hll_combine agregat. Fungsi ini memungkinkan Anda untuk menghindari pembeli penghitungan ganda yang membeli item lebih dari satu hari dari rentang 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 up-to-date, jalankan kueri berikut di akhir setiap hari. Melakukan hal ini menghasilkan HyperLogLog sketsa berdasarkan pembeli IDs yang membeli barang hari ini dan menambahkannya ke hll_sales meja.

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;