Insights Hub Data Contextualization (DC) – 查询与语义模型

2024-07-11T00:03:13.000+0800
Applications

摘要

本文简单介绍了查询(Query)和语义模型(Semantic Model)的介绍与创建。


详细信息

一、开始

本文将会介绍 Physical 和 Business Query,以及在 Business Intelligence (BI) 中展示 Query 的结果。关于之前 DC 和数据湖使用的视频,参考:Integrated Data Lake & Data Contextualization 集成
Note: SQL 语句结尾不能有分号(;

二、Phsycal Query

2.1 Static Query

SELECT
    products.part AS product_part,
    products.product_time AS product_product_time,
    products.progress AS product_progress,
    products.c_name,
    parts.part AS part_part,
    parts.product_time AS part_product_time,
    parts.progress AS part_progress,
    parts.lot_id,
    parts.assemble_percept_num,
    inspections.work_type,
    inspections.time,
    inspections.result
FROM
    products_product AS products
    INNER JOIN parts_part AS parts ON products.line_id = parts.line_id
    INNER JOIN inspections_inspection AS inspections ON parts.assemble_percept_num = inspections.assemble_percept_num
WHERE
    products.part = '镜框'
使用 Base64 对上述 SQL 语句编码(省略了多余字符):
U0VMRUNUDQogICAgcHJvZHVjdHMucGFydCBBUyBwcm9kdWN0X3BhcnQsDQogICAgcHJvZH......
使用 Postman 调用 API 进行 Query 创建:
 
Static Query 在创建后会直接被执行。调用 API 查询结果:
 

2.2 Dynamic Query

2.2.1 参数化查询

SELECT
    products.part AS product_part,
    products.product_time AS product_product_time,
    products.progress AS product_progress,
    products.c_name,
    products.lot_id AS product_lot_id,
    parts.part AS part_part,
    parts.product_time AS part_product_time,
    parts.progress AS part_progress,
    parts.lot_id AS part_lot_id,
    parts.assemble_percept_num,
    inspections.work_type,
    inspections.time,
    inspections.result
FROM
    products_product AS products
    INNER JOIN parts_part AS parts ON products.line_id = parts.line_id
    INNER JOIN inspections_inspection AS inspections ON parts.assemble_percept_num = inspections.assemble_percept_num
WHERE
    products.lot_id = :"products_product.lot_id" AND parts.progress = :"parts_part.progress"
使用 Base64 对上述 SQL 语句编码(省略了多余字符):
U0VMRUNUDQogICAgcHJvZHVjdHMucGFydCBBUyBwcm9kdWN0X3BhcnQsDQo......
使用 Postman 调用 API 进行 Query 创建:
 
Dynamic Query 创建后,由于是 Dynamic 查询,系统并不会自动执行查询,因为后续真正执行查询时需要我们提供具体的参数。
调用另一个 API,填写对应的参数来执行动态查询:
 
Job 执行后,我们调用另外的 API,通过上述步骤结果中返回的 id 来查询具体查询的结果:
可以看到上图中返回的记录为空 "data": [],因为我们在执行 Job 时提供的针对 products_product.lot_id 参数的值为:'WS_AG_001';针对 parts_part.progress 的值为:'组装',真实数据中是没有这个记录的。
 
下面我们分别修改一下参数值为:'HD0020''焊接',然后再执行查询 Job:
 
执行后查询结果,可以看到下图中符合条件的记录:
 

2.2.2 别名与其它功能

参考官网介绍。

三、Business Query

DC 同时还支持 Business Query。
如果要使用 Business Query,首先需要在 DC 中创建 Semantic Model (Ontology)。通过创建语义模型,将从 .csv 文件提取过后的 Schema 映射成为具体的类(Class),然后将 Schema 中的属性与类中的属性一一映射;后续的查询语句就可以基于定义好的语义模型来进行操作。
我们需要使用 Webprotege (或者 Protege) 来创建语义模型。参考文档
文章视频中我们会简单演示如何通过 Protege 创建 Ontology,并关联 Schema 与 Class。
 

3.1 Static Query

与章节 2.1 Static Query 中一样,Business Query 也可以使用静态查询。
SELECT
    Product.part AS productPart,
    Product.productTime AS productProductTime,
    Product.progress AS productProgress,
    Product.cName,
    Product.lotId,
    Part.part AS partPart,
    Part.productTime AS partProductTime,
    Part.progress AS partProgress,
    Part.lotId,
    Part.assemblePerceptNum,
    Inspection.workType,
    Inspection.time,
    Inspection.result
FROM
    Product
    INNER JOIN Part ON Product.lineId = Part.lineId
    INNER JOIN Inspection ON Part.assemblePerceptNum = Inspection.assemblePerceptNum
使用 Base64 对上述 SQL 语句编码(省略了多余字符):
U0VMRUNUDQogICAgUHJvZHVjdC5wYXJ0IEFTIHByb2R1Y3RQYXJ0LA0......
使用 Postman 调用 API 进行 Query 创建:
 
调用 API 查询结果:
 

3.2 Dynamic Query

与章节 2.2 Dynamic Query 中一样,Business Query 也可以使用动态查询。
SELECT
    Product.part AS productPart,
    Product.productTime AS productProductTime,
    Product.progress AS productProgress,
    Product.cName,
    Product.lotId,
    Part.part AS partPart,
    Part.productTime AS partProductTime,
    Part.progress AS partProgress,
    Part.lotId,
    Part.assemblePerceptNum,
    Inspection.workType,
    Inspection.dataMax,
    Inspection.time,
    Inspection.result
FROM
    Product
    INNER JOIN Part ON Product.lineId = Part.lineId
    INNER JOIN Inspection ON Part.assemblePerceptNum = Inspection.assemblePerceptNum
WHERE
    Inspection.dataMax = (
        SELECT MAX(Inspection.dataMax) FROM Inspection
    )
    OR
    Product.lotId = :"Product.lotId"
使用 Base64 对上述 SQL 语句编码(省略了多余字符):
U0VMRUNUDQogICAgUHJvZHVjdC5wYXJ0IEFTIHByb2R1Y3RQYXJ0LA......
如之前所述,Dynamic Query 创建后系统并不会自动执行查询,因为后续真正执行查询时需要我们提供具体的参数。
调用另一个 API,填写对应的参数来执行动态查询:
 
调用 API 查询结果。Product.lotId 值为 'HD0020',以及在 Inspection 类中拥有最大 dataMax 值的记录都被返回了:
 

四、在 Business Intelligence (BI) 中展示 Query

在 BI 中我们可以展示所有 DC 中创建的 Query 执行结果。每一个 Query 在 BI 中都可以作为输入的数据源。
首先,在 BI Data 应用中新创建数据源:
 
 
后续在 BI 应用中便可以使用基于 DC Query 创建的数据源:

知识库文章 ID# KB000133602_ZH_CN

内容

摘要详细信息

关联组件

Applications - Other Insights Hub Insights Hub Business Intelligence