

 Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai Patch 198. Python yang ada UDFs akan terus berfungsi hingga 30 Juni 2026. Untuk informasi lebih lanjut, lihat [posting blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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

# Contoh
<a name="r_HLL-examples"></a>

Bagian ini berisi contoh untuk digunakan HyperLogLog dengan Amazon Redshift.

**Topics**
+ [Contoh: Kembalikan kardinalitas dalam subquery](#hll-examples-subquery)
+ [Contoh: Mengembalikan tipe HLLSKETCH dari sketsa gabungan dalam subquery](#hll-examples-combined-subquery)
+ [Contoh: Kembalikan HyperLogLog sketsa dari menggabungkan beberapa sketsa](#hll-examples-multiple-sketches)
+ [Contoh: Menghasilkan HyperLogLog sketsa atas data S3 menggunakan tabel eksternal](#hll-examples-cache-sketches)

## Contoh: Kembalikan kardinalitas dalam subquery
<a name="hll-examples-subquery"></a>

*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 di 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
<a name="hll-examples-combined-subquery"></a>

Contoh berikut mengembalikan jenis HLLSKETCH tunggal yang mewakili kombinasi sketsa individu dari subquery. Sketsa digabungkan dengan menggunakan fungsi agregat HLL\$1COMBINE. 

```
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
<a name="hll-examples-multiple-sketches"></a>

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.... |
-- +-----------------------------------------+
```

Ketika sketsa baru dibuat, Anda dapat menggunakan fungsi HLL\$1CARDINALITY 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
<a name="hll-examples-cache-sketches"></a>

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 yang dinamai `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;
```