

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

# Bekerja dengan tampilan Glue Data Catalog
<a name="SECTION-jobs-glue-data-catalog-views"></a>

Anda dapat membuat dan mengelola tampilan di Katalog Data AWS Glue untuk digunakan dengan EMR Tanpa Server. Ini umumnya dikenal sebagai tampilan AWS Glue Data Catalog. Tampilan ini berguna karena mendukung beberapa mesin kueri SQL, sehingga Anda dapat mengakses tampilan yang sama di berbagai AWS layanan, seperti EMR Tanpa Server,, Amazon Athena dan Amazon Redshift.

Dengan membuat tampilan di Katalog Data, gunakan hibah sumber daya dan kontrol akses berbasis tag AWS Lake Formation untuk memberikan akses ke sana. Dengan menggunakan metode kontrol akses ini, Anda tidak perlu mengonfigurasi akses tambahan ke tabel yang Anda referensikan saat membuat tampilan. Metode pemberian izin ini disebut semantik definer, dan pandangan ini disebut tampilan definer. Untuk informasi selengkapnya tentang kontrol akses di Lake Formation, lihat [Memberikan dan mencabut izin pada sumber daya Katalog Data di Panduan Pengembang](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html) AWS Lake Formation.

Tampilan Katalog Data berguna untuk kasus penggunaan berikut:
+ **Kontrol akses granular** — Anda dapat membuat tampilan yang membatasi akses data berdasarkan izin yang dibutuhkan pengguna. Misalnya, Anda dapat menggunakan tampilan di Katalog Data untuk mencegah karyawan yang tidak bekerja di departemen SDM melihat informasi identitas pribadi (PII).
+ **Definisi tampilan lengkap** — Dengan menerapkan filter pada tampilan Anda di Katalog Data, Anda memastikan bahwa catatan data yang tersedia dalam tampilan di Katalog Data selalu lengkap.
+ **Keamanan yang ditingkatkan** — Definisi kueri yang digunakan untuk membuat tampilan harus lengkap. Manfaat ini berarti bahwa tampilan dalam Katalog Data kurang rentan terhadap perintah SQL dari aktor jahat.
+ **Berbagi data sederhana** — Bagikan data dengan AWS akun lain tanpa memindahkan data. Untuk informasi lebih lanjut, lihat [berbagi data lintas akun di Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-permissions.html).

## Membuat tampilan Katalog Data
<a name="SECTION-jobs-glue-data-catalog-views-create"></a>

Ada berbagai cara untuk membuat tampilan Katalog Data. Ini termasuk menggunakan AWS CLI atau Spark SQL. Beberapa contoh mengikuti.

------
#### [ Using SQL ]

Berikut ini menunjukkan sintaks untuk membuat tampilan Data Catalog. Perhatikan jenis `MULTI DIALECT` tampilan. Ini membedakan tampilan Katalog Data dari tampilan lain. `SECURITY`Predikat ditentukan sebagai`DEFINER`. Ini menunjukkan tampilan Katalog Data dengan `DEFINER` semantik.

```
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW [IF NOT EXISTS] view_name
[(column_name [COMMENT column_comment], ...) ]
[ COMMENT view_comment ]
[TBLPROPERTIES (property_name = property_value, ... )]
SECURITY DEFINER
AS query;
```

Berikut ini adalah contoh `CREATE` pernyataan, mengikuti sintaks:

```
CREATE PROTECTED MULTI DIALECT VIEW catalog_view
SECURITY DEFINER
AS
SELECT order_date, sum(totalprice) AS price
FROM source_table
GROUP BY order_date
```

Anda juga dapat membuat tampilan dalam mode dry-run, menggunakan SQL, untuk menguji pembuatan tampilan, tanpa benar-benar membuat sumber daya. Menggunakan opsi ini menghasilkan “dry run” yang memvalidasi input dan, jika validasi berhasil, mengembalikan JSON dari objek tabel AWS Glue yang akan mewakili tampilan. Dalam hal ini, Tampilan sebenarnya tidak dibuat.

```
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW view_name
SECURITY DEFINER 
[ SHOW VIEW JSON ]
AS view-sql
```

------
#### [ Using the AWS CLI ]

**catatan**  
Saat Anda menggunakan perintah CLI, SQL yang digunakan untuk membuat tampilan tidak diurai. Hal ini dapat mengakibatkan kasus di mana tampilan dibuat, tetapi kueri tidak berhasil. Pastikan untuk menguji sintaks SQL Anda sebelum membuat tampilan.

Anda menggunakan perintah CLI berikut untuk membuat tampilan:

```
aws glue create-table --cli-input-json '{
  "DatabaseName": "database",
  "TableInput": {
    "Name": "view",
    "StorageDescriptor": {
      "Columns": [
        {
          "Name": "col1",
          "Type": "data-type"
        },
        ...
        {
          "Name": "col_n",
          "Type": "data-type"
        }
      ],
      "SerdeInfo": {}
    },
    "ViewDefinition": {
      "SubObjects": [
        "arn:aws:glue:aws-region:aws-account-id:table/database/referenced-table1",
        ...
        "arn:aws:glue:aws-region:aws-account-id:table/database/referenced-tableN",
       ],
      "IsProtected": true,
      "Representations": [
        {
          "Dialect": "SPARK",
          "DialectVersion": "1.0",
          "ViewOriginalText": "Spark-SQL",
          "ViewExpandedText": "Spark-SQL"
        }
      ]
    }
  }
}'
```

------

## Operasi tampilan yang didukung
<a name="SECTION-jobs-glue-data-catalog-views-supported-operations"></a>

Fragmen perintah berikut menunjukkan kepada Anda berbagai cara untuk bekerja dengan tampilan Katalog Data:
+ **CREATE VIEW**

  Membuat tampilan data-katalog. Berikut ini adalah contoh yang menunjukkan pembuatan tampilan dari tabel yang ada:

  ```
  CREATE PROTECTED MULTI DIALECT VIEW catalog_view 
  SECURITY DEFINER AS SELECT * FROM my_catalog.my_database.source_table
  ```
+ **UBAH TAMPILAN**

  Sintaks yang tersedia:
  + `ALTER VIEW view_name [FORCE] ADD DIALECT AS query`
  + `ALTER VIEW view_name [FORCE] UPDATE DIALECT AS query`
  + `ALTER VIEW view_name DROP DIALECT`

  Anda dapat menggunakan `FORCE ADD DIALECT` opsi untuk memaksa memperbarui skema dan sub objek sesuai dialek mesin baru. Perhatikan bahwa melakukan hal ini dapat mengakibatkan kesalahan kueri jika Anda juga tidak menggunakannya `FORCE` untuk memperbarui dialek mesin lainnya. Berikut ini menunjukkan sampel:

  ```
  ALTER VIEW catalog_view FORCE ADD DIALECT
  AS
  SELECT order_date, sum(totalprice) AS price
  FROM source_table
  GROUP BY orderdate;
  ```

  Berikut ini menunjukkan cara mengubah tampilan untuk memperbarui dialek:

  ```
  ALTER VIEW catalog_view UPDATE DIALECT AS 
  SELECT count(*) FROM my_catalog.my_database.source_table;
  ```
+ **DESKRIPSIKAN TAMPILAN**

  Sintaks yang tersedia untuk menggambarkan tampilan:
  + `SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name]`— Jika pengguna memiliki izin AWS Glue dan Lake Formation yang diperlukan untuk menggambarkan tampilan, mereka dapat membuat daftar kolom. Berikut ini menunjukkan beberapa contoh perintah untuk menampilkan kolom:

    ```
    SHOW COLUMNS FROM my_database.source_table;    
    SHOW COLUMNS IN my_database.source_table;
    ```
  + `DESCRIBE view_name`— Jika pengguna memiliki izin AWS Glue dan Lake Formation yang diperlukan untuk mendeskripsikan tampilan, mereka dapat mencantumkan kolom dalam tampilan bersama dengan metadatanya.
+ **TAMPILAN DROP**

  Sintaks yang tersedia:
  + `DROP VIEW [ IF EXISTS ] view_name`

    Contoh berikut menunjukkan `DROP` pernyataan yang menguji apakah tampilan ada sebelum menjatuhkannya:

    ```
    DROP VIEW IF EXISTS catalog_view;
    ```
+ **TAMPILKAN TAMPILAN BUAT**
  + `SHOW CREATE VIEW view_name`- Menunjukkan pernyataan SQL yang menciptakan tampilan yang ditentukan. Berikut ini adalah contoh yang menunjukkan pembuatan tampilan data-katalog:

    ```
    SHOW CREATE TABLE my_database.catalog_view;
    CREATE PROTECTED MULTI DIALECT VIEW my_catalog.my_database.catalog_view (
      net_profit,
      customer_id,
      item_id,
      sold_date)
    TBLPROPERTIES (
      'transient_lastDdlTime' = '1736267222')
    SECURITY DEFINER AS SELECT * FROM
    my_database.store_sales_partitioned_lf WHERE customer_id IN (SELECT customer_id from source_table limit 10)
    ```
+ **TAMPILKAN TAMPILAN**

  Daftar semua tampilan dalam katalog seperti tampilan biasa, tampilan multi-dialek (MDV), dan MDV tanpa dialek Spark. Sintaks yang tersedia adalah sebagai berikut:
  + `SHOW VIEWS [{ FROM | IN } database_name] [LIKE regex_pattern]`:

    Berikut ini menunjukkan perintah sampel untuk menampilkan tampilan:

    ```
    SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';
    ```

Untuk informasi selengkapnya tentang membuat dan mengonfigurasi tampilan data-katalog, lihat tampilan [Katalog Data AWS Glue Bangunan di Panduan Pengembang](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html) AWS Lake Formation .

## Menanyakan tampilan Katalog Data
<a name="SECTION-jobs-glue-data-catalog-views-querying"></a>

 Setelah membuat tampilan Katalog Data, Anda dapat melakukan kueri menggunakan pekerjaan Amazon EMR Serverless Spark yang mengaktifkan kontrol akses berbutir halus. AWS Lake Formation Peran runtime pekerjaan harus memiliki `SELECT` izin Lake Formation pada tampilan Katalog Data. Anda tidak perlu memberikan akses ke tabel dasar yang direferensikan dalam tampilan. 

Setelah semuanya disiapkan, Anda dapat menanyakan tampilan Anda. Misalnya, setelah membuat aplikasi EMR Tanpa Server di EMR Studio, jalankan kueri berikut untuk mengakses tampilan.

```
SELECT * from my_database.catalog_view LIMIT 10;
```

Fungsi yang bermanfaat adalah`invoker_principal`. Ia mengembalikan pengenal unik dari peran runtime pekerjaan EMRS. Ini dapat digunakan untuk mengontrol output tampilan, berdasarkan prinsip pemanggilan. Anda dapat menggunakan ini untuk menambahkan kondisi dalam tampilan yang menyempurnakan hasil kueri, berdasarkan peran pemanggilan. Peran runtime pekerjaan harus memiliki izin untuk tindakan `LakeFormation:GetDataLakePrincipal` IAM untuk menggunakan fungsi ini.

```
select invoker_principal();
```

Anda dapat menambahkan fungsi ini ke `WHERE` klausa, misalnya, untuk memperbaiki hasil kueri.

## Pertimbangan dan batasan
<a name="SECTION-jobs-glue-data-catalog-views-considerations"></a>

Saat Anda membuat tampilan Katalog Data, berikut ini berlaku:
+ Anda hanya dapat membuat tampilan Katalog Data dengan Amazon EMR 7.6 ke atas.
+ Penentu tampilan Katalog Data harus memiliki `SELECT` akses ke tabel dasar dasar yang diakses oleh tampilan. Membuat tampilan Katalog Data gagal jika tabel dasar tertentu memiliki filter Lake Formation yang dikenakan pada peran definer.
+ Tabel dasar tidak boleh memiliki izin `IAMAllowedPrincipals` data lake di Lake Formation. Jika ada, kesalahan *tampilan Multi Dialek mungkin hanya referensi tabel tanpa izin IAMAllowed Prinsipal* terjadi.
+ Lokasi Amazon S3 tabel harus terdaftar sebagai lokasi danau data Lake Formation. Jika tabel tidak terdaftar, kesalahan *tampilan Multi Dialek mungkin hanya referensi tabel terkelola Lake Formation* terjadi. Untuk informasi tentang cara mendaftarkan lokasi Amazon S3 di Lake Formation, lihat [Mendaftarkan lokasi Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) di AWS Lake Formation Panduan Pengembang.
+ Anda hanya dapat membuat tampilan Katalog `PROTECTED` Data. `UNPROTECTED`tampilan tidak didukung.
+ Anda tidak dapat mereferensikan tabel di AWS akun lain dalam definisi tampilan Katalog Data. Anda juga tidak dapat mereferensikan tabel di akun yang sama yang berada di wilayah terpisah.
+ Untuk berbagi data di seluruh akun atau wilayah, seluruh tampilan harus dibagikan lintas akun dan lintas wilayah, menggunakan tautan sumber daya Lake Formation.
+ Fungsi yang ditentukan pengguna (UDFs) tidak didukung.
+ Anda dapat menggunakan tampilan berdasarkan tabel Iceberg. Format meja terbuka Apache Hudi dan Delta Lake juga didukung.
+ Anda tidak dapat mereferensikan tampilan lain dalam tampilan Katalog Data.
+ Skema tampilan AWS Glue Data Catalog selalu disimpan menggunakan huruf kecil. Misalnya, jika Anda menggunakan pernyataan DDL untuk membuat tampilan Katalog Data Glue dengan kolom bernama`Castle`, kolom yang dibuat dalam Katalog Data Glue akan dibuat huruf kecil, untuk. `castle` Jika Anda kemudian menentukan nama kolom dalam kueri DHTML sebagai `Castle` atau`CASTLE`, EMR Spark akan membuat nama huruf kecil bagi Anda untuk menjalankan kueri. Tetapi judul kolom ditampilkan menggunakan casing yang Anda tentukan dalam kueri. 

  Jika Anda ingin kueri gagal dalam kasus di mana nama kolom yang ditentukan dalam kueri DMLtidak cocok dengan nama kolom di Katalog Data Glue, atur`spark.sql.caseSensitive=true`.