Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Pencarian Tabel di Pekerjaan IRI yang Kompatibel dengan SortCL

Pengantar

SortCL, bahasa IRI untuk definisi dan manipulasi data terstruktur, telah lama memiliki kemampuan untuk menarik nilai pengganti dari file kumpulan eksternal yang berisi dua atau lebih kolom nilai. Kemampuan ini digunakan untuk transformasi pencarian dalam operasi ETL Voracity yang didukung CoSort, fungsi pseudonimisasi dan pemulihan FieldShield, dan pemilihan data acak/pasangan valid dalam tugas sintesis data pengujian RowGen.

Kumpulan file ini bagus untuk informasi yang tidak sering berubah. Tetapi karena file set harus diurutkan berdasarkan konten kolom, mereka bisa menjadi rumit untuk digunakan ketika baris perlu ditambahkan — terutama saat file set terbuka / sedang digunakan.

Selain itu, isi dari kumpulan file sering kali sebenarnya berasal dari database. Dalam kasus tersebut, langkah tambahan (seperti menjalankan wizard IRI Workbench 'Set File from Column', atau operasi SQL) harus ditambahkan ke alur pekerjaan untuk mengekstrak nilai dari tabel ke dalam file yang ditetapkan.

Untuk mengatasi kelemahan ini, pencarian langsung nilai pengganti dari tabel database yang ada telah diaktifkan. Pencarian dari tabel database menggunakan sintaks dan struktur yang sama untuk pencarian tabel yang sudah ada untuk file yang ditetapkan. Ini mempertahankan konsistensi fungsional dalam tugas SortCL dan menyediakan akses ke lebih banyak nilai (dalam beberapa database dan file yang ditetapkan) sekaligus.

Sintaks

Sintaks atribut bidang SortCL untuk mengakses data dalam satu set file secara tradisional adalah:

SET="<Set_Source>"[<[ Search List ]>]
    [DEFAULT="string"]
    [ORDER=<Order Option>]
    [SELECT=<Select Option>]
    [SEARCH=<Search Option>]

di mana parameter menandakan nama jalur dari file yang ditetapkan. Parameter ini sekarang juga dapat berupa nama tabel ODBC dan string koneksi, seperti yang digunakan dalam pernyataan infile atau outfile. Parameter Daftar Pencarian harus mereferensikan satu bidang dari salah satu sumber input dalam kasus pencarian tabel.

Program SortCL (atau kompatibel) Anda kemudian akan mencari kecocokan antara nilai bidang ini dan kolom pencarian di database. Jika ada kecocokan, maka nilai kolom pengganti pada baris ini akan digunakan sebagai nilai akhir untuk kolom baru, yang harus memiliki nama yang berbeda dari kolom yang dirujuk dari salah satu sumber input.

Kolom tabel yang digunakan dalam pencarian ditentukan dalam satu elemen bahasa tambahan untuk implementasi awal sub-atribut SET:  LOOKUP=”<lvalue>,<nilai>”.

Parameter nilai adalah nama kolom dalam tabel yang menyimpan nilai yang akan dicari. Ini sesuai dengan kolom sebelah kiri, atau pertama, dalam file yang ditetapkan. nilai bagian sesuai dengan kolom sebelah kanan dalam file kumpulan dua kolom, dan kolom mana saja yang menyimpan nilai yang akan dikembalikan sebagai pengganti.

Seperti halnya pencarian file kumpulan tradisional, nilai default harus ditentukan jika tidak ada kecocokan. Sintaks DEFAULT="string", di mana "string" adalah nilai default yang ditentukan secara manual, digunakan. Seharusnya tidak ada koma di antara parameter file yang disetel.

Menyatukan semuanya, contoh sintaks yang mungkin untuk pencarian tabel mungkin:

SET=”new_schema.info;DSN=MySQL Baru;” [ACCOUNT_NUMBER] LOOKUP=”ACCOUNTNUM,PHONENUM”

Ini harus menjadi parameter dalam definisi bidang SortCL. Tabel “info” harus memiliki kolom bernama ACCOUNTNUM dan PHONENUM dalam hal ini.

Bagaimana pencarian set baru ini dapat digunakan dalam produksi? Pertimbangkan contoh skrip pekerjaan IRI berikut:

Contoh

Contoh 1 :Menyamarkan data menggunakan nilai pengganti dari database.

Pekerjaan FieldShield ini mencari nilai dari kolom "id" di tabel bernama "lookuptable" yang diakses melalui DSN "Mangled". Jika kolom ID sama di input (file teks) seperti di kolom ID dari tabel database yang direferensikan, maka semua kolom di output (juga file teks) akan diganti dengan nilai pengganti palsu tapi realistis juga dari tabel referensi yang sama. Jika tidak ada kecocokan, nilai default yang ditentukan dalam skrip akan ditampilkan sebagai gantinya.

/INFILE=sensitiveData.txt
    /PROCESS=DELIMITED
    /INCOLLECT=200 # limit to 200 records
    /FIELD=(ID, TYPE=ASCII, POSITION=1, SEPARATOR="|")
    /FIELD=(NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|")
    /FIELD=(SSN, TYPE=ASCII, POSITION=3, SEPARATOR="|")
    /FIELD=(ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|")

/REPORT

/OUTFILE=pseudonymizedData.txt
    /PROCESS=RECORD
    /FIELD=(PSEUDO_ID, TYPE=ASCII, POSITION=1, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”0123456789” LOOKUP="id,fakeid")
    /FIELD=(PSEUDO_NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”John” LOOKUP="id,fakename")
    /FIELD=(PSEUDO_SSN, TYPE=ASCII, POSITION=3, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”555-55-5555” LOOKUP="id,fakessn")
    /FIELD=(PSEUDO_ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”583 West Ridge Rd” LOOKUP="id,fakeaddress")

Contoh 2 :Menyamarkan tiga kolom dari tabel database menggunakan nilai pengganti dari database yang berbeda, dan mengenkripsi kolom yang tersisa.

Script ini melakukan pencarian berdasarkan field ID yang diambil dari tabel database bernama “inputTable”, melihat kolom “id” dari tabel bernama “lookuptable” yang diakses melalui DSN “Mangled”. Pencocokan nilai pada kolom “fakeid”, “fakename”, “fakeaddress”, dan “fakeaddress” akan diambil jika terdapat kecocokan dari field input data ID dengan kolom “id” pada tabel. Jika tidak ada kecocokan, nilai default akan ditampilkan sebagai gantinya.

Output akan dikirim ke tabel target terpisah. Outputnya juga dapat dikirim ke tabel yang sama dengan input, yang akan menutupi data di tempatnya.

/INFILE=”inputTable;DSN=Mangled;”
    /PROCESS=ODBC
    /FIELD=(ID, TYPE=ASCII, POSITION=1, SEPARATOR="|")
    /FIELD=(NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|")
    /FIELD=(SSN, TYPE=ASCII, POSITION=3, SEPARATOR="|")
    /FIELD=(ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|")

/REPORT

/OUTFILE=”outputTable;DSN=Mangled;”
    /PROCESS=ODBC
    /FIELD=(PSEUDO_ID, TYPE=ASCII, POSITION=1, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”0123456789” LOOKUP="id,fakeid")
    /FIELD=(PSEUDO_NAME, TYPE=ASCII, POSITION=2, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”John” LOOKUP="id,fakename")
    /FIELD=(ENCRYPT_SSN=enc_fp_aes256_alphanum(SSN,”EPWD:p4PagGZq9k7JFaj6/J1/JQ==”, TYPE=ASCII, POSITION=3, SEPARATOR="|")
    /FIELD=(PSEUDO_ADDRESS, TYPE=ASCII, POSITION=4, SEPARATOR="|", SET="lookuptable;DSN=Mangled;" [ID] DEFAULT=”583 West Ridge Rd” LOOKUP="id,fakeaddress")

Contoh 3 :Melindungi Informasi Identifikasi Pribadi (PII) menggunakan penggantian realistis dari beragam metode penyamaran.

File input berisi PII di beberapa kolom (bidang). Jika ada kecocokan antara kolom nama depan di file CSV input dan kolom “FIRST_NAME” di tabel “NAMES”, maka nama belakang pengganti akan dikeluarkan dari kolom “LAST_NAME” di tabel yang sama. Nama belakang berbeda di tabel “NAMA” dari data pribadi itu sendiri.

/INFILES=personalData.csv
    /PROCESS=CSV
    /ALIAS=PERSONALDATA_CSV
    /FIELD=(FIRST_NAME, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME="\"")
    /FIELD=(LAST_NAME, TYPE=ASCII, POSITION=2, SEPARATOR=",", FRAME="\"")
    /FIELD=(SSN, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME="\"")
    /FIELD=(BIRTH_DATE, TYPE=AMERICAN_DATE, POSITION=4, SEPARATOR=",", FRAME="\"")
    /FIELD=(ADDRESS, TYPE=ASCII, POSITION=5, SEPARATOR=",", FRAME="\"")

/REPORT

/OUTFILE=maskedData.csv
    /PROCESS=RECORD
    /FIELD=(FIRST_NAME, TYPE=ASCII, POSITION=1, SEPARATOR=",")
    /FIELD=(LAST_NAME_DB_SET, TYPE=ASCII, POSITION=2, SEPARATOR=",", SET="NAMES;DSN=mangled;" [FIRST_NAME] LOOKUP="FNAME,LNAME")
    /FIELD=(SSNENC=enc_fp_aes256_alphanum(SSN), TYPE=ASCII, POSITION=3, SEPARATOR=",")
    /FIELD=(BIRTH_DATEPLUS=BIRTH_DATE + 30, TYPE=AMERICAN_DATE, POSITION=4, SEPARATOR=",") 
    /FIELD=(ADDRESSSET, TYPE=ASCII, POSITION=5, SEPARATOR=",", SET="C:/IRI/cosort100/sets/addresses.set" SELECT=ANY)

Skrip pekerjaan yang sama, menguraikan diagram pemetaan, bersama dengan tabel nama asli ditampilkan di IRI Workbench IDE saya, dibangun di atas Eclipse, di bawah ini:

Contoh 4 :Menghasilkan data uji referensi yang benar dengan IRI RowGen

Pertimbangkan tabel database, atau dalam kasus potensial lainnya beberapa tabel, yang menyimpan data yang sesuai dengan tanggal tertentu. Dengan IRI RowGen dan fungsionalitas pencarian tabel, dimungkinkan untuk mengambil pilihan tanggal (dari file yang ditetapkan atau dibuat secara acak) dan menambahkan lebih banyak bidang dalam output yang sesuai dengan nilai realistis berdasarkan input tanggal yang diberikan.

Dalam contoh ini, semua data terkait dari tanggal disimpan dalam tabel pencarian yang ditunjukkan di bawah ini (meskipun dapat diambil dari sejumlah tabel). Tabel memiliki tanggal senilai satu tahun dan nilai terkait yang sesuai:

Dari file yang ditetapkan di bidang input TANGGAL, 3 tanggal dipilih yang berada dalam rentang tanggal yang disertakan dalam tabel.

File yang ditetapkan mencakup tiga entri:11-10-2019, 11-11-2019, dan 11-12-2019.

/INFILE=random_file_placeholder
    /PROCESS=RANDOM
    /INCOLLECT=3
    /FIELD=(DATE, TYPE=ALPHA_DIGIT, POSITION=1, SEPARATOR=",", SET="C:/Users/Devon/Downloads/dates.set" SELECT=ALL)

/REPORT

/OUTFILE=testPriceData.xml
    /PROCESS=XML
    /FIELD=(DATE, TYPE=ALPHA_DIGIT, POSITION=1, SEPARATOR=",")
    /FIELD=(OPEN, TYPE=ALPHA_DIGIT, POSITION=2, SEPARATOR=",", SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="170" LOOKUP="Date,Open")
    /FIELD=(HIGH, TYPE=ALPHA_DIGIT, POSITION=3, SEPARATOR=",", SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="171" LOOKUP="Date,High")
    /FIELD=(LOW, TYPE=ALPHA_DIGIT, POSITION=4, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="169" LOOKUP="Date,Low")
    /FIELD=(CLOSE, TYPE=ALPHA_DIGIT, POSITION=5, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="170.5" LOOKUP="Date,Close")
    /FIELD=(ADJ_CLOSE, TYPE=ALPHA_DIGIT, POSITION=6, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="170.5" LOOKUP="Date,Adj_Close")
    /FIELD=(VOLUME, TYPE=ALPHA_DIGIT, POSITION=7, SEPARATOR=",",SET="new_schema2.pricedata;DSN=New MySQL;" [DATE] DEFAULT="523210182" LOOKUP="Date,Volume")

Keluaran dari contoh ini adalah file XML standar yang berisi nilai pencarian:

Contoh 5 :Melakukan Transformasi Pencarian dalam Pekerjaan Pelaporan dan ETL Voracity IRI

Dalam contoh ini, kami memiliki file CSV yang berisi nomor rekening dan jumlah jatuh tempo untuk beberapa pelanggan. Pencarian tabel akan digunakan dalam dua bidang dalam output untuk mendapatkan informasi pencocokan tambahan dari tabel fakta pelanggan utama di MySQL, dengan tabel tersebut berfungsi sebagai tabel pelanggan utama.

Tabel master tidak memiliki informasi tentang jumlah yang harus dibayar dan berisi lebih banyak pelanggan daripada file input yang hanya menunjukkan akun pelanggan yang menunggak. Ini mencari nama dan nomor telepon dari tabel berdasarkan nomor akun dan menghasilkan spreadsheet .XLSX dalam format laporan praktis dengan informasi kontak pelanggan.

Masukkan CSV

Cuplikan Tabel Pelanggan Utama untuk dilihat

/INFILE=C:/Users/Devon/Downloads/accountnumsandamountDue.csv
    /PROCESS=CSV
    /ALIAS=accountnumsandamountDue
    /FIELD=(ACCOUNT_NUMBER, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME="\"")
    /FIELD=(AMOUNT_DUE, TYPE=ASCII, POSITION=2, SEPARATOR=",", FRAME="\"")

/REPORT

/OUTFILE="'Past Due',HEADER;report.xlsx"
    /PROCESS=XLSX
    /FIELD=(ACCOUNT_NUMBER, TYPE=ASCII, POSITION=1, SEPARATOR="\t")
    /FIELD=(LOOKUP_NAME,TYPE=ASCII,POSITION=2, SEPARATOR="\t",SET="new_schema2.info;DSN=New MySQL;" [ACCOUNT_NUMBER] LOOKUP="ACCOUNTNUM,NAME")
    /FIELD=(LOOKUP_PHONE,TYPE=ASCII,POSITION=3, SEPARATOR="\t",SET="new_schema2.info;DSN=New MySQL;" [ACCOUNT_NUMBER] LOOKUP="ACCOUNTNUM,PHONENUM")
    /FIELD=(AMOUNT_DUE, TYPE=ASCII, POSITION=4, SEPARATOR="\t")

Keluarkan laporan “Telah Jatuh Tempo”

Dukungan Meja Kerja IRI

Pencarian tabel database dapat diatur sebagai aturan dari Panduan Aturan Bidang Baru. Jenis aturan ini disebut sebagai "Pencarian Tabel" di bawah Aturan Pembuatan, tetapi dapat digunakan di berbagai sumber atau target sebagai aturan bidang di pekerjaan lain.

Saat memilih pencarian tabel sebagai aturan, profil koneksi harus sudah disiapkan atau dibuat saat diminta untuk mengakses tabel database dan nama kolom yang dapat dipilih.

Dari sana, pilih tabel, kolom pencarian, dan kolom nilai pengganti yang akan digunakan untuk pencarian. Sekarang pencarian tabel ini dapat ditetapkan sebagai aturan untuk diterapkan berdasarkan pencocokan.

Set dapat dimodifikasi dari jenis transformasi nilai Set:Table Lookup dalam dialog editor bidang.

Ini tidak diperlukan jika aturan bidang pencarian tabel telah disiapkan dan diterapkan. Namun, dialog ini memungkinkan pengeditan manual komponen pencarian tabel seperti DSN, tabel, bidang pencarian, kolom pencarian, dan kolom hasil. Nilai default juga dapat ditentukan di sini.

Ringkasan

Setel pencarian sekarang memiliki kemungkinan sumber baru di SortCL yang dapat sangat memperluas dan memudahkan memperoleh data yang diperlukan untuk pencarian. Ini berguna dalam operasi penyamaran atau pembuatan data untuk memberikan nilai penggantian realistis yang mempertahankan hubungan.

Di masa mendatang, kumpulan dapat diperluas untuk menyertakan lebih banyak sumber data. Hubungi perwakilan IRI Anda untuk informasi lebih lanjut.

  1. Perhatikan bahwa saat ini, pengguna RowGen memanfaatkan file yang ditetapkan untuk pemilihan nilai secara acak tanpa parameter pencarian. Fungsionalitas ini tidak didukung dalam implementasi pertama pencarian tabel DB. Ini karena setiap database memiliki metode atau sintaks khusus untuk memilih baris acak dari tabel; beberapa database mungkin tidak mendukung pemilihan acak sama sekali.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Beverly Hills 90210 dan ZIP+4:Menangani Alamat dalam Model Data

  2. Memigrasikan Cluster Cassandra Anda

  3. Penyetelan Performa Lutut:Penggunaan Tabel Sementara yang Salah

  4. Menginstal SQL Express

  5. Apa itu Aplikasi Waktu Nyata?