Adds source column to count and count distinct fact columns.

Also removes CountDistinctColumSuffix setting.
pull/1/head
Abhinav Sarkar 2015-12-21 22:19:54 +05:30
parent d1e1eb7676
commit 2dcbe4efd7
5 changed files with 31 additions and 35 deletions

View File

@ -40,9 +40,6 @@ settingsParser = let Settings {..} = defSettings
<*> minorOption "avg-sum-col-suffix" <*> minorOption "avg-sum-col-suffix"
settingAvgSumColumnSuffix settingAvgSumColumnSuffix
"Suffix for average sum columns" "Suffix for average sum columns"
<*> minorOption "count-distinct-col-suffix"
settingCountDistinctColumSuffix
"Suffix for count distinct bucket columns"
<*> minorOption "dim-id-col-name" <*> minorOption "dim-id-col-name"
settingDimTableIdColumnName settingDimTableIdColumnName
"Name of dimension table id columns" "Name of dimension table id columns"

View File

@ -52,12 +52,12 @@ instance FromJSON FactColumn where
case cType of case cType of
"dimtime" -> DimTime <$> o .: "column" "dimtime" -> DimTime <$> o .: "column"
"nodimid" -> NoDimId <$> o .: "column" "nodimid" -> NoDimId <$> o .: "column"
"dimid" -> DimId <$> o .: "table" <*> o .: "column" "dimid" -> DimId <$> o .: "table" <*> o .: "column"
"dimval" -> DimVal <$> o .: "table" <*> o .: "column" "dimval" -> DimVal <$> o .: "table" <*> o .: "column"
"factcount" -> FactCount <$> o .: "column" "factcount" -> FactCount <$> o .:? "sourcecolumn" <*> o .: "column"
"factsum" -> FactSum <$> o .: "sourcecolumn" <*> o .: "column" "factsum" -> FactSum <$> o .: "sourcecolumn" <*> o .: "column"
"factaverage" -> FactAverage <$> o .: "sourcecolumn" <*> o .: "column" "factaverage" -> FactAverage <$> o .: "sourcecolumn" <*> o .: "column"
"factcountdistinct" -> FactCountDistinct <$> o .: "column" "factcountdistinct" -> FactCountDistinct <$> o .:? "sourcecolumn" <*> o .: "column"
_ -> fail $ "Invalid fact column type: " ++ cType _ -> fail $ "Invalid fact column type: " ++ cType
parseJSON o = fail $ "Cannot parse fact column: " ++ show o parseJSON o = fail $ "Cannot parse fact column: " ++ show o

View File

@ -29,18 +29,17 @@ extractFactTable fact = do
sourceColumnType colName = columnType . fromJust . findColumn colName . tableColumns $ table sourceColumnType colName = columnType . fromJust . findColumn colName . tableColumns $ table
columns = concatFor (factColumns fact) $ \col -> case col of columns = concatFor (factColumns fact) $ \col -> case col of
DimTime cName -> DimTime cName ->
[ Column (timeUnitColumnName dimIdColName cName settingTimeUnit) "integer" NotNull ] [ Column (timeUnitColumnName dimIdColName cName settingTimeUnit) "integer" NotNull ]
NoDimId cName -> [ fromJust . findColumn cName . tableColumns $ table] NoDimId cName -> [ fromJust . findColumn cName . tableColumns $ table]
FactCount cName -> [ Column cName countColType NotNull ] FactCount _ cName -> [ Column cName countColType NotNull ]
FactSum scName cName -> [ Column cName (sourceColumnType scName) NotNull ] FactSum scName cName -> [ Column cName (sourceColumnType scName) NotNull ]
FactAverage scName cName -> FactAverage scName cName ->
[ Column (cName <> settingAvgCountColumSuffix) countColType NotNull [ Column (cName <> settingAvgCountColumSuffix) countColType NotNull
, Column (cName <> settingAvgSumColumnSuffix) (sourceColumnType scName) NotNull , Column (cName <> settingAvgSumColumnSuffix) (sourceColumnType scName) NotNull
] ]
FactCountDistinct cName -> FactCountDistinct _ cName -> [ Column cName (countColType <> "[]") NotNull ]
[ Column (cName <> settingCountDistinctColumSuffix) (countColType <> "[]") NotNull ] _ -> []
_ -> []
fks = for allDims $ \(fact', tab@Table {..}) -> fks = for allDims $ \(fact', tab@Table {..}) ->
let colName = factDimFKIdColumnName settingDimPrefix dimIdColName tableName let colName = factDimFKIdColumnName settingDimPrefix dimIdColName tableName

View File

@ -140,8 +140,10 @@ factTablePopulateSQL popMode fact = do
factColMap = concatFor (factColumns fact) $ \col -> case col of factColMap = concatFor (factColumns fact) $ \col -> case col of
DimTime cName -> [ timeUnitColumnInsertSQL cName ] DimTime cName -> [ timeUnitColumnInsertSQL cName ]
NoDimId cName -> [ (cName, fullColName fTableName cName, True) ] NoDimId cName -> [ (cName, fullColName fTableName cName, True) ]
FactCount cName -> [ (cName, "count(*)", False) ] FactCount scName cName ->
FactSum scName cName -> [ (cName, "sum(" <> fullColName fTableName scName <> ")", False) ] [ (cName, "count(" <> maybe "*" (fullColName fTableName) scName <> ")", False) ]
FactSum scName cName ->
[ (cName, "sum(" <> fullColName fTableName scName <> ")", False) ]
FactAverage scName cName -> FactAverage scName cName ->
[ ( cName <> settingAvgCountColumSuffix [ ( cName <> settingAvgCountColumSuffix
, "count(" <> fullColName fTableName scName <> ")" , "count(" <> fullColName fTableName scName <> ")"

View File

@ -50,23 +50,23 @@ data Fact = Fact
data FactColumn = DimTime !ColumnName data FactColumn = DimTime !ColumnName
| NoDimId !ColumnName | NoDimId !ColumnName
| DimId !TableName !ColumnName | DimId !TableName !ColumnName
| DimVal !TableName !ColumnName | DimVal !TableName !ColumnName
| FactCount !ColumnName | FactCount !(Maybe ColumnName) !ColumnName
| FactSum !ColumnName !ColumnName | FactSum !ColumnName !ColumnName
| FactAverage !ColumnName !ColumnName | FactAverage !ColumnName !ColumnName
| FactCountDistinct !ColumnName | FactCountDistinct !(Maybe ColumnName) !ColumnName
deriving (Eq, Show) deriving (Eq, Show)
factColumnName :: FactColumn -> Maybe ColumnName factColumnName :: FactColumn -> Maybe ColumnName
factColumnName (DimTime cName) = Just cName factColumnName (DimTime cName) = Just cName
factColumnName (NoDimId cName) = Just cName factColumnName (NoDimId cName) = Just cName
factColumnName (DimId _ cName) = Just cName factColumnName (DimId _ cName) = Just cName
factColumnName (DimVal _ cName) = Just cName factColumnName (DimVal _ cName) = Just cName
factColumnName (FactCount _) = Nothing factColumnName (FactCount cName _) = cName
factColumnName (FactSum cName _) = Just cName factColumnName (FactSum cName _) = Just cName
factColumnName (FactAverage cName _) = Just cName factColumnName (FactAverage cName _) = Just cName
factColumnName (FactCountDistinct _) = Nothing factColumnName (FactCountDistinct cName _) = cName
data Settings = Settings data Settings = Settings
{ settingDimPrefix :: !Text { settingDimPrefix :: !Text
@ -74,7 +74,6 @@ data Settings = Settings
, settingTimeUnit :: !TimeUnit , settingTimeUnit :: !TimeUnit
, settingAvgCountColumSuffix :: !Text , settingAvgCountColumSuffix :: !Text
, settingAvgSumColumnSuffix :: !Text , settingAvgSumColumnSuffix :: !Text
, settingCountDistinctColumSuffix :: !Text
, settingDimTableIdColumnName :: !Text , settingDimTableIdColumnName :: !Text
, settingDimTableIdColumnType :: !Text , settingDimTableIdColumnType :: !Text
, settingFactCountColumnType :: !Text , settingFactCountColumnType :: !Text
@ -91,7 +90,6 @@ defSettings = Settings
, settingTimeUnit = Minute , settingTimeUnit = Minute
, settingAvgCountColumSuffix = "_count" , settingAvgCountColumSuffix = "_count"
, settingAvgSumColumnSuffix = "_sum" , settingAvgSumColumnSuffix = "_sum"
, settingCountDistinctColumSuffix = "_hll"
, settingDimTableIdColumnName = "id" , settingDimTableIdColumnName = "id"
, settingDimTableIdColumnType = "serial" , settingDimTableIdColumnType = "serial"
, settingFactCountColumnType = "integer" , settingFactCountColumnType = "integer"