

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

# Skema unnesting
<a name="zero-etl-ddb-schema-unnesting"></a>

 Saat mengintegrasikan dengan layanan analitik melalui Zero-ETL, Anda dapat memilih bagaimana struktur bersarang direpresentasikan dalam tabel target. AWS Glue Zero-ETL menyediakan opsi unnesting skema untuk meratakan struktur data yang kompleks menjadi format yang lebih ramah analitik. 

## Opsi unnesting
<a name="unnesting-options"></a>

 Saat membuat integrasi nol-ETL dengan sumber, Anda dapat memilih dari opsi unnesting berikut. Opsi ini sesuai dengan nilai enumerasi tertentu yang akan Anda gunakan saat memanggil API. CreateIntegrationTableProperty Untuk semua opsi unnest, kami akan melintasi sebagian besar lapisan dalam dan memetakan tipe DDB untuk menargetkan tipe spark/iceberg primitif dengan upaya terbaik. Jenis pemetaan antara sumber DDB dan tabel target adalah sebagai berikut: 


| Tipe data sumber DDB | Jenis data tabel target | 
| --- | --- | 
| "S" | StringType | 
| "B" | BinaryType | 
| "N" | DoubleType | 
| "BOOL" | BooleanType | 
| "SS" | ArrayType(StringType) | 
| "NS" | ArrayType(DoubleType) | 
| "BS" | ArrayType(BinaryType) | 
| "L" | ArrayType(StringType) | 
| "NULL" | Abaikan | 
| "M" | StructType (ATAS/KATA BENDA) | 

Tidak ada unnesting - NO\_UNNEST  
 **Nilai API: `NO_UNNEST`**   
 Mempertahankan struktur bersarang asli item Amazon DynamoDB. Peta dan daftar disimpan sebagai kolom terstruktur dalam target.   
 Terbaik untuk: Melestarikan struktur yang tepat dari data Amazon DynamoDB Anda saat alat analisis Anda dapat bekerja dengan data bersarang. 

Tingkat atas - TOP\_LEVEL  
 **Nilai API: `TOP_LEVEL`**   
 Ratakan tingkat atas peta bersarang menjadi kolom individual. Struktur daftar tetap bersarang.   
 Mempertahankan struktur yang tepat dari data Amazon DynamoDB Anda saat alat analisis Anda dapat bekerja dengan data bersarang dengan semua informasi tipe DDB dihapus.   
 Terbaik untuk: Menyeimbangkan antara pelestarian struktur data dan kesederhanaan kueri saat item tabel Amazon DynamoDB Anda memiliki skema yang konsisten. 

Unnest semua tingkatan - PENUH (default)  
 **Nilai API: `FULL`**   
 Secara rekursif meratakan semua struktur bersarang (peta dan daftar) ke dalam kolom individual dengan notasi titik untuk penamaan.   
 Terbaik untuk: Memaksimalkan kesederhanaan kueri saat bekerja dengan struktur bersarang dan alat analitik yang lebih menyukai skema datar.   
 Unnesting penuh dapat menyebabkan tabel yang sangat lebar dengan banyak kolom jika data DynamoDB Anda memiliki struktur variabel atau sangat bersarang. 

**Example Menggunakan opsi unnesting di API**  
 Saat mengonfigurasi skema unnesting melalui CreateIntegrationTableProperty API, tentukan opsi unnesting di parameter: UnnestSpec   

```
aws glue create-integration-table-property 
  --resource-arn "arn:aws:glue:us-east-1:123456789012:database/my_db" 
  --table-name "my-table" 
  --cli-input-json '{
      "TargetTableConfig": {
          "UnnestSpec": "FULL",
          "TargetTableName": "my-target-table",
      }
  }'
```

## Contoh yang tidak bersarang
<a name="unnesting-examples"></a>

 Pertimbangkan item DynamoDB dengan struktur berikut: 

```
// Input DynamoDB Record
{
  "Item": {
    "col_1": {
      "S": "value_1"
    },
    "col_2": {
      "M": {
        "col_3": {
          "M": {
            "id": {
              "S": "value_3"
            }
          }
        },
        "col_4": {
          "BOOL": true
        }
      }
    }
  }
}
```

### Contoh NO\_UNNEST
<a name="no-unnesting-example"></a>

 Dengan NO\_UNNEST, seluruh baris disimpan dalam satu kolom ditambah kunci utama. Informasi tipe DynamoDB dipertahankan. Ini menjaga kompatibilitas dengan pola kueri Redshift. 

Tabel Iceberg yang dihasilkan (dengan asumsi col\_1 adalah kunci utama):


| col\_1 (string) | nilai (struct) | 
| --- | --- | 
| nilai\_1 | <pre>{<br />  "col_2": {<br />    "M": {<br />      "col_3": {<br />        "M": {<br />          "id": {<br />            "S": "value_3"<br />          }<br />        }<br />      },<br />      "col_4": {<br />        "BOOL": true<br />      }<br />    }<br />  }<br />}</pre> | 

Kueri perlu menggunakan pola akses struct dan array:

```
SELECT 
  value.col_1,
  value.col_2.M.col_3.M.id.S,
  value.col_2.M.col_4.BOOL
FROM product_table;
```

### Contoh TOP\_LEVEL
<a name="unnest-one-level-example"></a>

 Dengan TOP\_LEVEL, hanya bidang tingkat atas yang tidak bersarang sambil menjaga bidang bersarang tetap utuh sebagai struct. Informasi tipe DynamoDB dihapus dan pengetikan dipertahankan. Mengkonversi ke tipe string ketika konflik skema terjadi. 

Tabel Glue yang dihasilkan setelah replikasi:


| col\_1 (string) | col\_2 (struct) | 
| --- | --- | 
| nilai\_1 | <pre>{<br />  "col_3": {<br />    "id": "value_3"<br />  },<br />  "col_4": true<br />}</pre> | 

Kueri akan disederhanakan untuk tingkat pertama:

```
SELECT 
  col_1, 
  col_2.col_3.id,
  col_2.col_4
FROM product_table;
```

### Contoh LENGKAP
<a name="unnest-all-levels-example"></a>

 Dengan FULL unnesting, bidang tingkat atas dan bidang bersarang struct/map diratakan. Notasi titik digunakan untuk bidang bersarang (misalnya, “col\_2.col\_3.id”). Elemen array tetap tidak bersarang. Setiap simpul daun menjadi kolom tingkat atas. 

Tabel Glue yang dihasilkan setelah replikasi:


| col\_1 (string) | col\_2.col\_3.id (string) | col\_2.col\_4 (boolean) | 
| --- | --- | --- | 
| nilai\_1 | nilai\_3 | BETUL | 

Kueri akan sepenuhnya diratakan:

```
SELECT 
  col_1, 
  "col_2.col_3.id",
  "col_2.col_4"
FROM product_table;
```