Kasus penggunaan data bersarang - Amazon Redshift

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

Kasus penggunaan data bersarang

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 SQL fitur biasa. Kasus penggunaan berikut menggambarkan beberapa kombinasi umum. Contoh-contoh ini membantu mendemonstrasikan bagaimana Anda dapat menggunakan data bersarang. Mereka bukan bagian dari tutorial.

Menelan data bersarang

Anda dapat menggunakan CREATE TABLE AS pernyataan untuk menyerap data dari tabel eksternal yang berisi tipe data yang kompleks. Kueri berikut mengekstrak semua pelanggan dan nomor telepon mereka dari tabel eksternal, menggunakanLEFT 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

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

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;