在 asapBI IDE 中建模 Data Vault:Hubs、Links 和 Satellites
asapBI IDE 作为 VSCode 或 Theia 的插件,简化了 Data Vault 结构的创建。左侧树显示数据库(NORD、ASGARD)、模式(repo_md、repo_fi)、文件夹(ODS、DDS)以及对象,如 hub(sales_hub)。通过 SQL 生成模块支持 Greenplum。任务:在 FI 模式中,创建一个 DEMO 文件夹,其中包含两个 hub、卫星以及它们之间的一个 link。
创建文件夹结构
将鼠标悬停在模式或文件夹上——会出现新建文件夹选项。指定名称和部署包(test、prod)。对于临时对象,保留默认值。
完成的文件夹会集成到树中。此过程最大限度减少了手动 SQL 操作。
构建 Hub
创建一个 hub(Hub 类型)。系统会生成 DDL:
CREATE TABLE repo_fi.product_demo_hub (
date_load date DEFAULT now() NOT NULL,
src_sys text DEFAULT ''::character varying NOT NULL,
hkey int8 GENERATED BY DEFAULT AS IDENTITY
( INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807
START 1 CACHE 20 NO CYCLE) NOT NULL,
CONSTRAINT product_demo_hub_pkey PRIMARY KEY (hkey)
)
USING heap
DISTRIBUTED REPLICATED;
COMMENT ON TABLE repo_fi.product_demo_hub IS '{ "app": "asapBI",
"descr": "Product Demo hub",
"type": "HUB",
"folder": "161"
}';
在编辑器中,启用服务字段(复选框)。按钮:添加业务键、卫星、link。
添加 product text 字段,并带有 UNIQUE 约束和卫星:
ALTER TABLE repo_fi.product_demo_hub DROP CONSTRAINT product_demo_hub_unique;
ALTER TABLE repo_fi.product_demo_hub ADD product text;
COMMENT ON COLUMN repo_fi.product_demo_hub.product IS 'Produkt';
ALTER TABLE repo_fi.product_demo_hub ADD CONSTRAINT
product_demo_hub_unique UNIQUE ( product );
CREATE TABLE repo_fi.product_demo_hub_sat1 (
id bigint GENERATED BY DEFAULT AS IDENTITY primary key,
hkey bigint NOT NULL,
valid_from date DEFAULT now() NOT NULL,
date_load date DEFAULT now() NOT NULL,
src_sys text DEFAULT ''::character varying NOT NULL,
brand text,
categ text,
FOREIGN KEY (hkey) REFERENCES repo_fi.product_demo_hub (hkey)
)
USING heap
DISTRIBUTED REPLICATED;
COMMENT ON TABLE repo_fi.product_demo_hub_sat1 IS '{ "app": "asapBI",
"descr": "New sat",
"type": "SAT",
"owner": "repo_fi.product_demo_hub"
}';
ALTER TABLE repo_fi.product_demo_hub_sat1 ADD CONSTRAINT
product_demo_hub_sat1_unique UNIQUE (hkey, valid_from);
客户 Hub 和 Link
类似地,创建 customer_demo_hub hub,并带有 customer text 字段:
CREATE TABLE repo_fi.customer_demo_hub (
date_load date DEFAULT now() NOT NULL,
src_sys text DEFAULT ''::character varying NOT NULL,
hkey int8 GENERATED BY DEFAULT AS IDENTITY
( INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807
START 1 CACHE 20 NO CYCLE) NOT NULL,
customer text NULL,
CONSTRAINT customer_demo_hub_pkey PRIMARY KEY (hkey),
CONSTRAINT customer_demo_hub_unique UNIQUE (customer)
)
USING heap
DISTRIBUTED REPLICATED;
COMMENT ON TABLE repo_fi.customer_demo_hub IS '{ "app": "asapBI",
"descr": "Customer Demo hub",
"type": "HUB",
"folder": "161"
}';
在两个 hub 之间添加一个 link:
CREATE TABLE repo_fi.customer_demo_hub_link1 (
id bigint GENERATED BY DEFAULT AS IDENTITY primary key,
customer_demo_hub bigint,
date_load date DEFAULT now() NOT NULL,
src_sys text DEFAULT ''::character varying NOT NULL,
product_demo_hub bigint ,
FOREIGN KEY (customer_demo_hub) REFERENCES repo_fi.customer_demo_hub (hkey),
FOREIGN KEY (product_demo_hub) REFERENCES repo_fi.product_demo_hub (hkey)
)
USING heap
DISTRIBUTED REPLICATED;
COMMENT ON TABLE repo_fi.customer_demo_hub_link1 IS '{ "app": "asapBI",
"descr": "New link",
"type": "LINK"
}';
ALTER TABLE repo_fi.customer_demo_hub_link1
ADD CONSTRAINT customer_demo_hub_link1_unique
UNIQUE (customer_demo_hub, product_demo_hub);
该 link 会出现在两个 hub 下方。可以为 link 添加卫星(+Sat)。
DEMO 结构:
- Product Hub + 卫星(brand、categ)
- Customer Hub
- 两个 hub 之间的 Link
此方法的好处
- DDL 自动生成: hub、link、卫星的完整 SQL,包含外键、唯一约束和 JSON COMMENT。
- 可视化: 对象树、关系图。
- 兼容性: SQL 可以手动执行(DBeaver),对象已同步。
- 灵活性: 临时/永久对象、用于 CI/CD 的包。
- 专注: 隐藏服务字段(hkey、date_load、src_sys)。
支持 Greenplum;可扩展到其他数据库管理系统。
关键点
- 自动化 Data Vault 中的常规联接和 DDL。
- 与 VSCode/Theia 集成,适用于中高级开发者。
- 生成带有 COMMENT 中元数据的生产就绪 SQL。
- 支持带有指向 hub hkey 的外键的 Link。
- 视觉编辑,同时不丢失代码控制。
— Editorial Team
暂无评论。