数据仓库Galaxy Schema查询验证:提取指定表数据的SQL是否正确?
星系模型SQL提取代码修正
我有如下星系模型(Galaxy Schema):
需要提取dim1、dim2、fact1和dim4中的数据。已知dim1含d1字段、dim2含d2字段、fact1含f1字段,各表主键分别为dim1id、dim2id等。我编写了一段SQL代码,但无法确认其正确性,代码如下:
select d1,d2,f1, d4 from fact1 join dim1 on fact1.dim1id=dim1.dim1id join dim 2 on fact1. dim2id=dim2.dim2id join fact2 on fact2.dim2id=dim2.dim2id join dim4 on fact2.dim4id=dim4.dim4id
代码问题与修正
语法错误:
- 表名
dim 2存在空格,需改为dim2 - 字段
fact1. dim2id前多了空格,需修正为fact1.dim2id
- 表名
逻辑注意点:
- 当前用的是内连接(
JOIN),只会返回所有表中匹配的记录。如果需要保留fact1中所有数据,哪怕没有对应dim2或dim4的关联记录,建议改用左连接(LEFT JOIN),避免丢失数据。
- 当前用的是内连接(
修正后的代码
内连接版本(仅取全匹配记录):
select d1, d2, f1, d4 from fact1 join dim1 on fact1.dim1id = dim1.dim1id join dim2 on fact1.dim2id = dim2.dim2id join fact2 on fact2.dim2id = dim2.dim2id join dim4 on fact2.dim4id = dim4.dim4id
左连接版本(保留fact1所有记录):
select d1, d2, f1, d4 from fact1 left join dim1 on fact1.dim1id = dim1.dim1id left join dim2 on fact1.dim2id = dim2.dim2id left join fact2 on fact2.dim2id = dim2.dim2id left join dim4 on fact2.dim4id = dim4.dim4id
内容的提问来源于stack exchange,提问作者rexhi
相关产品推荐
相关产品推荐

