Tradutor de Pig Latin

Post on 29-Jun-2015

373 views 0 download

description

Etapas de desenvolvimento de um tradutor da linguagem de manipulação de dados Pig Latin. (Análise Léxica)

Transcript of Tradutor de Pig Latin

Etapas do processo de desenvolvimento do

tradutor de Pig Latin

Elen Arantza

Regina Mares

Definição da linguagem de programação

-1-

1. Definição da linguagem de programação

Pig é um projeto de pesquisa do grupo Yahoo!, criado com o objetivo de desenvolver uma infraestrutura para suportar a análise de

grandes conjuntos de dados.

A mais alta camada de abstração no Pig é a

linguagem de consulta chamada Pig Latin, pela qual os usuários expressam as tarefas de

análise de dados, como consultas no estilo SQL ou álgebra relacional.

1. Definição da linguagem de programação

• Projeto open-source:

Especificação informal da linguagem de programação

-2-

2. Especificação informal da linguagem de programação

• Palavras-chave:

and any all as bag by chararray CONCAT COUNT cross load

define distinct double

explain filter foreach

generate group illustrate SUM

2. Especificação informal da linguagem de programação

• Tipos de dados: Simples e complexosTipos de dados simples Descrição Exemplo

Scalars

int Inteiro de 32-bit 10

long Inteiro de 64-bit Data: 10L or 10lDisplay: 10L

float Ponto flutuante de 32-bit Data: 10.5F or 10.5f or 10.5e2f or 10.5E2FDisplay: 10.5F or 1050.0F

double Ponto flutuante de 64-bit Data:     10.5 or 10.5e2 or 10.5E2Display: 10.5 or 1050.0

Arrays

chararray Matriz de caracteres (string) em formato Unicode UTF-8

hello world

bytearray Array de bytes (blob)

Tipos de dados complexos

tuple Um conjunto ordenado de campos

(19,2)

bag Uma coleção de tuplas (registros)

{(19,2), (18,1)}

map Um conjunto de pares de valores chave.

[open#apache]

2. Especificação informal da linguagem de programação

• Operadores aritméticos

Operação Símbolo

Observação

Adição +

Subtração -

Multiplicação *

Divisão /

Módulo  % Retorna o resto divido por b (a%b).

Bicondicional ? : (condição ? valor_se_verdadeiro : valor_se_falso)Bicondicional deve ser colocado entre parênteses.

2. Especificação informal da linguagem de programação

• Operadores booleanos

Operadores Símbolo

AND       e

OR   ou

NOT negação

2. Especificação informal da linguagem de programação

• Operadores de comparação

Comparação SímboloIgual  ==Não é igual !=Menor que   <Maior que >Menor ou igual a   <=Maior ou igual a >=Combinação de padrões

matches

2. Especificação informal da linguagem de programação

• Operadores nulos

Operador Símbolo

É nulo  is nullNão é nulo   is not null  

2. Especificação informal da linguagem de programação

• Operadores relacionaisOperador Descrição

COGROUP GROUP e COGROUP são idênticos. Ambos trabalham com uma ou mais relações.

CROSS Calcula o produto cruzado de duas ou mais relações.

DEFINE

DISTINCT Remove tuplas duplicadas em uma relação.

FILTER Seleciona tuplas de uma relação baseada em alguma condição.

FOREACH Gera transformações de dados baseadas em colunas de dados.

GROUP Agrupa os dados em uma ou mais relações.

IMPORT

JOIN (inner) Executa uma junção interna de duas ou mais relações baseadas em valores de campo comuns.

JOIN (outer) Executa uma junção externa de duas ou mais relações com base em valores de campo comuns.

LIMIT Limita o número de tuplas na saída.

LOAD Carrega dados do sistema de arquivos.

MAPREDUCE Executa tarefas nativas Map-reduce dentro de um script de Pig

ORDER BY Classifica uma relação baseada de um ou mais campos.

SAMPLE Divide uma relação em duas ou mais relações.

SPLIT Divide uma relação em duas ou mais relações.

STORE Armazena ou salva os resultados para o sistema de arquivos.

STREAM Envia dados para um script externo ou programa.

UNION Calcula a união de duas ou mais relações.

2. Especificação informal da linguagem de programação

• Programa exemplo:

log = LOAD 'excite-small.log' AS (user, time, query);grpd = GROUP log BY user;cntd = FOREACH grpd GENERATE group, COUNT(log);STORE cntd INTO 'output‘;

002BB5A52580A8ED 18005BD9CD3AC6BB38 1800A08A54CD03EB95 3011ACA65C2BF70B2 501500FAFE317B7C0 150158F8ACC570947D 3018FBF6BFB213E68 1

Saída:

Especificação formal da linguagem de programação

-3-

3. Especificação formal da linguagem de programação

Dicionário:

Variáveis:-Identificador de posição: -Identificador: L (L + D)* (_ (L + D)*)*-Constantes: D (D)*-Seqüência de caracteres: ‘ (L + D + B + C)* ’-Comentários: -- (L + D + B + C)*

3. Especificação formal da linguagem de programação

AFD:

Especificação do fluxograma de execução (Análise léxica)

-4-

Inicio

Ler todos caracteres do

comando/linha

Ler símbolo

Dicionário?

AFD?

Tratamento de erros

Não

Tabela de símbolos

Sim

Gerar token

Não

Sim

Fim de fita?

Não

Fim

Sim

log = LOAD 'excite-small.log' AS (user:chararray, time:long, query:chararray);

Especificação do processo de análise léxica (Teste de mesa)

-5-

Exemplo de manipulação de dados

>> log = LOAD 'excite-small.log' AS (user:chararray, time:long, query:chararray);>> grpd = GROUP log BY user;>> cntd = FOREACH grpd GENERATE group, COUNT(log);>> STORE cntd INTO 'output‘;

002BB5A52580A8ED 18005BD9CD3AC6BB38 1800A08A54CD03EB95 3011ACA65C2BF70B2 501500FAFE317B7C0 150158F8ACC570947D 3018FBF6BFB213E68 1

>>

SELECT user, COUNT(*) FROM excite-small.log GROUP BY user;

• Yahoo! Research: http://research.yahoo.com/project/90

• Apache Pig:http://pig.apache.org/

-Referências-