Mengubah Folder Berisi File JSON Menjadi Tabel SQL
JSON bersifat bersarang dan SQL bersifat datar, jadi pertanyaan sebenarnya bukanlah apakah log Anda dapat dibaca, tetapi bentuk apa yang Anda dapatkan. Query Streams meratakan objek bersarang menjadi kolom biasa dengan kebijakan yang dapat Anda lihat dan ubah — kemudian Anda melakukan kueri folder tersebut dengan SQL.
“id”: 90124,
“situs”: { “wilayah”: “eu-barat” }
}}
Query Streams adalah platform integrasi basis data real-time yang aman yang mengubah folder berisi file JSON yang dipisahkan oleh baris baru menjadi tabel SQL langsung yang dapat Anda kueri dari Microsoft Excel, Google Sheets, Airtable, dan asisten AI Anda. Pelajari selengkapnya di QueryStreams.com dan Daftar gratis untuk melakukan query pada folder pertama Anda yang berisi file log JSON dalam hitungan menit.
Membaca JSON bukanlah bagian yang sulit. Setiap alat dapat membaca JSON. Bagian yang sulit adalah JSON berbentuk pohon dan tabel SQL berbentuk persegi panjang, jadi saat Anda ingin melakukan kueri file JSON dengan SQL — atau memasukkannya ke dalam spreadsheet — seseorang harus memutuskan bagaimana pohon tersebut menjadi kolom. Sebagian besar alat membuat keputusan itu secara diam-diam, dan Anda baru mengetahui pilihan mereka ketika ada angka yang hilang.
Itu Konektor Folder JSONL Hal ini memperjelas keputusan tersebut. Ia meratakan objek bersarang menjadi kolom biasa berdasarkan kebijakan yang tertulis dalam konektor, terlihat dalam definisi tabel, dan dapat disesuaikan dengan satu pengaturan. Folder yang sesuai adalah folder yang terisi dengan sendirinya: tangkapan webhook, dump API, log aplikasi, dan apa pun yang ditulis oleh antrean atau bus peristiwa satu per satu.
Apa sebenarnya yang dihasilkan dari satu record JSON?
Ini adalah hal paling berguna yang perlu diperhatikan, jadi berikut ini ditampilkan sebelum hal lainnya. Di sebelah kiri adalah satu baris dari file JSONL, dicetak rapi agar mudah dibaca. Di sebelah kanan adalah kolom-kolom yang Anda dapatkan darinya pada kedalaman perataan default.
{ "event_id": "evt_8812", "ts": 1787903642, "type": "order.paid", "actor": { "id": 4417, "role": "customer" }, "order": { "id": 90124, "total": 149.99, "site": { "region": "eu-west", "bay": { "aisle": "A7", "slot": 12 } } }, "tags": [ "priority", "gift" ] }
Ada tiga hal yang perlu diperhatikan. Nama kolom adalah jalur yang digabungkan dengan garis bawah, jadi... wilayah situs pesanan menjadi wilayah_situs_pesanan — sebuah nama yang dapat Anda ketik di spreadsheet tanpa perlu mengutipnya. The teluk Objek tersebut berada satu tingkat lebih dalam daripada yang diizinkan oleh kebijakan, sehingga tetap utuh sebagai kolom JSON dan tidak dihapus. Dan tag adalah sebuah array, yang tidak pernah diratakan pada kedalaman berapa pun.
Setiap kolom juga mempertahankan jalur titik aslinya di samping nama yang diratakan. Nama tersebut adalah yang Anda gunakan untuk menulis SQL; jalur titik tersebut adalah yang Anda tuju ketika Anda ingin mengganti nama kolom, mengetiknya ulang, atau mengecualikannya. Tidak ada yang ditebak tentang JSON pada saat kueri — seluruh pemetaan ditetapkan saat folder pertama kali terhubung.
wilayah situs pesanan adalah sebuah kolom — dua objek dibuka untuk mencapai nilai biasa — sementara order.site.bay akan membutuhkan yang ketiga dan disematkan sebagai JSON.
Memilih kedalaman perataan
Meratakan kedalaman Apakah pengaturan ini perlu dipikirkan sejenak sebelum Anda menyimpannya, karena pengaturan ini menentukan bentuk tabel, bukan cara tampilannya? Pengaturan defaultnya adalah... 2, lantainya adalah 1 dan langit-langitnya adalah 8Perataan tidak dapat dimatikan: 0 Permintaan tersebut ditolak saat Anda menyimpan, jadi itu adalah kesalahan dan bukan jalan pintas.
Satu level objek dibuka, dan itu adalah pengaturan terendah. Berguna ketika muatan datanya lebar dan Anda hanya membaca bagian atasnya, menyisakan sisanya sebagai satu kolom JSON untuk diakses.
Dua level objek dibuka. Cukup untuk bentuk amplop plus muatan yang hampir selalu digunakan oleh setiap log peristiwa, tanpa meledak menjadi ratusan kolom.
Delapan level, dan tidak ada pengaturan yang lebih tinggi. Di luar itu, sebuah data berhenti menjadi data tabular, dan apa pun yang masih bersarang akan disimpan sebagai JSON dan tidak ditolak.
Tingkatkan kedalaman ketika nilai yang sebenarnya ingin Anda filter dan jumlahkan berada di bawah batas — pengidentifikasi gudang tiga tingkat ke bawah yang Anda perlukan dalam KELOMPOKKAN BERDASARKAN Itulah alasan umumnya. Biarkan saja, atau turunkan, ketika muatannya besar tetapi Anda hanya membaca bagian atasnya: setiap level tambahan berarti lebih banyak kolom yang harus dilihat, dan tabel yang lebar dan rata lebih sulit dikelola dalam spreadsheet daripada tabel yang sempit dengan kolom JSON yang hanya Anda akses sesekali.
Mengubah kedalaman di kemudian hari diperbolehkan dan aman, tetapi ini merupakan perubahan definisi, bukan preferensi tampilan: folder di-sampling ulang dan tabel dibangun kembali berdasarkan kebijakan baru. Itu disengaja. Alternatifnya — menafsirkan ulang data yang sudah ada di dalam tabel secara diam-diam — akan berarti kueri yang sama mengembalikan kolom yang berbeda tergantung pada kapan kueri tersebut dijalankan.
Kedalaman adalah satu-satunya pengaturan yang menentukan berapa banyak kolom yang Anda dapatkan, itulah sebabnya pengaturan ini disematkan bersama dengan bentuknya. Bagian lain dari kartu — nama tabel, tata letak tabel, file mana yang termasuk dalam cakupan, dan penggantian manifes — dijelaskan dalam referensi pengaturan di bawah ini. Opsi yang tidak dikenali oleh konektor akan ditolak berdasarkan nama, bukan diabaikan, dengan alasan bahwa pengaturan yang diam-diam tidak melakukan apa pun tidak dapat dibedakan dari pengaturan yang berfungsi.
Apa yang tidak pernah diratakan, dan mengapa itu adalah jawaban yang tepat
Beberapa nilai tidak memiliki representasi kolom yang sebenarnya, dan kebijakan tersebut tetap menyimpannya sebagai JSON terlepas dari kedalaman yang Anda tetapkan. Tidak ada yang dibuang — nilainya dipertahankan apa adanya dan Anda membacanya dengan SQL saat dibutuhkan.
| Nilai dalam catatan | Apa yang Anda dapatkan |
|---|---|
| Sebuah array, pada kedalaman berapa pun | Satu JSON Kolom yang memuat array persis seperti yang tertulis. Array tidak memiliki panjang tetap, jadi tidak ada jumlah kolom yang pasti untuk menyebarkannya. |
| Objek yang lebih dalam dari kedalaman perataan yang Anda tetapkan | Satu JSON kolom yang memuat seluruh sub-objek tersebut. |
| Sebuah objek lebar dan terbuka yang dibaca sebagai peta. | Satu JSON kolom. Objek yang digunakan sebagai kamus memiliki kunci yang berbeda untuk setiap catatan, sehingga berupa data dan bukan struktur. |
| Nilai yang tidak memiliki tipe tunggal di seluruh file. | Satu JSON kolom, alih-alih sebuah acara yang harus memilih pemenang. |
Kolom JSON adalah kolom biasa: kolom tersebut muncul dalam definisi tabel, masuk ke spreadsheet Anda, dan fungsi JSON dari mesin SQL dapat bekerja padanya. Mengakses kolom tersebut hanya membutuhkan satu baris kode SQL, bukan konfigurasi ulang.
SELECT event_id, order_site_region, json_extract_string(order_site_bay, '$.aisle') AS aisle, json_array_length(tags) AS tag_count FROM events WHERE type = 'order.paid' AND json_extract_string(order_site_bay, '$.aisle') = 'A7';
Jika Anda mendapati diri Anda menulis ekstraksi tersebut di setiap kueri, itu adalah sinyal untuk meningkatkan kewaspadaan. Meratakan kedalaman oleh satu dan biarkan order_site_bay_aisle Seharusnya itu kolom sungguhan.
Dua cara agar proses perataan bisa gagal.
Meratakan struktur pohon menjadi nama-nama tidak selalu memungkinkan, dan ketika tidak memungkinkan, konektor akan memberi tahu hal tersebut alih-alih menghasilkan tabel yang sedikit salah. Ada dua mode kegagalan yang perlu dikenali sekilas, karena keduanya memiliki perbaikan satu baris.
Sebuah jalur yang diratakan bertabrakan dengan sebuah kolom nyata.
Garis bawah adalah cara jalur tersebut menjadi sebuah nama, yang berarti dua jalur berbeda dapat menghasilkan nama yang sama. Sebuah catatan yang membawa baik level atas maupun ID pengguna dan bersarang pengguna objek dengan sebuah id di dalamnya menghasilkan ID pengguna dua kali: sekali sebagai dirinya sendiri, sekali dari ID pengguna.
Tidak ada cara aman untuk menentukan jalur mana yang benar. Memilih salah satu berarti kehilangan yang lain, dan lebih buruk lagi, Anda tidak akan diberi tahu yang mana. Jadi konektor menolak dan menyebutkan kedua jalur tersebut: jalur ID pengguna dan ID pengguna keduanya merata menjadi kolom ID penggunaKurangi kedalamannya agar yang bersarang tetap berada di dalam kolom JSON, atau ganti nama salah satunya di penggantian konektor — jalur titik tersebut persis seperti yang ditangani oleh penggantian.
Kunci yang sama merupakan nilai dalam beberapa catatan dan objek dalam catatan lainnya.
Masalah ini umum terjadi pada log yang telah mengalami perubahan skema. File kemarin berisi "aktor": "sistem". Bawaan hari ini "aktor": {"id": 4417, "peran": "pelanggan"}Satu folder, satu bidang, dua bentuk yang tidak dapat didamaikan: aktor tidak bisa menjadi kolom tersendiri sekaligus induk dari aktor_id.
Konektor mendeteksi bahwa satu jalur merupakan awalan dari jalur lain dan menolak, dengan menyebutkan nama kolom dan contoh konflik tersebut. Perbaikannya bergantung pada apa yang Anda inginkan: mempersempit pola file sehingga satu konektor mencakup bentuk lama dan konektor lain mencakup bentuk baru, atau mengalihkan konektor ke satu tabel per tata letak sehingga kedua era mendapatkan satu tabel masing-masing.
http.status dan db.systemKarena konektor menangani kolom berdasarkan jalur titik, sebuah bidang yang secara harfiah bernama http.status tidak dapat dibedakan dari sebuah status bidang di dalam sebuah http objek — dan pembacaan akan mengembalikan nilai kosong alih-alih kesalahan. Itulah jenis hasil yang salah secara diam-diam yang ingin dicegah oleh konektor, sehingga konektor menolak dan memberi nama pada field tersebut. Ganti namanya di producer, atau kecualikan file-file tersebut.
Dua perbedaan pendapat lainnya ditolak berdasarkan prinsip yang sama. Sebuah field yang berupa angka dalam satu file dan teks dalam file lain diberi nama alih-alih diubah tipenya, karena pengubahan tipe harus memilih pemenangnya. Dan sebuah file yang sama sekali tidak dapat dibaca sebagai JSON yang dipisahkan baris baru dicatat secara individual dan dilewati, sehingga satu log yang rusak tidak menghentikan sembilan ratus log lainnya untuk diproses.
| Situasi | Saat tertangkap | Apa yang terjadi? |
|---|---|---|
| Dua jalur diratakan menjadi satu nama kolom. | Koneksi pertama | Menolak dan menyebutkan kedua jalur tersebut. |
| Kunci adalah nilai dalam satu file, dan objek dalam file lain. | Koneksi pertama | Menolak dan menyebutkan nama bidang tersebut. |
Nama kolom berisi literal . | Koneksi pertama, dan lagi per file nanti. | Menolak pada koneksi pertama; file yang ukurannya bertambah satu kali kemudian akan diparkir. |
| Tipe field berbeda antar file. | Koneksi pertama | Menolak, dengan menyebutkan kedua jenis dan kedua file tersebut. |
| Sebuah kolom baru muncul dalam satu file. | Setiap sinkronisasi | File tersebut diparkir dan jalur baru telah diberi nama. |
| Sebuah berkas menghapus sebuah kolom yang sebelumnya dimilikinya. | Setiap sinkronisasi | File tersebut diparkir, alih-alih membaca nilai null ke dalam total Anda. |
| Satu baris yang salah format dalam sebuah file | Setiap sinkronisasi | Seluruh berkas diparkir. Sebuah berkas bersifat masuk seluruhnya atau keluar seluruhnya, tidak pernah setengahnya. |
Penolakan menyangkut seluruh folder dan terjadi saat Anda menghubungkannya; parkir menyangkut satu file dan terjadi pada setiap sinkronisasi. Keduanya dicatat, dan file_kejadian Tabel tersebut menyebutkan nama file dan perbedaan yang tepat — mekanisme umum dari proses pinning dan parking dibahas di dalamnya. Cara kerja konektor File Set.
JSONL, bukan JSON: isi yang harus ada di dalam folder tersebut
Nama itu penting di sini. Konektor ini berbunyi... JSON yang dipisahkan oleh baris baru — satu objek JSON lengkap per baris, tanpa koma di antaranya dan tanpa tanda kurung pembungkus. Ini adalah format yang hampir semua logger, konsumen antrean, dan ekspor streaming sudah gunakan, terlepas dari ekstensi file-nya.
{"event_id":"evt_8810","ts":1787903601,"type":"order.created"} {"event_id":"evt_8811","ts":1787903622,"type":"payment.authorised"} {"event_id":"evt_8812","ts":1787903642,"type":"order.paid"}
Sebuah file tunggal yang berisi satu array JSON besar — yang dicetak dengan rapi. [ { ... }, { ... } ] Bentuk yang dikembalikan API saat Anda menyimpan responsnya bukanlah JSON yang dipisahkan oleh baris baru, dan konektor ini tidak akan membacanya. Data tersebut dicatat sebagai tidak dapat dibaca saat Anda menghubungkan folder dan akan disimpan sementara pada sinkronisasi berikutnya, dengan alasan yang diberikan, bukan dibiarkan sebagai tabel kosong. Jika folder Anda berisi data tersebut, solusi praktisnya adalah dengan membuat program yang menulis file tersebut menghasilkan satu objek per baris, yang merupakan perubahan satu baris di sebagian besar program pengekspor.
Pengkodean bukanlah masalah di sini, tidak seperti folder ekspor CSV. JSON secara definisi adalah UTF-8, jadi tidak ada pengkodean yang perlu dideteksi dan tidak ada pengaturan yang salah. Byte yang bukan UTF-8 yang valid akan menghentikan pemrosesan file sebelum parser diizinkan untuk mengaksesnya. Jika folder Anda berupa teks yang dipisahkan delimiter dan bukan JSON, lihat panduan terkait di Menggabungkan beberapa file CSV menjadi satu tabel. Mencakup deteksi pengkodean yang dibutuhkan oleh pekerjaan tersebut.
Mengapa setiap baris dibaca, bukan hanya beberapa baris pertama?
Saat folder pertama kali terhubung, konektor akan mengambil sampel hingga 64 file — dan membaca setiap file tersebut. sama sekali daripada mengintip beberapa ratus baris pertama. Itu adalah biaya yang disengaja, dan alasannya khusus untuk JSON.
Berkas JSONL tidak memiliki header. Bentuknya adalah apa pun yang terkandung dalam catatannya, jadi sampel terbatas akan membuat daftar kolom bergantung pada di mana dalam berkas tersebut terdapat catatan yang tidak biasa. Terhubung pada hari Senin dan kode diskon pesanan muncul di baris 40; terhubung pada hari Selasa ketika pertama kali muncul di baris 4.000 dan kolom tersebut sama sekali tidak ada. Membaca seluruh file menghilangkan tebakan tersebut sepenuhnya.
Pembacaan penuh yang sama terjadi pada setiap file yang diubah pada saat sinkronisasi, dengan alasan yang lebih spesifik: sebuah field yang muncul di akhir file akan hilang tanpa jejak. Pembacaan tipe ketat yang digunakan konektor mengabaikan field yang tidak diberitahukan, sehingga field tambahan setelah batas sampel tidak akan menimbulkan kesalahan — field tersebut hanya tidak akan ada. Membaca seluruh file berarti field baru akan menandai file dan diberi nama. Satu parse tambahan per file yang diubah memberikan hasil tersebut, dan hanya file yang diubah yang akan dibaca ulang.
Ketika folder tersebut berisi beberapa bentuk acara
Folder acara seringkali tidak berbentuk tunggal tetapi beragam, karena satu konsumen menulis semua yang dilihatnya ke satu direktori. Daripada memaksakan kesepakatan, alihkan konektor dari satu tabel yang disematkan ke satu meja per tata letakBerkas dikelompokkan berdasarkan bentuk rata persisnya dan setiap kelompok mendapatkan tabelnya sendiri, hingga 25 tata letak berbeda.
Ada dua detail khusus untuk JSON di sini. Kedalaman perataan tetap menjadi satu kebijakan untuk seluruh konektor — satu kedalaman, diterapkan pada setiap tata letak — karena kedalaman itulah yang mendefinisikan suatu bentuk sejak awal; pengelompokan berdasarkan bentuk akan menjadi tidak berarti jika setiap grup dapat diratakan secara berbeda. Dan konflik antar file yang dijelaskan di atas berhenti menjadi konflik: kunci yang merupakan nilai di beberapa file dan objek di file lain hanya menghasilkan dua tata letak, yang persis seperti yang Anda inginkan. File yang tidak dapat dipin sendiri, seperti file dengan nama bidang yang dipisahkan titik, dilewati satu per satu alih-alih menghentikan yang lainnya.
Nama tabel berasal dari nama file, dengan tanggal dan nomor seri dipangkas di bagian belakang, sehingga sekelompok orders_2026_08_*.jsonl berkas masuk ke dalam tabel yang disebut pesananNama-nama ditetapkan sejak pertama kali diberikan dan dipertahankan di seluruh pengambilan sampel ulang berikutnya, sehingga tabel yang sudah dirujuk oleh kueri tersimpan Anda tidak akan diubah namanya di bawahnya. File yang bentuknya tidak sesuai dengan tata letak yang disematkan akan diparkir hingga Anda mengubah pengaturan konektor, yang akan mengambil sampel ulang folder dan menerima tata letak baru sebagai tabel tambahan.
Mengonsumsi JSON di Microsoft Excel dan Google Sheets
Setelah folder diratakan, itu menjadi tabel SQL biasa, yang membuat konversi JSON ke Excel menjadi mudah: Anda menjalankan kueri yang tersimpan dari add-in dan baris-barisnya akan masuk ke lembar kerja. Tidak ada wizard impor, tidak ada perluasan kolom catatan, dan tidak ada yang perlu diulang bulan depan — penyegaran akan mengambil semua file log yang telah ditulis sejak saat itu.
SELECT order_site_region, COUNT(*) AS paid_orders, SUM(order_total) AS gross FROM events WHERE type = 'order.paid' AND ts >= 1785542400 GROUP BY order_site_region ORDER BY gross DESC;
Setiap baris juga membawa berkas sumber dan unik _id_baris, sehingga angka yang terlihat salah dapat dilacak ke file log yang tepat yang menghasilkannya — pengelompokan berdasarkan berkas sumber Ini biasanya merupakan cara tercepat untuk menemukan tanggal terjadinya perubahan. Dan karena folder tersebut merupakan konektor seperti halnya yang lain, tabel peristiwa yang diratakan bergabung dengan tabel pesanan PostgreSQL Anda atau pembayaran Stripe Anda dalam satu pernyataan baca-saja, tanpa perlu memuat apa pun ke dalam gudang data terlebih dahulu.
- Microsoft Excel dan Google Sheets — Jalankan kueri yang tersimpan dari add-in dan baris yang diratakan akan muncul di lembar kerja, diperbarui sesuai permintaan.
- Airtable, Smartsheet, Baserow, SeaTable dan Anvil — Sinkronisasi terjadwal mengirimkan data log ke alat yang sudah digunakan tim Anda.
- Nova AI — Ajukan pertanyaan tentang log dalam bahasa Inggris sederhana dan dapatkan SQL beserta grafik.
- Claude, Cursor, ChatGPT dan Grok — melalui server Query Streams MCP, asisten AI dapat melakukan kueri folder secara langsung.
- API REST — Ubah kueri tersimpan pada log peristiwa Anda menjadi titik akhir untuk aplikasi internal.
total pesanan, dan totalnya kemudian dijumlahkan hingga sen.
Semua pengaturan JSONL, dan kapan harus mengubahnya.
Ini adalah pengaturan yang terkait dengan kartu Folder JSONL itu sendiri. Semua hal yang dimiliki konektor folder bersama dengan format lain — folder root, rekursi dan kedalaman maksimum, pola pengecualian, symlink, pola penguraian nama file, token folder, interval pemindaian, hashing, kebijakan penghapusan, retensi peristiwa, batasan pemindaian, dan empat batasan penyerapan — didokumentasikan sekali dalam panduan konektor File Set daripada diulangi di sini.
Nama tabel
Diperlukan pada kartu ini. Folder JSONL adalah konektor tabel tunggal — setiap catatan dalam setiap file yang cocok digabungkan menjadi satu tabel — jadi ini adalah nama yang akan Anda ketik di SQL: acara, webhook, apa pun isi folder tersebut sebenarnya. Huruf, angka, dan garis bawah, dan mungkin tidak diawali dengan angka.
Pilih nama tersebut dengan sengaja, karena itulah nama yang akan digunakan setiap kueri yang disimpan, setiap pertanyaan Nova, dan setiap penyegaran spreadsheet mulai saat itu. Satu-satunya kasus di mana nama tersebut tidak lagi menjadi keseluruhan cerita adalah... satu meja per tata letak, yang dijelaskan di bawah ini, di mana setiap kelompok file mendapatkan tabel yang dinamai sesuai dengan nama file tersebut.
Meratakan kedalaman
Nilai default: 2. Rentang nilai yang valid: 1 hingga 8. Mengosongkan kotak berarti agen akan menggunakan nilai default-nya sendiri, bukan menetapkan angka Anda sendiri. Fungsi setiap kedalaman pada kolom Anda telah dijelaskan sebelumnya dalam panduan ini; berikut ini adalah sisi praktis dari pemilihan kedalaman yang tepat.
Angka nol ditolak secara langsung. Perataan tidak dapat dimatikan, jadi jika yang Anda inginkan adalah pengaturan default agen, kosongkan kotak — jangan ketik 0. Angka sembilan atau lebih tinggi juga ditolak, dan ditolak saat Anda menabung. alih-alih nanti saat sinkronisasi, sehingga Anda mengetahuinya saat masih melihat formulir, bukan dalam laporan sinkronisasi satu jam kemudian. Apa pun yang bersarang lebih dalam dari kedalaman yang Anda pilih tidak akan hilang: data tersebut akan masuk sebagai teks JSON dalam satu kolom.
Kapan harus menaikkannya. Saat data memiliki struktur bersarang yang sebenarnya, Anda perlu memfilter atau mengelompokkannya. Jika nilai yang Anda inginkan adalah pengguna.alamat.kota, yaitu tiga objek yang dalam, dan pada kedalaman 2 Anda akan mengekstraknya dari kolom JSON di setiap kueri — atur 3 dan alamat_pengguna_kota berubah menjadi kolom sungguhan.
Kapan harus menurunkannya ke 1. Muatan peristiwa yang lebar di mana Anda hanya peduli dengan bidang tingkat atas. Kedalaman 2 terhadap muatan dengan empat ratus kunci memberi Anda empat ratus kolom untuk digulirkan di spreadsheet; kedalaman 1 memberi Anda segelintir yang sebenarnya Anda baca ditambah satu kolom JSON yang menyimpan sisanya, yang jauh lebih mudah untuk dikerjakan.
Tata letak tabel
Default: satu tata letak yang disematkan, yang mengharapkan setiap file dalam cakupan untuk diratakan ke bentuk yang sama. Alternatifnya adalah satu meja per tata letakyang mengelompokkan file berdasarkan bentuknya yang diratakan dan memberikan setiap kelompok tabelnya sendiri, hingga 25 tata letak yang berbeda.
Alasan untuk beralih adalah yang dijelaskan di bawah ini. Ketika folder tersebut berisi beberapa bentuk acara Di atas: sebuah direktori tunggal tempat satu konsumen menulis beberapa jenis peristiwa. Dalam mode tersebut, konflik antar file yang dibahas sebelumnya berhenti menjadi penolakan dan menjadi tabel terpisah, yang biasanya memang Anda inginkan sejak awal.
Mengubah pengaturan ini akan mengambil sampel ulang folder dan membangun ulang, sesuai dengan desainnya. Nama tabel yang sudah digunakan akan tetap digunakan setelah pembangunan ulang, sehingga kueri tersimpan yang sudah ada tetap berfungsi.
Sertakan pola
Ditanamkan ke **/*.jsonl pada kartu iniDan inilah satu-satunya alasan paling mungkin mengapa Anda menatap konektor yang tidak menemukan apa pun. JSON yang dipisahkan oleh baris baru tidak memiliki ekstensi file yang disepakati. Tergantung pada siapa yang menulis file tersebut, Anda akan menemukan .jsonl, .ndjson, .log atau polos .json — dan pola yang diinisialisasi hanya menangkap yang pertama dari itu. Jika file Anda diakhiri dengan sesuatu yang lain, tambahkan baris untuk itu sebelum Anda menyimpan. Satu glob per baris, dan baris-baris tersebut bersifat aditif.
**/*.jsonl **/*.ndjson **/*.json logs/**/*.log
Ekstensi bukanlah yang membuat sebuah file valid, jadi perluas polanya agar sesuai dengan cara alat Anda memberi nama sesuatu, bukan dengan harapan bahwa nama akan mengubah isi di dalamnya. Persyaratannya adalah format yang dijelaskan di atas — satu objek JSON lengkap per baris, tanpa koma di antara catatan dan tanpa tanda kurung pembungkus. A .jsonl berkas yang berisi array yang sudah diformat rapi masih ditolak; sebuah .log Berkas yang memuat satu objek per baris dapat dibaca dengan sempurna.
Penggantian manifes (JSON)
Di belakang Tampilkan opsi lanjutanIni adalah JSON mentah yang diterapkan pada saat bentuknya ditetapkan, sehingga penggantian menjadi bagian dari definisi tabel daripada sesuatu yang diterapkan kembali pada setiap kueri. Tiga kunci diterima, semuanya opsional, dan kolom diakses berdasarkan jalur titik aslinya daripada nama kolom yang diratakan.
{ "mengganti nama": { "user.id": "nested_user_id" }, "mengetik ulang": { "order.total": "DECIMAL(18,4)" }, "mengecualikan": [ "order.site.bay" ] }
Untuk folder JSONL, ini adalah solusi praktis untuk dua situasi yang dijelaskan sebelumnya dalam panduan ini. mengganti nama Menyelesaikan masalah jalur titik yang diratakan yang bertabrakan dengan kolom sebenarnya: ganti nama salah satu dari dua jalur dan penolakan akan hilang tanpa harus mengurangi kedalaman untuk seluruh tabel. mengecualikan Menghilangkan cabang bersarang yang berisik yang tidak akan pernah Anda gunakan untuk kueri, yang seringkali merupakan solusi yang lebih baik daripada mengurangi kedalaman dan kehilangan bidang yang Anda inginkan. mengetik ulang Itulah yang dimaksud dengan catatan tentang uang di atas — paksa daun yang diratakan menjadi desimal yang tepat dan nilainya diuraikan langsung dari teks JSON pada tipe tersebut.
Mengosongkan kotak akan menghapus pengaturan penggantian Anda dan mengembalikan tabel ke bentuk yang telah diambil sampelnya.
Menyiapkannya
Anda memerlukan akun Query Streams dan Network Agent yang terpasang pada mesin yang dapat melihat folder tersebut — server log, workstation dengan share yang sudah dipetakan, atau laptop Anda sendiri. Konektor JSONL Folder memerlukan Agen Jaringan 2.6 atau yang lebih baru.
- Instal agen dari halaman unduhan jika belum berjalan.
- Di portal, tambahkan konektor data dan pilih Folder JSONL.
- Masukkan jalur folder seperti yang dilihat oleh mesin agen, dengan pola file seperti
events_*.jsonljika folder tersebut memuat lebih banyak data daripada yang Anda inginkan dalam satu tabel. - Meninggalkan Meratakan kedalaman Periksa langkah 2 untuk tampilan awal, dan pastikan pola penyertaan sesuai dengan ekstensi file Anda. Anda akan tahu dalam satu kueri apakah Anda ingin meningkatkan kedalaman.
- Simpan. Agen mengambil sampel folder, menetapkan kebijakan perataan, dan melaporkan kolom yang dihasilkannya — baca daftar itu sebelum Anda menulis SQL apa pun, karena itu memberi tahu Anda persis seperti apa JSON Anda nantinya.
- Buka pembuat kueri, pilih konektor dan kueri tabel, atau minta Nova AI untuk menuliskan SQL untuk Anda.
Aturan baca-saja diberlakukan, bukan sekadar janji: sebuah kueri harus berupa satu pernyataan tunggal, dan hanya PILIH, DENGAN, PRAGMA, MENGGAMBARKAN dan MENJELASKAN diterima. File log Anda tidak pernah ditulis, dipindahkan, atau diganti namanya, dan data yang diuraikan disimpan dalam cache terenkripsi di mesin agen itu sendiri.
Pertanyaan yang Sering Diajukan
Bagaimana cara memasukkan data JSON ke Microsoft Excel? +
Apa sebenarnya yang dilakukan oleh proses perataan (flattening) terhadap objek bersarang? +
{"order":{"id":1}} menjadi sebuah kolom yang disebut ID pesanan; {"order":{"site":{"region":"eu-west"}}} menjadi wilayah_situs_pesananJalur titik asli tetap dipertahankan bersama dengan nama, dan jalur itulah yang Anda tuju saat mengganti nama, mengetik ulang, atau mengecualikan kolom.
Apa itu kedalaman perataan (Flatten depth) dan berapa nilai yang harus saya tetapkan? +
Bisakah program ini membaca file .json yang berisi satu array besar? +
Bagaimana cara menangani array JSON? +
JSON Kolom tersebut menyimpan array persis seperti yang tertulis, yang merupakan satu-satunya jawaban yang jujur — sebuah array tidak memiliki panjang tetap, jadi tidak ada jumlah kolom yang tepat untuk menyebarkannya. Tidak ada yang hilang: Anda membacanya dengan fungsi JSON dari mesin tersebut, misalnya. panjang_array_json(tag) untuk penghitungan atau json_ekstrak_string(tag, '$[0]') untuk elemen pertama.
Mengapa folder saya ditolak karena "nama kolom yang bert benturan"? +
ID pengguna di samping bersarang ID pengguna, keduanya ingin disebut ID pengguna. Dengan mengunci salah satu jalur, jalur lainnya akan hilang secara diam-diam, jadi konektor menolak dan memberi nama kedua jalur tersebut. Lebih rendah Meratakan kedalaman Jadi, yang bersarang tetap berada di dalam kolom JSON, atau ganti nama salah satu jalur di penggantian manifes konektor.
Bagaimana jika suatu field berupa nilai biasa di beberapa record dan berupa objek di record lainnya? +
aktor tidak bisa sekaligus menjadi kolom dan induk dari aktor_idBiasanya ini berarti folder tersebut mencakup perubahan skema. Anda bisa mempersempit pola file sehingga satu konektor mencakup setiap era, atau beralih ke... satu meja per tata letak dan biarkan kedua bentuk tersebut masing-masing memiliki meja — dengan cara itu konflik akan hilang, karena bentuk yang berbeda hanyalah meja yang berbeda.
Kolom log saya memiliki titik di namanya, seperti http.status. Apakah itu akan berhasil? +
http.status tidak dapat dibedakan dari sebuah status bidang di dalam sebuah http objek, dan membacanya akan mengembalikan nilai kosong alih-alih kesalahan. Daripada mengambil risiko itu, konektor menolak dan memberi nama pada field tersebut. Baiknya, ratakan penamaan di apa pun yang menulis log, atau kecualikan file-file tersebut dengan pola file.
Sebuah kolom baru muncul di berkas log hari ini. Apa yang terjadi? +
Apakah jumlah dalam JSON tetap akurat? +
Apakah file JSON saya sudah diunggah atau dimodifikasi? +
PILIH, DENGAN, PRAGMA, MENGGAMBARKAN atau MENJELASKAN pernyataan — apa pun yang dapat menulis akan ditolak sebelum dijalankan.
Memulai
Lakukan kueri pada folder log JSON Anda menggunakan SQL.
Arahkan agen ke folder berisi JSON yang dipisahkan oleh baris baru dan dapatkan tabel SQL datar dengan objek bersarang yang dibuka menjadi kolom — dapat diakses dari Microsoft Excel, Google Sheets, Airtable, atau asisten AI Anda. File Anda tidak pernah meninggalkan jaringan Anda.
Panduan terkait: Cara melakukan query pada folder berisi file menggunakan SQL. | Gabungkan beberapa file CSV menjadi satu tabel. | Unduh Agen Query Streams | Semua panduan Konektor Set File
Kategori: Konektor Set Berkas
Tag: json ke excel, kueri file json dengan sql, jsonl, json yang dipisahkan baris baru, file log json, meratakan json, konektor folder jsonl, json bersarang ke kolom
Deskripsi Meta: Ubah folder berisi file JSONL menjadi tabel SQL. Objek bersarang diratakan menjadi kolom, tanpa unggahan.

