Upload
pichiliani
View
580
Download
2
Embed Size (px)
Citation preview
A linguagem SQL no mundo NoSQL
Dr. Mauro pichiliani@[email protected]
PATROCINADORES
Quem sou eu
Mestre e doutor em computação pelo ITA
Escritor da SQL Magazine, .NET e Java Magazine
Colaborador do iMasters há 15 anos
Autor do livro “Conversando sobre banco de dados” e “Introdução ao MongoDB”
Co-produtor do DatabaseCast
Consultor independente e autor de cursos on-line e presencais
Agenda
SQL como linguagem Dados temporais e TSLQ2 MDX SPARQL ORM e SQL SQL e NoSQL Data Science e SQL Conclusões
SQL como linguagem
SQL é uma linguagem DSL (Domain Specific Language)
Proposta no final dos anos 1970 e padronizada pelo ANSI em 1986
Alto nível: o que você precisa e não como fazer
Suportada por diversos produtos: SQL Server, MySQL, PostgreSQL, Oracle, etc
Possui “dialetos” com recursos exclusivos. Exemplos: TSQL, Pl/SQL e CQL
Fato: A SQL é a linguagem mais utilizada no mundo para manipular dados!
Preferência pela SQL Pesquisa 2016 do Stack Overflow (56k devs) - http://bit.ly/1MpdIlU
Popularidade da SQL
Tecnologias correlacionadas
SQL: prós e contras
SQL é dividia em grupos: DDL, DML e DCL
Similaridade com língua inglesa
Requer modelo relacional
Baseada em cláusulas, palavras-chaves, expressões e recursos extras
Diferente do que é utilizado em uma linha de programação
Otimizações geralmente realizadas nos objetos e não nos comandos
Dados temporais e TSQL2
TSQL2 surgiu em 1990 para lidar com dados temporais
Operações para lidar com intervalos e dados históricos
Conceitos usados em bancos temporais específicos e recentemente aproveitados no Oracle FlashBack e SQL Server 2016
SELECT SUM(N.Cost), SUM(N2.Cost)VALID VALID(NI)FROM NBC_FB_Insertion AS NI NI2, NBCShows AS N N2WHERE NI.GameName = N.ShowName AND VALID(NI) OVERLAPS VALID(N) AND NI2.GameName = NS2.ShowName ANDVALID(NI2) OVERLAPS VALID(N2) AND TRANSACTION(NI2) OVERLAPS DATE ’now - 14 days’ AND TRANSACTION(N2) OVERLAPS DATE ’now - 14 days’GROUP BY VALID(NI) USING MONTH
MDX – MultiDimensional eXpressions
MDX surgiu em 1980 para consultar dados em cubos OLAP
Somente para leitura e posteriormente transformada em uma ou mais instruções SQL
Adotada no SSAS e nas ferramentas da Pentaho
SELECT [Measures].[Store Sales] ON COLUMNS, [Date].Members ON ROWSFROM SalesWHERE ( [Store].[USA].[CA] )
SPARQL – Pesquisa semântica
SPARQL foi criada para consultas textuais aproximadas
Consulta dados definidos em um RDF e organizados de acordo com uma ontologia
Lida com conhecimento semântico de alto nível
Padronizada pelo W3C em 2008 e implementada no DB2 e Apache Jena
PREFIX foaf: <http://xmlns.com/foaf/0.1/>SELECT ?name ?emailWHERE { ?person a foaf:Person. ?person foaf:name ?name. ?person foaf:mbox ?email.}
ORM e SQL
ORM lida com objetos na aplicação
Geralmente obtém dados da fonte e possui uma linguagem específica para manipulação
Exemplo : Hibernate 3 suporta a JPQL (Java Persistence Query Language)
Modelo é criado em classe Java por anotações como @Entity, @ManyToMany, @Id, @OneToMany e outras
Exemplo de modelo: arquivo Author.java Exemplo de consulta com JPQL: arquivo jpsql.java
Paradigna Map/Reduce
Novas versões de linguagens estão apostado em Map/Reduce e recursos de linguagems funcionais (programação reativa)
Streams do Java 8 e LINQ com funções Lambda no C#
Exemplo: Uso de Streams no Java 8
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");
myList .stream() .filter(s -> s.startsWith("c")) .map(String::toUpperCase) .sorted() .forEach(System.out::println); // Retorna C1 e depois C2
SQL e NoSQL
NoSQL não quer dizer necessariamente “não use a linguagem SQL”
Muitos NoSQL utilizam algo parecido com a SQL
Diferenças importantes na forma como os dados são modelados e organizados
Modificações “livres” do modelo (schema free design)
NoSQL investe muito em distribuição de dados
Devs possuem certo “preconceito” quanto a joins da SQL!
Cassandra e CQL
Cassandra é um NoSQL chave/valor
Possui a CQL (Cassandra Query Language) com suporte a DDL, DML e DCL muito familiar
Maioria dos desenvolvedores se adaptam bem
Não possui JOINS!
Exemplo: arquivo Cassandra.sql
MongoDB
MongoDB é o banco NoSQL mais popular
Baseado em documentos organizados em JSON
Manipulação de dados pela linguagem JavaScript
Devs “sofrem”, pois MongoDB NÃO suporta SQL!
Site http://querymongo.com “traduz” SQL do MySQL para comandos do MongoDB
Exemplo: arquivo QueryMySQL.sql e ComandosMongoDB.js
SQL e Grafos
Principais NoSQL orientados a grafos: Neo4J e Titan
Linguagem Gremlin do framework TinkerPop (http://bit.ly/2dENzbT) é a mais utilizada
Projeto SQL-Gremlin (http://bit.ly/2cSFQHL) permite uso da SQL para acessar dados em grafos
É necessário um arquivo que faz o mapeamento entre nós/arestas e tabelas/colunas
Exemplo de maneamento: arquivo gmap.json Exemplo de consulta: arquivo sql_grafo.sql
Data Science e SQL
Projetos de data science utilizam diversas tecnologias: R, Python, Azure, AWS, Scala, Java, Hadoop, Spark, etc
Em geral dados são exportados do mundo relacional para formato texto (CSV, XML, JSON)
Dados são importados em outros ambientes (data lakes da arquitetura lambda)
A manipulação dos dados envolve: Tratamento para limpeza, formatação, substituição, geração, etc Geração de gráficos Cálculos estatísticos Exploração de diferentes modelos de classificação e predição
R e SQL
Linguagem R possui recursos próprios para lidar com dados na memória
O objeto DataFrame é o mais empregado
Pacote sqldf do R permite gerar um DataFrame a partir de um SELECT em um banco relacional
SQL Server 2016 se integra com R: SQL Server R services
Passagem de dados para uma função do R com SELECT e retorno no formato de tabela
Exemplo: sqlserver_r.sql
Python e SQL
Linguagem Python é muito empregada para Data Science
Pacotes NymPi, Pandas, SciKit-learn, NLTK e outros
Python pode acessar bases SQL através de driver nativo (Python DB-API)
Jeito “Python” de lidar com dados: SELECT: http://bit.ly/2dEPVYj JOINS: http://bit.ly/2dKb00G
Hadoop e SQL
Hadoop vem sendo utilizado para processar grandes quantidades de dados
HFS para guardar dados e Map/Reduce para processamento
Hive permite lidar com SQL no Hadoop: linguagem HDD (Hive Definition Language) com comandos DDL, DML e DCL
O HDD permite SELECT com FROM, GROUP BY, UNION, OVER, ORDER BY, HAVING e CTE
Trabalho do HIVE é transformar o SELECT em um Map/Reduce
Spark e SQL
Atualmente utiliza-se muito o Spark com a SQL
No Spark os dados são acessos por uma objeto de memória chamado RDD (Resilient Distributed Dataset)
A programação é feita em Scala, Java ou Python
Maioria do processamento é cálculo de agregações ou treinamento de modelo do Machine Learning (MLib)
Spark permite uso de SELECT. Exemplo: arquivo spark.py
Conclusões
Tecnologias para lidar com dados muda muito rápido!
Não tenha medo de aprender algo novo
A SQL é boa e muito utilizada, mas não resolve todos os problemas
É possível aproveitar alguns conhecimentos de SQL no “mundo” NoSQL
SQL é só o começo. A partir dela pode-se partir para algo mais específico dependedo da necessidade
Dúvidas?!