MAQL DDL

A linguagem de consulta analítica multidimensional (MAQL) é uma linguagem de consulta simples, mas poderosa, usada em relatórios do GoodData. Uma extensão de MAQL, MAQL DDL (linguagem de definição de dados MAQL) é usada para a criação e modificação de modelos de dados.

Guia Rápido

A sintaxe DDL é simples e familiar aos usuários de banco de dados. Existem três comandos principais:

  • CREATE
  • ALTER
  • DROP

Esses comandos podem ser aplicados para os seguintes objetos que formam o modelo de dados:

  • conjunto de dados são as únicas fontes comuns de dados consistindo de atributos e fatos.
  • Atributos são recipientes de dados que não podem ser adicionados como todas as strings e algumas colunas numéricas como ID ou SSN
  • Fatos são as colunas de dados contendo dados de cálculo, tais como os preços e quantidades.
  • Pastas são usadas para organizar atributos e fatos visualmente para os usuários dentro de um projeto do GoodData

MAQL DDL via CloudConnect

Através do LDM Modeler no CloudConnect Designer, você pode fazer modificações em um modelo de dados e publicá-la em seus projetos do GoodData. Quando fizer alterações por meio do CloudConnect Designer, elas são convertidas em comandos DDL MAQL quando eles são executados em seus projetos GoodData.

Para obter mais informações, consulte Modelagem de dados usando a ferramenta CloudConnect.

MAQL DDL via API

Para usar os comandos MAQL diretamente através da interface REST API, use a seguinte URL:

http://secure.gooddata.com/gdc/md/<project>/ldm/manage2

Substitua o valor de <projeto> com sua ID de projeto do GoodData. Você pode digitar vários comandos no campo de texto. São todos executados em conjunto, como parte de uma única transação. Se algum deles falhar, nenhum será aplicado (reversão).

Identificadores

Nos exemplos de script MAQL abaixo, as palavras entre {chaves} denotam identificadores. Pense nelas como IDs legíveis que você pode atribuir a objetos e consultá-las em outros objetos.

Depois que um objeto é criado, o identificador não pode ser alterado. Você pode selecionar suas próprias convenções de nomeação de identificadores. Identificadores podem conter caracteres alfanuméricos, sublinhados e ponto (ou seja, [A-Za-z0-9 _.]).

 Nos exemplos abaixo, identificadores frequentemente são prefixadas com “folder.”, “fact.” etc. 

Sincronizar

Todos os comandos modificam o modelo de dados lógico que define a representação formal dos seus dados. Sob essa camada de abstração está um modelo de dados físico que o GoodData usa para realizar cálculos.

Depois de aplicar as alterações através da MAQL DDL, chame o comando SYNCHRONIZE para aplicar as alterações correspondentes ao modelo de dados físico. Mudanças visuais (nomes, descrições, associação em pastas) não precisam ser sincronizadas com o modelo físico.

SYNCHRONIZE {dataset.one}, {dataset.two} PRESERVE DATA;

Conjunto de Dados

Conjunto de dados é um contêiner nomeado para atributos e fatos.

CREATE DATASET

CREATE DATASET {dataset.quotes} VISUAL (TITLE "Stock Quotes Data");

ALTER DATASET

Adicionar atributo/fato

ALTER DATASET {dataset.quotes} ADD {attribute.sector};

Remover atributo/fato

ALTER ATTRIBUTE {attr.players.age} DROP KEYS {d_players_age.id}, {f_players.age_id};
ALTER DATASET {dataset.players} DROP {attr.players.age};
DROP {attr.players.age};
SYNCHRONIZE {dataset.players} PRESERVE DATA;

Alterar o nome do conjunto de dados

ALTER DATASET {dataset.quotes} VISUAL(TITLE "Internal Quotes Data");

Dimensão de Data

O GoodData oferece um conjunto de dados de dimensão Data preparado. Você pode usá-los na MAQL DDL ao criar ou alterar o modelo de dados lógico do seu projeto.

Importar dimensão de data

Se você precisa de apenas uma dimensão de data em seu projeto, execute os seguintes comandos:

INCLUDE TEMPLATE "URN:GOODDATA:DATE";
ALTER ATTRIBUTE {date} ADD KEYS {f_quotes.date};

O primeiro comando importa o conjunto de dados para o projeto, o segundo junta isso à tabela de fatos f_quotes.

Para usar múltiplas dimensões de data, distingua-as por um identificador especial (para fins técnicos) e um título (para fins visuais).

INCLUDE TEMPLATE "URN:GOODDATA:DATE" MODIFY (IDENTIFIER "born", TITLE "Born");
ALTER ATTRIBUTE {born.date} ADD KEYS {f_players.dt_born};

Atualização de dimensão de data

Ao usar calendários fiscais, novas versões do modelo podem ser lançadas intermitentemente. Quando isso ocorre, atualize todas as dimensões de data em seus projetos que foram criadas a partir desse modelo.

UPDATE TEMPLATE "URN:FISCALAPR1:DATE" WITH DATA;

Atributo

Atributos são unidades que permitem que você especifique como agregar (ou segmentar) seus dados, tais como responsável, cidade, dia, ID, grupo.

Atributos podem, opcionalmente, ter rótulos adicionais. Estas são representações alternativas da string do mesmo valor semântico. Por exemplo, uma pessoa João Ninguém continua sendo a mesma pessoa, mesmo que seja visualizada como “J. Ninguém”,“Ninguém, João”, “Joãozinho” etc.

CREATE ATTRIBUTE

CREATE ATTRIBUTE {attr.quotes.symbol} VISUAL(TITLE "Symbol", FOLDER {folder.quotes.attr}) AS {d_quotes_symbol.nm_symbol};

ALTER ATTRIBUTE

ALTER ATTRIBUTE {attr.quotes.symbol} ADD LABELS {attr.quotes.company} VISUAL(TITLE "Company") AS {d_quotes_symbol.nm_company};

DEFAULT LABEL

Se você tem rótulos adicionais atribuído a um atributo, você pode especificar qual é o rótulo de atributo padrão . Ao criar um atributo com vários rótulos, o primeiro rótulo da lista é atribuído como padrão.

Para alterar o rótulo padrão, use a sintaxe de atributo Alter .

CREATE ATTRIBUTE {attr.quotes.attribute} AS LABELS {attr.quotes.label1} VISUAL(TITLE "Label 1"),  {attr.quotes.label2};
ALTER ATTRIBUTE {attr.quotes.attribute} DEFAULT LABEL {attr.quotes.label2};

HYPERLINK LABEL

Para exibir os rótulos com um link nos relatórios, adicione hiperlinks aos rótulos:

CREATE ATTRIBUTE {attr.quotes.attribute} AS LABELS {attr.quotes.label1} VISUAL(TITLE "Hyperlink") HYPERLINK;
ALTER ATTRIBUTE {attr.quotes.attribute} DEFAULT ALTER LABELS {attr.quotes.label1} HYPERLINK;

SORTING BY LABEL

Você pode classificar os atributos por rótulos. Para criar e ordenar rótulos, uso o seguinte código e especifique o tipo de ordenação (ASC/DESC):

CREATE ATTRIBUTE {attr.quotes.attribute} AS LABELS {attr.quotes.label1} VISUAL(TITLE "Label 1") ORDER {attr.quotes.label1} ASC;
ALTER ATTRIBUTE {attr.quotes.attribute} ORDER BY {attr.quotes.label1} DESC;

Fato

CREATE FACT

CREATE FACT {fact.quotes.open_price} VISUAL( TITLE "Open Price", FOLDER {folder.quotes.fact})
AS {f_quotes.f_open_price};

ALTER FACT

ALTER FACT {fact.quotes.open_price} ADD {f_quotes2.f_open_price};

Pasta

Pastas são usadas para organizar visualmente fatos ou atributos e métricas dentro do projeto. As pastas são tipos; elas só podem conter objetos de um tipo.

CREATE FOLDER

CREATE FOLDER {folder.quotes.attr} VISUAL ( TITLE "Stock Quotes Data", DESCRIPTION "Stock quotes data obtained from John Doe etc." )
TYPE ATTRIBUTE;

ALTER FOLDER

Pastas são preenchidas durante a criação e modificação de atributos, métricas e fatos. Para modificar o nome do objeto da pasta:

ALTER FOLDER {folder.quotes.attr} VISUAL(TITLE "Quotes Attributes");

Otimização de desempenho

Use as seguintes técnicas para otimizar o modelo de dados de desempenho:

Specifique um DATATYPE

Por padrão, o datamart armazena automaticamente todos os fatos como decimais (12,2) e todos os atributos e rótulos como sequências de caracteres de 128. Por motivos de desempenho ou para armazenar outros tipos de dados, você pode redefinir seu tipo de dados de coluna:

ALTER
 DATATYPE {d_quotes_symbol.nm_symbol} VARCHAR(4),
{d_quotes_symbol.nm_symbol} VARCHAR(80), {f_quotes.f_open_price}
DECIMAL(10,2);

 

Os tipos de dados compatíveis são:

tipo de dadosformulárioobservação
VARCHAR (N) N (1..10000)
DECIMAL (M,D) M min(-1e+20) max(1e+20), D max = 6. O máximo permitido é M<=50, mas afetará o desempenho. Mantenha sempre D < M.
INT min(-2147483648) max(2147483647)
BIGINT min(-1e+15) max(1e+15)
DATE‘YYYY-MM-DD’ 
DOUBLE não recomendado

 O tipo de dados data mapeia automaticamente com a dimensão de Data fornecida pelo GoodData, se você anteriormente incluiu no projeto:

INCLUDE TEMPLATE "URN:GOODDATA:DATE" MODIFY (IDENTIFIER "my-date", TITLE "quote");

Criação de várias colunas de fato

No exemplo a seguir, o fato fact.quotes.open_price já tem uma coluna de fato f_quotes.f_open_price, mas por motivos de desempenho, você pode adicionar uma coluna idêntica em f_quotes2:

ALTER FACT {fact.quotes.open_price} ADD {f_quotes2.f_open_price};