

 Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting [ blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/) yang diterbitkan pada 30 Juni 2025. 

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

# Menggunakan penyembunyian data dinamis dengan jalur tipe data SUPER
<a name="t_ddm-super"></a>

 Amazon Redshift mendukung melampirkan kebijakan penyembunyian data dinamis ke jalur kolom tipe SUPER. Untuk informasi selengkapnya tentang tipe data SUPER, lihat[Semi-structured data dalam Amazon Redshift](super-overview.md). 

Saat melampirkan kebijakan masking ke jalur kolom tipe SUPER, pertimbangkan hal berikut.
+ Saat melampirkan kebijakan masking ke jalur pada kolom, kolom tersebut harus didefinisikan sebagai tipe data SUPER. Anda hanya dapat menerapkan kebijakan masking ke * nilai * skalar di jalur SUPER. Anda tidak dapat menerapkan kebijakan masking ke struktur atau array yang kompleks. 
+ Anda dapat menerapkan kebijakan masking yang berbeda ke beberapa nilai skalar pada satu kolom SUPER, selama jalur SUPER tidak bertentangan. Misalnya, jalur SUPER `a.b` dan `a.b.c` konflik karena mereka berada di jalur yang sama, dengan `a.b` menjadi induk dari`a.b.c`. Jalur SUPER `a.b.c` dan `a.b.d` tidak bertentangan.
+ Amazon Redshift tidak dapat memeriksa apakah jalur yang dilampirkan kebijakan masking ada di data dan merupakan jenis yang diharapkan hingga kebijakan diterapkan pada runtime kueri pengguna. Misalnya, saat Anda melampirkan kebijakan masking yang menutupi nilai TEXT ke jalur SUPER yang berisi nilai INT, Amazon Redshift akan mencoba untuk menampilkan jenis nilai di jalur.

  Dalam situasi seperti itu, perilaku Amazon Redshift saat runtime bergantung pada pengaturan konfigurasi Anda untuk menanyakan objek SUPER. Secara default, Amazon Redshift dalam mode lax, dan akan menyelesaikan jalur yang hilang dan cast yang tidak valid seperti `NULL` untuk jalur SUPER yang diberikan. Untuk informasi selengkapnya tentang pengaturan SUPER-related konfigurasi, lihat[Konfigurasi SUPER](super-configurations.md).
+ SUPER adalah tipe tanpa skema, yang berarti Amazon Redshift tidak dapat mengkonfirmasi keberadaan nilai pada jalur SUPER tertentu. Jika Anda melampirkan kebijakan masking ke jalur SUPER yang tidak ada dan Amazon Redshift dalam mode lemah, Amazon Redshift akan menyelesaikan jalur ke nilai. `NULL` Sebaiknya pertimbangkan format objek SUPER yang diharapkan dan kemungkinan mereka memiliki atribut tak terduga saat melampirkan kebijakan masking ke jalur kolom SUPER. Jika menurut Anda mungkin ada skema tak terduga di kolom SUPER Anda, pertimbangkan untuk melampirkan kebijakan masking langsung ke kolom SUPER. Anda dapat menggunakan fungsi informasi tipe SUPER untuk memeriksa atribut dan tipe, dan menggunakan `OBJECT_TRANSFORM` untuk menutupi nilai. Untuk informasi selengkapnya tentang fungsi informasi tipe SUPER, lihat[Fungsi informasi tipe SUPER](c_Type_Info_Functions.md).

## Contoh
<a name="t_ddm-super-examples"></a>

**Melampirkan kebijakan masking ke jalur SUPER**  
Contoh berikut melampirkan beberapa kebijakan masking ke beberapa jalur tipe SUPER dalam satu kolom.

```
CREATE TABLE employees (
    col_person SUPER
);

INSERT INTO employees
VALUES
    (
        json_parse('
            {
                "name": {
                    "first": "John",
                    "last": "Doe"
                },
                "age": 25,
                "ssn": "111-22-3333",
                "company": "Company Inc."
            }
        ')
    ),
    (
        json_parse('
            {
                "name": {
                    "first": "Jane",
                    "last": "Appleseed"
                },
                "age": 34,
                "ssn": "444-55-7777",
                "company": "Organization Org."
            }
        ')
    )
;
GRANT ALL ON ALL TABLES IN SCHEMA "public" TO PUBLIC;

-- Create the masking policies.

-- This policy converts the given name to all uppercase letters.
CREATE MASKING POLICY mask_first_name
WITH(first_name TEXT)
USING ( UPPER(first_name) );

-- This policy replaces the given name with the fixed string 'XXXX'.
CREATE MASKING POLICY mask_last_name
WITH(last_name TEXT)
USING ( 'XXXX'::TEXT );

-- This policy rounds down the given age to the nearest 10.
CREATE MASKING POLICY mask_age
WITH(age INT)
USING ( (FLOOR(age::FLOAT / 10) * 10)::INT );

-- This policy converts the first five digits of the given SSN to 'XXX-XX'.
CREATE MASKING POLICY mask_ssn
WITH(ssn TEXT)
USING ( 'XXX-XX-'::TEXT || SUBSTRING(ssn::TEXT FROM 8 FOR 4) );

-- Attach the masking policies to the employees table.
ATTACH MASKING POLICY mask_first_name
ON employees(col_person.name.first)
TO PUBLIC;

ATTACH MASKING POLICY mask_last_name
ON employees(col_person.name.last)
TO PUBLIC;

ATTACH MASKING POLICY mask_age
ON employees(col_person.age)
TO PUBLIC;

ATTACH MASKING POLICY mask_ssn
ON employees(col_person.ssn)
TO PUBLIC;

-- Verify that your masking policies are attached.
SELECT
    policy_name,
    TABLE_NAME,
    priority,
    input_columns,
    output_columns
FROM
    svv_attached_masking_policy;

   policy_name   | table_name | priority |           input_columns           |          output_columns
-----------------+------------+----------+-----------------------------------+-----------------------------------
 mask_age        | employees  |        0 | ["col_person.\"age\""]            | ["col_person.\"age\""]
 mask_first_name | employees  |        0 | ["col_person.\"name\".\"first\""] | ["col_person.\"name\".\"first\""]
 mask_last_name  | employees  |        0 | ["col_person.\"name\".\"last\""]  | ["col_person.\"name\".\"last\""]
 mask_ssn        | employees  |        0 | ["col_person.\"ssn\""]            | ["col_person.\"ssn\""]
(4 rows)

-- Observe the masking policies taking effect.
SELECT col_person FROM employees ORDER BY col_person.age;

-- This result is formatted for ease of reading.
         col_person
--------------------------------
{
    "name": {
        "first": "JOHN",
        "last": "XXXX"
    },
    "age": 20,
    "ssn": "XXX-XX-3333",
    "company": "Company Inc."
}
{
    "name": {
        "first": "JANE",
        "last": "XXXX"
    },
    "age": 30,
    "ssn": "XXX-XX-7777",
    "company": "Organization Org."
}
```

Berikut ini adalah beberapa contoh lampiran kebijakan masking yang tidak valid ke jalur SUPER.

```
-- This attachment fails because there is already a policy
-- with equal priority attached to employees.name.last, which is
-- on the same SUPER path as employees.name.
ATTACH MASKING POLICY mask_ssn
ON employees(col_person.name)
TO PUBLIC;
ERROR:  DDM policy "mask_last_name" is already attached on relation "employees" column "col_person."name"."last"" with same priority
               
-- Create a masking policy that masks DATETIME objects.
CREATE MASKING POLICY mask_date
WITH(INPUT DATETIME)
USING ( INPUT );
               
-- This attachment fails because SUPER type columns can't contain DATETIME objects.
ATTACH MASKING POLICY mask_date
ON employees(col_person.company)
TO PUBLIC;
ERROR:  cannot attach masking policy for output of type "timestamp without time zone" to column "col_person."company"" of type "super
```

Berikut ini adalah contoh melampirkan kebijakan masking ke jalur SUPER yang tidak ada. Secara default, Amazon Redshift akan menyelesaikan jalur ke`NULL`.

```
ATTACH MASKING POLICY mask_first_name
ON employees(col_person.not_exists)
TO PUBLIC;

SELECT col_person FROM employees LIMIT 1;

-- This result is formatted for ease of reading.
         col_person
-----------------------------------
{
    "name": {
        "first": "JOHN",
        "last": "XXXX"
    },
    "age": 20,
    "ssn": "XXX-XX-3333",
    "company": "Company Inc.",
    "not_exists": null
}
```