Sql proficiente
-
Upload
leonardo-cezar -
Category
Technology
-
view
569 -
download
0
description
Transcript of Sql proficiente
SQL Proficiente
SQL ProficienteRecursos de manipulacao de dados
Leonardo Cezar
DATAPREV - PostgreSQL Brasil
31 de maio de 2010
Leonardo Cezar SQL Proficiente
SQL Proficiente
Introducao
Conteudo
1 IntroducaoObjetivo
2 Padrao SQLDefinicaoOrganizacao do SQL:2008Conformidade
3 Recursos do PostgreSQLGerenciamento de Dados ExternosCommon Table Expression (CTEs)Window FunctionsFull Text SearchMais recursos
Leonardo Cezar SQL Proficiente
SQL Proficiente
Introducao
Objetivo
Objetivo
• Conhecer alguns recursos da linguagem para manipulacao dedados e otimizar o acesso a esses dados atraves do padraoISO/IEC 9075 e das extensoes do PostgreSQL
Leonardo Cezar SQL Proficiente
SQL Proficiente
Introducao
Objetivo
Desafios
• Reduzir a carga de processamento na aplicacao
• Diminuir o trafego de rede
• Migrar algoritmos complexos para o servidor de banco dedados
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padrao SQL
Conteudo
1 IntroducaoObjetivo
2 Padrao SQLDefinicaoOrganizacao do SQL:2008Conformidade
3 Recursos do PostgreSQLGerenciamento de Dados ExternosCommon Table Expression (CTEs)Window FunctionsFull Text SearchMais recursos
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padrao SQL
Definicao
Estrutura
• Criado nos anos 80 pelo ISO/IEC
• Comite gestor JTC-1 (information technology)
• Especifica uma base para os dialetos SQL
• Define features opcionais e obrigatorios
• Define packages de funcionalidades
• Dividido em 9 subsecoes
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padrao SQL
Organizacao do SQL:2008
Partes do ISO/IEC SQL:2008
• 9075-1: SQL/Framework (nucleo)• Implementa o conceito sistematico da linguagem e
processadores de resultado
• 9075-2: SQL/Foundation (nucleo)• Implementa a especificacao de manipuladores de dados
• 9075-3: SQL/CLI (externo - ODBC)• Define camada de acesso externa (exceto java)
• 9075-4: SQL/PSM (externo - PL/pgPSM)• Define a semantica de instrucoes de linguagens procedurais
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padrao SQL
Organizacao do SQL:2008
Partes do ISO/IEC SQL:2008
• 9075-9: SQL/MED (nucleo)• Define extensoes para suportar gerenciamento de fonte de
dados externa atraves de datalink
• 9075-11: SQL/Schemata (nucleo)• Implementa a criacao e acesso aos dados
• 9075-13: SQL/JRT (externo - PL/Java)• Funcoes e tipos utilizando Java
• 9075-14: SQL/XML (nucleo)• Suporte XML
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padrao SQL
Organizacao do SQL:2008
E quanto as outras sequencias do ISO/IEC 9075?
• 9075-5: SQL/Bindings (nucleo)• Migrado para 9075-2 em 2003
• 9075-6: SQL/Transaction (XA)• Cancelado em 1999
• 9075-7: SQL/Temporal• Cancelado
• 9075-10: SQL/OLB• Especifica a sıntaxe para incorporar SQL na linguagem Java
atraves de amarracoes.
• 9075-12: SQL/Replication (nucleo)• Cancelado
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padrao SQL
Conformidade
Criterios de conformidade
• Conformidade mınima (Core SQL)• SQL/Foundations e SQL/Schemata
• Conformidade em partes• Implementar todas as features de uma parte (ex.: ISO/IEC
9075-9 SQL/MED)
• Conformidade com features• Implementar a funcionalidade e suas subfuncionalidades em
sua totalidade
• Conformidade com Packages• Agrupamento de features opcionais• Implementar todas as features da Package
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padrao SQL
Conformidade
Consultando as features implementadas
A visao sql features
postgres=# \d information_schema.sql_features
Table "information_schema.sql_features"
Column | Type | Modifiers
------------------+-----------------------------------+-----------
feature_id | information_schema.character_data |
feature_name | information_schema.character_data |
sub_feature_id | information_schema.character_data |
sub_feature_name | information_schema.character_data |
is_supported | information_schema.yes_or_no |
is_verified_by | information_schema.character_data |
comments | information_schema.character_data |
Leonardo Cezar SQL Proficiente
SQL Proficiente
Padrao SQL
Conformidade
Consultando as Packages implementadas
A visao sql packages
postgres=# \d information_schema.sql_packages
Table "information_schema.sql_packages"
Column | Type | Modifiers
----------------+-----------------------------------+-----------
feature_id | information_schema.character_data |
feature_name | information_schema.character_data |
is_supported | information_schema.yes_or_no |
is_verified_by | information_schema.character_data |
comments | information_schema.character_data |
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Conteudo
1 IntroducaoObjetivo
2 Padrao SQLDefinicaoOrganizacao do SQL:2008Conformidade
3 Recursos do PostgreSQLGerenciamento de Dados ExternosCommon Table Expression (CTEs)Window FunctionsFull Text SearchMais recursos
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Gerenciamento de Dados Externos
Dados Externos
• ISO/IEC 9075-9:2003 SQL/MED
• Metodos de acess a dados armazenados em fontes externas
• SGBDs• MS SQLServer• MySQL• Oracle
• Arquivos• XML• YAML• CSV
• Outras instancias PostgreSQL
• Unificar acesso externo (DBI, dblink, PLProxy)
• Maior controle na administracao de links externos
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Gerenciamento de Dados Externos
Dados Externos
MED
postgres=# CREATE FOREIGN DATA
WRAPPER pgday VALIDATOR postgresql_fdw_validator;
postgres=# CREATE SERVER srvpgday FOREIGN DATA WRAPPER pgday
OPTIONS (host ’srv-pgday’, dbname ’pgday’, port ’5432’);
postgres=# CREATE USER MAPPING FOR lhcezar SERVER srvpgday
OPTIONS (user ’lhcezar’, password ’lhcezar’);
postgres=$ SELECT dblink_connect(’pgday_c’, ’srvpgday’);
postgres=$ SELECT * from dblink(’pgday_c’, ’SELECT * FROM pgday’) AS
(id int, palestra varchar);
id | palestra
----+-----------------
1 | SQL Proficiente
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Common Table Expression (CTEs)
WITH RECURSIVE
• ISO/IEC 9075-2:2003
• Permite reaproveitar expressoes previamente definidas em umamesma instrucao
• Semelhante a utilizacao de uma visao
• Permite gerar chamadas recursivas
• Utilizado para percorrer uma lista finita de valores em umaexpressao
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Common Table Expression (CTEs)
WITH RECURSIVE - serie de Fibonacci
WITH RECURSIVE t ( x , y ) AS (VALUES( 0 , 1 )
UNION ALLSELECT GREATEST( x , y ) , x + y AS a FROM tWHERE y < 5
)SELECT a AS f i b o n a c c i FROM t ;
+-----------+
| fibonacci |
+-----------+
| 0 |
| 1 |
| 1 |
| 2 |
| 3 |
+-----------+
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Common Table Expression (CTEs)
WITH RECURSIVE - sequencias vazias
postgres=# SELECT id, descricao FROM produtos;
+----+-----------+
| id | descricao |
+----+-----------+
| 1 | Televis~ao |
| 3 | Blue Ray |
| 4 | DVD |
| 10 | Bicileta |
+----+-----------+
(4 rows)
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Common Table Expression (CTEs)
WITH RECURSIVE - sequencias vazias
WITH RECURSIVE c t e ( n ) AS(SELECT p r o d u t o s p a i . i d + 1
FROM p rodu to s p r o d u t o s p a iWHERE NOT EXISTS
(SELECT NULLFROM p rodu to s p r o d u t o s f i l h o
WHERE p r o d u t o s f i l h o . i d = p r o du t o s p a i . i d +1)AND p r o d u t o s p a i . i d < (SELECT MAX( i d ) FROM p rodu to s )
UNION ALLSELECT c t e . n +1
FROM c t eWHERE NOT EXISTS
(SELECT NULLFROM p rodu to s r
WHERE r . i d = c t e . n + 1))SELECT n AS v a z i a s FROM c t e ;
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Common Table Expression (CTEs)
WITH RECURSIVE - sequencias vazias
postgres=# \i ~/Apresentac~oes/SQLProficiente/cte.sql
+--------+
| vazias |
+--------+
| 2 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+--------+
(6 rows)
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Window Functions
Window functions
• ISO/IEC 9075-2
• Efetivar calculos para determinado agrupamento de linhas
• Nao limita a saıda das tuplas com operacoes GROUP BY
• Utiliza a clausula OVER e PARTITION BY (SQL ANSI)
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Window Functions
OVER — PARTITION BY
SELECT nspname AS esquema ,re lname AS t a b e l a ,r e l t u p l e s AS l i n h a s ,
−− windows frame c r i a d o para cada grupo de esquemasSUM( r e l t u p l e s )
OVER (PARTITION BY nspname ) AS t o t a l l i n h a sFROM p g c l a s s rJOIN pg namespace n
ON r . r e l n a m e s p a c e = n . o i dWHERE r e l k i n d = ’ r ’
AND nspnameNOT IN ( ’ p g c a t a l o g ’ , ’ i n f o r m a t i o n s c h e m a ’ ) ;
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Window Functions
Total de registros por esquema
+---------+------------------+--------+--------------+
| esquema | tabela | linhas | total_linhas |
+---------+------------------+--------+--------------+
| ator | address | 603 | 2111 |
| ator | city | 600 | 2111 |
| ator | country | 109 | 2111 |
| ator | customer | 599 | 2111 |
| ator | actor | 200 | 2111 |
| filme | payment | 0 | 4587 |
| filme | inventory | 4581 | 4587 |
| filme | language | 6 | 4587 |
| public | rental | 16044 | 39575 |
| public | film_category | 1000 | 39575 |
| public | film | 1000 | 39575 |
| public | store | 2 | 39575 |
| public | staff | 2 | 39575 |
+----------------------------------------------------+
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Full Text Search
FTS
• Busca atraves de similaridade
• Classificar resultados pela relevancia
• Consulta baseada em dicionarios
• Definicao de stop words
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Full Text Search
FTS - Exemplo de consulta
SELECT t i t l e , t s h e a d l i n e ( d e s c r i p t i o n ,t o t s q u e r y ( ’ f a t e&i n d i a ’ ) )
FROM f i l mWHERE f u l l t e x t @@ t o t s q u e r y ( ’ f a t e&i n d i a ’ ) ;
+--------------------+------------------------------------------------------------+
| title | ts_headline |
+--------------------+------------------------------------------------------------+
| ANTITRUST TOMATOES | <b>Fateful</b> Yarn of a Womanizer in Ancient <b>India</b> |
| EASY GLADIATOR | <b>Fateful</b> Story of a Monkey Ancient <b>India</b> |
| SLEUTH ORIENT | <b>Fateful</b> Character Study of a <b>India</b> |
+--------------------+------------------------------------------------------------+
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Mais recursos
Outras areas a se explorar
• Particionamento
• XML
• Procedimentos Armazenados (CREATE FUNCTION)
• Funcoes anonimas
• Domınios (CREATE DOMAIN)
• Tipo (CREATE TYPE [...])
• Agregacao (CREATE AGGREGATE [...])
• Replicacao (Streaming/Hot Standby)
• Contrib
Leonardo Cezar SQL Proficiente
SQL Proficiente
Recursos do PostgreSQL
Mais recursos
• Duvidas?
• Sugestoes?
• Crıticas?
Leonardo Cezar SQL Proficiente