Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memulai dengan Amazon Redshift Spectrum
Dalam tutorial ini, Anda mempelajari cara menggunakan Amazon Redshift Spectrum untuk menanyakan data langsung dari file di Amazon S3. Jika Anda sudah memiliki cluster dan SQL klien, Anda dapat menyelesaikan tutorial ini dengan pengaturan minimal.
catatan
Kueri Redshift Spectrum dikenakan biaya tambahan. Biaya menjalankan query sampel dalam tutorial ini adalah nominal. Untuk informasi selengkapnya tentang harga, lihat harga Amazon Redshift Spectrum
Prasyarat
Untuk menggunakan Redshift Spectrum, Anda memerlukan klaster Amazon Redshift dan klien SQL yang terhubung ke cluster Anda sehingga Anda dapat menjalankan perintah. SQL Cluster dan file data di Amazon S3 harus sama. Wilayah AWS
Untuk informasi tentang cara membuat klaster Amazon Redshift, lihat Memulai gudang data yang disediakan Amazon Redshift di Panduan Memulai Pergeseran Merah Amazon. Untuk informasi tentang cara menyambung ke klaster, lihat Menyambungkan ke gudang data Amazon Redshift di Panduan Memulai Pergeseran Merah Amazon.
Dalam beberapa contoh berikut, data sampel berada di Wilayah AS Timur (Virginia N.us-east-1
), jadi Anda memerlukan cluster yang juga ada di dalamnyaus-east-1
. Atau, Anda dapat menggunakan Amazon S3 untuk menyalin objek data dari bucket dan folder berikut ke bucket di Wilayah AWS tempat klaster Anda berada:
s3://redshift-downloads/tickit/spectrum/customers/*
s3://redshift-downloads/tickit/spectrum/sales_partition/*
s3://redshift-downloads/tickit/spectrum/sales/*
s3://redshift-downloads/tickit/spectrum/salesevent/*
Jalankan perintah Amazon S3 yang mirip dengan berikut ini untuk menyalin data sampel yang terletak di AS Timur (Virginia N.) ke file Anda. Wilayah AWS Sebelum menjalankan perintah, buat bucket dan folder di bucket agar sesuai dengan perintah salin Amazon S3. Output dari perintah salin Amazon S3 mengonfirmasi bahwa file disalin ke bucket-name
dalam keinginan Anda Wilayah AWS.
aws s3 cp s3://redshift-downloads/tickit/spectrum/ s3://
bucket-name
/tickit/spectrum/ --copy-props none --recursive
Memulai dengan Redshift Spectrum menggunakan AWS CloudFormation
Sebagai alternatif dari langkah-langkah berikut, Anda dapat mengakses DataLake AWS CloudFormation template Redshift Spectrum untuk membuat tumpukan dengan bucket Amazon S3 yang dapat Anda kueri. Untuk informasi selengkapnya, lihat Luncurkan AWS CloudFormation tumpukan Anda dan kemudian kueri data Anda di Amazon S3.
Memulai dengan Redshift Spectrum langkah demi langkah
Untuk mulai menggunakan Amazon Redshift Spectrum, ikuti langkah-langkah berikut:
Langkah 1. Buat IAM peran untuk Amazon Redshift
Cluster Anda memerlukan otorisasi untuk mengakses Katalog Data eksternal Anda di AWS Glue atau Amazon Athena dan file data Anda di Amazon S3. Untuk memberikan otorisasi tersebut, Anda mereferensikan peran AWS Identity and Access Management (IAM) yang dilampirkan ke klaster Anda. Untuk informasi selengkapnya tentang penggunaan peran dengan Amazon Redshift, lihat Otorisasi COPY dan UNLOAD Operasi Menggunakan Peran. IAM
catatan
Dalam kasus tertentu, Anda dapat memigrasikan Katalog Data Athena ke AWS Glue Katalog Data. Anda dapat melakukan ini jika klaster Anda berada di AWS Wilayah yang AWS Glue didukung dan Anda memiliki tabel eksternal Redshift Spectrum di Katalog Data Athena. Untuk menggunakan Katalog AWS Glue Data dengan Redshift Spectrum, Anda mungkin perlu mengubah kebijakan AndaIAM. Untuk informasi selengkapnya, lihat Memutakhirkan ke Katalog AWS Glue Data di Panduan Pengguna Athena.
Saat Anda membuat peran untuk Amazon Redshift, pilih salah satu pendekatan berikut:
Jika Anda menggunakan Redshift Spectrum dengan Katalog Data Athena atau AWS Glue Katalog Data, ikuti langkah-langkah yang diuraikan dalam. Untuk membuat IAM peran untuk Amazon Redshift
Jika Anda menggunakan Redshift Spectrum dengan AWS Glue Data Catalog yang diaktifkan AWS Lake Formation, ikuti langkah-langkah yang diuraikan dalam prosedur ini:
Untuk membuat IAM peran untuk Amazon Redshift
-
Buka IAMkonsol
. -
Di panel navigasi, pilih Peran.
-
Pilih Buat peran.
-
Pilih AWS layanan sebagai entitas tepercaya, lalu pilih Redshift sebagai kasus penggunaan.
-
Di bawah Use case for other Layanan AWS, pilih Redshift - Customizable dan kemudian pilih Next.
-
Halaman kebijakan Tambah izin muncul. Pilih
AmazonS3ReadOnlyAccess
danAWSGlueConsoleFullAccess
, jika Anda menggunakan Katalog AWS Glue Data. Atau pilihAmazonAthenaFullAccess
apakah Anda menggunakan Katalog Data Athena. Pilih Berikutnya.catatan
AmazonS3ReadOnlyAccess
Kebijakan ini memberikan akses hanya-baca klaster Anda ke semua bucket Amazon S3. Untuk memberikan akses hanya ke bucket data AWS sampel, buat kebijakan baru dan tambahkan izin berikut.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::redshift-downloads/*" } ] }
-
Untuk nama Peran, masukkan nama untuk peran Anda, misalnya
myspectrum_role
. -
Tinjau informasi, lalu pilih Buat peran.
-
Di panel navigasi, pilih Peran. Pilih nama peran baru Anda untuk melihat ringkasan, lalu salin Peran ARN ke clipboard Anda. Nilai ini adalah Amazon Resource Name (ARN) untuk peran yang baru saja Anda buat. Anda menggunakan nilai tersebut saat membuat tabel eksternal untuk mereferensikan file data Anda di Amazon S3.
Untuk membuat IAM peran untuk Amazon Redshift menggunakan diaktifkan untuk AWS Glue Data CatalogAWS Lake Formation
-
Buka IAM konsol di https://console.aws.amazon.com/iam/
. -
Di panel navigasi, pilih Kebijakan.
Jika ini pertama kalinya Anda memilih Kebijakan, akan muncul halaman Selamat Datang di Kebijakan Terkelola. Pilih Memulai.
-
Pilih Buat kebijakan.
-
Pilih untuk membuat kebijakan di JSONtab.
-
Tempel di dokumen JSON kebijakan berikut, yang memberikan akses ke Katalog Data tetapi menolak izin administrator untuk Lake Formation.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RedshiftPolicyForLF", "Effect": "Allow", "Action": [ "glue:*", "lakeformation:GetDataAccess" ], "Resource": "*" } ] }
-
Setelah selesai, pilih Tinjau untuk meninjau kebijakan. Validator kebijakan melaporkan kesalahan sintaksis.
-
Pada halaman Kebijakan ulasan, untuk Nama masukkan
myspectrum_policy
untuk memberi nama kebijakan yang Anda buat. Masukkan Deskripsi (opsional). Ulas Ringkasan kebijakan untuk melihat izin yang diberikan oleh kebijakan Anda. Kemudian pilih Buat kebijakan untuk menyimpan pekerjaan Anda.Setelah membuat kebijakan, Anda dapat memberikan akses ke pengguna Anda.
Untuk memberikan akses, menambahkan izin ke pengguna, grup, atau peran Anda:
-
Pengguna dan grup di AWS IAM Identity Center:
Buat rangkaian izin. Ikuti instruksi di Buat rangkaian izin di Panduan Pengguna AWS IAM Identity Center .
-
Pengguna yang dikelola IAM melalui penyedia identitas:
Buat peran untuk federasi identitas. Ikuti petunjuk dalam Membuat peran untuk penyedia identitas pihak ketiga (federasi) di Panduan IAM Pengguna.
-
IAMpengguna:
-
Buat peran yang dapat diambil pengguna Anda. Ikuti petunjuk dalam Membuat peran bagi IAM pengguna di Panduan IAM Pengguna.
-
(Tidak disarankan) Pasang kebijakan langsung ke pengguna atau tambahkan pengguna ke grup pengguna. Ikuti petunjuk di Menambahkan izin ke pengguna (konsol) di Panduan IAM Pengguna.
-
Untuk memberikan SELECT izin pada tabel untuk melakukan kueri di database Lake Formation
-
Buka konsol Lake Formation di https://console.aws.amazon.com/lakeformation/
. -
Di panel navigasi, pilih Izin data lake, lalu pilih Grant.
-
Ikuti petunjuk dalam Pemberian izin tabel menggunakan metode sumber daya bernama di Panduan AWS Lake Formation Pengembang. Saat diminta, berikan informasi berikut:
-
Untuk IAMperan, pilih IAM peran yang Anda buat,
myspectrum_role
. Saat Anda menjalankan Amazon Redshift Query Editor, ia menggunakan IAM peran ini untuk izin ke data.catatan
Untuk memberikan SELECT izin pada tabel dalam Katalog Data yang diaktifkan Formasi Danau untuk kueri, lakukan hal berikut:
Daftarkan jalur untuk data di Lake Formation.
Berikan izin pengguna ke jalur itu di Lake Formation.
Tabel yang dibuat dapat ditemukan di jalur yang terdaftar di Lake Formation.
-
-
PilihIzin.
penting
Sebagai praktik terbaik, izinkan akses hanya ke objek Amazon S3 yang mendasarinya melalui izin Lake Formation. Untuk mencegah akses yang tidak disetujui, hapus izin apa pun yang diberikan ke objek Amazon S3 di luar Lake Formation. Jika sebelumnya Anda mengakses objek Amazon S3 sebelum menyiapkan Lake Formation, hapus IAM kebijakan atau izin bucket yang sebelumnya telah disiapkan. Untuk informasi selengkapnya, lihat Memutakhirkan Izin AWS Glue Data ke Izin AWS Lake Formation Model dan Lake Formation.
Langkah 2: Kaitkan IAM peran dengan cluster Anda
Sekarang Anda memiliki IAM peran yang mengizinkan Amazon Redshift untuk mengakses Katalog Data eksternal dan Amazon S3 untuk Anda. Pada titik ini, Anda harus mengaitkan peran itu dengan cluster Amazon Redshift Anda.
Untuk mengasosiasikan IAM peran dengan cluster
-
Masuk ke AWS Management Console dan buka konsol Amazon Redshift di. https://console.aws.amazon.com/redshiftv2/
-
Pada menu navigasi, pilih Cluster, lalu pilih nama cluster yang ingin Anda perbarui.
-
Untuk Tindakan, pilih Kelola IAM peran. Halaman IAMperan muncul.
-
Pilih Enter ARN lalu masukkan peran ARN atau IAM peran, atau pilih IAM peran dari daftar. Kemudian pilih Tambahkan IAM peran untuk menambahkannya ke daftar IAMPeran terlampir.
-
Pilih Selesai untuk mengaitkan IAM peran dengan cluster. Cluster dimodifikasi untuk menyelesaikan perubahan.
Langkah 3: Buat skema eksternal dan tabel eksternal
Buat tabel eksternal dalam skema eksternal. Skema eksternal mereferensikan database dalam katalog data eksternal dan menyediakan IAM peran ARN yang mengizinkan klaster Anda untuk mengakses Amazon S3 atas nama Anda. Anda dapat membuat database eksternal di Katalog Data Amazon Athena AWS Glue Data Catalog, atau metastore Apache Hive, seperti Amazon. EMR Untuk contoh ini, Anda membuat database eksternal di Katalog Data Amazon Athena saat Anda membuat skema eksternal Amazon Redshift. Untuk informasi selengkapnya, lihat Skema eksternal di Amazon Redshift Spectrum.
Untuk membuat skema eksternal dan tabel eksternal
-
Untuk membuat skema eksternal, ganti IAM peran ARN dalam perintah berikut dengan peran yang ARN Anda buat di langkah 1. Kemudian jalankan perintah di SQL klien Anda.
create external schema myspectrum_schema from data catalog database 'myspectrum_db' iam_role 'arn:aws:iam::123456789012:role/myspectrum_role' create external database if not exists;
-
Untuk membuat tabel eksternal, jalankan CREATE EXTERNAL TABLE perintah berikut.
catatan
Cluster Anda dan bucket Amazon S3 harus sama. Wilayah AWS Untuk contoh CREATE EXTERNAL TABLE perintah ini, bucket Amazon S3 dengan data sampel terletak di AS Timur (Virginia N.). Wilayah AWS Untuk melihat data sumber, unduh
sales_ts.000
file. . Anda dapat memodifikasi contoh ini untuk dijalankan di tempat yang berbeda Wilayah AWS. Buat bucket Amazon S3 sesuai keinginan Anda. Wilayah AWS Salin data penjualan dengan perintah salin Amazon S3. Kemudian perbarui opsi lokasi dalam
CREATE EXTERNAL TABLE
perintah contoh ke bucket Anda.aws s3 cp s3://redshift-downloads/tickit/spectrum/sales/ s3://
bucket-name
/tickit/spectrum/sales/ --copy-props none --recursiveOutput dari perintah salin Amazon S3 mengonfirmasi bahwa file tersebut disalin ke
bucket-name
dalam keinginan Anda Wilayah AWS.copy: s3://redshift-downloads/tickit/spectrum/sales/sales_ts.000 to s3://
bucket-name
/tickit/spectrum/sales/sales_ts.000create external table myspectrum_schema.sales( salesid integer, listid integer, sellerid integer, buyerid integer, eventid integer, dateid smallint, qtysold smallint, 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/' table properties ('numRows'='172000');
Langkah 4: Kueri data Anda di Amazon S3
Setelah tabel eksternal dibuat, Anda dapat menanyainya menggunakan SELECT pernyataan yang sama dengan yang Anda gunakan untuk menanyakan tabel Amazon Redshift lainnya. Kueri SELECT pernyataan ini termasuk menggabungkan tabel, menggabungkan data, dan memfilter predikat.
Untuk menanyakan data Anda di Amazon S3
-
Dapatkan jumlah baris di MYSPECTRUM _SCHEMA. SALESmeja.
select count(*) from myspectrum_schema.sales;
count ------ 172462
-
Simpan tabel fakta Anda yang lebih besar di Amazon S3 dan tabel dimensi Anda yang lebih kecil di Amazon Redshift, sebagai praktik terbaik. Jika Anda memuat data sampel di Load data, Anda memiliki tabel bernama EVENT dalam database Anda. Jika tidak, buat EVENT tabel dengan menggunakan perintah berikut.
create table event( eventid integer not null distkey, venueid smallint not null, catid smallint not null, dateid smallint not null sortkey, eventname varchar(200), starttime timestamp);
-
Muat EVENT tabel dengan mengganti IAM peran ARN dalam COPY perintah berikut dengan peran yang ARN Anda buatLangkah 1. Buat IAM peran untuk Amazon Redshift. Anda dapat mengunduh dan melihat data sumber untuk bucket
Amazon S3 secara opsional. allevents_pipe.txt
Wilayah AWSus-east-1
copy event from 's3://redshift-downloads/tickit/allevents_pipe.txt' iam_role 'arn:aws:iam::123456789012:role/myspectrum_role' delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS' region 'us-east-1';
Contoh berikut bergabung dengan tabel Amazon S3 MYSPECTRUM eksternal _. SCHEMA SALESdengan tabel Amazon Redshift lokal EVENT untuk menemukan total penjualan untuk 10 acara teratas.
select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.sales.eventid order by 2 desc;
eventid | sum --------+--------- 289 | 51846.00 7895 | 51049.00 1602 | 50301.00 851 | 49956.00 7315 | 49823.00 6471 | 47997.00 2118 | 47863.00 984 | 46780.00 7851 | 46661.00 5638 | 46280.00
-
Lihat paket kueri untuk kueri sebelumnya. Perhatikan
S3 Seq Scan
,S3 HashAggregate
, danS3 Query Scan
langkah-langkah yang dijalankan terhadap data di Amazon S3.explain select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.sales.eventid order by 2 desc;
QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan myspectrum_schema.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)
Luncurkan AWS CloudFormation tumpukan Anda dan kemudian kueri data Anda di Amazon S3
Setelah Anda membuat cluster Amazon Redshift dan terhubung ke cluster, Anda dapat menginstal DataLake AWS CloudFormation template Redshift Spectrum Anda dan kemudian kueri data Anda.
CloudFormation menginstal template Redshift Spectrum Getting DataLake Started dan membuat tumpukan yang mencakup yang berikut ini:
Peran bernama
myspectrum_role
terkait dengan cluster Redshift AndaSkema eksternal bernama
myspectrum_schema
Tabel eksternal bernama
sales
dalam bucket Amazon S3Tabel Redshift bernama
event
sarat dengan data
Untuk meluncurkan tumpukan Redshift Spectrum Memulai DataLake CloudFormation
Pilih Launch CFN stack
. CloudFormation Konsol terbuka dengan DataLake template.yl yang dipilih. Anda juga dapat mengunduh dan menyesuaikan DataLake CloudFormation CFNtemplate
Redshift Spectrum Getting Started, lalu buka CloudFormation konsol (https://console.aws.amazon.com/cloudformation ) dan buat tumpukan dengan template yang disesuaikan. Pilih Berikutnya.
Di bawah Parameter, masukkan nama cluster Amazon Redshift, nama database, dan nama pengguna database Anda.
Pilih Berikutnya.
Opsi tumpukan muncul.
Pilih Berikutnya untuk menerima pengaturan default.
Tinjau informasi dan di bawah Kemampuan, dan pilih Saya mengakui yang AWS CloudFormation mungkin menciptakan IAM sumber daya.
Pilih Buat tumpukan.
Jika terjadi kesalahan saat tumpukan sedang dibuat, lihat informasi berikut:
Lihat tab CloudFormation Acara untuk informasi yang dapat membantu Anda mengatasi kesalahan.
Hapus DataLake CloudFormation tumpukan sebelum mencoba operasi lagi.
Pastikan Anda terhubung ke database Amazon Redshift Anda.
Pastikan Anda memasukkan informasi yang benar untuk nama cluster Amazon Redshift, nama database, dan nama pengguna database.
Kueri data Anda di Amazon S3
Anda melakukan kueri tabel eksternal menggunakan SELECT pernyataan yang sama dengan yang Anda gunakan untuk menanyakan tabel Amazon Redshift lainnya. Kueri SELECT pernyataan ini termasuk menggabungkan tabel, menggabungkan data, dan memfilter predikat.
Query berikut mengembalikan jumlah baris dalam tabel myspectrum_schema.sales
eksternal.
select count(*) from myspectrum_schema.sales;
count ------ 172462
Bergabunglah dengan tabel eksternal dengan tabel lokal
Contoh berikut bergabung dengan tabel eksternal myspectrum_schema.sales
dengan tabel lokal event
untuk menemukan total penjualan untuk 10 acara teratas.
select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.sales.eventid order by 2 desc;
eventid | sum --------+--------- 289 | 51846.00 7895 | 51049.00 1602 | 50301.00 851 | 49956.00 7315 | 49823.00 6471 | 47997.00 2118 | 47863.00 984 | 46780.00 7851 | 46661.00 5638 | 46280.00
Lihat paket kueri
Lihat paket kueri untuk kueri sebelumnya. PerhatikanS3 Seq Scan
,S3 HashAggregate
, dan S3 Query Scan
langkah-langkah yang dijalankan pada data di Amazon S3.
explain select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.sales.eventid order by 2 desc;
QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan spectrum.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)