

 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.

# Kasus penggunaan data bersarang
<a name="nested-data-use-cases"></a>

Topik ini menjelaskan kasus penggunaan untuk data bersarang. Data bersarang adalah data yang berisi bidang bersarang. Bidang bersarang adalah bidang yang disatukan sebagai entitas tunggal, seperti array, struct, atau objek. 

Anda dapat menggabungkan ekstensi yang dijelaskan sebelumnya dengan fitur SQL biasa. Kasus penggunaan berikut menggambarkan beberapa kombinasi umum. Contoh-contoh ini membantu mendemonstrasikan bagaimana Anda dapat menggunakan data bersarang. Mereka bukan bagian dari tutorial.

**Topics**
+ [Menelan data bersarang](#ingesting-nested-data)
+ [Menggabungkan data bersarang dengan subkueri](#aggregating-with-subquery)
+ [Bergabung dengan Amazon Redshift dan data bersarang](#joining-redshift-data)

## Menelan data bersarang
<a name="ingesting-nested-data"></a>

Anda dapat menggunakan `CREATE TABLE AS` pernyataan untuk menyerap data dari tabel eksternal yang berisi tipe data kompleks. Kueri berikut mengekstrak semua pelanggan dan nomor telepon mereka dari tabel eksternal, menggunakan`LEFT JOIN`, dan menyimpannya di tabel Amazon Redshift. `CustomerPhones` 

```
CREATE TABLE CustomerPhones AS
SELECT  c.name.given, c.name.family, p AS phone
FROM    spectrum.customers c LEFT JOIN c.phones p ON true;
```

## Menggabungkan data bersarang dengan subkueri
<a name="aggregating-with-subquery"></a>

Anda dapat menggunakan subquery untuk mengumpulkan data bersarang. Contoh berikut menggambarkan pendekatan ini. 

```
SELECT c.name.given, c.name.family, (SELECT COUNT(*) FROM c.orders o) AS ordercount 
FROM   spectrum.customers c;
```

Data berikut dikembalikan.

```
given   |  family  |  ordercount
--------|----------|--------------
 Jenny  |  Doe     |       0
 John   |  Smith   |       2
 Andy   |  Jones   |       1
 (3 rows)
```

**catatan**  
Saat Anda menggabungkan data bersarang dengan mengelompokkan berdasarkan baris induk, cara yang paling efisien adalah yang ditunjukkan pada contoh sebelumnya. Dalam contoh itu, baris bersarang `c.orders` dikelompokkan berdasarkan baris induknya. `c` Atau, jika Anda tahu bahwa `id` unik untuk masing-masing `customer` dan `o.shipdate` tidak pernah nol, Anda dapat menggabungkan seperti yang ditunjukkan pada contoh berikut. Namun, pendekatan ini umumnya tidak seefisien contoh sebelumnya. 

```
SELECT    c.name.given, c.name.family, COUNT(o.shipdate) AS ordercount 
FROM      spectrum.customers c LEFT JOIN c.orders o ON true 
GROUP BY  c.id, c.name.given, c.name.family;
```

Anda juga dapat menulis kueri dengan menggunakan subquery dalam `FROM` klausa yang mengacu pada alias (`c`) dari kueri leluhur dan mengekstrak data array. Contoh berikut menunjukkan pendekatan ini.

```
SELECT c.name.given, c.name.family, s.count AS ordercount
FROM   spectrum.customers c, (SELECT count(*) AS count FROM c.orders o) s;
```

## Bergabung dengan Amazon Redshift dan data bersarang
<a name="joining-redshift-data"></a>

Anda juga dapat menggabungkan data Amazon Redshift dengan data bersarang di tabel eksternal. Misalnya, misalkan Anda memiliki data bersarang berikut di Amazon S3. 

```
CREATE EXTERNAL TABLE spectrum.customers2 (
  id      int,
  name    struct<given:varchar(20), family:varchar(20)>,
  phones  array<varchar(20)>,
  orders  array<struct<shipdate:timestamp, item:int>>
);
```

Misalkan juga Anda memiliki tabel berikut di Amazon Redshift.

```
CREATE TABLE prices (
  id int,
  price double precision
);
```

Kueri berikut menemukan jumlah total dan jumlah pembelian setiap pelanggan berdasarkan sebelumnya. Contoh berikut hanya ilustrasi. Ini hanya mengembalikan data jika Anda telah membuat tabel yang dijelaskan sebelumnya. 

```
SELECT   c.name.given, c.name.family, COUNT(o.date) AS ordercount, SUM(p.price) AS ordersum 
FROM     spectrum.customers2 c, c.orders o, prices p ON o.item = p.id  
GROUP BY c.id, c.name.given, c.name.family;
```