27
A linguagem SQL no mundo NoSQL Dr. Mauro pichiliani @pichiliani [email protected]

Alinguagem SQL no mundo NOSQL

Embed Size (px)

Citation preview

Page 1: Alinguagem SQL no mundo NOSQL

A linguagem SQL no mundo NoSQL

Dr. Mauro pichiliani@[email protected]

Page 2: Alinguagem SQL no mundo NOSQL

PATROCINADORES

Page 3: Alinguagem SQL no mundo NOSQL

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

Page 4: Alinguagem SQL no mundo NOSQL

Agenda

SQL como linguagem Dados temporais e TSLQ2 MDX SPARQL ORM e SQL SQL e NoSQL Data Science e SQL Conclusões

Page 5: Alinguagem SQL no mundo NOSQL

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!

Page 6: Alinguagem SQL no mundo NOSQL

Adoção e uso da SQL

Site http://db-engines.com

Page 7: Alinguagem SQL no mundo NOSQL

Preferência pela SQL Pesquisa 2016 do Stack Overflow (56k devs) - http://bit.ly/1MpdIlU

Page 8: Alinguagem SQL no mundo NOSQL

Popularidade da SQL

Page 9: Alinguagem SQL no mundo NOSQL

Tecnologias correlacionadas

Page 10: Alinguagem SQL no mundo NOSQL

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

Page 11: Alinguagem SQL no mundo NOSQL

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

Page 12: Alinguagem SQL no mundo NOSQL

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] )

Page 13: Alinguagem SQL no mundo NOSQL

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.}

Page 14: Alinguagem SQL no mundo NOSQL

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

Page 15: Alinguagem SQL no mundo NOSQL

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

Page 16: Alinguagem SQL no mundo NOSQL

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!

Page 17: Alinguagem SQL no mundo NOSQL

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

Page 18: Alinguagem SQL no mundo NOSQL

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

Page 19: Alinguagem SQL no mundo NOSQL

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

Page 20: Alinguagem SQL no mundo NOSQL

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

Page 21: Alinguagem SQL no mundo NOSQL

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

Page 22: Alinguagem SQL no mundo NOSQL

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

Page 23: Alinguagem SQL no mundo NOSQL

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

Page 24: Alinguagem SQL no mundo NOSQL

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

Page 25: Alinguagem SQL no mundo NOSQL

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

Page 26: Alinguagem SQL no mundo NOSQL

Dúvidas?!

Page 27: Alinguagem SQL no mundo NOSQL