Microsoft SQL Server 2016 e JSON uma combinação bem interessante – Parte I

Muito bom dia, comunidade, segunda – feira, eita dia complicado para se começar uma nova semana. Mas a esperança é que temos mais um feriado pela frente, kkkkkk!!!! Como tudo em nossas vidas sempre nos deparamos com situações inusitadas, adversas e até mesmo aqueles que parecem que não vamos conseguir encontrar uma solução ou possível resposta.

Pensando desta forma podemos fazer um paralelo entre muitas situações que nos encontramos quando estamos trabalhando em nossos projetos de banco de dados, mais especificamente quando um desenvolvedor totalmente focado em seu código fonte imagina como seria possível utilizar um pequeno código Java Script como forma de consumir ou até mesmo armazenar um dado.

Será que isso seria possível? A resposta até meados de 2015 seria não, mas agora com o surgimento do Microsoft SQL Server 2016 e suas novidades, dentre elas o suporte nativo ao JSON podemos afirmar que sim, é possível sim trabalhar com esta notação de objetos diretamente no SQL Server.

Esta e outras novidades do Microsoft SQL Server 2016 foram destacadas neste mesmo blog, caso você ainda não tenha acessado, fique a vontade, selecione um dos links abaixo e descubra quais são estas novidades:

https://pedrogalvaojunior.wordpress.com/2015/07/10/microsoft-sql-server-2016-lista-de-novidades-parte-i/

https://pedrogalvaojunior.wordpress.com/2015/07/16/microsoft-sql-server-2016-lista-de-novidades-parte-ii/

https://pedrogalvaojunior.wordpress.com/2015/07/30/microsoft-sql-server-2016-lista-de-novidades-final/

 

Introdução

Parece até uma brincadeira ou promessa de político, mas para o time de engenheiros do SQL Server isso não é bem assim. O suporte ao JSON era uma das mais aguardadas novidades desta nova versão do SQL Server, além disso, no site do Microsoft connect site, o JSON estava muito bem classificado entre os itens que mais havia recebido votos para ser incluído como uma das novas funcionalidades do SQL Server 2016, foram mais de 1000 votos dedicados somente a esta funcionalidade.

Como forma de atender a comunidade e também trazer uma grande funcionalidade utilizada pelos desenvolvedores ao Microsoft SQL Server 2016, a própria Microsoft entendeu o quanto este recurso poderia ser importante e um grande diferencial para esta nova versão. A introdução do JSON não consiste basicamente no acrescimento de um novo recurso, na verdade o objetivo de permitir o uso desta tecnologia é garantir de forma simples a capacidade de se entender e orientar com uma notação de objetos muito utilizado mundialmente por diversas linguagens de programação como forma de substituição do XML, dentre elas:

JavaScript, Perl, C++, ABAP, Ada, AdvPL, ASP, AWK, Bash, BlizMax, C, C#, Ciao, Clojure, Cobol, ColdFusion, Delphi, Java, Mathlab, Net.Data, Objective C, Photoshop, PHP, Python, Ruby, etc.

Você vai poder encontrar neste artigo um pouco da história do JSON, como esta tecnologia foi criada, de que forma ela esta sendo utilizada e prinicipalmente como esta sendo integrada com o Microsoft SQL Server 2016.

Vale ressaltar que nesta primeira parte você vai encontrar alguns exemplos de como podemos fazer uso do JSON consumindo dados do Microsoft SQL Server através do AdventureWorks2014. Na segunda parte desta série, destacarei:

  • Como criar sua própia estrutura JSON;
  • Funções JSON;
  • Indexação através de índices JSON; e
  • Transformando um JSON Text em uma nova tabela Relacional.

Espero que você possa aproveitar esta primeira parte, obrigado mais uma vez por sua visita e boa leitura.

 

JSON e sua história

JSON (com a pronúncia [‘dʒejzən], J-son em inglês, (Jay-son)), um acrônimo para “JavaScript Object Notation“, é um formato leve para intercâmbio de dados computacionais. JSON é um subconjunto da notação de objeto de JavaScript, mas seu uso não requer JavaScript exclusivamente.[1] [2] O formato JSON foi originalmente criado por Douglas Crockford e é descrito no RFC 4627. O media-type oficial do JSON é application/json e a extensão é .json.

A simplicidade de JSON tem resultado em seu uso difundido, especialmente como uma alternativa para XML em AJAX. Uma das vantagens reivindicadas de JSON sobre XML como um formato para intercâmbio de dados neste contexto, é o fato de ser muito mais fácil escrever um analisador JSON.

Em JavaScript mesmo, JSON pode ser analisado trivialmente usando a função eval(). Isto foi importante para a aceitação de JSON dentro da comunidade AJAX devido a presença deste recurso de JavaScript em todos os navegadores web atuais.

Na prática, os argumentos a respeito da facilidade de desenvolvimento e desempenho do analisador são raramente relevados devido aos interesses de segurança no uso de eval() e a crescente integração de processamento XML nos navegadores web modernos. Por esta razão JSON é tipicamente usado em ambientes onde o tamanho do fluxo de dados entre o cliente e o servidor é de supra importância (daí seu uso por Google, Yahoo, etc., os quais servem milhões de usuários), onde a fonte dos dados pode ser explicitamente confiável, e onde a perda dos recursos de processamento XSLT no lado cliente para manipulação de dados ou geração da interface, não é uma consideração.

Enquanto JSON é frequentemente posicionado “em confronto” com XML, não é incomum ver tanto JSON como XML sendo usados na mesma aplicação.

Por exemplo, uma aplicação no lado cliente a qual integra dados do Bing Maps com dados atmosféricos através de SOAP, requer suporte para ambos formatos de dados.

Exemplo de um objeto JSON:

{ “Alunos” : [        { “nome”: “João”, “notas”: [ 8, 9, 7 ] },       { “nome”: “Maria”, “notas”: [ 8, 10, 7 ] },       { “nome”: “Pedro”, “notas”: [ 10, 10, 9 ] }    ]}

 

Referências: http://json.org/json-pt.html, http://www.ietf.org/rfc/rfc4627.txt?number=4627

O JSON e Microsoft SQL Server 2016

Conforme destaquei anteriormente o suporte ao JSON por parte do Microsoft SQL Server, era algo bastante esperado com muito ansiedade por todos os profissionais que de alguma forma trabalham com SQL Server e Java Script. Dentre os diversos itens que a Microsoft adicionou em suas listas de possíveis inovações para as próprias versões do produto, o JSON estava sempre entre os primeiros itens.

JSON está substituindo o XML em muitos lugares para intercâmbio de dados. Ele foi projetado primeiramente para JavaScript, mas agora é uma língua independente. Não existem planos para descontinuar o suporte XML no SQL Server, mas adicionar JSON no SQL Server fornece uma alternativa. As vantagens que esta tecnologia pode trazer são inumeras e o SQL Server terá totalmente capacidade técnica de se aproveitar disso, de forma simples, através de uma declaração para estrutura o resultado de uma consulta no formato JSON, como também, definir e padrozinar tabelas para armazenar dados em estruturas JSON.

Desde as primeiras CTPs lançadas pela Microsoft, o JSON já estava presente, mas algumas novidades e possíveis melhorais estavam sendo discutidas e aguardadas para futuras CTPs, dentre elas:

  • SQL servidor 2016 CTP2 – capacidade para formatar e exportar dados como cadeia de caracteres JSON; e
  • SQL 2016 CTP3 – capacidade de carga de texto JSON em tabelas, extrair valores de texto JSON, propriedades do índice em texto JSON armazenados em colunas, etc.

Esta compatibilidade entre o JSON e o SQL Server 2016 é algo bastante interessante de ser discutido, inicialmente muitos profissionais imaginavam que estariamos trabalhando com o chamado JSON nativo, na verdade não é bem assim. Nesta versão do SQL Server toda estrutura JSON será interpretada e reconhecido através do formato de dados Nvarchar, devido a algumas razões:

  • Migration – Em diversos estudos realizados pelo time de engenheiros do SQL Server em conjunto com equipes de desenvolvimento, chegou-se a conclusão que grande parte dos dados tratados e transacionados através do JSON encontram-se no forma texto, sendo assim, como forma de garantir uma possível migração de dados ficou estabelecido o uso do tipo de dados Nvarchar.
  • Compatibilidade – NVARCHAR é suportado em todos os componentes do SQL Server, então JSON também será apoiada por todo o lado. Você pode colocar JSON em Hekaton, tabelas temporais ou colunas existente em tabelas, aplicar diretivas de segurança padrão, incluindo segurança de nível de linha, usar índices B-Tree e FTS padrão, usar JSON como um parâmetro ou valor de retorno de procedimentos e UDFs, etc.
  • Suporte do lado Cliente – Quando falamos do lado cliente, existem milhares de considerações que terminaram o uso do Nvarchar como formato de dados para se trabalhar com JSON, entre estas observações foram identificadas que aplicações Web e aplicações móveis consumidoras da tecnologia JSON são nativas do JavaScript, onde estas terão total capacidade de analisar e reconhecer dados no formato texto através do Nvarchar, muitas vezes reconhecido como um Objeto mesmo que este não esteja definido de forma padronizada.

Exemplos

Vamos então trabalhar com alguns exemplos de JSON no Microsoft SQL Server 2016. Para estes exemplos estou utilizando uma Virtual Machine criado no Microsoft Azure, rodando o SQL Server 2016 CTP3 (versão lançada em 28/10/2015 – http://blogs.technet.com/b/dataplatforminsider/archive/2015/10/28/sql-server-2016-everything-built-in.aspx) e AdventureWorks2016CTP3 disponível para o 2016, caso você queira montar o mesmo ambiente rodando stand-alone, faça download do SQL Server 2016 e AdventureWorks, ou saber mais sobre esta nova versão acesse:

  1. http://blogs.technet.com/b/dataplatforminsider/archive/2015/10/28/sql-server-2016-everything-built-in.aspx
  2. https://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2016
  3. https://azure.microsoft.com/en-us/marketplace/partners/microsoft/sqlserver2016ctp3evaluationwindowsserver2012r2/
  4. http://www.microsoft.com/en-us/download/details.aspx?id=49502

Neste momento, vamos por a mão na massa como eu costumo destacar para meus alunos, quem não pratica não aprende, desta forma let’s go:

 

— Exemplo 1 – Utilizando a claúsula JSON Auto —

Neste primeiro exemplo através do banco de dados AdventureWorks2016CTP3, vamos utilizar a tabela Address pertencente ao schema Person, onde a mesma possui mais de 19.000 linhas de registro. Para nosso exemplo vamos utilizar a claúsula Top 20 para limitar a quantidade de linhas de registro que iremos tornar para o total de 20, para tal apresento o bloco de código abaixo:

Select Top 20

AddressID, AddressLine1,

City, PostalCode,

ModifiedDate

from [Person].[Address]

For JSON Auto

Go

 

Observe que a forma de uso do comando JSON em conjunto com a claúsula Auto é muito similar ao XML, mas logicamente a diferença é clara no formato do resultado, conforme apresenta a Figura 1 a seguir:

JSON1

Figura 1 – Resultado do processamento do Exemplo 1, utilizando o comando For JSON Auto.

Note que os valores retornados pelo FOR JSON Auto são apresentados seguindo uma separação de chaves para representar cada linha de registro, em conjunto com o sinal de dois-pontos (:) como elemento separador das colunas e seus respectivos valores.

Neste caso, o FOR JSON AUTO automaticamente formata o resultado JSON com base na ordem de colunas das tabelas. Você não precisa especificar explicitamente os caminhos nos aliases de coluna ou usar subconsultas aninhadas. A Primeira coluna na lista SELECT será usada como propriedade dos objetos de primeiro nível na matriz JSON. Quando uma coluna de outras tabelas for encontrada que ele será automaticamente formatada como objeto aninhado dentro do objeto de primeiro nível.

 

— Exemplo 2 – Utilizando a claúsula JSON Path —

Para este segundo exemplo, vamos limitar ainda mais o retorno de linhas para nosso select, definindo o valor 5(cinco) no comando Top, ficando ele declarado como Top 5, conforme apresenta o bloco de código abaixo:

Select Top 5

AddressID, AddressLine1,

City, PostalCode,

ModifiedDate

from [Person].[Address]

For JSON Path

Go

JSON2

Figura 2 – Resultado do processamento do Exemplo 2, utilizando o comando For JSON Path.

Vale ressaltar que esta claúsula FOR JSON Path é uma nova cláusula (embora semelhante ao existente para XML PATH) que cria o JSON objeto usando um conjunto de (nome da coluna: valor da célula) pares de consultas T-SQL, mas que permite montar uma estrutura semelhante a uma hierarquia dentro de um documento JSON diretamente no formato texto, possibilitando que esta hierarquia sirva como parâmetro para organização do resultado.

 

Para tentar ilustrar apresento outro exemplo fazendo uso de uma varíavel em conjunto com o JSON estabelecendo uma estrutura hierarquia para retorno dos dados.

— Exemplo 3 – Utilizando a claúsula JSON Path em conjunto com uma variável –

DECLARE @MyJson as NVARCHAR(MAX)

SET @MyJson = (SELECT ‘Pedro’ as Nome, ‘Galvão’ as Sobrenome,

35 as Idade, Getdate() as DataAtual

FOR JSON PATH)

 

Print (@MyJson)

 

Agora sim, temos um resultado um pouco mais legível e até mesmo mais compreensível, conforme apresenta a Figura 3 abaixo:

JSON3

Figura 3 – Resultado do processamento do Exemplo 3, utilizando o comando For JSON Path.

— Exemplo 4 – Utilizando a claúsula JSON Root –

Neste último exemplo vamos trabalhar com a claúsula FOR JSON Root, onde podemos adicionar no resultado do nosso JSON uma raiz, ou seja, um ponto inicial dentro da estrutura de resultado JSON, para isso vamos utilizar o código abaixo:

Select Top 20

AddressID As ‘ID’,

AddressLine1 As ‘AdressLine’,

City As ‘City’,

PostalCode As ‘Cep’,

ModifiedDate As ‘Data Modificação’

from [Person].[Address]

For JSON Path, Root(‘MyJSON’)

Go

JSON4

Figura 4 – Resultado do processamento do Exemplo 4, utilizando o comando For JSON ROOT.

Após o processamento do select anterior obtemos o resultado apresentado acima, onde podemos notar de forma clara que o resultado do nosso JSON, tem um ponto raiz denominado MyJSON, onde este elemente representa o ponto inicial de leitura e reconhecimento do nosso JSON.

Conclusão

O Microsoft SQL Server 2016 esta chegando e com ele uma série de novas funcionalidades, melhorias e inovações estão sendo apresentadas, entre estes itens o JSON é um dos mais aguardados.

A tecnologia JSON criada inicialmente como uma forma de se consumir dados de maneira mais simples em comparação ao formato XML, torna-se uma referência mundial e isso fez com que a Microsoft e seu tipo de engenheiros do SQL Server entende-se a necessidade de adicionar este recurso ou melhor dizendo funcionalidade ao produto.

Nesta primeira parte, você pode conhecer um pouco mais sobre esta tecnologia, entender o porque o tipo de dados Nvarchar foi definido e tratado como formato padrão para se trabalhar com o JSON dentro do SQL Server 2016. Os exemplos apresentados neste post demonstraram como é possível fazer uso do JSON em um simples Select, como também, formas de se consumir o JSON através da declaração de variáveis.

Como destacado anteriormente na segunda parte desta série, você vai conhecer como o JSON e suas funções podem ser utilizadas, como também, o uso de indexação com JSON.

Espero que você tenha gostado deste artigo, que as informações compartilhadas aqui possam lhe ajudar, mostrando como o Microsoft SQL Server esta a cada dia se tornando um ambiente completo de Gerenciamento de Banco de Dados totalmente compatível com diversas tecnologias e linguagens de programação.

Mais uma vez obrigado, nos encontramos em breve.

Até a próxima.

 

Realizando uma rápida analise do resultado apresentado pelo select anterior não encontramos inicialmente muitas diferenças entre o For JSON Auto ou For JSON Path, conforme apresenta a Figura 2:

Autor: Junior Galvão - MVP

Profissional com vasta experiência na área de Tecnologia da Informação e soluções Microsoft. Graduado no Curso Superior em Gestão da Tecnologia de Sistemas de Informação pela Uninove - Campus São Roque. Pós-Graduado no Curso de Gestão e Engenharia de Processos para Desenvolvimento de Software com RUP na Faculdade FIAP - Faculdade de Informática e Administração Paulista de São Paulo. Pós-Graduado em Gestão da Tecnologia da Informação Faculdade - ESAMC Sorocaba. Cursando Mestrado em Ciências da Computação - UFSCar - Campus - Sorocaba. Formação MCDBA Microsoft, autor de artigos acadêmicos e profissionais postados em Revistas, Instituições de Ensino e WebSistes. Meu primeiro contato com tecnologia ocorreu em 1995 após meus pais comprarem nosso primeiro computador, ano em que as portas para este fantástico mundo se abriram. Neste mesmo ano, comecei o de Processamento de Dados, naquele momento a palavra TI não existia, na verdade a Tecnologia da Informação era conhecida como Computação ou Informática, foi assim que tudo começou e desde então não parei mais, continuando nesta longa estrada até hoje. Desde 2001 tenho atuado como Database Administrator - Administrador de Banco de Dados - SQL Server em tarefas de Administração, Gerenciamento, Migração de Servidores e Bancos de Dados, Estratégias de Backup/Restauração, Replicação, LogShipping, Implantação de ERPs que utilizam bancos SQL Server, Desenvolvimento de Funções, Stored Procedure, Triggers. Experiência na Coordenação de Projetos de Alta Disponibilidade de Dados, utilizando Database Mirroring, Replicação Transacional e Merge, Log Shipping, para versões: 2000, 2005, 2008, 2008 R2, 2012 e 2014. Atualmente trabalho como Administrador de Banco de Dados no FIT - Instituto de Tecnologia da Flextronics, como também, Consultor em Projetos de Tunnig e Performance para clientes. Desde 2008 exerço a função de Professor Universitário, para as disciplinas de Banco de Dados, Administração, Modelagem de Banco de Dados, Programação em Banco de Dados, Sistemas Operacionais, Análise e Projetos de Sistemas, entre outras. Possuo titulação Oficial Microsoft MVP - SQL Server renovada desde 2007.

2 comentários em “Microsoft SQL Server 2016 e JSON uma combinação bem interessante – Parte I”

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s