Changes dimension table population query for coalesce changes.
- Replaces "IS NOT DISTICNT FROM" with "=" - Adds not-all-columns-null check for full refresh.pull/1/head
parent
aeed16570e
commit
d758dc3310
|
@ -104,21 +104,23 @@ dimensionTablePopulateSQL popMode fact dimTableName = do
|
||||||
, let col = fromJust . findColumn cName $ tableColumns factTable ]
|
, let col = fromJust . findColumn cName $ tableColumns factTable ]
|
||||||
baseSelectC = "SELECT DISTINCT\n" <> joinColumnNames selectCols
|
baseSelectC = "SELECT DISTINCT\n" <> joinColumnNames selectCols
|
||||||
<> "\nFROM " <> factTableName fact
|
<> "\nFROM " <> factTableName fact
|
||||||
insertC selectC = "INSERT INTO " <> dimTableName
|
baseWhereC = "(\n"
|
||||||
<> " (\n" <> joinColumnNames (map fst colMapping) <> "\n) "
|
<> Text.intercalate "\nOR " [ c <> " IS NOT NULL" | (_, c) <- colMapping ]
|
||||||
<> "SELECT x.* FROM (\n" <> selectC <> ") x"
|
<> "\n)"
|
||||||
|
insertC selectC whereCs =
|
||||||
|
"INSERT INTO " <> dimTableName
|
||||||
|
<> " (\n" <> joinColumnNames (map fst colMapping) <> "\n) "
|
||||||
|
<> "SELECT x.* FROM (\n"
|
||||||
|
<> selectC <> "\nWHERE " <> Text.intercalate " AND\n" whereCs
|
||||||
|
<> ") x"
|
||||||
timeCol = head [ cName | DimTime cName <- factColumns fact ]
|
timeCol = head [ cName | DimTime cName <- factColumns fact ]
|
||||||
return $ case popMode of
|
return $ case popMode of
|
||||||
FullPopulation -> insertC baseSelectC
|
FullPopulation -> insertC baseSelectC [baseWhereC]
|
||||||
IncrementalPopulation ->
|
IncrementalPopulation ->
|
||||||
insertC (baseSelectC <> "\nWHERE "
|
insertC baseSelectC [baseWhereC, timeCol <> " > ?", timeCol <> " <= ?"]
|
||||||
<> timeCol <> " > ? AND " <> timeCol <> " <= ?"
|
|
||||||
<> " AND (\n"
|
|
||||||
<> Text.intercalate "\nOR " [ c <> " IS NOT NULL" | (_, c) <- colMapping ]
|
|
||||||
<> "\n)")
|
|
||||||
<> "\nLEFT JOIN " <> dimTableName <> " ON\n"
|
<> "\nLEFT JOIN " <> dimTableName <> " ON\n"
|
||||||
<> Text.intercalate " \nAND "
|
<> Text.intercalate " \nAND "
|
||||||
[ fullColName dimTableName c1 <> " IS NOT DISTINCT FROM " <> fullColName "x" c2 -- TODO can be replaced with = ?
|
[ fullColName dimTableName c1 <> " = " <> fullColName "x" c2
|
||||||
| (c1, c2) <- colMapping ]
|
| (c1, c2) <- colMapping ]
|
||||||
<> "\nWHERE " <> Text.intercalate " \nAND "
|
<> "\nWHERE " <> Text.intercalate " \nAND "
|
||||||
[ fullColName dimTableName c <> " IS NULL" | (c, _) <- colMapping ]
|
[ fullColName dimTableName c <> " IS NULL" | (c, _) <- colMapping ]
|
||||||
|
@ -232,15 +234,12 @@ factTablePopulateSQL popMode fact = do
|
||||||
[ fullColName tableName dimColName <> " = " <> coalesceColumn defaults factSourceTableName sourceCol
|
[ fullColName tableName dimColName <> " = " <> coalesceColumn defaults factSourceTableName sourceCol
|
||||||
| (dimColName, sourceColName) <- dimColumnMapping settingDimPrefix dimFact tableName
|
| (dimColName, sourceColName) <- dimColumnMapping settingDimPrefix dimFact tableName
|
||||||
, let sourceCol = fromJust . findColumn sourceColName $ tableColumns factSourceTable ]
|
, let sourceCol = fromJust . findColumn sourceColName $ tableColumns factSourceTable ]
|
||||||
insertSQL = if factTable `elem` tables -- existing dimension table
|
insertSQL = if factTable `elem` tables -- existing dimension table
|
||||||
then (if columnNullable dimFKIdColumn == Null then coalesceFKId else id)
|
then (if columnNullable dimFKIdColumn == Null then coalesceFKId else id)
|
||||||
$ fullColName factSourceTableName dimFKIdColName
|
$ fullColName factSourceTableName dimFKIdColName
|
||||||
else "SELECT " <> dimIdColName <> " FROM " <> tableName <> "\nWHERE "
|
else "SELECT " <> dimIdColName <> " FROM " <> tableName <> "\nWHERE "
|
||||||
<> Text.intercalate "\n AND " dimLookupWhereClauses
|
<> Text.intercalate "\n AND " dimLookupWhereClauses
|
||||||
insertSQL' = if factSourceTableName == fTableName
|
in (dimFKIdColName, coalesceFKId insertSQL, True)
|
||||||
then insertSQL
|
|
||||||
else coalesceFKId insertSQL -- TODO always coalesce
|
|
||||||
in (dimFKIdColName, insertSQL', True)
|
|
||||||
|
|
||||||
colMap = [ (cName, (sql, groupByColPrefix <> cName), addToGroupBy)
|
colMap = [ (cName, (sql, groupByColPrefix <> cName), addToGroupBy)
|
||||||
| (cName, sql, addToGroupBy) <- factColMap ++ dimColMap ]
|
| (cName, sql, addToGroupBy) <- factColMap ++ dimColMap ]
|
||||||
|
|
Loading…
Reference in New Issue