3. 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.
4. 1. Definição da linguagem de programação
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.
• Projeto open-source:
6. 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
7. 2. Especificação informal da
linguagem de programação
• Tipos de dados: Simples e
complexos
Tipos de dados simples Descrição Exemplo
Scalars
int Inteiro de 32-bit 10
long Inteiro de 64-bit Data: 10L or 10l
Display: 10L
float Ponto flutuante de 32-bit Data: 10.5F or 10.5f or
10.5e2f or 10.5E2F
Display: 10.5F or 1050.0F
double Ponto flutuante de 64-bit Data: 10.5 or 10.5e2 or
10.5E2
Display: 10.5 or 1050.0
Arrays
chararray Matriz de caracteres hello world
(string) em formato Unicode
UTF-8
bytearray Array de bytes (blob)
Tipos de dados
complexos
tuple Um conjunto ordenado de (19,2)
campos
bag Uma coleção de tuplas {(19,2), (18,1)}
(registros)
map Um conjunto de pares de [open#apache]
valores chave.
8. 2. Especificação informal da
linguagem de programação
• Operadores aritméticos
Operação Símbol Observação
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.
9. 2. Especificação informal da
linguagem de programação
• Operadores booleanos
Operadores Símbolo
AND e
OR ou
NOT negação
10. 2. Especificação informal da
linguagem de programação
• Operadores de comparação
Comparação Símbolo
Igual ==
Não é igual !=
Menor que <
Maior que >
Menor ou igual a <=
Maior ou igual a >=
Combinação de matches
padrões
11. 2. Especificação informal da
linguagem de programação
• Operadores nulos
Operador Símbolo
É nulo is null
Não é nulo is not null
12. 2. Especificação informal da
linguagem de programação
• Operadores relacionais
Operador 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.
13. 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‘;
Saída:
002BB5A52580A8ED 18
005BD9CD3AC6BB38 18
00A08A54CD03EB95 3
011ACA65C2BF70B2 5
01500FAFE317B7C0 15
0158F8ACC570947D 3
018FBF6BFB213E68 1
15. 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)*
18. Inicio Fim
Ler todos
caracteres do Sim
comando/linha
Nã Fim de
o fita?
Ler símbolo
Dicionário Sim
Gerar token
?
Nã
o
AFD? Sim Tabela de
símbolos
Nã
o
Tratamento de
erros
log = LOAD 'excite-small.log' AS (user:chararray, time:long, query:chararray);