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

Sql proficiente

Jul 09, 2015

Download

Technology

Leonardo Cezar

Palestra sobre funcionalidades da linguagem SQL do PostgreSQL 9.0
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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