MAQL DDL

Multi-Dimension Analytical Query Language (MAQL) は、GoodData のレポート作成で使用される、簡単でありながら強力なクエリ言語です。 MAQLの拡張である MAQL DDL (MAQL データ定義言語) は、データモデルの構築や変更で使用されます。

はじめに

DDL 構文は、データベースユーザーにとってはなじみ深く、簡単なものです。 主要なコマンドは次の3つです。

  • CREATE
  • ALTER
  • DROP

これらのコマンドは、次のようなデータモデルを形成するオブジェクトに適用されます。

  • データセット: データの単一結合によるソース。属性とファクトにより構成。
  • 属性: すべての文字列のように追加できないデータのコンテナ、および一部の列 (ID や SSN など)。
  • ファクト: 計算データを含むデータ列 (価格、金額など)。
  • フォルダー: GoodData プロジェクト内で、ユーザーに対して属性とファクトを視覚的に整理するために使用。

CloudConnect 経由の MAQL DDL

CloudConnect Designer の LDM Modeler を使って、データモデルを変更し、それらの変更を GoodData プロジェクトにパブリッシュできます。 CloudConnect Designer を使って変更を行うと、そうした変更は、GoodData プロジェクトに対して実行される際に MAQL DDL コマンドに変換されます。

詳細については、Data Modeling Using the CloudConnect Toolを参照してください。

API 経由の MAQL DDL

REST API インターフェイスを経由して MAQL コマンドを直接使う場合には、次の URLを使用します。

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

<project> の値を、GoodData プロジェクト ID に置き換えてください。 テキストフィールドには、複数のコマンドを入力できます。 これらはすべて単一トランザクションの一部として実行されます。 仮に 1 つでもコマンドが実行できなかった場合、すべてが適用さません(ロールバック)。

識別子

次の MAQL スクリプトのサンプルでは、波括弧 ({ }) で囲まれた語は識別子を表します。 これらは、他のオブジェクトを参照するように、オブジェクトに割り当てられることができる人間が読み取り可能な ID を考えます。

オブジェクトの作成後、この識別子は変更できません。 識別子については、命名規則を選択できます。 識別子には、英数字、アンダーバー (_)、ドット (.) が使用できます (すなわち、[A-Za-z0-9_.])。

 下の例では、識別子で「folder.」や「fact.」などのプレフィクスが付けられることがよくあります。 

同期

どのコマンドも、データの正式な表現を定義する論理データモデル を変更します。 この抽象レイヤーの下には、GoodData が計算に使用する 物理データモデルがあります。

MAQL DDL を使って変更を適用したら、SYNCHRONIZE コマンドを呼び出して、それらの変更を物理データモデルに適用します。 視覚的な変更 (名前、説明、フォルダー内のメンバーシップ) は物理モデルに同期する必要はありません。

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

データセット

データセットは、属性とファクトの名前付きコンテナです。

CREATE DATASET

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

ALTER DATASET

属性/ファクトの追加

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

属性/ファクトの削除

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;

データセットの名前の変更

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

日付ディメンション

GoodData では、あらかじめ日付ディメンションのデータセットが用意されています。 プロジェクトの論理データモデルの作成/変更時に、これらのデータセットを MAQL DDL で使用できます。

日付ディメンションのインポート

プロジェクトで日付ディメンションが1つだけ必要な場合には、次のコマンドを実行します。

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

最初のコマンドでデータセットをプロジェクトにインポートし、2番目のコマンドでこのデータセットをファクトテーブル f_quotes に結合させます。

複数の日付ディメンションを使用するには、(技術上の理由で) 特別の識別子と (視覚的な理由で) タイトルにより、区別する必要があります。

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

日付ディメンションの更新

会計年度のカレンダーを使用している場合、テンプレートの新バージョンが断続的にリリースされる可能性があります。 その場合、そのテンプレートから作成したプロジェクトですべての日付ディメンションを更新する必要があります。

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

属性

属性は、データの集約 (またはスライス) 方法を特性する単位 (担当者、市町村、曜日、ID、グループなど) です。

属性には、任意で追加ラベルを含めることができます。 これらのラベルは、同じセマンティック値に関する別の文字列表現になります。 例えば、表示名が「J. Doe」、「Doe, John」、「Johnny」等だとしても、 「John Doe」と同一人物です。

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

1つの属性に複数の追加ラベルを割り当てた場合、その中から既定の属性ラベルを指定できます。 複数のラベルを持つ属性を作成した場合、リストの最初のラベルが既定ラベルに割り当てられます。

既定ラベルを変更するには、Alter attribute 構文を使用します。

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

レポートにリンクを持つラベルを表示するには、そのラベルにハイパーリンクを追加します。

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

ラベルことに属性をソートできます。 ラベルを作成して順序どおりに並べるには、順序 (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;

ファクト

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

フォルダー

フォルダーは、レポート内のファクト/属性、メトリックを視覚的に整理するために使用します。 フォルターには、1つの種類のオブジェクトしか含まれないため、タイプとなります。

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

フォルダーは、属性、メトリック、ファクトの作成時や変更時に自動的にデータが読み込まれます。 フォルダーのオブジェクト名を変更するには:

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

パフォーマンスの最適化

データモデルのパフォーマンスを最適化するには、次の手法を使います。

DATATYPE を指定する

既定では、データマートは自動的にすべてのファクトを小数 (12,2) で保存し、すべての属性とラベルを 128 文字の長さの文字列で保存します。 パフォーマンス上の理由で、または他のデータタイプで保存したい場合は、列のデータタイプを再定義できます。

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

 

サポートされるデータタイプは、次のとおりです。

データタイプ形式備考
VARCHAR (N) N (1..10000)
DECIMAL (M,D) M min(-1e+20) max(1e+20), D max = 6. 許容最大値は M<=50 ですが、この数値はパフォーマンスに影響します。 D < M を常に維持します。
INT min(-2147483648) max(2147483647)
BIGINT min(-1e+15) max(1e+15)
DATE‘YYYY-MM-DD’ 
DOUBLE 推奨しません

 以前からプロジェクトに DATE のデータタイプを含めていた場合、GoodData が提供する日付ディメンションに自動的にマッピングされます。

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

複数のファクト列を作成する

下の例では、ファクト fact.quotes.open_price は既にファクト列 f_quotes.f_open_price を持っていますが、パフォーマンス上の理由から、同じ列を f_quotes2 に追加できます。

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