

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

# Membuat objek di AWS Glue Data Catalog
<a name="populating-catalog"></a>

AWS Lake Formation menggunakan AWS Glue Data Catalog (Katalog Data) untuk menyimpan metadata tentang data lake, sumber data, transformasi, dan target. Metadata adalah data tentang data yang mendasari dalam set data Anda. Setiap AWS akun memiliki satu Katalog Data per AWS Wilayah.

Metadata dalam Katalog Data diatur dalam hierarki data tiga tingkat yang terdiri dari katalog, database, dan tabel. Ini mengatur data dari berbagai sumber ke dalam wadah logis yang disebut katalog. Setiap katalog mewakili data dari sumber seperti gudang data Amazon Redshift, Amazon DynamoDB database, dan sumber data pihak ketiga seperti Snowflake, MySQL, dan lebih dari 30 sumber data eksternal, yang terintegrasi melalui konektor federasi. Anda juga dapat membuat katalog baru di Katalog Data untuk menyimpan data di Bucket Tabel S3 atau Redshift Managed Storage (RMS).

Tabel menyimpan informasi tentang data yang mendasarinya, termasuk informasi skema, informasi partisi, dan lokasi data. Database adalah kumpulan tabel. Katalog Data juga berisi tautan sumber daya, yang merupakan tautan ke katalog bersama, database, dan tabel di akun eksternal, dan digunakan untuk akses lintas akun ke data di danau data.

Katalog Data adalah objek katalog bersarang yang berisi katalog, database, dan tabel. Ini direferensikan oleh Akun AWS ID, dan merupakan katalog default di akun Wilayah AWS dan file. Katalog Data menggunakan hierarki tiga tingkat (catalog.database.table) untuk mengatur tabel. 
+ Katalog — Tingkat paling atas dari tiga tingkat hierarki metadata Katalog Data. Anda dapat menambahkan beberapa katalog dalam Katalog Data melalui federasi.
+ Database — Tingkat kedua dari hierarki metadata yang terdiri dari tabel dan tampilan. Database juga disebut sebagai skema di banyak sistem data seperti Amazon Redshift dan Trino.
+ Tabel dan tampilan — Tingkat ketiga hierarki data 3 tingkat Katalog Data.

Semua tabel Iceberg di Amazon S3 disimpan dalam Katalog Data default yang memiliki ID Katalog = ID. Akun AWS Anda dapat membuat katalog federasi dalam menyimpan definisi tabel di AWS Glue Data Catalog Amazon Redshift, penyimpanan Tabel Amazon S3, atau sumber data pihak ketiga lainnya melalui federasi. 

**Topics**
+ [Membuat katalog](creating-catalog.md)
+ [Membuat basis data](creating-database.md)
+ [Membuat tabel](creating-tables.md)
+ [AWS Glue Data Catalog Pemandangan bangunan](working-with-views.md)

# Membuat katalog
<a name="creating-catalog"></a>

Katalog mewakili tingkat tertinggi atau paling atas dalam hierarki metadata tiga tingkat. AWS Glue Data Catalog Anda dapat menggunakan beberapa metode untuk membawa data ke dalam Katalog Data dan membuat katalog multi-level. 

 Untuk informasi selengkapnya tentang membuat katalog dari sumber data eksternal, lihat. [Membawa data Anda ke AWS Glue Data Catalog](bring-your-data-overview.md) 

 Untuk membuat katalog menggunakan konsol Lake Formation, Anda harus masuk sebagai administrator danau data atau *pembuat katalog*. Pencipta katalog adalah kepala sekolah yang telah diberikan `CREATE_CATALOG` izin Lake Formation. Anda dapat melihat daftar pembuat katalog di halaman **peran dan tugas Administratif** konsol Lake Formation. Untuk melihat daftar ini, Anda harus memiliki izin `lakeformation:ListPermissions` IAM dan masuk sebagai administrator danau data atau sebagai pembuat katalog dengan opsi hibah pada `CREATE_CATALOG` izin.

# Membuat basis data
<a name="creating-database"></a>

Tabel metadata dalam Katalog Data disimpan dalam database. Anda dapat membuat database sebanyak yang Anda butuhkan, dan Anda dapat memberikan izin Lake Formation yang berbeda di setiap database.

Database dapat memiliki properti lokasi opsional. Lokasi ini biasanya berada dalam lokasi Amazon Simple Storage Service (Amazon S3) yang terdaftar di Lake Formation. Saat Anda menentukan lokasi, kepala sekolah tidak memerlukan izin lokasi data untuk membuat tabel Katalog Data yang mengarah ke lokasi dalam lokasi database. Untuk informasi selengkapnya, lihat [Underlying data access control](access-control-underlying-data.md#data-location-permissions).

Untuk membuat database menggunakan konsol Lake Formation, Anda harus masuk sebagai administrator data lake atau *pembuat database*. Pembuat database adalah kepala sekolah yang telah diberikan `CREATE_DATABASE` izin Lake Formation. Anda dapat melihat daftar pembuat basis data di halaman **peran dan tugas Administratif** konsol Lake Formation. Untuk melihat daftar ini, Anda harus memiliki izin `lakeformation:ListPermissions` IAM dan masuk sebagai administrator data lake atau sebagai pembuat basis data dengan opsi hibah pada `CREATE_DATABASE` izin.

**Untuk membuat basis data**

1. Buka AWS Lake Formation konsol di [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/), dan masuk sebagai administrator danau data atau pembuat basis data.

1. Di panel navigasi, di bawah **Katalog data**, pilih **Database**.

1. Pilih **Buat basis data**.

1. Dalam kotak dialog **Buat database**, masukkan nama database, lokasi opsional, dan deskripsi opsional.

1. Secara opsional pilih **Gunakan hanya kontrol akses IAM untuk tabel baru dalam database ini**.

   Untuk informasi tentang opsi ini, lihat[Mengubah pengaturan default untuk data lake](change-settings.md).

1. Pilih **Buat basis data**.

# Membuat tabel
<a name="creating-tables"></a>

AWS Lake Formation tabel metadata berisi informasi tentang data di danau data, termasuk informasi skema, informasi partisi, dan lokasi data. Tabel ini disimpan dalam Katalog AWS Glue Data. Anda menggunakannya untuk mengakses data dasar di data lake dan mengelola data tersebut dengan izin Lake Formation. Tabel disimpan dalam database dalam Katalog Data.

Ada beberapa cara untuk membuat tabel Katalog Data:
+ Jalankan crawler diAWS Glue. Lihat [Mendefinisikan crawler](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) di Panduan *AWS Glue Pengembang*.
+ Buat dan jalankan alur kerja. Lihat [Mengimpor data menggunakan alur kerja di Lake Formation](workflows.md).
+ Buat tabel secara manual menggunakan konsol Lake Formation, AWS Glue API, atau AWS Command Line Interface (AWS CLI).
+ Buat tabel menggunakan Amazon Athena.
+ Buat tautan sumber daya ke tabel di akun eksternal. Lihat [Membuat tautan sumber daya](creating-resource-links.md).

# Membuat tabel Apache Iceberg
<a name="creating-iceberg-tables"></a>

 AWS Lake Formation mendukung pembuatan tabel Apache Iceberg yang menggunakan format data Apache Parquet di AWS Glue Data Catalog dengan data yang berada di Amazon S3. Tabel dalam Katalog Data adalah definisi metadata yang mewakili data dalam penyimpanan data. Secara default, Lake Formation membuat tabel Iceberg v2. Untuk perbedaan antara tabel v1 dan v2, lihat [Format perubahan versi dalam dokumentasi](https://iceberg.apache.org/spec/#appendix-e-format-version-changes) Apache Iceberg.

 [Apache Iceberg](https://iceberg.apache.org/) adalah format tabel terbuka untuk dataset analitik yang sangat besar. Iceberg memungkinkan perubahan mudah pada skema Anda, juga dikenal sebagai evolusi skema, yang berarti bahwa pengguna dapat menambahkan, mengganti nama, atau menghapus kolom dari tabel data tanpa mengganggu data yang mendasarinya. Iceberg juga menyediakan dukungan untuk pembuatan versi data, yang memungkinkan pengguna untuk melacak perubahan data dari waktu ke waktu. Ini memungkinkan fitur perjalanan waktu, yang memungkinkan pengguna untuk mengakses dan menanyakan versi historis data dan menganalisis perubahan data antara pembaruan dan penghapusan.

Anda dapat menggunakan konsol Lake Formation atau `CreateTable` operasi di AWS Glue API untuk membuat tabel Gunung Es di Katalog Data. Untuk informasi selengkapnya, lihat [CreateTable tindakan (Python: create\$1table](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-CreateTable)).

Saat Anda membuat tabel Gunung Es di Katalog Data, Anda harus menentukan format tabel dan jalur file metadata di Amazon S3 agar dapat melakukan pembacaan dan penulisan.

 Anda dapat menggunakan Lake Formation untuk mengamankan tabel Gunung Es menggunakan izin kontrol akses berbutir halus saat Anda mendaftarkan lokasi data Amazon S3. AWS Lake Formation Untuk data sumber di Amazon S3 dan metadata yang tidak terdaftar di Lake Formation, akses ditentukan oleh kebijakan izin IAM untuk Amazon S3 dan tindakan. AWS Glue Untuk informasi selengkapnya, lihat [Mengelola izin Lake Formation](managing-permissions.md). 

**catatan**  
Data Catalog tidak mendukung pembuatan partisi dan menambahkan properti tabel Iceberg.

**Topics**
+ [Prasyarat](#iceberg-prerequisites)
+ [Membuat tabel Iceberg](#create-iceberg-table)

## Prasyarat
<a name="iceberg-prerequisites"></a>

 Untuk membuat tabel Gunung Es di Katalog Data, dan mengatur izin akses data Lake Formation, Anda harus melengkapi persyaratan berikut: 

1. 

**Izin diperlukan untuk membuat tabel Gunung Es tanpa data yang terdaftar di Lake Formation.**

   Selain izin yang diperlukan untuk membuat tabel di Katalog Data, pembuat tabel memerlukan izin berikut:
   + `s3:PutObject`pada sumber daya arn:aws:s3::: \$1bucketName\$1
   + `s3:GetObject`pada sumber daya arn:aws:s3::: \$1bucketName\$1
   + `s3:DeleteObject`pada sumber daya arn:aws:s3::: \$1bucketName\$1

1. 

**Izin yang diperlukan untuk membuat tabel Gunung Es dengan data yang terdaftar di Lake Formation:**

   Untuk menggunakan Lake Formation untuk mengelola dan mengamankan data di danau data Anda, daftarkan lokasi Amazon S3 Anda yang memiliki data untuk tabel dengan Lake Formation. Ini agar Lake Formation dapat menjual kredensil ke layanan AWS analitis seperti Athena, Redshift Spectrum, dan Amazon EMR untuk mengakses data. Untuk informasi selengkapnya tentang mendaftarkan lokasi Amazon S3, lihat. [Menambahkan lokasi Amazon S3 ke danau data Anda](register-data-lake.md) 

   Kepala sekolah yang membaca dan menulis data dasar yang terdaftar di Lake Formation memerlukan izin berikut:
   + `lakeformation:GetDataAccess`
   + `DATA_LOCATION_ACCESS`

     Kepala sekolah yang memiliki izin lokasi data di lokasi juga memiliki izin lokasi di semua lokasi anak.

     Untuk informasi selengkapnya tentang izin lokasi data, lihat[Kontrol akses data yang mendasari](access-control-underlying-data.md).

 Untuk mengaktifkan pemadatan, layanan perlu mengambil peran IAM yang memiliki izin untuk memperbarui tabel di Katalog Data. Untuk detailnya, lihat [Prasyarat pengoptimalan tabel](https://docs.aws.amazon.com/glue/latest/dg/optimization-prerequisites.html). 

## Membuat tabel Iceberg
<a name="create-iceberg-table"></a>

Anda dapat membuat tabel Iceberg v1 dan v2 menggunakan konsol Lake Formation atau AWS Command Line Interface seperti yang didokumentasikan di halaman ini. Anda juga dapat membuat tabel Iceberg menggunakan AWS Glue konsol atau. Perayap AWS Glue Untuk informasi selengkapnya, lihat [Katalog Data dan Crawler](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html) di Panduan AWS Glue Pengembang.

**Untuk membuat tabel Iceberg**

------
#### [ Console ]

1. Masuk ke Konsol Manajemen AWS, dan buka konsol Lake Formation di [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

1. Di bawah Katalog Data, pilih **Tabel**, dan gunakan tombol **Buat tabel** untuk menentukan atribut berikut:
   + **Nama tabel**: Masukkan nama untuk tabel. Jika Anda menggunakan Athena untuk mengakses tabel, gunakan [tips penamaan ini di Panduan](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html) Pengguna Amazon Athena.
   + **Database**: Pilih database yang ada atau buat yang baru.
   + **Deskripsi:Deskripsi** tabel. Anda dapat menulis deskripsi untuk membantu Anda memahami isi tabel tersebut.
   + **Format tabel**: Untuk **format Tabel**, pilih Apache Iceberg.  
![\[Opsi tabel Apache Iceberg dipilih dengan opsi optimasi tabel.\]](http://docs.aws.amazon.com/id_id/lake-formation/latest/dg/images/table-optimization.png)
   + **Optimalisasi tabel**
     + **Pemadatan** — File data digabungkan dan ditulis ulang menghapus data usang dan mengkonsolidasikan data yang terfragmentasi menjadi file yang lebih besar dan lebih efisien.
     + **Retensi snapshot** — Snapshot adalah versi stempel waktu dari tabel Iceberg. Konfigurasi retensi snapshot memungkinkan pelanggan untuk menerapkan berapa lama untuk menyimpan snapshot dan berapa banyak snapshot yang akan disimpan. Mengonfigurasi pengoptimal retensi snapshot dapat membantu mengelola overhead penyimpanan dengan menghapus snapshot yang lebih lama dan tidak perlu serta file yang mendasarinya yang terkait.
     + **Penghapusan file yatim piatu — File** yatim piatu adalah file yang tidak lagi direferensikan oleh metadata tabel Iceberg. File-file ini dapat terakumulasi dari waktu ke waktu, terutama setelah operasi seperti penghapusan tabel atau pekerjaan ETL yang gagal. Mengaktifkan penghapusan file yatim memungkinkan AWS Glue untuk secara berkala mengidentifikasi dan menghapus file-file yang tidak perlu ini, membebaskan penyimpanan.

     Untuk informasi selengkapnya, lihat [Mengoptimalkan tabel Gunung Es](https://docs.aws.amazon.com/glue/latest/dg/table-optimizers.html).
   + **Peran IAM**: Untuk menjalankan pemadatan, layanan mengasumsikan peran IAM atas nama Anda. Anda dapat memilih peran IAM menggunakan drop-down. Pastikan peran memiliki izin yang diperlukan untuk mengaktifkan pemadatan.

     Untuk mempelajari lebih lanjut tentang izin yang diperlukan, lihat [Prasyarat pengoptimalan tabel](https://docs.aws.amazon.com/glue/latest/dg/optimization-prerequisites.html).
   + **Lokasi**: Tentukan jalur ke folder di Amazon S3 yang menyimpan tabel metadata. Iceberg membutuhkan file metadata dan lokasi di Katalog Data untuk dapat melakukan pembacaan dan penulisan.
   + **Skema**: Pilih **Tambahkan kolom** untuk menambahkan kolom dan tipe data kolom. Anda memiliki opsi untuk membuat tabel kosong dan memperbarui skema nanti. Katalog Data mendukung tipe data Hive. Untuk informasi selengkapnya, lihat [Tipe data sarang](https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=27838462#content/view/27838462). 

      Iceberg memungkinkan Anda untuk mengembangkan skema dan partisi setelah Anda membuat tabel. Anda dapat menggunakan [kueri Athena untuk memperbarui skema tabel dan kueri](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-evolving-table-schema.html) [Spark](https://iceberg.apache.org/docs/latest/spark-ddl/#alter-table-sql-extensions) untuk memperbarui partisi. 

------
#### [ AWS CLI ]

```
aws glue create-table \
    --database-name iceberg-db \
    --region us-west-2 \
    --open-table-format-input '{
      "IcebergInput": { 
           "MetadataOperation": "CREATE",
           "Version": "2"
         }
      }' \
    --table-input '{"Name":"test-iceberg-input-demo",
            "TableType": "EXTERNAL_TABLE",
            "StorageDescriptor":{ 
               "Columns":[ 
                   {"Name":"col1", "Type":"int"}, 
                   {"Name":"col2", "Type":"int"}, 
                   {"Name":"col3", "Type":"string"}
                ], 
               "Location":"s3://DOC_EXAMPLE_BUCKET_ICEBERG/"
            }
        }'
```

------

# Mengoptimalkan tabel Iceberg
<a name="data-compaction"></a>

Lake Formation mendukung beberapa opsi pengoptimalan tabel untuk meningkatkan manajemen dan kinerja tabel Apache Iceberg yang digunakan oleh mesin AWS analitik dan pekerjaan ETL. Pengoptimal ini menyediakan pemanfaatan penyimpanan yang efisien, peningkatan kinerja kueri, dan manajemen data yang efektif. Ada tiga jenis pengoptimal tabel yang tersedia di Lake Formation: 
+ **Pemadatan** — Pemadatan data memadatkan file data kecil untuk mengurangi penggunaan penyimpanan dan meningkatkan kinerja baca. File data digabungkan dan ditulis ulang untuk menghapus data usang dan mengkonsolidasikan data yang terfragmentasi menjadi file yang lebih besar dan lebih efisien. Pemadatan dapat dikonfigurasi untuk berjalan secara otomatis atau dipicu secara manual sesuai kebutuhan. 
+ **Retensi snapshot** — Snapshot adalah versi stempel waktu dari tabel Iceberg. Konfigurasi retensi snapshot memungkinkan pelanggan untuk menerapkan berapa lama untuk menyimpan snapshot dan berapa banyak snapshot yang akan disimpan. Mengonfigurasi pengoptimal retensi snapshot dapat membantu mengelola overhead penyimpanan dengan menghapus snapshot yang lebih lama dan tidak perlu serta file yang mendasarinya yang terkait.
+ **Penghapusan file yatim piatu — File** yatim piatu adalah file yang tidak lagi direferensikan oleh metadata tabel Iceberg. File-file ini dapat terakumulasi dari waktu ke waktu, terutama setelah operasi seperti penghapusan tabel atau pekerjaan ETL yang gagal. Mengaktifkan penghapusan file yatim memungkinkan AWS Glue untuk secara berkala mengidentifikasi dan menghapus file-file yang tidak perlu ini, membebaskan penyimpanan.

Anda dapat mengaktifkan atau menonaktifkan pemadatan, retensi snapshot, dan pengoptimal penghapusan file yatim untuk tabel Iceberg individual di Katalog Data menggunakan konsol, atau operasi API. AWS Glue AWS CLI AWS Glue 

Untuk informasi selengkapnya, lihat [Mengoptimalkan tabel Gunung Es di Panduan](https://docs.aws.amazon.com/glue/latest/dg/table-optimizers.html) Pengembang. AWS Glue 

# Mencari tabel
<a name="searching-for-tables"></a>

Anda dapat menggunakan AWS Lake Formation konsol untuk mencari tabel Katalog Data berdasarkan nama, lokasi, berisi database, dan lainnya. Hasil pencarian hanya menampilkan tabel tempat Anda memiliki izin Lake Formation.

**Untuk mencari tabel (konsol)**

1. Masuk ke Konsol Manajemen AWS dan buka konsol Lake Formation di [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

1. Di panel navigasi, pilih **Tabel**.

1. Posisikan kursor di bidang pencarian di bagian atas halaman. Bidang ini memiliki teks placeholder *Temukan tabel berdasarkan properti*.

   Menu **Properties** muncul, menunjukkan berbagai properti tabel untuk dicari.  
![\[Menu properti diturunkan dari bidang pencarian dan berisi entri ini: Nama, Klasifikasi, Database, Lokasi, ID Katalog\]](http://docs.aws.amazon.com/id_id/lake-formation/latest/dg/images/search-for-tables.png)

1. Lakukan salah satu tindakan berikut:
   + Cari dengan memuat database.

     1. Pilih **Database** dari menu **Properties**, lalu pilih database dari menu **Database** yang muncul atau ketik nama database dan tekan **Enter**.

        Tabel yang Anda memiliki izin dalam database terdaftar.

     1. **(Opsional) Untuk mempersempit daftar ke satu tabel dalam database, posisikan kursor di bidang pencarian lagi, pilih **Nama** dari **Properti** menu, dan pilih nama tabel dari menu Tabel yang muncul atau ketik nama tabel dan tekan **Memasukkan**.**

        Tabel tunggal terdaftar, dan nama database dan nama tabel muncul sebagai ubin di bawah bidang pencarian.  
![\[Di bawah bidang pencarian ada dua ubin: satu Database berlabel, yang mencakup nama database yang dipilih, dan satu Tabel berlabel, yang mencakup nama tabel yang dipilih. Di sebelah kanan ubin adalah tombol Clear filter.\]](http://docs.aws.amazon.com/id_id/lake-formation/latest/dg/images/search-for-tables-with-filter.png)

        Untuk menyesuaikan filter, tutup salah satu ubin atau pilih **Clear filter**.
   + Cari berdasarkan properti lain.

     1. Pilih properti pencarian dari menu **Properties**.

        **Untuk mencari berdasarkan ID AWS akun, pilih **ID Katalog** dari menu **Properti**, masukkan ID AWS akun yang valid (misalnya, 111122223333), dan tekan Enter.**

        Untuk mencari berdasarkan lokasi, pilih **Lokasi** dari menu **Properti**, dan pilih lokasi dari menu **Lokasi** yang muncul. Semua tabel di lokasi root lokasi yang dipilih (misalnya, Amazon S3) dikembalikan.

**Mencari tabel menggunakan AWS CLI**
+ Contoh berikut menunjukkan bagaimana menjalankan serach paral. `--search-text`Parameter ini memungkinkan Anda untuk mencari tabel yang berisi teks yang ditentukan dalam metadata mereka. Dalam hal ini, ia mengembalikan semua tabel yang memiliki “pelanggan” dalam nama, deskripsi, atau bidang metadata lainnya.

  ```
  aws glue search-tables 
        --search-text "customer" 
        --region Wilayah AWS
        --max-results 10
        --sort-criteria "FieldName=Name,Sort=ASC"
  ```

# Berbagi tabel Katalog Data dan database di seluruh Akun AWS
<a name="sharing-catalog-resources"></a>

Anda dapat membagikan sumber daya Katalog Data (database dan tabel) dengan AWS akun eksternal dengan memberikan izin Lake Formation pada sumber daya ke akun eksternal. Pengguna kemudian dapat menjalankan kueri dan pekerjaan yang bergabung dan menanyakan tabel di beberapa akun. Dengan beberapa batasan, saat Anda membagikan sumber daya Katalog Data dengan akun lain, prinsipal di akun tersebut dapat beroperasi pada sumber daya tersebut seolah-olah sumber daya tersebut berada di Katalog Data mereka.

Anda tidak berbagi sumber daya dengan prinsipal tertentu di AWS akun eksternal—Anda berbagi sumber daya dengan akun atau organisasi. AWS Saat berbagi sumber daya dengan AWS organisasi, Anda membagikan sumber daya dengan semua akun di semua tingkatan di organisasi tersebut. Administrator data lake di setiap akun eksternal kemudian harus memberikan izin pada sumber daya bersama kepada kepala sekolah di akun mereka.

Untuk informasi selengkapnya, lihat [Berbagi data lintas akun di Lake Formation](cross-account-permissions.md) dan [Memberikan izin pada sumber daya Katalog Data](granting-catalog-permissions.md).

**Lihat Juga:**  
[Mengakses dan melihat tabel dan database Katalog Data bersama](viewing-shared-resources.md)
[Prasyarat](cross-account-prereqs.md)

# AWS Glue Data Catalog Pemandangan bangunan
<a name="working-with-views"></a>

Dalam AWS Glue Data Catalog, *tampilan* adalah tabel virtual di mana konten didefinisikan oleh kueri SQL yang mereferensikan satu atau lebih tabel. Anda dapat membuat tampilan Katalog Data yang mereferensikan hingga 10 tabel menggunakan editor SQL untuk Amazon Athena, Amazon Redshift, atau Apache Spark menggunakan EMR Tanpa Server atau versi 5.0. AWS Glue Tabel referensi yang mendasari untuk tampilan dapat menjadi milik database yang sama atau database yang berbeda dalam Katalog Data yang sama Akun AWS.

Anda dapat mereferensikan AWS Glue tabel dan tabel standar dalam format tabel terbuka (OTF) seperti [Apache Hudi](https://hudi.incubator.apache.org/), Linux Foundation [Delta Lake](https://delta.io/), dan [Apache Iceberg](https://iceberg.apache.org/), dengan data dasar yang disimpan di lokasi Amazon S3 yang terdaftar. AWS Lake Formation Selain itu, Anda dapat membuat tampilan dari tabel federasi dari rangkaian data Amazon Redshift yang dibagikan dengan Lake Formation. 

## Membedakan tampilan Katalog Data dari jenis tampilan lainnya
<a name="diff-views"></a>

Tampilan Katalog Data berbeda dari tampilan Apache Hive, Apache Spark, dan Amazon Athena. Tampilan Katalog Data adalah fitur asli dari AWS Glue Data Catalog, dan merupakan tampilan definer-made multi-dialek. Anda dapat membuat tampilan Katalog Data menggunakan salah satu layanan analitik yang didukung, seperti Athena atau Amazon Redshift Spectrum, dan mengakses tampilan yang sama menggunakan layanan analitik lain yang didukung. Di sisi lain, tampilan Apache Hive, Apache Spark, dan Athena dibuat secara independen di setiap layanan analitik, seperti Athena dan Amazon Redshift, dan hanya terlihat dan dapat diakses dalam layanan itu.

## Apa itu pandangan yang lebih pasti?
<a name="definer-view"></a>

 Tampilan definer adalah tampilan SQL yang beroperasi berdasarkan izin prinsipal yang membuatnya. Peran definer memiliki izin yang diperlukan untuk mengakses tabel referensi, dan menjalankan pernyataan SQL yang mendefinisikan tampilan. Definer membuat tampilan dan membagikannya dengan pengguna lain melalui kontrol akses AWS Lake Formation berbutir halus. 

Saat pengguna menanyakan tampilan definer, mesin kueri menggunakan izin peran definer untuk mengakses tabel referensi yang mendasarinya. Pendekatan ini memungkinkan pengguna untuk berinteraksi dengan tampilan tanpa memerlukan akses langsung ke tabel sumber, meningkatkan keamanan dan menyederhanakan manajemen akses data.

Untuk menyiapkan tampilan definer, peran IAM definer dapat berada dalam AWS akun yang sama dengan tabel dasar, atau dalam akun yang berbeda menggunakan peran penentu lintas akun. Untuk informasi selengkapnya tentang izin yang diperlukan untuk peran definer, lihat. [Prasyarat untuk membuat tampilan](views-prereqs.md) 

## Kerangka kerja untuk tampilan multi-dialek
<a name="multi-dialect"></a>

Katalog Data mendukung pembuatan tampilan menggunakan beberapa dialek bahasa kueri terstruktur (SQL). SQL adalah bahasa yang digunakan untuk menyimpan dan memproses informasi dalam database relasional dan setiap mesin AWS analitik menggunakan variasi SQL, atau dialek SQL sendiri.

Anda membuat tampilan Katalog Data dalam satu dialek SQL menggunakan salah satu mesin kueri analitik yang didukung. Selanjutnya, Anda dapat memperbarui tampilan menggunakan `ALTER VIEW` pernyataan dalam dialek SQL yang berbeda dalam mesin analitik lain yang didukung. Namun, setiap dialek harus mereferensikan kumpulan tabel, kolom, dan tipe data yang sama.

Anda dapat mengakses beberapa dialek yang tersedia untuk tampilan menggunakan `GetTable` API, AWS CLI dan AWS konsol. Dengan demikian, tampilan Katalog Data terlihat dan tersedia untuk kueri di berbagai mesin analitik yang didukung.

Dengan mendefinisikan skema tampilan umum dan objek metadata yang dapat Anda kueri dari beberapa mesin, tampilan Katalog Data memungkinkan Anda menggunakan tampilan seragam di seluruh data lake Anda.

Untuk detail selengkapnya tentang cara skema diselesaikan untuk setiap dialek, lihat [tautan ke referensi API](). Untuk detail selengkapnya tentang aturan pencocokan untuk berbagai jenis, lihat [tautan ke bagian yang relevan di dokumen API]().

## Mengintegrasikan dengan izin Lake Formation
<a name="lf-view-integ"></a>

Anda dapat menggunakan AWS Lake Formation untuk memusatkan manajemen izin pada AWS Glue Data Catalog tampilan untuk pengguna. Anda dapat memberikan izin berbutir halus pada tampilan Katalog Data menggunakan metode sumber daya bernama atau LF-tag, dan membagikannya di seluruh Akun AWS organisasi, dan unit organisasi. AWS Anda juga dapat berbagi dan mengakses tampilan Katalog Data Wilayah AWS menggunakan tautan sumber daya. Hal ini memungkinkan pengguna untuk menyediakan akses data tanpa menduplikasi sumber data, dan berbagi tabel yang mendasarinya.

Pernyataan `CREATE VIEW` DDL dari tampilan Katalog Data dapat mereferensikan AWS Glue tabel dan tabel standar dalam format tabel terbuka (OTF) seperti Hudi, Delta Lake, dan Iceberg dengan data dasar yang disimpan di lokasi Amazon S3 yang terdaftar di Lake Formation serta tabel federasi dari Amazon Redshift datashare yang dibagikan dengan Lake Formation. Tabel dapat berupa format file apa pun selama mesin yang digunakan untuk menanyakan tampilan mendukung format itu. Anda juga dapat mereferensikan fungsi bawaan dari mesin tempat ia dijalankan tetapi sumber daya khusus mesin lainnya mungkin tidak diizinkan. Untuk detail selengkapnya, lihat [Katalog Data melihat pertimbangan dan batasan](views-notes.md)

## Kasus penggunaan
<a name="views-use-cases"></a>

Berikut ini adalah kasus penggunaan penting untuk tampilan Katalog Data:
+ Buat dan kelola izin pada skema tampilan tunggal. Ini membantu Anda menghindari risiko izin yang tidak konsisten pada tampilan duplikat yang dibuat di beberapa mesin.
+ Berikan izin kepada pengguna pada tampilan yang mereferensikan beberapa tabel tanpa memberikan izin langsung pada tabel referensi yang mendasarinya.
+ Mencapai pemfilteran tingkat baris pada tabel menggunakan LF-tag (di mana LF-tag hanya mengalir hingga tingkat kolom) dengan menerapkan LF-tag pada tampilan dan memberikan izin berbasis LF-tag kepada pengguna. 

## Layanan AWS analitik yang didukung untuk tampilan
<a name="views-supported-engines"></a>

Layanan AWS analitik berikut mendukung pembuatan tampilan Katalog Data:
+ Amazon Redshift
+ Amazon Athena versi 3
+ Apache Spark di EMR Tanpa Server
+  Apache Spark pada versi 5.0 AWS Glue 

## Sumber daya tambahan
<a name="views-addtional-resources"></a>

Anda dapat mempelajari lebih lanjut tentang Katalog Data dalam panduan ini, serta menggunakan sumber daya berikut:

Video berikut menunjukkan cara membuat tampilan dan menanyakannya dari Athena dan Amazon Redshift.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/rFO2OoxVYxE?si=Z0qsyuvTp2ZJg-PL/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/rFO2OoxVYxE?si=Z0qsyuvTp2ZJg-PL)


**Topics**
+ [Membedakan tampilan Katalog Data dari jenis tampilan lainnya](#diff-views)
+ [Apa itu pandangan yang lebih pasti?](#definer-view)
+ [Kerangka kerja untuk tampilan multi-dialek](#multi-dialect)
+ [Mengintegrasikan dengan izin Lake Formation](#lf-view-integ)
+ [Kasus penggunaan](#views-use-cases)
+ [Layanan AWS analitik yang didukung untuk tampilan](#views-supported-engines)
+ [Sumber daya tambahan](#views-addtional-resources)
+ [Prasyarat untuk membuat tampilan](views-prereqs.md)
+ [Membuat tampilan Katalog Data menggunakan pernyataan DDL](create-views.md)
+ [Membuat tampilan Katalog Data menggunakan AWS Glue APIs](views-api-usage.md)
+ [Memberikan izin pada tampilan Katalog Data](grant-perms-views.md)
+ [Tampilan terwujud](materialized-views.md)

# Prasyarat untuk membuat tampilan
<a name="views-prereqs"></a>
+ Untuk membuat tampilan di Katalog Data, Anda harus mendaftarkan lokasi data Amazon S3 yang mendasari tabel referensi dengan Lake Formation. Untuk detail tentang mendaftarkan data dengan Lake Formation, lihat[Menambahkan lokasi Amazon S3 ke danau data Anda](register-data-lake.md). 
+ Hanya peran IAM yang dapat membuat tampilan Katalog Data. Identitas IAM lainnya tidak dapat membuat tampilan Katalog Data.
+ Peran IAM yang mendefinisikan tampilan harus memiliki izin berikut:
  + `SELECT`Izin Lake Formation dengan `Grantable` opsi pada semua tabel referensi, semua kolom disertakan.
  + `CREATE_TABLE`Izin Lake Formation pada database target tempat tampilan sedang dibuat.
  + Kebijakan kepercayaan untuk Formasi Danau dan AWS Glue layanan untuk mengambil peran. 

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "DataCatalogViewDefinerAssumeRole1",
                "Effect": "Allow",
                "Principal": {
                   "Service": [
                        "glue.amazonaws.com",
                        "lakeformation.amazonaws.com"
                     ]
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    ```

------
  + Iam: PassRole izin untuk AWS Glue dan Lake Formation.

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "DataCatalogViewDefinerPassRole1",
                "Action": [
                    "iam:PassRole"
                ],
                "Effect": "Allow",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "iam:PassedToService": [ 
                            "glue.amazonaws.com",
                            "lakeformation.amazonaws.com"
                          ]
                    }
                }
            }
        ]
    }
    ```

------
  + AWS Glue dan izin Lake Formation.

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
                     "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "Glue:GetDatabase",
                    "Glue:GetDatabases",
                    "Glue:CreateTable",
                    "Glue:GetTable",
                    "Glue:GetTables",
                    "Glue:BatchGetPartition",
                    "Glue:GetPartitions",
                    "Glue:GetPartition",
                    "Glue:GetTableVersion",
                    "Glue:GetTableVersions",
    				"Glue:PassConnection",
                    "lakeFormation:GetDataAccess"
                ],
                "Resource": "*"
            }
        ]   
    }
    ```

------
+ Anda tidak dapat membuat tampilan dalam database yang memiliki `Super` atau `ALL` izin yang diberikan kepada `IAMAllowedPrincipals` grup. Anda dapat mencabut `Super` izin untuk `IAMAllowedPrincipals` grup pada database, melihat[Langkah 4: Alihkan penyimpanan data Anda ke model izin Lake Formation](upgrade-glue-lake-formation.md#upgrade-glue-lake-formation-step4), atau membuat database baru dengan **Gunakan kontrol akses IAM hanya untuk tabel baru dalam kotak database ini yang tidak dicentang di bawah **Izin default** untuk tabel yang baru** dibuat.

# Membuat tampilan Katalog Data menggunakan pernyataan DDL
<a name="create-views"></a>

Anda dapat membuat AWS Glue Data Catalog tampilan menggunakan editor SQL untuk Athena, Amazon Redshift, dan menggunakan/. AWS Glue APIs AWS CLI

Untuk membuat tampilan Katalog Data menggunakan editor SQL, pilih Athena atau Redshift Spectrum, dan buat tampilan menggunakan `CREATE VIEW` pernyataan Data Definition Language (DDL). Setelah membuat tampilan dalam dialek mesin pertama, Anda dapat menggunakan pernyataan `ALTER VIEW` DDL dari mesin kedua untuk menambahkan dialek tambahan.

Saat mendefinisikan pandangan, penting untuk mempertimbangkan hal-hal berikut:
+ **Mendefinisikan tampilan multi-dialek** — Ketika Anda mendefinisikan tampilan dengan beberapa dialek, skema dialek yang berbeda harus cocok. Setiap dialek SQL akan memiliki spesifikasi sintaks yang sedikit berbeda. Sintaks kueri yang mendefinisikan tampilan Katalog Data harus diselesaikan ke daftar kolom yang sama persis, termasuk jenis dan nama, di semua dialek. Informasi ini disimpan `StorageDescriptor` dalam tampilan. Dialek juga harus mereferensikan objek tabel dasar yang sama dari Katalog Data.

  Untuk menambahkan dialek lain ke tampilan menggunakan DDL, Anda dapat menggunakan pernyataan. `ALTER VIEW` Jika `ALTER VIEW` pernyataan mencoba memperbarui definisi tampilan, seperti memodifikasi deskriptor penyimpanan atau tabel yang mendasari tampilan, pernyataan tersebut error dengan mengatakan “Input and existing storage descriptor mismatch”. Anda dapat menggunakan operasi cast SQL untuk memastikan bahwa jenis kolom tampilan cocok. 
+ **Memperbarui tampilan** - Untuk memperbarui tampilan, Anda dapat menggunakan `UpdateTable` API. Jika Anda memperbarui tampilan tanpa mencocokkan deskriptor penyimpanan atau tabel referensi, Anda dapat memberikan `FORCE` bendera (lihat dokumentasi SQL mesin untuk sintaks). Setelah pembaruan paksa, tampilan akan mengambil tabel paksa `StorageDescriptor` dan referensi. Setiap `ALTER VIEW` DDL lebih lanjut harus sesuai dengan nilai yang dimodifikasi. Tampilan yang telah diperbarui untuk memiliki dialek yang tidak kompatibel akan berada dalam status “Basi”. Status tampilan terlihat di konsol Lake Formation dan menggunakan `GetTable` operasi.
+ **Merujuk jenis kolom varchar sebagai string** - Tidak mungkin untuk melemparkan jenis kolom varchar dari Redshift Spectrum ke string. Jika tampilan dibuat di Redshift Spectrum dengan tipe kolom varchar dan dialek berikutnya mencoba mereferensikan bidang itu sebagai string, Katalog Data akan memperlakukannya sebagai string tanpa perlu bendera. `FORCE`
+ **Perawatan bidang tipe kompleks** — Amazon Redshift memperlakukan semua tipe kompleks sebagai tipe [SUPER sementara Athena menentukan tipe](https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html) kompleks. Jika tampilan memiliki bidang `SUPER` tipe, dan mesin lain mereferensikan kolom tersebut sebagai tipe kompleks tertentu, seperti struct (`<street_address:struct<street_number:int, street_name:string, street_type:string>>`), Katalog Data mengasumsikan bahwa bidang tersebut menjadi tipe kompleks tertentu, dan menggunakannya dalam deskriptor penyimpanan, tanpa memerlukan tanda. `Force`

Untuk informasi selengkapnya tentang sintaks untuk membuat dan mengelola tampilan Katalog Data, lihat:
+ [Menggunakan AWS Glue Data Catalog tampilan](https://docs.aws.amazon.com/athena/latest/ug/views-glue.html) di Panduan Pengguna Amazon Athena. 
+ [Glue Data Catalog melihat sintaks kueri](https://docs.aws.amazon.com/athena/latest/ug/views-glue-ddl.html) di Panduan Pengguna Amazon Athena. 
+ [Membuat tampilan AWS Glue Data Catalog di Panduan](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html) Pengembang Database Amazon Redshift.

  Untuk informasi selengkapnya tentang perintah SQL yang terkait dengan tampilan di Katalog Data, lihat [MEMBUAT TAMPILAN EKSTERNAL, MENGUBAH TAMPILAN EKSTERNAL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_VIEW.html)[, dan MENJATUHKAN TAMPILAN](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_EXTERNAL_VIEW.html) [EKSTERNAL](https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_EXTERNAL_VIEW.html).

Setelah Anda membuat tampilan Katalog Data, detail tampilan tersedia di konsol Lake Formation.

1. Pilih **Tampilan** di bawah Katalog Data di konsol Lake Formation.

1. Daftar tampilan yang tersedia muncul di halaman tampilan.

1. Pilih tampilan dari daftar dan halaman detail menunjukkan atribut tampilan.

![\[Bagian bawah berisi lima tab yang disusun secara horizontal di mana setiap tab menyertakan informasi yang sesuai.\]](http://docs.aws.amazon.com/id_id/lake-formation/latest/dg/images/view-definition.png)


Skema  
Pilih `Column` baris, dan pilih **Edit LF-tag** untuk memperbarui nilai tag atau menetapkan LF-tag baru.

Definisi SQL  
Anda dapat melihat daftar definisi SQL yang tersedia. Pilih **Tambahkan definisi SQL**, dan pilih mesin kueri untuk menambahkan definisi SQL. Pilih mesin kueri (Athena atau Amazon Redshift) di bawah kolom untuk memperbarui `Edit definition` definisi SQL.

Tag LF  
Pilih **Edit LF-tag** untuk mengedit nilai tag atau menetapkan tag baru. Anda dapat menggunakan LF-tag untuk memberikan izin pada tampilan.

Akses lintas akun  
Anda dapat melihat daftar Akun AWS, organisasi, dan unit organisasi (OUs) yang bersama Anda telah membagikan tampilan Katalog Data.

Tabel yang mendasari  
Tabel yang mendasari direferensikan dalam definisi SQL yang digunakan untuk membuat tampilan ditampilkan di bawah tab ini.

# Membuat tampilan Katalog Data menggunakan AWS Glue APIs
<a name="views-api-usage"></a>

Anda dapat menggunakan AWS Glue [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html), dan [UpdateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateTable.html) APIs untuk membuat dan memperbarui tampilan di Katalog Data. `UpdateTable`Operasi `CreateTable` dan memiliki `TableInput` struktur baru untuk`ViewDefinition`, sementara,`SearchTables`,`GetTable`, `GetTables``GetTableVersion`, `GetTableVersions` operasi menyediakan sintaks keluaran mereka untuk tampilan. `ViewDefinition` Selain itu, ada `Status` bidang baru dalam output `GetTable` API. 

Dua AWS Glue koneksi baru tersedia untuk memvalidasi dialek SQL untuk setiap mesin kueri yang didukung, dan Amazon Amazon Athena Redshift.

The `CreateTable` dan `UpdateTable` APIs asinkron bila digunakan dengan tampilan. Ketika ini APIs dipanggil dengan beberapa dialek SQL, panggilan divalidasi dengan masing-masing mesin untuk menentukan apakah dialek dapat dijalankan pada mesin itu, dan apakah skema tampilan yang dihasilkan dari masing-masing dialek cocok. AWS Glue Layanan ini menggunakan koneksi ini untuk melakukan panggilan internal ke mesin analitik. Panggilan ini mensimulasikan apa yang mesin lakukan untuk memvalidasi jika `CREATE VIEW` atau `ALTER VIEW` SQL DDL dijalankan pada mesin.

Jika SQL yang disediakan valid, dan skema cocok antara dialek tampilan, AWS Glue API secara atomik melakukan hasilnya. Atomicity memungkinkan tampilan dengan beberapa dialek dibuat atau diubah tanpa downtime. 

**Topics**
+ [Membuat AWS Glue koneksi untuk memvalidasi status](views-api-usage-connection.md)
+ [Memvalidasi status pembuatan tampilan](views-api-usage-get-table.md)
+ [Status dan operasi asinkron](views-api-usage-async-states.md)
+ [Lihat skenario kegagalan pembuatan selama operasi asinkron](views-api-usage-errors.md)

# Membuat AWS Glue koneksi untuk memvalidasi status
<a name="views-api-usage-connection"></a>

Untuk membuat atau memperbarui AWS Glue Data Catalog tampilan menggunakan `CreateTable` atau `UpdateTable` operasi, Anda harus membuat jenis AWS Glue koneksi baru untuk validasi, dan menyediakannya ke mesin analitik yang didukung. Koneksi ini diperlukan untuk menggunakan tampilan Katalog Data dengan Athena atau Amazon Redshift. Anda dapat membuat koneksi ini hanya menggunakan AWS CLI, AWS SDKs, atau AWS Glue APIs. Anda tidak dapat menggunakan Konsol Manajemen AWS untuk membuat AWS Glue koneksi.

**catatan**  
Jika peran penentu tampilan dan pemanggilan peran `CreateTable` atau `UpdateTable` berbeda, maka keduanya memerlukan `glue:PassConnection` izin dalam pernyataan kebijakan IAM mereka.

Untuk informasi selengkapnya, lihat dokumentasi [create-connection](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/create-connection.html) AWS CLI .

**AWS CLI perintah untuk membuat koneksi**  
Berikut ini adalah AWS CLI perintah untuk membuat koneksi:

```
aws glue create-connection --region us-east-1 
--endpoint-url https://glue.us-east-1.amazonaws.com 
--cli-input-json file:///root/path/to/create-connection.json
```

**AWS CLI masukan JSON**  
Untuk Amazon Redshift:

```
{
    "CatalogId": "123456789012",
    "ConnectionInput": {
        "ConnectionType": "VIEW_VALIDATION_REDSHIFT",
        "Name": "views-preview-cluster-connection-2",
        "Description": "My first Amazon Redshift validation connection",
        "ConnectionProperties": {
            "DATABASE": "dev",
            "CLUSTER_IDENTIFIER": "glue-data-catalog-views-preview-cluster"
        }
    }
}
```

Untuk Amazon Athena:

```
{
    "CatalogId": "123456789012",
    "ConnectionInput": {
        "ConnectionType": "VIEW_VALIDATION_ATHENA",
        "Name": "views-preview-cluster-connection-3",
        "Description": "My first Amazon Athena validation connection",
        "ConnectionProperties": {
            "WORKGROUP_NAME": "workgroup-name"
        }
    }
}
```

# Memvalidasi status pembuatan tampilan
<a name="views-api-usage-get-table"></a>

Saat Anda menjalankan `UpdateTable` operasi `CreateTable` atau, `Status` bidang untuk output `GetTable` API menunjukkan detail status pembuatan tampilan. Untuk `create` permintaan di mana tabel belum ada, AWS Glue buat tabel kosong selama proses asinkron. Saat menelepon`GetTable`, Anda dapat meneruskan flag boolean opsional`IncludeStatusDetails`, yang menampilkan informasi diagnostik tentang permintaan tersebut. Dalam kasus kegagalan, bendera ini menunjukkan pesan kesalahan dengan status individual dari setiap dialek.

Kesalahan selama operasi pembuatan, baca, perbarui, dan hapus (CRUD) tampilan dapat terjadi baik selama pemrosesan di layanan AWS Glue/Lake Formation atau selama validasi tampilan SQL di Amazon Redshift atau Athena. Ketika kesalahan terjadi selama validasi di mesin, AWS Glue layanan memberikan pesan kesalahan bahwa mesin kembali.

**Bidang status**  
Berikut ini adalah bidang status:
+ Status: status generik, yang agnostik untuk berbagai jenis pekerjaan:
  + DIANTREKAN
  + IN\$1PROGRESS
  + BERHASIL
  + FAILED
+ Tindakan - Menunjukkan tindakan mana yang dipanggil di atas meja, saat ini hanya `CREATE` atau `UPDATE` operasi yang tersedia.

  Membedakan antara `UPDATE` dan `CREATE` operasi penting saat bekerja dengan pandangan. Jenis operasi menentukan bagaimana Anda harus melanjutkan dengan query tabel.

   `UPDATE`Operasi menandakan bahwa tabel sudah ada di Katalog Data. Dalam hal ini, Anda dapat melanjutkan kueri tabel yang dibuat sebelumnya tanpa masalah. Di sisi lain, `CREATE ` operasi menunjukkan bahwa tabel belum pernah berhasil dibuat sebelumnya. Jika tabel ditandai untuk`CREATE`, mencoba untuk query itu akan gagal karena tabel belum ada dalam sistem. Oleh karena itu, penting untuk mengidentifikasi jenis operasi (UPDATE atau CREATE) sebelum mencoba untuk query tabel. 
+ RequestedBy — ARN pengguna yang meminta perubahan asinkron.
+ UpdatedBy ARN pengguna yang terakhir mengubah proses perubahan asinkron secara manual, seperti meminta pembatalan atau modifikasi.
+ Kesalahan - Bidang ini hanya muncul ketika status **GAGAL**. Ini adalah pesan pengecualian tingkat induk. Mungkin ada kesalahan yang berbeda untuk setiap dialek.
  + ErrorCode Jenis pengecualian.
  + ErrorMessage — deskripsi singkat tentang pengecualian.
+ RequestTime — string tanggal berformat ISO 8601 yang menunjukkan waktu perubahan dimulai.
+ UpdateTime — string tanggal berformat ISO 8601 yang menunjukkan waktu status terakhir diperbarui.

# Status dan operasi asinkron
<a name="views-api-usage-async-states"></a>

Saat Anda menjalankan `glue:CreateTable` permintaan, pembuatan asinkron tampilan Katalog Data dimulai. Di bagian berikut, dokumen ini menjelaskan AWS Glue tampilan yang tersedia dalam `glue:GetTable` respons. `Status` Untuk singkatnya, bagian ini menghilangkan respons penuh.

```
{
    "Table": {
        ...
        "Status": {
            ...
            "Action": "CREATE",
            "State": "QUEUED",
        }
    }
}
```

Kedua atribut di atas mewakili informasi diagnostik penting yang menunjukkan keadaan operasi asinkron, serta tindakan yang dapat dilakukan pada tampilan ini. Di bawah ini adalah nilai yang mungkin yang dapat diambil oleh atribut ini.

1. `Status.Action`

   1. CREATE

   1. UPDATE

1. `Status.State`

   1. DIANTREKAN

   1. IN\$1PROGRESS

   1. BERHASIL

   1. FAILED

Penting juga untuk dicatat bahwa beberapa pembaruan pada tampilan Katalog Data tidak memerlukan operasi asinkron. Misalnya, seseorang mungkin ingin memperbarui `Description` atribut tabel. Karena ini tidak memerlukan operasi asinkron, metadata tabel yang dihasilkan tidak akan memilikinya`Status`, dan atributnya akan menjadi. `NULL`

```
{
    "Table": {
        ...,
        "Description": "I changed this attribute!"
    }
}
```

Selanjutnya, topik ini mengeksplorasi bagaimana informasi status di atas dapat memengaruhi operasi yang dapat dilakukan pada suatu AWS Glue tampilan.

**lem: CreateTable**  
Tidak ada perubahan untuk API ini jika dibandingkan dengan bagaimana `glue:CreateTable` fungsi untuk tabel Glue apa pun. `CreateTable`dapat dipanggil untuk nama tabel apa pun yang belum ada.

**lem: UpdateTable**  
Operasi ini tidak dapat dilakukan pada AWS Glue tampilan yang memiliki informasi status berikut:

1. Tindakan == CREATE dan State == ANTRIAN

1. Tindakan == BUAT dan Status == IN\$1PROGRESS

1. Tindakan == BUAT dan status == GAGAL

1. Tindakan == PEMBARUAN dan status == ANTRIAN

1. Tindakan == PEMBARUAN dan status == IN\$1PROGRESS

Untuk meringkas, Anda dapat memperbarui tampilan Katalog Data hanya jika memenuhi persyaratan berikut.

1. Ini telah berhasil dibuat untuk pertama kalinya.

   1. Tindakan == CREATE dan State == SUKSES

1. Ini telah mencapai status terminal setelah operasi pembaruan asinkron.

   1. Tindakan == PEMBARUAN dan Status == SUKSES

   1. Tindakan == PEMBARUAN dan Status == GAGAL

1. Ini memiliki atribut `NULL` status sebagai hasil dari pembaruan sinkron.

**lem: DeleteTable**  
Tidak ada perubahan untuk operasi ini jika dibandingkan dengan bagaimana `glue:DeleteTable` fungsi untuk AWS Glue tabel apa pun. Anda dapat menghapus tampilan Katalog Data terlepas dari statusnya.

**lem: GetTable**  
Tidak ada perubahan untuk operasi ini jika dibandingkan dengan bagaimana `glue:GetTable` fungsi untuk AWS Glue tabel apa pun. Namun, Anda tidak dapat menanyakan tampilan Katalog Data dari mesin analitik hingga berhasil dibuat untuk pertama kalinya. `Action == CREATE and State == SUCCESS`. Setelah berhasil membuat tampilan Katalog Data untuk pertama kalinya, Anda dapat melakukan kueri tampilan terlepas dari statusnya.

**catatan**  
Semua informasi di bagian ini berlaku untuk semua bacaan tabel APIs seperti`GetTable`,`GetTables`, dan`SearchTables`.

# Lihat skenario kegagalan pembuatan selama operasi asinkron
<a name="views-api-usage-errors"></a>

Contoh berikut mewakili jenis kesalahan yang mungkin timbul dari `CreateTable` atau `UpdateTable` melihat panggilan API. Mereka tidak lengkap karena permukaan kesalahan kegagalan kueri SQL cukup besar.

## Skenario 1: Kegagalan kueri Amazon Redshift
<a name="views-api-usage-errors-scenario-1"></a>

Kueri yang disediakan untuk Amazon Redshift menyertakan nama tabel yang salah eja tidak dapat ditemukan di Katalog Data selama validasi. Kesalahan yang dihasilkan ditampilkan di `Status` bidang dalam `GetTable` respons untuk tampilan.

`GetTable`permintaan:

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-72",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table__1\";",
                    "ValidationConnection": "redshift-connection"
                }
            ]
        }
    }
}
```

`GetTable`respon:

```
IncludeStatusDetails = FALSE
{
    "Table": {
        "Name": "view-athena-redshift-72",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:39:19-07:00",
        "UpdateTime": "2024-07-11T11:39:19-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:39:19-07:00",
            "UpdateTime": "2024-07-11T11:40:06-07:00",
            "Action": "CREATE",
            "State": "FAILED"
        }
    }
}

IncludeStatusDetails = TRUE
{
    "Table": {
        "Name": "view-athena-redshift-72",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:39:19-07:00",
        "UpdateTime": "2024-07-11T11:39:19-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:39:19-07:00",
            "UpdateTime": "2024-07-11T11:40:06-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "QueryExecutionException",
                "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection | Query Execution Id: ddb711d3-2415-4aa9-b251-6a76ab4f41b1 | Timestamp: Thu Jul 11 18:39:37 UTC 2024]: Redshift returned error for the statement: ERROR: AwsClientException: EntityNotFoundException from glue - Entity Not Found"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-72",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table__1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:40:06-07:00",
                        "State": "SUCCESS"
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table__1\";",
                        "UpdateTime": "2024-07-11T11:39:37-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "QueryExecutionException",
                            "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection | Query Execution Id: ddb711d3-2415-4aa9-b251-6a76ab4f41b1 | Timestamp: Thu
 Jul 11 18:39:37 UTC 2024]: Redshift returned error for the statement: ERROR: AwsClientException: EntityNotFoundException from glue - Entity Not Found"
                        }
                    }
                ]
            }
        }
    }
}
```

## Skenario 2: Koneksi Amazon Redshift tidak valid
<a name="views-api-usage-errors-scenario-2"></a>

Koneksi Amazon Redshift dalam contoh berikut salah bentuk karena mengacu pada database Amazon Redshift yang tidak ada di titik akhir yang disediakan. cluster/serverless Amazon Redshift tidak dapat memvalidasi tampilan dan `Status` bidang dalam `GetTable` respons menunjukkan kesalahan (dari Amazon `"State": "FAILED"` Redshift.

`GetTable`permintaan:

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-73",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                    "ValidationConnection": "redshift-connection-malformed"
                }
            ]
        }
    }
}
```

`GetTable`respon:

```
IncludeStatusDetails = FALSE
{
    "Table": {
        "Name": "view-athena-redshift-73",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:43:27-07:00",
        "UpdateTime": "2024-07-11T11:43:27-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:43:27-07:00",
            "UpdateTime": "2024-07-11T11:43:40-07:00",
            "Action": "CREATE",
            "State": "FAILED"
        }
    }
}

IncludeStatusDetails = TRUE
{
    "Table": {
        "Name": "view-athena-redshift-73",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:43:27-07:00",
        "UpdateTime": "2024-07-11T11:43:27-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:43:27-07:00",
            "UpdateTime": "2024-07-11T11:43:40-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "QueryExecutionException",
                "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection-malformed | Query Execution Id: 69bfafd4-3d51-4cb0-9320-7ce5404b1809 | Timestamp: Thu Jul 11 18:43:38 UTC 2024]: Redshift returned error for the statement: FATAL: database \"devooo\" does not exist"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-73",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:43:40-07:00",
                        "State": "SUCCESS"
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                        "UpdateTime": "2024-07-11T11:43:38-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "QueryExecutionException",
                            "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection-malformed | Query Execution Id: 69bfafd4-3d51-4cb0-9320-7ce5404b1809 | Time
stamp: Thu Jul 11 18:43:38 UTC 2024]: Redshift returned error for the statement: FATAL: database \"devooo\" does not exist"
                        }
                    }
                ]
            }
        }
    }
}
```

## Skenario 3: Kegagalan kueri Athena
<a name="views-api-usage-errors-scenario-3"></a>

SQL untuk Athena di sini tidak valid karena kueri salah mengeja nama database. Validasi kueri Athena menangkap ini dan kesalahan yang dihasilkan muncul melalui objek dalam `Status` panggilan. `GetTable`

`GetTable`permintaan:

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-70",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT * FROM \"gdc--view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                    "ValidationConnection": "redshift-connection"
                }
            ]
        }
    }
}
```

`GetTable`respon:

```
IncludeStatusDetails = FALSE
{
    "Table": {
        "Name": "view-athena-redshift-70",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:09:53-07:00",
        "UpdateTime": "2024-07-11T11:09:53-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:09:54-07:00",
            "UpdateTime": "2024-07-11T11:10:41-07:00",
            "Action": "CREATE",
            "State": "FAILED",
        }
    }
}

IncludeStatusDetails = TRUE
{
    "Table": {
        "Name": "view-athena-redshift-70",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:09:53-07:00",
        "UpdateTime": "2024-07-11T11:09:53-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:09:54-07:00",
            "UpdateTime": "2024-07-11T11:10:41-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "QueryExecutionException",
                "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: athena-connection | Query Execution Id: d9bb1e6d-ce26-4b35-8276-8a199af966aa | Timestamp: Thu Jul 11 18:10:
41 UTC 2024]: Athena validation FAILED: {ErrorCategory: 2,ErrorType: 1301,Retryable: false,ErrorMessage: line 1:118: Schema 'gdc--view-playground-db' does not exist}"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-70",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT * FROM \"gdc--view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT * FROM \"gdc--view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:10:41-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "QueryExecutionException",
                            "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: athena-connection | Query Execution Id: d9bb1e6d-ce26-4b35-8276-8a199af966aa | Timestamp: Thu J
ul 11 18:10:41 UTC 2024]: Athena validation FAILED: {ErrorCategory: 2,ErrorType: 1301,Retryable: false,ErrorMessage: line 1:118: Schema 'gdc--view-playground-db' does not exist}"
                        }
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                        "UpdateTime": "2024-07-11T11:10:41-07:00",
                        "State": "SUCCESS"
                    }
                ]
            }
        }
    }
}
```

## Skenario 4: Deskriptor penyimpanan ketidakcocokan
<a name="views-api-usage-errors-scenario-4"></a>

SQL yang disediakan untuk dialek Athena memilih `col2` dan sementara SQL untuk Redshift hanya `col1` memilih. `col1` Hal ini menyebabkan kesalahan ketidakcocokan deskriptor penyimpanan.

`GetTable`permintaan:

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-71",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT col1, col2 FROM \"gdc-view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT col1 FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                    "ValidationConnection": "redshift-connection"
                }
            ]
        }
    }
}
```

`GetTable`respon:

```
IncludeStatusDetails = FALSE

{
    "Table": {
        "Name": "view-athena-redshift-71",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:22:02-07:00",
        "UpdateTime": "2024-07-11T11:22:02-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:22:02-07:00",
            "UpdateTime": "2024-07-11T11:23:19-07:00",
            "Action": "CREATE",
            "State": "FAILED"
        }
    }
}

IncludeStatusDetails = TRUE

{
    "Table": {
        "Name": "view-athena-redshift-71",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:22:02-07:00",
        "UpdateTime": "2024-07-11T11:22:02-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:22:02-07:00",
            "UpdateTime": "2024-07-11T11:23:19-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "InvalidInputException",
                "ErrorMessage": "Engine and existing storage descriptor mismatch"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-71",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT col1, col2 FROM \"gdc-view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT col1 FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT col1, col2 FROM \"gdc-view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:23:19-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "InvalidInputException",
                            "ErrorMessage": "Engine and existing storage descriptor mismatch"
                        }
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT col1 FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                        "UpdateTime": "2024-07-11T11:22:49-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "InvalidInputException",
                            "ErrorMessage": "Engine and existing storage descriptor mismatch"
                        }
                    }
                ]
            }
        }
    }
}
```

# Memberikan izin pada tampilan Katalog Data
<a name="grant-perms-views"></a>

 Setelah membuat tampilan di AWS Glue Data Catalog, Anda dapat memberikan izin data lake pada tampilan ke kepala sekolah di seluruh Akun AWS, organisasi, dan unit organisasi. Anda dapat memberikan izin menggunakan LF-tag atau metode sumber daya bernama. Untuk informasi selengkapnya tentang penandaan sumber daya, lihat[Kontrol akses berbasis tag Lake Formation](tag-based-access-control.md). Untuk informasi selengkapnya tentang pemberian izin pada tampilan secara langsung, lihat. [Memberikan izin pada tampilan menggunakan metode sumber daya bernama](granting-view-permissions.md)

# Tampilan terwujud
<a name="materialized-views"></a>

**Topics**
+ [Membedakan tampilan terwujud dari jenis tampilan lain](#materialized-views-differentiating)
+ [Kasus penggunaan](#materialized-views-use-cases)
+ [Konsep utama](#materialized-views-key-concepts)
+ [Izin untuk tampilan terwujud](#materialized-views-permissions)
+ [Membuat dan mengelola tampilan yang terwujud](#materialized-views-creating-managing)
+ [Penyimpanan dan akses data](#materialized-views-storage-access)
+ [Mengintegrasikan dengan izin AWS Lake Formation](#materialized-views-lake-formation)
+ [Pemantauan dan debugging](#materialized-views-monitoring-debugging)
+ [Mengelola pekerjaan penyegaran](#materialized-views-managing-refresh-jobs)
+ [Pemantauan dan pemecahan masalah](#materialized-views-monitoring-troubleshooting)
+ [Pertimbangan dan batasan](#materialized-views-considerations-limitations)

Dalam Katalog AWS Glue Data, tampilan terwujud adalah tabel terkelola yang menyimpan hasil yang telah dihitung sebelumnya dari kueri SQL dalam format Apache Iceberg. Tidak seperti tampilan Katalog Data standar yang mengeksekusi kueri setiap kali diakses, tampilan terwujud secara fisik menyimpan hasil kueri dan memperbaruinya saat tabel sumber yang mendasarinya berubah. Anda dapat membuat tampilan terwujud menggunakan Apache Spark versi 3.5.6\$1 di Amazon Athena, Amazon EMR, atau. AWS Glue

Tampilan terwujud mereferensikan tabel Apache Iceberg yang terdaftar di Katalog AWS Glue Data, dengan data yang telah dihitung sebelumnya disimpan sebagai tabel Apache Iceberg di bucket Amazon S3 Tables atau bucket tujuan umum Amazon S3, membuatnya dapat diakses dari beberapa mesin kueri termasuk Amazon Athena, Amazon Redshift, dan mesin yang kompatibel dengan Iceberg pihak ketiga.

## Membedakan tampilan terwujud dari jenis tampilan lain
<a name="materialized-views-differentiating"></a>

Tampilan terwujud berbeda dari tampilan Katalog AWS Glue Data, tampilan Apache Spark, dan tampilan Amazon Athena dengan cara mendasar. Sementara tampilan Katalog Data adalah tabel virtual yang mengeksekusi definisi kueri SQL setiap kali diakses, tampilan terwujud secara fisik menyimpan hasil kueri yang telah dihitung sebelumnya. Ini menghilangkan komputasi yang berlebihan dan secara signifikan meningkatkan kinerja kueri untuk transformasi kompleks yang sering diakses.

Tampilan terwujud juga berbeda dari jalur transformasi data tradisional yang dibangun dengan AWS Glue ETL atau pekerjaan Spark khusus. Alih-alih menulis kode khusus untuk menangani deteksi perubahan, pembaruan tambahan, dan orkestrasi alur kerja, Anda menentukan tampilan terwujud menggunakan sintaks SQL standar. Katalog AWS Glue Data secara otomatis memonitor tabel sumber, mendeteksi perubahan, dan menyegarkan tampilan terwujud menggunakan infrastruktur komputasi yang dikelola sepenuhnya.

## Kasus penggunaan
<a name="materialized-views-use-cases"></a>

Berikut ini adalah kasus penggunaan penting untuk tampilan terwujud:
+ **Mempercepat kueri analitik yang kompleks** — Buat tampilan terwujud yang menghitung sebelumnya gabungan, agregasi, dan fungsi jendela yang mahal. Spark engine secara otomatis menulis ulang kueri berikutnya untuk menggunakan hasil yang telah dihitung sebelumnya, mengurangi latensi kueri dan biaya komputasi.
+ **Sederhanakan jalur transformasi data** — Ganti pekerjaan ETL kompleks yang menangani deteksi perubahan, pembaruan tambahan, dan orkestrasi alur kerja dengan definisi tampilan terwujud berbasis SQL sederhana. Katalog AWS Glue Data mengelola semua kompleksitas operasional secara otomatis.
+ **Aktifkan analisis layanan mandiri dengan akses data yang diatur** — Buat tampilan terwujud yang dikuratori yang mengubah data mentah menjadi kumpulan data siap bisnis. Berikan pengguna akses ke tampilan yang terwujud tanpa mengekspos tabel sumber yang mendasarinya, menyederhanakan manajemen keamanan sekaligus memberdayakan analitik swalayan.
+ **Optimalkan rekayasa fitur untuk pembelajaran mesin** — Tentukan tampilan terwujud yang menerapkan transformasi fitur untuk model ML. Kemampuan penyegaran otomatis memastikan penyimpanan fitur tetap terkini saat data sumber berkembang, sementara penyegaran tambahan meminimalkan biaya komputasi.
+ **Menerapkan berbagi data yang efisien** — Buat tampilan terwujud yang menyaring dan mengubah data untuk konsumen tertentu. Bagikan tampilan terwujud di seluruh akun dan wilayah yang menggunakan AWS Lake Formation, menghilangkan kebutuhan akan duplikasi data sambil mempertahankan tata kelola terpusat.

## Konsep utama
<a name="materialized-views-key-concepts"></a>

### Penyegaran otomatis
<a name="materialized-views-automatic-refresh"></a>

Penyegaran otomatis adalah kemampuan yang terus memantau tabel sumber Anda dan memperbarui tampilan yang terwujud sesuai dengan jadwal yang Anda tentukan. Saat membuat tampilan terwujud, Anda dapat menentukan frekuensi penyegaran menggunakan penjadwalan berbasis waktu dengan interval sesering satu jam. Katalog AWS Glue Data menggunakan infrastruktur komputasi Spark terkelola untuk menjalankan operasi penyegaran di latar belakang, menangani semua aspek deteksi perubahan dan pembaruan tambahan secara transparan.

Saat data sumber berubah di antara interval penyegaran, tampilan yang terwujud menjadi basi sementara. Kueri yang secara langsung mengakses tampilan terwujud dapat mengembalikan hasil yang sudah ketinggalan zaman hingga penyegaran terjadwal berikutnya selesai. Untuk skenario yang membutuhkan akses langsung ke data terbaru, Anda dapat menjalankan penyegaran manual menggunakan perintah `REFRESH MATERIALIZED VIEW` SQL.

### Penyegaran tambahan
<a name="materialized-views-incremental-refresh"></a>

Penyegaran tambahan adalah teknik pengoptimalan yang hanya memproses data yang telah berubah dalam tabel sumber sejak penyegaran terakhir, daripada menghitung ulang seluruh tampilan yang terwujud. Katalog AWS Glue Data memanfaatkan lapisan metadata Apache Iceberg untuk melacak perubahan tabel sumber secara efisien dan menentukan bagian mana dari tampilan terwujud yang memerlukan pembaruan.

Pendekatan ini secara signifikan mengurangi biaya komputasi dan durasi penyegaran dibandingkan dengan operasi penyegaran penuh, terutama untuk kumpulan data besar di mana hanya sebagian kecil perubahan data di antara siklus penyegaran. Mekanisme penyegaran tambahan beroperasi secara otomatis; Anda tidak perlu menulis logika khusus untuk mendeteksi atau memproses data yang diubah.

### Penulisan ulang kueri otomatis
<a name="materialized-views-automatic-query-rewrite"></a>

Penulisan ulang kueri otomatis adalah kemampuan pengoptimalan kueri yang tersedia di mesin Spark di Amazon Athena, Amazon EMR, dan. AWS Glue Saat Anda menjalankan kueri terhadap tabel dasar, pengoptimal Spark menganalisis rencana kueri Anda dan secara otomatis menentukan apakah tampilan terwujud yang tersedia dapat memenuhi kueri dengan lebih efisien. Jika tampilan terwujud yang sesuai ada, pengoptimal secara transparan menulis ulang kueri untuk menggunakan hasil yang telah dihitung sebelumnya alih-alih memproses tabel dasar.

Pengoptimalan ini terjadi tanpa memerlukan perubahan apa pun pada kode aplikasi atau pernyataan kueri Anda. Pengoptimal Spark memastikan bahwa penulisan ulang kueri otomatis hanya berlaku ketika tampilan terwujud saat ini dan dapat menghasilkan hasil yang akurat. Jika tampilan terwujud sudah basi atau tidak sepenuhnya sesuai dengan persyaratan kueri, pengoptimal akan mengeksekusi rencana kueri asli terhadap tabel dasar, memprioritaskan kebenaran daripada kinerja.

### Lihat peran yang lebih pasti
<a name="materialized-views-view-definer-role"></a>

Tampilan terwujud beroperasi berdasarkan izin peran IAM yang membuatnya, yang dikenal sebagai peran penentu tampilan. Peran definer harus memiliki akses baca ke semua tabel dasar yang direferensikan dalam definisi tampilan terwujud dan membuat izin tabel pada database target. Ketika Katalog AWS Glue Data menyegarkan tampilan terwujud, ia akan mengasumsikan peran definer untuk mengakses tabel sumber dan menulis hasil yang diperbarui.

Model keamanan ini memungkinkan Anda memberi pengguna akses ke tampilan terwujud tanpa memberi mereka izin langsung pada tabel sumber yang mendasarinya. Jika peran penentu tampilan kehilangan akses ke tabel dasar apa pun, operasi penyegaran berikutnya akan gagal hingga izin dipulihkan.

## Izin untuk tampilan terwujud
<a name="materialized-views-permissions"></a>

Untuk membuat dan mengelola tampilan terwujud, Anda harus mengonfigurasi AWS Lake Formation izin. Peran IAM yang menciptakan tampilan terwujud (peran definer) memerlukan izin khusus pada tabel sumber dan database target.

### Izin yang diperlukan untuk peran definer
<a name="materialized-views-required-permissions-definer-role"></a>

Peran definer harus memiliki izin Lake Formation berikut:
+ Pada tabel sumber - PILIH atau SEMUA izin tanpa filter baris, kolom, atau sel
+ Pada database target - izin CREATE\$1TABLE
+ Pada Katalog AWS Glue Data — GetTable dan izin CreateTable API

Saat Anda membuat tampilan terwujud, ARN peran definer disimpan dalam definisi tampilan. Katalog AWS Glue Data mengasumsikan peran ini saat menjalankan operasi penyegaran otomatis. Jika peran definer kehilangan akses ke tabel sumber, operasi refresh akan gagal hingga izin dipulihkan.

### Izin IAM untuk pekerjaan AWS Glue
<a name="materialized-views-iam-permissions-glue-jobs"></a>

Peran IAM AWS Glue pekerjaan Anda memerlukan izin berikut:

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetCatalog",
                "glue:GetCatalogs",
                "glue:GetTable",
                "glue:GetTables",
                "glue:CreateTable",
                "glue:UpdateTable",
                "glue:DeleteTable",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*:/aws-glue/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess"
            ],
            "Resource": "*"
        }
    ]
}
```

Peran yang Anda gunakan untuk penyegaran otomatis Tampilan Materialisasi harus memiliki PassRole izin iam: pada peran tersebut.

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::111122223333:role/materialized-view-role-name"
      ]
    }
  ]
}
```

Agar Glue secara otomatis menyegarkan tampilan terwujud untuk Anda, peran tersebut juga harus memiliki kebijakan kepercayaan berikut yang memungkinkan layanan untuk mengambil peran tersebut.

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "glue.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

Jika Tampilan Materialisasi disimpan di Bucket Tabel S3, Anda juga perlu menambahkan izin berikut ke peran.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3tables:PutTableMaintenanceConfiguration"
      ],
      "Resource": "arn:aws:s3tables:*:123456789012:*"
    }
  ]
}
```

### Memberikan akses ke tampilan yang terwujud
<a name="materialized-views-granting-access"></a>

Untuk memberi pengguna lain akses ke kueri tampilan terwujud, gunakan AWS Lake Formation untuk memberikan izin SELECT pada tabel tampilan terwujud. Pengguna dapat menanyakan tampilan terwujud tanpa memerlukan akses langsung ke tabel sumber yang mendasarinya.

Untuk informasi lebih lanjut tentang mengonfigurasi izin Lake Formation, lihat Memberikan dan mencabut izin pada sumber daya Katalog Data di Panduan Pengembang. AWS Lake Formation 

## Membuat dan mengelola tampilan yang terwujud
<a name="materialized-views-creating-managing"></a>

Anda membuat tampilan terwujud menggunakan pernyataan `CREATE MATERIALIZED VIEW` SQL di mesin Spark. Definisi tampilan menentukan kueri SQL yang mendefinisikan logika transformasi, database target dan nama tabel, dan konfigurasi penyegaran opsional. Anda dapat menentukan transformasi kompleks termasuk agregasi, bergabung di beberapa tabel, filter, dan fungsi jendela.

```
CREATE MATERIALIZED VIEW sales_summary
AS
SELECT 
    region,
    product_category,
    SUM(sales_amount) as total_sales,
    COUNT(DISTINCT customer_id) as unique_customers
FROM sales_transactions
WHERE transaction_date >= current_date - interval '90' day
GROUP BY region, product_category;
```

Untuk mengonfigurasi penyegaran otomatis, sertakan jadwal penyegaran dalam definisi tampilan Anda:

```
CREATE MATERIALIZED VIEW sales_summary
SCHEDULE REFRESH EVERY 1 HOUR
AS
SELECT region, product_category, SUM(sales_amount) as total_sales
FROM sales_transactions
GROUP BY region, product_category;
```

Anda dapat menyegarkan tampilan terwujud secara manual kapan saja menggunakan `REFRESH MATERIALIZED VIEW` perintah:

```
REFRESH MATERIALIZED VIEW sales_summary;
```

Untuk mengubah jadwal penyegaran tampilan terwujud yang ada, gunakan `ALTER MATERIALIZED VIEW` pernyataan:

```
ALTER MATERIALIZED VIEW sales_summary
ADD SCHEDULE REFRESH EVERY 2 HOURS;
```

### Pandangan terwujud bersarang
<a name="materialized-views-nested"></a>

Anda dapat membuat tampilan terwujud yang mereferensikan tampilan terwujud lainnya sebagai tabel dasar, memungkinkan transformasi data multi-tahap. Saat Anda membuat tampilan terwujud bersarang, Katalog AWS Glue Data melacak dependensi dan secara otomatis menyebarkan pembaruan melalui hierarki tampilan terwujud. Saat tampilan terwujud dasar diperbarui, semua tampilan terwujud hilir yang bergantung padanya akan diperbarui sesuai dengan itu.

Kemampuan ini memungkinkan Anda untuk menguraikan transformasi kompleks menjadi tahapan logis, meningkatkan pemeliharaan dan memungkinkan penyegaran selektif lapisan transformasi berdasarkan persyaratan kesegaran data Anda.

## Penyimpanan dan akses data
<a name="materialized-views-storage-access"></a>

Tampilan terwujud menyimpan hasil yang telah dihitung sebelumnya sebagai tabel Apache Iceberg di bucket Tabel S3 atau bucket S3 tujuan umum dalam akun Anda. AWS Katalog AWS Glue Data mengelola semua aspek pemeliharaan tabel Iceberg, termasuk pemadatan dan retensi snapshot, melalui kemampuan pengoptimalan otomatis S3 Tables.

Karena tampilan terwujud disimpan sebagai tabel Iceberg, Anda dapat membacanya langsung dari mesin yang kompatibel dengan Iceberg, termasuk Amazon Athena, Amazon Redshift, dan platform analitik pihak ketiga. Aksesibilitas multi-mesin ini memastikan data yang telah dihitung sebelumnya tetap dapat diakses di seluruh ekosistem analitik Anda tanpa duplikasi data atau konversi format.

## Mengintegrasikan dengan izin AWS Lake Formation
<a name="materialized-views-lake-formation"></a>

Anda dapat menggunakannya AWS Lake Formation untuk mengelola izin berbutir halus pada tampilan terwujud. Pembuat tampilan secara otomatis menjadi pemilik tampilan terwujud dan dapat memberikan izin kepada pengguna atau peran lain menggunakan metode sumber daya bernama atau AWS Lake Formation LF-tag.

Saat Anda memberikan `SELECT` izin kepada pengguna pada tampilan terwujud, mereka dapat menanyakan hasil yang telah dihitung sebelumnya tanpa memerlukan akses ke tabel sumber yang mendasarinya. Model keamanan ini menyederhanakan manajemen akses data dan memungkinkan Anda menerapkan prinsip hak istimewa paling sedikit, memberi pengguna akses hanya ke transformasi data spesifik yang mereka butuhkan.

Anda dapat membagikan tampilan terwujud di seluruh AWS akun, AWS organisasi, dan unit organisasi menggunakan AWS Lake Formation kemampuan berbagi lintas akun. Anda juga dapat mengakses tampilan terwujud di seluruh AWS Wilayah menggunakan tautan sumber daya, memungkinkan tata kelola data terpusat dengan akses data terdistribusi.

## Pemantauan dan debugging
<a name="materialized-views-monitoring-debugging"></a>

Katalog AWS Glue Data menerbitkan semua operasi penyegaran tampilan terwujud dan metrik terkait ke Amazon. CloudWatch Anda dapat memantau waktu mulai penyegaran, waktu akhir, durasi, volume data yang diproses, dan menyegarkan status melalui CloudWatch metrik. Ketika operasi penyegaran gagal, pesan kesalahan dan informasi diagnostik ditangkap di CloudWatch Log.

Anda dapat mengatur CloudWatch alarm untuk menerima notifikasi saat penyegaran pekerjaan melebihi durasi yang diharapkan atau gagal berulang kali. Katalog AWS Glue Data juga menerbitkan peristiwa perubahan untuk penyegaran yang berhasil dan gagal, memungkinkan Anda mengintegrasikan operasi tampilan terwujud ke dalam otomatisasi alur kerja yang lebih luas.

Untuk memeriksa status tampilan terwujud saat ini, gunakan perintah `DESCRIBE MATERIALIZED VIEW` SQL, yang menampilkan metadata termasuk status kebuntuan, stempel waktu penyegaran terakhir, dan konfigurasi jadwal penyegaran.

## Mengelola pekerjaan penyegaran
<a name="materialized-views-managing-refresh-jobs"></a>

### Memulai penyegaran manual
<a name="materialized-views-manual-refresh"></a>

Picu penyegaran langsung di luar interval yang dijadwalkan.

Izin yang Diperlukan: AWS Kredensil yang digunakan untuk melakukan panggilan API harus memiliki `glue:GetTable` izin untuk tampilan yang terwujud.

Untuk Katalog Tabel S3:

```
aws glue start-materialized-view-refresh-task-run \
    --catalog-id <ACCOUNT_ID>:s3tablescatalog/<CATALOG_NAME> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

Untuk Katalog Root:

```
aws glue start-materialized-view-refresh-task-run \
    --catalog-id <ACCOUNT_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

### Memeriksa status penyegaran
<a name="materialized-views-checking-refresh-status"></a>

Dapatkan status pekerjaan penyegaran tertentu:

```
aws glue get-materialized-view-refresh-task-run \
    --catalog-id <CATALOG_ID> \
    --materialized-view-refresh-task-run-id <TASK_RUN_ID>
```

### Daftar riwayat penyegaran
<a name="materialized-views-listing-refresh-history"></a>

Lihat semua pekerjaan penyegaran untuk tampilan terwujud:

```
aws glue list-materialized-view-refresh-task-runs \
    --catalog-id <CATALOG_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

**catatan**  
Gunakan `<ACCOUNT_ID>:s3tablescatalog/<CATALOG_NAME>` untuk Tabel S3 atau `<ACCOUNT_ID>` untuk katalog root.

### Menghentikan penyegaran yang sedang berjalan
<a name="materialized-views-stopping-refresh"></a>

Membatalkan pekerjaan penyegaran yang sedang berlangsung:

```
aws glue stop-materialized-view-refresh-task-run \
    --catalog-id <CATALOG_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

## Pemantauan dan pemecahan masalah
<a name="materialized-views-monitoring-troubleshooting"></a>

Ada tiga cara untuk memantau pekerjaan penyegaran tampilan yang terwujud:

### CloudWatch Metrik
<a name="materialized-views-cloudwatch-metrics"></a>

Lihat metrik agregat untuk semua pekerjaan penyegaran tampilan terwujud Anda di: CloudWatch

Metrik yang Tersedia:
+ AWS/Lem namespace dengan dimensi:
  + CatalogId: Pengenal katalog Anda
  + DatabaseName: Database yang berisi tampilan terwujud
  + TableName: Nama tampilan terwujud
  + TaskType: Setel ke "MaterializedViewRefresh”

Melihat di Konsol:

1. Arahkan ke CloudWatch Konsol → Metrik

1.  AWS Pilih/Lem namespace

1. Filter berdasarkan dimensi: CatalogId, DatabaseName, TableName, TaskType

1. Lihat metrik untuk keberhasilan, kegagalan, dan durasi pekerjaan

Contoh Kueri CloudWatch Metrik:

```
{AWS/Glue,CatalogId,DatabaseName,TableName,TaskType} MaterializedViewRefresh
```

Menggunakan AWS CLI:

```
aws cloudwatch get-metric-statistics \
    --namespace AWS/Glue \
    --metric-name <MetricName> \
    --dimensions Name=CatalogId,Value=<CATALOG_ID> \
                 Name=DatabaseName,Value=<DATABASE_NAME> \
                 Name=TableName,Value=<TABLE_NAME> \
                 Name=TaskType,Value=MaterializedViewRefresh \
    --start-time <START_TIME> \
    --end-time <END_TIME> \
    --period 3600 \
    --statistics Sum \
    --region <REGION>
```

### CloudWatch Log
<a name="materialized-views-cloudwatch-logs"></a>

Lihat log eksekusi terperinci untuk menjalankan tugas penyegaran individu:

Grup Log: `/aws-glue/materialized-views/<task_run_id>`

Dimana `<task_run_id>` adalah UUID (misalnya, abc12345-def6-7890-ghij-klmnopqrstuv).

Melihat Log:

```
# List log streams for a task run
aws logs describe-log-streams \
    --log-group-name /aws-glue/materialized-views/<TASK_RUN_ID> \
    --region <REGION>

# Get log events
aws logs get-log-events \
    --log-group-name /aws-glue/materialized-views/<TASK_RUN_ID> \
    --log-stream-name <LOG_STREAM_NAME> \
    --region <REGION>
```

Di CloudWatch Konsol:

1. Arahkan ke CloudWatch → Grup log

1. Cari /aws-glue/materialized-views/

1. Pilih grup log dengan ID task run

1. Lihat log eksekusi terperinci, kesalahan, dan output pekerjaan Spark

### Notifikasi
<a name="materialized-views-eventbridge"></a>

Berlangganan acara untuk pemberitahuan waktu nyata tentang menyegarkan perubahan status pekerjaan:

Jenis Acara yang Tersedia:
+ Glue Materialized View Refresh Task Dimulai
+ Glue Materialized View Refresh Task Berhasil
+ Gagal Glue Materialized View Refresh Task
+ Glue Materialized View Kegagalan Pemanggilan Penyegaran Otomatis

Membuat Aturan:

```
aws events put-rule \
    --name materialized-view-refresh-notifications \
    --event-pattern '{
        "source": ["aws.glue"],
        "detail-type": [
            "Glue Materialized View Refresh Task Started",
            "Glue Materialized View Refresh Task Succeeded",
            "Glue Materialized View Refresh Task Failed",
            "Glue Materialized View Auto-Refresh Invocation Failure"
        ]
    }' \
    --region <REGION>
```

Menambahkan Target (misalnya, Topik SNS):

```
aws events put-targets \
    --rule materialized-view-refresh-notifications \
    --targets "Id"="1","Arn"="arn:aws:sns:<REGION>:<ACCOUNT_ID>:<TOPIC_NAME>" \
    --region <REGION>
```

### Melihat status penyegaran
<a name="materialized-views-refresh-status"></a>

Periksa status pekerjaan penyegaran tampilan terwujud Anda menggunakan AWS Glue API:

```
aws glue get-materialized-view-refresh-task-run \
    --catalog-id <CATALOG_ID> \
    --materialized-view-refresh-task-run-id <TASK_RUN_ID> \
    --region <REGION>
```

Atau daftar semua proses penyegaran terbaru:

```
aws glue list-materialized-view-refresh-task-runs \
    --catalog-id <CATALOG_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME> \
    --region <REGION>
```

Ini menunjukkan:
+ Waktu penyegaran terakhir
+ Segarkan status (BERHASIL, GAGAL, BERJALAN, BERHENTI)
+ ID Jalankan tugas
+ Pesan galat (jika gagal)

Status Penyegaran Umum:
+ RUNNING: Segarkan pekerjaan saat ini sedang dijalankan
+ BERHASIL: Refresh berhasil diselesaikan
+ GAGAL: Penyegaran mengalami kesalahan
+ STOPTED: Refresh dibatalkan secara manual

Pemecahan Masalah Gagal Menyegarkan:

Jika penyegaran gagal, periksa:

1. Izin IAM: Pastikan peran definer memiliki akses ke semua tabel dasar dan lokasi tampilan yang terwujud

1. Ketersediaan Tabel Dasar: Verifikasi semua tabel yang direferensikan ada dan dapat diakses

1. Validitas Kueri: Konfirmasikan kueri SQL valid untuk dialek Spark SQL

1. Batas Sumber Daya: Periksa apakah Anda telah mencapai batas penyegaran bersamaan untuk akun Anda

Gunakan GetMaterializedViewRefreshTaskRun API untuk mengambil pesan kesalahan terperinci.

## Pertimbangan dan batasan
<a name="materialized-views-considerations-limitations"></a>
+ Tampilan terwujud hanya dapat mereferensikan tabel Apache Iceberg yang terdaftar di Katalog AWS Glue Data sebagai tabel dasar.
+ Pembuatan tampilan dan penulisan ulang kueri otomatis hanya tersedia dari mesin Spark di Apache Spark versi 3.5.6 ke atas di Amazon Athena, Amazon EMR, dan (Versi 5.1). AWS Glue 
+ Tampilan terwujud pada akhirnya konsisten dengan tabel dasar. Selama jendela penyegaran, kueri yang secara langsung mengakses tampilan terwujud dapat mengembalikan data yang sudah ketinggalan zaman. Untuk akses langsung ke data saat ini, jalankan penyegaran manual.
+ Interval penyegaran otomatis minimum adalah satu jam. Untuk kasus penggunaan yang membutuhkan pembaruan yang lebih sering, jalankan penyegaran manual secara terprogram menggunakan perintah. `REFRESH MATERIALIZED VIEW`
+ Penulisan ulang kueri memprioritaskan kebenaran daripada kinerja. Jika tampilan terwujud basi atau tidak dapat memenuhi persyaratan kueri secara akurat, mesin Spark mengeksekusi kueri asli terhadap tabel dasar.