Sql proficiente

27
SQL Proficiente SQL Proficiente Recursos de manipula¸ ao de dados Leonardo Cezar DATAPREV - PostgreSQL Brasil 31 de maio de 2010 Leonardo Cezar SQL Proficiente

description

Palestra sobre funcionalidades da linguagem SQL do PostgreSQL 9.0

Transcript of Sql proficiente

Page 1: Sql proficiente

SQL Proficiente

SQL ProficienteRecursos de manipulacao de dados

Leonardo Cezar

DATAPREV - PostgreSQL Brasil

31 de maio de 2010

Leonardo Cezar SQL Proficiente

Page 2: 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

Page 3: 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

Page 4: 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

Page 5: 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

Page 6: 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

Page 7: 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

Page 8: 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

Page 9: 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

Page 10: 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

Page 11: 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

Page 12: 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

Page 13: 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

Page 14: 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

Page 15: 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

Page 16: 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

Page 17: 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

Page 18: 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

Page 19: 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

Page 20: 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

Page 21: 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

Page 22: 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

Page 23: 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

Page 24: 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

Page 25: 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

Page 26: 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

Page 27: Sql proficiente

SQL Proficiente

Recursos do PostgreSQL

Mais recursos

• Duvidas?

• Sugestoes?

• Crıticas?

Leonardo Cezar SQL Proficiente