| Rápido e Fácil, o
Delta Reporting com SortCL Por
causa da rapidez e baixo custo do CoSORT's , na abordagem
em sistema de arquivos em integração e staging de data warehouse
-- sua habilidade de filtros simultâneos, classificação, relatório,
e rapidez em cargas de base de dados-- o SortCL pode ser uma
alternativa muito simples e compensatória para capturar e
reportar informações alteradas, de forma integrada ou standalone.
O exemplo do script
abaixo na linguagem SortCL, mostra como fazer Insert, Update,
Delete:
Baseado na troca de dados diária, um full outer join é usado
para produzir relatórios que mostram as diferenças entre grupos
de dados novos e antigos. Os arquivos "velhos" e "novos"
são pré ordenados pelo CoSORT pelo campo Account (Acct). O
relatório final coloca uma identificação de mudança na última
coluna do registro:
Insert -- onde um
novo registro existe para um dado valor de Acct onde um velho
registro não tem ( não teve correspondência). Update -- onde
o valor de Amount (Amnt) de um novo e velho registro
foi trocado (teve correspondência de registros). Delete
-- onde um registro velho existe para um dado valor de Acct
onde um novo registro não tem (um registro sem correspondência).
No change -- onde o valor de Amnt do do registro velho e novo
são os mesmos (requer correspondência de registros).
Amostra lado a lado
de uma pequena parte dos dados de entrada pré-ordenados. Dados
velhos e novos:
AC450 271
AC450 238
AC451 269 AC451 954
AC452 270 AC454
269
AC453 298 AC455
281
AC454 269 BNZ21
322
AC455 281 BNZ22 150
Para este exemplo, assuma que o formato para o arquivo pré-ordenado
novo é o mesmo, mas os valores dos dados não; alguns correspondem
ao arquivo velho e outros não.
O seguinte script SortCL inclui um
full outer join e um campo condicional, delta_flag, que é
gerado na última coluna da saída:
/INFILE=velho
/FIELD=(Acct,POS=1,SIZE=5)
/FIELD=(Amnt,POS=7,SIZE=3)
/CONDITION=(velho_exist, \
TEST=(velho.Amnt
NE " "))
/CONDITION=(velho_nonexist, \
TEST=(velho.Amnt
EQ " "))
/INFILE=novo
/FIELD=(Acct,POS=1,SIZE=5)
/FIELD=(Amnt,POS=7,SIZE=3)
/CONDITION=(novo_exist, \
TEST=(novo.Amnt
NE " "))
/CONDITION=(novo_nonexist, \
TEST=(novo.Amnt
EQ " "))
/CONDITION=(update, \
TEST=(velho.Amnt
NE novo.Amnt))
/CONDITION=(no_update, \
TEST=(velho.Amnt
EQ novo.Amnt))
/JOIN FULL_OUTER velho novo WHERE \
velho.Acct EQ novo.Acct
/OUTFILE=delta.out
/FIELD=(velho.Acct,POS=1, SIZE=5)
/FIELD=(velho.Amnt,POS=7, SIZE=3)
/FIELD=(novo.Acct,POS=11,SIZE=5)
/FIELD=(novo.Amnt,POS=17,SIZE=3)
/DATA=" "
/FIELD=(delta_flag,POS=21, \
IF update AND velho_exist
\
AND novo_exist THEN "Update"\
ELSE IF velho_nonexist
AND\
novo_exist THEN
"Insert" \
ELSE IF velho_exist AND
\
novo_nonexist THEN
"Delete" \
ELSE "")
# No change
Aqui uma amostragem do arquivo de saída, delta.out::
AC450 271 AC450 238
Update
AC451 269 AC451 954 Update
BNZ21
322 Insert
BNZ22 150 Insert
AC452 270 Delete
AC453 298 Delete
AC454 269 AC454 269
AC455 281 AC455 281
O full outer join produz os resultados do right
outer join (Insert) e left outer join (Delete). O full outer
join também retorna os correspondentes, onde o Update e
" " (vazio) são determinados para comparar valores de
Amnt dos registros correspondentes.
É claro que este exemplo é bastante
simples em termos de conteúdo de dados e formatação de arquivos,
mas grandes fontes de dados, mais detalhadas (e agregadas)
nas saídas também é possível. Mande suas perguntas para suporte@cosort.com.br.
|