sql >> Databáze >  >> RDS >> Database

Vyhledávání tabulek v úlohách IRI kompatibilních se SortCL

Úvod

SortCL, jazyk IRI pro definici a manipulaci se strukturovanými daty, má již dlouho schopnost čerpat náhradní hodnoty z externích souborů sady obsahujících dva nebo více sloupců hodnot. Tato schopnost se používá pro vyhledávací transformace v operacích Voracity ETL poháněných CoSortem, pseudonymizační a obnovovací funkce FieldShield a výběr náhodných / platných párů dat v úlohách syntézy testovacích dat RowGen.

Tyto soubory sady jsou skvělé pro informace, které se často nemění. Ale protože soubory sady musí být seřazeny podle obsahu sloupců, může být jejich použití těžkopádné, když je třeba přidat řádky – zvláště když je soubor sady otevřený/používá se.

Navíc obsah souboru sady často skutečně pochází z databáze. V těchto případech bylo nutné do toku úlohy přidat další krok (jako je spuštění průvodce „Nastavit soubor ze sloupce“ IRI Workbench nebo operace SQL), aby bylo možné extrahovat hodnoty z tabulky do souboru sady.

K vyřešení těchto nedostatků bylo povoleno přímé vyhledávání náhradních hodnot ze stávajících databázových tabulek. Vyhledávání z databázové tabulky používá stejnou syntaxi a strukturu pro vyhledávání v tabulkách, které již existují pro soubory sady. To zachovává funkční konzistenci v úlohách SortCL a poskytuje přístup k více hodnotám (ve více databázích a souborech sad) najednou.

Syntaxe

Syntaxe atributu pole SortCL pro přístup k datům v souboru sady byla tradičně:

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

kde je parametr označuje cestu k souboru sady. Tímto parametrem nyní může být také název tabulky ODBC a připojovací řetězec, stejně jako ten, který se používá v příkazech infile nebo outfile. Parametr Search List by měl odkazovat na jedno pole z jednoho ze vstupních zdrojů v případě vyhledávání v tabulkách.

Váš program SortCL (nebo kompatibilní) pak vyhledá shodu mezi hodnotou tohoto pole a vyhledávacím sloupcem v databázi. Pokud existuje shoda, bude hodnota nahrazujícího sloupce na tomto řádku použita jako konečná hodnota pro nové pole, které by mělo mít jiný název než pole odkazované z jednoho ze vstupních zdrojů.

Sloupce tabulky použité při vyhledávání jsou specifikovány v jediném dalším jazykovém prvku k počáteční implementaci podatributu SET:  LOOKUP=”<lvalue>,<rvalue>>.

Parametr lvalue je název sloupce v tabulce, který obsahuje hodnotu, která se má vyhledat. To odpovídá levému nebo prvnímu sloupci v souboru sady. rvalue část odpovídá pravému sloupci v souboru se dvěma sloupci a je to podle toho, který sloupec obsahuje hodnotu, která má být vrácena jako náhrada.

Stejně jako u tradičního vyhledávání souborů by měla být zadána výchozí hodnota, pokud neexistuje žádná shoda. Je použita syntaxe DEFAULT=”string”, kde “string” je ručně zadaná výchozí hodnota. Mezi nastavenými parametry souboru by neměly být žádné čárky.

Když to dáme dohromady, možný příklad syntaxe pro vyhledávání v tabulce může být:

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

Měl by to být parametr v definici pole SortCL. Tabulka „informace“ by v tomto případě měla mít sloupce pojmenované ACCOUNTNUM a PHONENUM.

Jak lze tato nová vyhledávání sad použít ve výrobě? Zvažte tyto příklady skriptů úloh IRI:

Příklady

Příklad 1 :Pseudonymizace dat pomocí náhradních hodnot z databáze.

Tato úloha FieldShield vyhledává hodnoty ze sloupce „id“ v tabulce s názvem „lookuptable“ přístupné přes DSN „Mangled“. Pokud je pole ID stejné ve vstupu (textový soubor) jako ve sloupci ID odkazované databázové tabulky, pak budou všechna pole ve výstupu (také textový soubor) nahrazena falešnými, ale realistickými nahrazovacími hodnotami také z stejná referenční tabulka. Pokud neexistuje žádná shoda, budou místo toho vypsány výchozí hodnoty zadané ve skriptu.

/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")

Příklad 2 :Pseudonymizujte tři sloupce z databázové tabulky pomocí náhradních hodnot z jiné databáze a zašifrujte zbývající sloupec.

Tento skript vyhledá na základě pole ID převzatého z databázové tabulky s názvem „inputTable“ a podívá se na sloupec „id“ z tabulky s názvem „lookuptable“ přístupné přes DSN „Mangled“. Odpovídající hodnoty ve sloupcích „fakeid“, „fakename“, „fakessn“ a „fakeaddress“ budou převzaty, pokud existuje shoda z pole ID vstupních dat se sloupcem „id“ v tabulce. Pokud neexistuje žádná shoda, budou místo toho vypsány výchozí hodnoty.

Výstup bude odeslán do samostatné cílové tabulky. Výstup by také mohl být odeslán do stejné tabulky jako vstup, což by maskovalo data na místě.

/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")

Příklad 3 :Ochrana osobních údajů (PII) pomocí realistických náhrad z rozmanité sady metod maskování.

Vstupní soubor obsahuje PII v několika sloupcích (polích). Pokud existuje shoda mezi polem křestního jména ve vstupním souboru CSV a sloupcem „FIRST_NAME“ v tabulce „NAMES“, bude ze sloupce „LAST_NAME“ v téže tabulce vydáno náhradní příjmení. Příjmení se v tabulce „JMÉNA“ liší od samotných osobních údajů.

/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)

Stejný skript úlohy, náčrt mapovacího diagramu, spolu s původní tabulkou názvů je zobrazen v mém IRI Workbench IDE, postaveném na Eclipse, níže:

Příklad 4 :Generování referenčních správných testovacích dat pomocí IRI RowGen

Zvažte databázovou tabulku nebo v jiných potenciálních případech více tabulek, které obsahují data odpovídající určitému datu. Díky funkci IRI RowGen a funkci vyhledávání v tabulce je možné vybrat data (z nastaveného souboru nebo náhodně vygenerovaných) a přidat další pole ve výstupu, která odpovídají realistickým hodnotám na základě poskytnutého vstupu data.

V tomto příkladu jsou všechna odpovídající data z data uložena ve vyhledávací tabulce uvedené níže (ačkoli mohou být převzata z libovolného počtu tabulek). Tabulka obsahuje data za rok a odpovídající související hodnoty:

Z nastaveného souboru ve vstupním poli DATUM se vyberou 3 data, která jsou v rozsahu dat uvedených v tabulce.

Soubor sady obsahuje tři položky:2019-10-11, 2019-11-11 a 2019-12-11.

/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")

Výstupem z tohoto příkladu je standardní soubor XML obsahující vyhledávací hodnoty:

Příklad 5 :Provedení vyhledávací transformace v IRI Voracity ETL a reportovací úloze

V tomto příkladu máme soubor CSV obsahující čísla účtů a částky po splatnosti pro několik zákazníků. Ve dvou polích výstupu bude použito vyhledávání v tabulce k získání dalších odpovídajících informací z hlavní tabulky faktů zákazníků v MySQL, přičemž tato tabulka slouží jako hlavní tabulka zákazníků.

Hlavní tabulka neobsahuje informace o dlužné částce a obsahuje mnohem více zákazníků než vstupní soubor, který zobrazuje pouze účty delikventních zákazníků. Toto vyhledá jméno a telefonní číslo v tabulce na základě čísla účtu a výstupy do tabulky .XLSX v praktickém formátu zprávy s kontaktními informacemi zákazníka.

Zadat CSV

Úryvek hlavní tabulky zákazníků, proti kterému se má vyhledávat

/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")

Výstup zprávy „Po splatnosti“

Podpora IRI Workbench

Vyhledávání databázových tabulek lze nastavit jako pravidlo z Průvodce novým pravidlem pole. Tento typ pravidla se v rámci pravidel generování nazývá „Vyhledávání v tabulce“, ale lze jej použít ve více zdrojích nebo cílech jako pravidlo pole v jiných úlohách.

Při výběru vyhledávání v tabulce zpravidla musí být profil připojení buď již nastaven, nebo vytvořen po zobrazení výzvy, aby bylo možné přistupovat k tabulkám databáze a názvům sloupců, ze kterých si můžete vybrat.

Odtud vyberte tabulku, vyhledávací sloupec a sloupec náhradní hodnoty, které chcete použít pro vyhledávání. Nyní může být toto vyhledávání v tabulce nastaveno jako pravidlo, které se použije na základě shodovačů.

Sady lze upravit pomocí typu transformace hodnot Set:Table Lookup v dialogovém okně editoru polí.

Toto není potřeba, pokud již bylo nastaveno a aplikováno pravidlo pole pro vyhledávání v tabulce. Tento dialog však umožňuje ruční úpravu komponent vyhledávání v tabulce, jako je DSN, tabulka, pole vyhledávání, sloupec vyhledávání a sloupec výsledků. Zde lze také zadat výchozí hodnotu.

Shrnutí

Vyhledávání sad má nyní nový možný zdroj v SortCL, který může značně rozšířit a usnadnit získávání dat potřebných pro vyhledávání. To je užitečné při operacích maskování nebo generování dat, které poskytují realistické náhradní hodnoty, které zachovávají vztahy.

V budoucnu mohou být sady rozšířeny o ještě více zdrojů dat. Pro více informací kontaktujte svého zástupce IRI.

  1. Všimněte si, že v současné době uživatelé RowGen využívají soubory sady pro náhodný výběr hodnot bez vyhledávacího parametru. Tato funkce není podporována v první implementaci vyhledávání tabulek DB. Je to proto, že každá databáze má specifickou metodu nebo syntaxi pro výběr náhodného řádku z tabulky; některé databáze nemusí náhodný výběr vůbec podporovat.

  1. Jak QUARTER() funguje v MariaDB

  2. FrankenQueries:když dojde ke kolizi SQL a NoSQL

  3. Extrahujte měsíc z data v PostgreSQL

  4. ORA-00979 není skupina podle výrazu