Memulai dengan Amazon Redshift Spectrum - Amazon Redshift

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 Anda di Wilayah AWS di mana cluster 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.) 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 di yang Anda inginkan 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 Redshift Spectrum DataLake AWS CloudFormation template untuk membuat tumpukan dengan bucket Amazon S3 yang dapat Anda kueri. Untuk informasi selengkapnya, lihat Luncurkan AWS CloudFormation tumpuk 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 itu, Anda mereferensikan AWS Identity and Access Management (IAM) peran yang melekat pada cluster 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 cluster Anda berada di AWS Wilayah di mana AWS Glue didukung dan Anda memiliki tabel eksternal Redshift Spectrum di Katalog Data Athena. Untuk menggunakan AWS Glue Katalog Data dengan Redshift Spectrum, Anda mungkin perlu mengubah kebijakan AndaIAM. Untuk informasi selengkapnya, lihat Memutakhirkan ke AWS Glue Katalog Data di Panduan Pengguna Athena.

Saat Anda membuat peran untuk Amazon Redshift, pilih salah satu pendekatan berikut:

Untuk membuat IAM peran untuk Amazon Redshift
  1. Buka IAMkonsol.

  2. Di panel navigasi, pilih Peran.

  3. Pilih Buat peran.

  4. Pilih AWS layanan sebagai entitas tepercaya, dan kemudian pilih Redshift sebagai kasus penggunaan.

  5. Di bawah Kasus penggunaan untuk lainnya Layanan AWS, pilih Redshift - Customizable dan kemudian pilih Next.

  6. Halaman kebijakan Tambah izin akan muncul. Pilih AmazonS3ReadOnlyAccess danAWSGlueConsoleFullAccess, jika Anda menggunakan AWS Glue Katalog Data. Atau pilih AmazonAthenaFullAccess apakah Anda menggunakan Katalog Data Athena. Pilih Berikutnya.

    catatan

    AmazonS3ReadOnlyAccessKebijakan ini memberikan akses hanya-baca klaster Anda ke semua bucket Amazon S3. Untuk memberikan akses hanya ke AWS contoh bucket data, 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/*" } ] }
  7. Untuk nama Peran, masukkan nama untuk peran Anda, misalnyamyspectrum_role.

  8. Tinjau informasi, lalu pilih Buat peran.

  9. 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 Amazon Redshift menggunakan AWS Glue Data Catalog diaktifkan untuk AWS Lake Formation
  1. Buka IAM konsol di https://console.aws.amazon.com/iam/.

  2. Di panel navigasi, pilih Kebijakan.

    Jika ini pertama kalinya Anda memilih Kebijakan, akan muncul halaman Selamat Datang di Kebijakan Terkelola. Pilih Memulai.

  3. Pilih Buat kebijakan.

  4. Pilih untuk membuat kebijakan di JSONtab.

  5. 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": "*" } ] }
  6. Setelah selesai, pilih Tinjau untuk meninjau kebijakan. Validator kebijakan melaporkan kesalahan sintaksis.

  7. 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:

Untuk memberikan SELECT izin pada tabel untuk melakukan kueri di database Lake Formation
  1. Buka konsol Lake Formation di https://console.aws.amazon.com/lakeformation/.

  2. Di panel navigasi, pilih Izin data lake, lalu pilih Grant.

  3. Ikuti petunjuk dalam Memberikan izin tabel menggunakan metode sumber daya bernama di AWS Lake Formation Panduan 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.

  4. 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 Upgrade AWS Glue Izin Data ke AWS Lake FormationIzin 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 mengaitkan IAM peran dengan cluster
  1. Masuk ke AWS Management Console dan buka konsol Amazon Redshift di. https://console.aws.amazon.com/redshiftv2/

  2. Pada menu navigasi, pilih Cluster, lalu pilih nama cluster yang ingin Anda perbarui.

  3. Untuk Tindakan, pilih Kelola IAM peran. Halaman IAMperan muncul.

  4. 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.

  5. 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
  1. 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;
  2. Untuk membuat tabel eksternal, jalankan CREATE EXTERNAL TABLE perintah berikut.

    catatan

    Cluster Anda dan bucket Amazon S3 harus sama Wilayah AWS. Untuk CREATE EXTERNAL TABLE perintah contoh ini, bucket Amazon S3 dengan data sampel terletak di AS Timur (Virginia N.) Wilayah AWS. Untuk melihat data sumber, unduh sales_ts.000file.

    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 --recursive

    Output dari perintah salin Amazon S3 mengonfirmasi bahwa file tersebut disalin ke bucket-name di yang Anda inginkan Wilayah AWS.

    copy: s3://redshift-downloads/tickit/spectrum/sales/sales_ts.000 to s3://bucket-name/tickit/spectrum/sales/sales_ts.000
    create 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
  1. Dapatkan jumlah baris di MYSPECTRUM _SCHEMA. SALESmeja.

    select count(*) from myspectrum_schema.sales;
    count 
    ------
    172462
  2. 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);
  3. 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 allevents_pipe.txt S3 secara opsional Wilayah AWS us-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
  4. Lihat paket kueri untuk kueri sebelumnya. PerhatikanS3 Seq Scan,S3 HashAggregate, dan S3 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 tumpuk dan kemudian kueri data Anda di Amazon S3

Setelah membuat cluster Amazon Redshift dan terhubung ke cluster, Anda dapat menginstal Redshift Spectrum DataLake AWS CloudFormation template 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 Anda

  • Skema eksternal bernama myspectrum_schema

  • Tabel eksternal bernama sales dalam bucket Amazon S3

  • Tabel Redshift bernama event sarat dengan data

Untuk meluncurkan tumpukan Redshift Spectrum Memulai Anda DataLake CloudFormation
  1. 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.

  2. Pilih Berikutnya.

  3. Di bawah Parameter, masukkan nama cluster Amazon Redshift, nama database, dan nama pengguna database Anda.

  4. Pilih Berikutnya.

    Opsi tumpukan muncul.

  5. Pilih Berikutnya untuk menerima pengaturan default.

  6. Tinjau informasi dan di bawah Kemampuan, dan pilih Saya mengakui bahwa AWS CloudFormation dapat menciptakan IAM sumber daya.

  7. 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)