KV to Table mengonversi data berformat key-value (KV) yang sparse menjadi kolom tabular reguler, dengan menggunakan setiap kunci sebagai nama kolom dan setiap nilai sebagai nilai sel yang sesuai. Hasilnya, data fitur berkode KV dapat langsung digunakan untuk pelatihan model dan analisis lanjutan.
Cara kerja
Diberikan satu kolom KV di mana setiap baris berisi pasangan kunci:nilai yang dipisahkan koma:
Input — satu baris per sampel, satu kolom KV:
| kv |
|---|
1:1,2:2,3:-3.3 |
1:10,2:20,3:-33.3 |
Output — satu kolom numerik per kunci:
| kv_1 | kv_2 | kv_3 |
|---|---|---|
| 1.0 | 2.0 | -3.3 |
| 10.0 | 20.0 | -33.3 |
Komponen ini juga menghasilkan tabel key_map yang mencatat pemetaan antara nama kolom dan indeks kunci:
| col_name | col_index | col_type |
|---|---|---|
| kv_1 | 1 | double |
| kv_2 | 2 | double |
| kv_3 | 3 | double |
Kolom hasil konversi muncul sebelum kolom tambahan apa pun dalam output.
Konsep utama
Format KV
Setiap nilai dalam kolom KV harus mengikuti format kunci:nilai,kunci:nilai,... dengan ketentuan berikut:
Kunci adalah indeks nama kolom (bilangan bulat).
Nilai harus bertipe BIGINT atau DOUBLE. Hanya kolom dengan tipe data numerik yang dapat dikonversi.
Jika suatu baris berisi kunci duplikat, komponen akan menjumlahkan nilainya.
Tabel key_map
Tabel key_map mencatat pemetaan nama kolom ke indeks kunci serta informasi tipe data. Skema tabel ini terdiri dari tiga kolom STRING:
| Kolom | Deskripsi |
|---|---|
col_name | Nama kolom output |
col_index | Indeks kunci |
col_datatype | Tipe data. Nilai default adalah DOUBLE jika tidak ditentukan |
Anda dapat mengimpor tabel key_map kustom untuk mengontrol kunci mana yang dikonversi dan tipe data apa yang digunakan oleh kolom output. Saat tabel key_map diimpor, hanya kunci yang ada di kedua tempat—tabel key_map dan kolom KV input—yang dikonversi, dan tipe data kolom output akan mengikuti tabel tersebut.
Komponen selalu mengekspor tabel key_map, terlepas dari apakah tabel tersebut diimpor atau tidak.
Pemberian nama kolom output
Nama kolom output mengikuti pola {nama_kolom_kv}_{kunci} — misalnya, kolom KV bernama kv dengan kunci 1 menghasilkan kv_1.
Karakter berikut tidak didukung dalam nama kolom: %&()*+-./;<>=?
Nama yang lebih panjang dari 128 karakter akan dipotong menjadi 128 karakter.
Jika nama kolom tambahan sama dengan nama kolom hasil konversi, komponen akan melaporkan error.
Batasan
Maksimum kolom output: 1.200. Saat
top1200diatur ketrue, komponen hanya mengekspor 1.200 kolom pertama jika output melebihi batas ini. Jika diatur kefalse, komponen akan melaporkan error.Maksimum baris input: 100.000.000
Konfigurasi komponen
Metode 1: Machine Learning Designer
Konfigurasikan komponen KV to Table pada kanvas pipeline di Machine Learning Designer.
| Tab | Parameter | Deskripsi |
|---|---|---|
| Fields setting | KV Column | Nama kolom yang berisi data dalam format key-value |
| Fields setting | Appended Columns | Nama kolom yang diteruskan tanpa perubahan |
| Fields setting | KV Delimiter | Pembatas antara kunci dan nilai. Default: : |
| Fields setting | KV Pair Delimiter | Pembatas antara pasangan key-value. Default: , |
| Parameters setting | Reserve the First 1,200 Columns | Jika diaktifkan, hanya mengekspor 1.200 kolom pertama jika output melebihi batas. Jika dinonaktifkan, komponen akan melaporkan error |
| Tuning | Computing Cores | Jumlah core. Dialokasikan secara otomatis berdasarkan volume data input |
| Tuning | Memory Size per Core | Memori per core, dalam MB. Dialokasikan secara otomatis berdasarkan volume data input |
Metode 2: Perintah PAI
Jalankan komponen ini dari komponen SQL Script menggunakan perintah PAI. Untuk informasi lebih lanjut, lihat SQL Script.
PAI -name KVToTable
-project algo_public
-DinputTableName=test
-DoutputTableName=test_out
-DoutputKeyMapTableName=test_keymap_out
-DkvColName=kv;| Parameter | Wajib | Default | Deskripsi |
|---|---|---|---|
inputTableName | Ya | — | Nama tabel input |
kvColName | Ya | — | Nama kolom KV |
outputTableName | Ya | — | Nama tabel output |
outputKeyMapTableName | Ya | — | Nama tabel key_map output |
inputKeyMapTableName | Tidak | — | Nama tabel key_map input untuk mengontrol pemetaan kunci ke kolom |
appendColName | Tidak | — | Nama kolom yang diteruskan tanpa perubahan |
inputTablePartitions | Tidak | Semua partisi | Partisi yang dibaca dari tabel input. Format: Partition_name=value. Untuk partisi multi-level: name1=value1/name2=value2. Pisahkan beberapa partisi dengan koma |
kvDelimiter | Tidak | : | Pembatas antara kunci dan nilai |
itemDelimiter | Tidak | , | Pembatas antara pasangan key-value |
top1200 | Tidak | true | Apakah hanya mengekspor 1.200 kolom pertama saat output melebihi batas. Atur ke false untuk melaporkan error |
lifecycle | Tidak | — | Siklus hidup tabel output |
coreNum | Tidak | Ditentukan sistem | Jumlah core. Harus berupa bilangan bulat positif |
memSizePerCore | Tidak | Ditentukan sistem | Memori per core, dalam MB. Rentang valid: (100, 65536) |
Contoh
Buat tabel input:
DROP TABLE IF EXISTS test; CREATE TABLE test AS SELECT * FROM ( SELECT '1:1,2:2,3:-3.3' AS kv UNION ALL SELECT '1:10,2:20,3:-33.3' AS kv ) tmp;Jalankan komponen KV to Table:
PAI -name KVToTable -project algo_public -DinputTableName=test -DoutputTableName=test_out -DoutputKeyMapTableName=test_keymap_out -DkvColName=kv;Periksa tabel output (
test_out):kv_1 kv_2 kv_3 1.0 2.0 -3.3 10.0 20.0 -33.3 Periksa tabel key_map (
test_keymap_out):col_name col_index col_type kv_1 1 double kv_2 2 double kv_3 3 double
FAQ
Kolom mana saja yang dikonversi saat saya menyediakan tabel key_map?
Hanya kolom yang kuncinya muncul di kedua tempat—tabel key_map dan kolom KV input—yang dikonversi.
Tipe data apa yang digunakan oleh kolom output saat saya menyediakan tabel key_map?
Kolom output menggunakan tipe data yang ditentukan dalam kolom col_datatype pada tabel key_map. Jika col_datatype tidak ditentukan, output akan menggunakan tipe default DOUBLE.
Mengapa terjadi konflik nama kolom?
Jika kolom tambahan memiliki nama yang sama dengan kolom kunci hasil konversi, komponen akan melaporkan error. Ganti nama salah satu kolom yang bentrok sebelum menjalankan komponen.
Tipe kolom apa saja yang dapat dikonversi?
Hanya kolom dengan tipe data numerik yang dapat dikonversi.
Apa yang terjadi jika nama kolom melebihi 128 karakter?
Hanya 128 karakter pertama yang dipertahankan.
Apa yang terjadi jika suatu baris berisi kunci duplikat?
Komponen akan menjumlahkan nilai dari kunci duplikat tersebut.