スキーマ

Denodo GraphQL サービスでは、Denodo データベースのビューとストアドプロシージャのメタデータから自動的に GraphQL スキーマが作成されます。

Denodo 'hibernate' database model

Denodo 'hibernate' データベースモデル

GraphQL サービスでは、ビューとストアドプロシージャごとにクエリタイプが生成されます。ビューの各フィールドは、そのビューオブジェクトの子として扱われます。ストアドプロシージャオブジェクトの場合は、パラメーターが同様の扱いになります。Denodo のアソシエーションは、別々のオブジェクト間のネストしたリレーションシップにマッピングされるので、GraphQL クエリでは、関連するオブジェクトとそのフィールドが 1 回のリクエストでフェッチされます。

GraphQL の標準イントロスペクションメカニズムを使用できるほか、GraphQL サービス http://localhost:9090/denodo-graphql-service/graphql/<DBNAME>/schema.json に GET リクエストを送信することによって、Denodo データベースのスキーマを容易に取得できます。

Schema request for Denodo 'hibernate' database

Denodo 'hibernate' データベースに対するスキーマリクエスト

スキーマは、Denodo データベースに対してクエリで要求できる一連のデータを記述します。たとえば、上記の Denodo 'hibernate' データベースモデルの場合、Denodo GraphQL サービスで以下のスキーマが生成されます。

Denodo 'hibernate' データベースのスキーマ
type Query {
    order(cust_id: Int, order_id: Int, total_price: BigInteger, order_desc: String, order_date: Timestamp, last_updated_time: Timestamp, _first: Int, _offset: Int): [order]!

    order_detail(order_id: Int, prod_id: Int, price: BigInteger, last_updated_time: Timestamp, _first: Int, _offset: Int): [order_detail]!

    product(prod_id: Int, prod_name: String, prod_desc: String, regular_price: BigInteger, last_updated_time: Timestamp, _first: Int, _offset: Int): [product]!
}

type order {
  cust_id: Int
  order_id: Int
  total_price: BigInteger
  order_desc: String
  order_date: Timestamp
  last_updated_time: Timestamp
  order_detail: [order_detail]!    # Denodo association
}

type order_detail {
  order_id: Int
  prod_id: Int
  price: BigInteger
  last_updated_time: Timestamp
  orders: order    # Denodo association
  product: product
}

type product {
  prod_id: Int
  prod_name: String
  prod_desc: String
  regular_price: BigInteger
  last_updated_time: Timestamp
  order_detail: [order_detail]!    # Denodo association
}

#Custom Scalar for Timestamp. This type uses ISO8601
scalar Timestamp

カスタムスカラー型

Denodo GraphQL サービスには、GraphQL 仕様で定義されていない Denodo の型を扱うために、以下に示すカスタムスカラー型が用意されています。

  • Array: Denodo Array のカスタムスカラー。String として表示されますが、GraphQL クエリの引数として使用することはできません。

    Array 形式
    "array_type": "[{value=666-987-8549}, {value=555-125-7841}]"
    
  • Blob: Denodo Blob のカスタムスカラー。String として表示されますが、GraphQL クエリの引数として使用することはできません。

  • LocalDate: Denodo LocalDate のカスタムスカラー。この型は、ISO 8601 の拡張ローカル日付形式 yyyy-MM-dd に従って日付の書式を設定および解析します。

    LocalDate 形式
    "date_type": "2018-02-04"
    
  • IntervalDaySecond: Denodo Intervaldaysecond のカスタムスカラー。String として表示されますが、GraphQL クエリの引数として使用することはできません。

    IntervalDaySecond 形式
    "intervalds_type": "1 21:01:02.345"
    
  • IntervalYearMonth: Denodo Intervalyearmonth のカスタムスカラー。String として表示されますが、GraphQL クエリの引数として使用することはできません。

    IntervalYearMonth 形式
    "intervalym_type": "-2-3"
    
  • Struct: Denodo Register のカスタムスカラー。String として表示されますが、GraphQL クエリの引数として使用することはできません。

    Struct 形式
    "struct_type": "{SALARY=32330.04, NAME=Diane O'Donnell}"
    
  • Time: Denodo Time のカスタムスカラー。この型は、ISO 8601 の拡張ローカル時刻形式 hh:mm:ss[.sss] に従って時刻の書式を設定および解析します。

    Time 形式
    "time_type": "16:06:11"
    
  • Timestamp: Denodo Timestamp のカスタムスカラー。この型は、ISO 8601 の拡張ローカル日付/時刻形式 yyyy-MM-dd hh:mm:ss[.sss] (日付と時刻の間の区切り文字 T は省略) に従って日付/時刻の書式を設定および解析します。

    Timestamp 形式
    "timestamp_type": "2018-02-04 17:07:06"
    
  • Timestamptz: Denodo Timestamptz のカスタムスカラー。この型は、ISO 8601 のタイムゾーン指定子を使用した拡張ローカル日付/時刻形式 yyyy-MM-dd hh:mm:ss[.sss](±hh:mm:ss|Z) (日付と時刻の間の区切り文字 T は省略) に従って日付/時刻の書式を設定および解析します。

    Timestamptz 形式
    "timestamptz_type": "2018-02-04 16:07:06Z"
    
  • Xml: Denodo Xml のカスタムスカラー。String として表示されますが、GraphQL クエリの引数として使用することはできません。