View a markdown version of this page

Skema unnesting - AWS Glue

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

Skema unnesting

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

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

catatan

Unnesting penuh dapat menyebabkan tabel yang sangat lebar dengan banyak kolom jika data DynamoDB Anda memiliki struktur variabel atau sangat bersarang.

contoh 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

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

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
{ "col_2": { "M": { "col_3": { "M": { "id": { "S": "value_3" } } }, "col_4": { "BOOL": true } } } }

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

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
{ "col_3": { "id": "value_3" }, "col_4": true }

Kueri akan disederhanakan untuk tingkat pertama:

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

Contoh LENGKAP

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;