Author: Leka
Date: 2022-06-18
Categories:
AWS,
Redshift
A algum tempo atrás fiz um trabalho que teoricamente parecia simples, extrair dados de um banco transacional e mandar para um Redshift para análilse.
Claro que após bater cabeça alguns minutos entendi que imporar dados diretamente para o Redshift iria ser no mínimo conturbado e instável.
Fazendo uma análise das opções vi que a AWS disponibilizou um método muito parecido com o do SQL Server para importar arquivos diretamente para dentro do banco mas claro ao invés de fazer isso através de um servidor, é possível fazer isso através do S3.
A forma mais simples é basicamente:
copy tabela_destino
from 'S3://bucket/arquivo'
iam_role 'arn:aws:iam::01234567890:role/MinhaRegraDoRedshift'
Se o arquivo for muito grande e foi dividido ele tem que terminar com um numeral incremental 1 2 3 4 …
Se o arquivo for compactado, o comando de COPY tem que ser incrementado com GZIP.
Para mais informações tem esse link da AWS abaixo:
https://docs.aws.amazon.com/pt_br/redshift/latest/dg/t_loading-tables-from-s3.html
para monitorar essa importação você pode usar o
https://docs.aws.amazon.com/redshift/latest/dg/r_STV_LOAD_STATE.html
Author: Leka
Date: 2022-03-22
Categories:
AWS,
Redshift,
TI
Por incrível que pareça o Redshift sofre com problemas de Lock e Block da mesma forma que um banco transacional qualquer.
Como qualquer post sobre nuvem, até o momento dessa publicação, o Redshift não tem uma interface que monitora Lock e Block, ela monitora conexões ativas, querys em execução mas não lock e block.
A query para monitorar o Redshift é a seguinte:
select a.txn_owner, a.txn_db, a.xid, a.pid, a.txn_start, a.lock_mode, a.relation as table_id,nvl(trim(c."name"),d.relname) as tablename, a.granted,b.pid as blocking_pid ,datediff(s,a.txn_start,getdate())/86400||' days '||datediff(s,a.txn_start,getdate())%86400/3600||' hrs '||datediff(s,a.txn_start,getdate())%3600/60||' mins '||datediff(s,a.txn_start,getdate())%60||' secs' as txn_duration
from svv_transactions a
left join (select pid,relation,granted from pg_locks group by 1,2,3) b
on a.relation=b.relation and a.granted='f' and b.granted='t'
left join (select * from stv_tbl_perm where slice=0) c
on a.relation=c.id
left join pg_class d on a.relation=d.oid
where a.relation is not null;
e para dar um kill no processo
select pg_terminate_backend(PID);
o resultado deve vir como “1”
No link abaixo tem mais informações:
https://aws.amazon.com/pt/premiumsupport/knowledge-center/prevent-locks-blocking-queries-redshift/