Lewati ke isi
Profil penulisSeri Buku GIS Kehutanan dan Pertanian/ B2
Tampilkan bagian untuk:

BAB 6: Sambungkan Dua Tabel: Join

#Studi kasus: "Datanya ada di dua berkas"

Regu lapangan mengirim Inventarisasi.csv: jumlah pohon dan volume kayu tiap petak. Isinya tidak ada di tabel petak, sehingga belum bisa muncul di peta. Kepala Seksi bertanya, "Petak mana yang paling padat kayunya?" Anda perlu menyambungkan dua tabel itu supaya setiap petak membawa angka inventarisasinya.

#Konsep: join dalam tiga kalimat

Join adalah menyambung dua tabel lewat satu kolom yang isinya sama, seperti mencocokkan nomor anggota di dua daftar berbeda untuk menyatukan data orang yang sama. Kolom pencocok itu disebut kunci. Tiap baris di tabel petak dicari pasangannya di tabel inventarisasi, lalu kolom tambahan disalin ke baris petak itu.

Istilah baru bab ini:

  • Join: menyambung tabel lewat kolom kunci.
  • Kunci (key): kolom yang isinya dipakai untuk mencocokkan.
  • Tabel tanpa bentuk: tabel yang hanya berisi angka dan teks, tanpa gambar di peta (misalnya CSV).
  • Join virtual: sambungan sementara yang berlaku di proyek, tanpa membuat berkas baru.
  • Tanpa pasangan: baris yang kuncinya tidak ditemukan di tabel satunya.
Ilustrasi 6.1: Join dua tabel dengan kunci KODE_PETAK
Skema: tabel petak dan tabel inventarisasi disambung lewat kode petak, dengan P-09 dan P-12 tanpa pasangan

#Kunci harus persis sama

Komputer mencocokkan kunci huruf demi huruf. P-09 berbeda dengan p-09, dan P-09 (dengan spasi di ujung) berbeda dengan P-09. Hampir semua masalah join berasal dari kunci yang hampir sama tetapi tidak persis sama.

#Angka dari data latihan

Inventarisasi.csv memiliki 16 baris. Penulis sengaja menyisipkan tiga keanehan: petak P-12 tidak ada, kode P-09 tertulis huruf kecil (p-09), dan ada baris P-17 yang tidak punya petak. Hasil di QGIS 4.0.2:

TahapPetak cocokPetak tanpa pasanganBaris tabel yang tidak punya petak
Join pertama (kunci apa adanya)14P-09, P-12p-09, P-17
Setelah kunci diperbaiki15P-12P-17

P-12 memang tidak punya data inventarisasi, dan itu bukan galat join. Setelah perbaikan, hasil hitung dari 15 petak berisi data:

UkuranNilai
Total pohon13.262 pohon
Total volume2.761,7 m³
Volume per hektare tertinggiP-13: 295,4 m³/ha
Rekap pohon KPH Alpha / Beta / Gamma3.595 / 3.475 / 6.192 pohon (4, 4, dan 7 petak berisi data)

Jadi jawaban untuk Kepala Seksi: petak paling padat kayunya adalah P-13 (jati, tanam 2005), dengan 295,4 m³ per hektare.

#Bagian A: QGIS

#Bagian A: Join di QGIS

#Langkah 1: muat tabel CSV

  1. Buka Layer ► Add Layer ► Add Delimited Text Layer…. [CEK: letak menu]
  2. File name: pilih Inventarisasi.csv. File format: CSV (comma separated values).
  3. Pada Geometry definition, pilih No geometry (attribute only table).
  4. Pastikan opsi deteksi tipe kolom menyala. Lihat tabel contoh di bagian bawah jendela: JML_POHON harus bilangan bulat dan VOLUME_M3 desimal. Klik Add, lalu Close.
  5. Tabel muncul di panel Layers tanpa ikon peta. Buka tabelnya (F6): 16 baris.

#Langkah 2: join tetap (menghasilkan layer baru)

  1. Buka Processing ► Toolbox, cari Join attributes by field value, lalu klik dua kali.
  2. Isi:
  • Input layer: Petak (atau Petak_Hitung dari bab 5), Table field: KODE_PETAK
  • Input layer 2: Inventarisasi, Table field 2: KODE_PETAK
  • Layer 2 fields to copy: JML_POHON, VOLUME_M3, TGL_UKUR
  • Join type: ambil pasangan pertama saja (satu ke satu)
  • Discard records which could not be joined: kosongkan centang
  • Joined field prefix: inv_
  1. Klik Run. Layer Joined layer muncul. Alat ini juga menghasilkan layer opsional berisi petak yang tidak mendapat pasangan. [CEK: nama pilihan di jendela]
  2. Buka tabel layer hasil. Kolom inv_JML_POHON, inv_VOLUME_M3, dan inv_TGL_UKUR ada di ujung kanan.
  3. Periksa pasangan yang hilang: Select Features by Expression, ketik "inv_JML_POHON" IS NULL. Pada join pertama terpilih 2 petak: P-09 dan P-12.

Layer hasil masih berupa layer sementara. Simpan permanen lewat klik kanan ► Export ► Save Features As… [CEK: letak menu].

#Langkah 3: perbaiki kunci

P-09 gagal karena kuncinya p-09. Ada dua cara.

Cara A (paling sederhana): buka Inventarisasi.csv di Notepad atau lembar hitung, ubah p-09 menjadi P-09, simpan, lalu ulangi join.

Cara B (tanpa menyentuh berkas): buat kolom kunci bersih lewat Processing.

  1. Cari alat Field calculator di Toolbox (bukan yang di toolbar).
  2. Input layer: Inventarisasi. Field name: KUNCI. Result field type: Text (string), length 10.
  3. Formula:
ekspresi
upper(trim("KODE_PETAK"))
  1. Run. Hasilnya tabel sementara dengan kolom KUNCI berisi P-09. trim membuang spasi di ujung, upper mengubah ke huruf besar.
  2. Ulangi join, tetapi untuk Table field 2 pilih KUNCI.
  3. Sekarang 15 petak cocok. Hanya P-12 yang kosong, dan itu memang tidak ada datanya.

#Langkah 4: hitung dari hasil join

Pada layer hasil join, jalankan Field Calculator (bab 5) dua kali:

Nama fieldTipeEkspresi
POHON_HADecimal, presisi 1round("inv_JML_POHON" / "LUAS_HA", 1)
VOL_HADecimal, presisi 1round("inv_VOLUME_M3" / "LUAS_HA", 1)

Urutkan VOL_HA dari besar ke kecil. Baris teratas: P-13 dengan 295,4. Baris P-12 kosong, jadi hitungannya ikut kosong.

#Join virtual (tanpa berkas baru)

Cara lain adalah join yang hidup di proyek saja.

  1. Klik dua kali layer Petak untuk membuka Properties, lalu tab Joins.
  2. Klik tombol + (Add new join).
  3. Isi Join layer: Inventarisasi, Join field: KODE_PETAK, Target field: KODE_PETAK.
  4. Pilih kolom mana yang disambung. Centang Custom field name prefix dan isi inv_. Centang Cache join layer in virtual memory bila ingin lebih cepat.
  5. Klik OK. Kolom baru muncul di tabel Petak, tetapi tidak tertulis ke berkas Petak_KPH.gpkg.

Pada data latihan, join virtual dengan kunci apa adanya mengisi 14 petak, sama seperti join tetap pertama.

#Pilihan: join lewat Python

Skrip 6.1 (skrip/b2_06_join.py) menjalankan semua langkah di atas. Jalankan Skrip 5.1 lebih dulu.

python
g = processing.run("native:joinattributestable", {
    "INPUT": petak, "FIELD": "KODE_PETAK", "INPUT_2": inv, "FIELD_2": "KODE_PETAK",
    "FIELDS_TO_COPY": ["JML_POHON", "VOLUME_M3", "TGL_UKUR"], "METHOD": 1,
    "DISCARD_NONMATCHING": False, "PREFIX": "inv_", "OUTPUT": "memory:", "NON_MATCHING": "memory:"})

Hasil uji: tipe kolom CSV terbaca text, integer, double, date, dan text. Join pertama 14 cocok (tanpa pasangan P-09 dan P-12). Setelah kunci diperbaiki, 15 cocok. Total pohon 13.262, total volume 2.761,7 m³. Join virtual mengisi 14 petak.

#Bagian B: ArcGIS Pro

#Bagian B: ArcGIS Pro

  1. Tambahkan Inventarisasi.csv ke peta, lalu klik kanan ► Open untuk melihat tabelnya. [CEK]
  2. Buka alat Add Join (Data Management Tools). Isi Input Table Petak, Input Join Field KODE_PETAK, Join Table Inventarisasi, dan Join Table Field KODE_PETAK.
  3. Opsi Keep All Target Features (di Pro disebut Keep all input records) menyala: semua petak tetap tampil walau tanpa pasangan. Bila dimatikan, hanya petak yang cocok tampil.
  4. Join dari Add Join bersifat sementara: tinggal di layer, bukan di data. Untuk menjadikannya permanen, pakai alat Join Field, atau ekspor hasilnya dengan Copy Features atau Export Features.
  5. Perhatikan: ArcGIS Pro mengenali huruf besar dan kecil pada kunci tergantung sumber datanya. Cocokkan huruf kuncinya lebih dulu. [CEK]

#Bagian C: ArcMap 10.8

#Bagian C: ArcMap 10.8

  1. Tambahkan Inventarisasi.csv. Klik kanan layer Petak ► Joins and Relates ► Join…. [CEK]
  2. Pilih Join attributes from a table. Isi field di layer KODE_PETAK, tabel yang disambung Inventarisasi, dan field kunci KODE_PETAK.
  3. Pilih Keep all records agar petak tanpa pasangan tetap tampil. [CEK]
  4. Join ini sementara. Untuk membuatnya permanen, ekspor layer lewat Data ► Export Data atau pakai alat Join Field. [CEK]
  5. Pada ArcMap, kolom hasil join diberi awalan nama tabel, misalnya Inventarisasi.JML_POHON. [CEK]

#Cek paham

  1. Mengapa p-09 tidak cocok dengan P-09?
  2. Apa artinya petak "tanpa pasangan", dan haruskah selalu dianggap galat?
  3. Apa beda join virtual dan join tetap?

Jawaban:

  1. Pencocokan kunci dilakukan huruf demi huruf, dan huruf kecil berbeda dari huruf besar.
  2. Artinya kuncinya tidak ditemukan di tabel satunya. Tidak selalu galat. P-12 memang belum punya data. Yang perlu diperiksa adalah penyebabnya: salah ketik atau memang kosong.
  3. Join virtual hidup di proyek dan tidak membuat berkas baru. Join tetap menghasilkan layer atau berkas baru yang membawa kolom hasil sambungan.

#Kesalahan umum

  • Kunci beda huruf atau berspasi. Petak tidak mendapat pasangan. Samakan dengan upper dan trim.
  • Tidak memeriksa yang tanpa pasangan. Hasil terlihat benar, padahal sebagian kosong. Hitung baris kosong dengan IS NULL.
  • Tipe kunci berbeda. Kunci angka di satu tabel dan teks di tabel lain tidak cocok. Samakan tipenya.
  • Mengira join virtual mengubah data. Berkas asli tetap utuh. Bila kolomnya perlu dibawa, ekspor hasilnya.
  • Awalan nama kolom hilang. Dua kolom bernama sama bertabrakan. Beri awalan, misalnya inv_.

#Ringkasan dan latihan

Ringkasan: join menyambung dua tabel lewat kunci yang persis sama. Periksa petak tanpa pasangan, perbaiki kunci bila perlu, lalu hitung dari hasil join. Join virtual cepat dan sementara, join tetap menghasilkan layer baru.

Latihan: dengan hasil join, buat kolom STATUS_DATA yang bernilai Lengkap bila inv_JML_POHON terisi dan Belum ada bila kosong. Berapa petak Belum ada? (Petunjuk: if("inv_JML_POHON" IS NULL, 'Belum ada', 'Lengkap'). Jawaban: 1 petak setelah kunci diperbaiki, yaitu P-12.)

#Tabel perbandingan: join

TugasQGISArcGIS ProArcMap 10.8
Memuat CSVAdd Delimited Text LayerAdd DataAdd Data
Join sementaraProperties ► JoinsAdd JoinJoins and Relates ► Join
Join permanenAlat Join attributes by field valueJoin Field [CEK]Ekspor layer atau Join Field [CEK]
Petak tanpa pasanganTersisa kosong (NULL); bisa dibuangKeep all input recordsKeep all records [CEK]
Awalan kolomCustom field name prefixOtomatis oleh alat [CEK]Nama tabel di depan [CEK]