From 2dcbe4efd7f81f3815384950d78e71c5fe2e7c84 Mon Sep 17 00:00:00 2001 From: Abhinav Sarkar Date: Mon, 21 Dec 2015 22:19:54 +0530 Subject: [PATCH] Adds source column to count and count distinct fact columns. Also removes CountDistinctColumSuffix setting. --- app/Ringo/ArgParser.hs | 3 --- app/Ringo/InputParser.hs | 12 ++++++------ src/Ringo/Extractor.hs | 15 +++++++-------- src/Ringo/Generator.hs | 6 ++++-- src/Ringo/Types.hs | 30 ++++++++++++++---------------- 5 files changed, 31 insertions(+), 35 deletions(-) diff --git a/app/Ringo/ArgParser.hs b/app/Ringo/ArgParser.hs index 78acfb1..073121b 100644 --- a/app/Ringo/ArgParser.hs +++ b/app/Ringo/ArgParser.hs @@ -40,9 +40,6 @@ settingsParser = let Settings {..} = defSettings <*> minorOption "avg-sum-col-suffix" settingAvgSumColumnSuffix "Suffix for average sum columns" - <*> minorOption "count-distinct-col-suffix" - settingCountDistinctColumSuffix - "Suffix for count distinct bucket columns" <*> minorOption "dim-id-col-name" settingDimTableIdColumnName "Name of dimension table id columns" diff --git a/app/Ringo/InputParser.hs b/app/Ringo/InputParser.hs index 64408bc..7665c8d 100644 --- a/app/Ringo/InputParser.hs +++ b/app/Ringo/InputParser.hs @@ -52,12 +52,12 @@ instance FromJSON FactColumn where case cType of "dimtime" -> DimTime <$> o .: "column" "nodimid" -> NoDimId <$> o .: "column" - "dimid" -> DimId <$> o .: "table" <*> o .: "column" - "dimval" -> DimVal <$> o .: "table" <*> o .: "column" - "factcount" -> FactCount <$> o .: "column" - "factsum" -> FactSum <$> o .: "sourcecolumn" <*> o .: "column" - "factaverage" -> FactAverage <$> o .: "sourcecolumn" <*> o .: "column" - "factcountdistinct" -> FactCountDistinct <$> o .: "column" + "dimid" -> DimId <$> o .: "table" <*> o .: "column" + "dimval" -> DimVal <$> o .: "table" <*> o .: "column" + "factcount" -> FactCount <$> o .:? "sourcecolumn" <*> o .: "column" + "factsum" -> FactSum <$> o .: "sourcecolumn" <*> o .: "column" + "factaverage" -> FactAverage <$> o .: "sourcecolumn" <*> o .: "column" + "factcountdistinct" -> FactCountDistinct <$> o .:? "sourcecolumn" <*> o .: "column" _ -> fail $ "Invalid fact column type: " ++ cType parseJSON o = fail $ "Cannot parse fact column: " ++ show o diff --git a/src/Ringo/Extractor.hs b/src/Ringo/Extractor.hs index c0bf046..98a7848 100644 --- a/src/Ringo/Extractor.hs +++ b/src/Ringo/Extractor.hs @@ -29,18 +29,17 @@ extractFactTable fact = do sourceColumnType colName = columnType . fromJust . findColumn colName . tableColumns $ table columns = concatFor (factColumns fact) $ \col -> case col of - DimTime cName -> + DimTime cName -> [ Column (timeUnitColumnName dimIdColName cName settingTimeUnit) "integer" NotNull ] - NoDimId cName -> [ fromJust . findColumn cName . tableColumns $ table] - FactCount cName -> [ Column cName countColType NotNull ] - FactSum scName cName -> [ Column cName (sourceColumnType scName) NotNull ] - FactAverage scName cName -> + NoDimId cName -> [ fromJust . findColumn cName . tableColumns $ table] + FactCount _ cName -> [ Column cName countColType NotNull ] + FactSum scName cName -> [ Column cName (sourceColumnType scName) NotNull ] + FactAverage scName cName -> [ Column (cName <> settingAvgCountColumSuffix) countColType NotNull , Column (cName <> settingAvgSumColumnSuffix) (sourceColumnType scName) NotNull ] - FactCountDistinct cName -> - [ Column (cName <> settingCountDistinctColumSuffix) (countColType <> "[]") NotNull ] - _ -> [] + FactCountDistinct _ cName -> [ Column cName (countColType <> "[]") NotNull ] + _ -> [] fks = for allDims $ \(fact', tab@Table {..}) -> let colName = factDimFKIdColumnName settingDimPrefix dimIdColName tableName diff --git a/src/Ringo/Generator.hs b/src/Ringo/Generator.hs index c692697..c7f38cd 100644 --- a/src/Ringo/Generator.hs +++ b/src/Ringo/Generator.hs @@ -140,8 +140,10 @@ factTablePopulateSQL popMode fact = do factColMap = concatFor (factColumns fact) $ \col -> case col of DimTime cName -> [ timeUnitColumnInsertSQL cName ] NoDimId cName -> [ (cName, fullColName fTableName cName, True) ] - FactCount cName -> [ (cName, "count(*)", False) ] - FactSum scName cName -> [ (cName, "sum(" <> fullColName fTableName scName <> ")", False) ] + FactCount scName cName -> + [ (cName, "count(" <> maybe "*" (fullColName fTableName) scName <> ")", False) ] + FactSum scName cName -> + [ (cName, "sum(" <> fullColName fTableName scName <> ")", False) ] FactAverage scName cName -> [ ( cName <> settingAvgCountColumSuffix , "count(" <> fullColName fTableName scName <> ")" diff --git a/src/Ringo/Types.hs b/src/Ringo/Types.hs index 989e093..c2c49d4 100644 --- a/src/Ringo/Types.hs +++ b/src/Ringo/Types.hs @@ -50,23 +50,23 @@ data Fact = Fact data FactColumn = DimTime !ColumnName | NoDimId !ColumnName - | DimId !TableName !ColumnName - | DimVal !TableName !ColumnName - | FactCount !ColumnName - | FactSum !ColumnName !ColumnName - | FactAverage !ColumnName !ColumnName - | FactCountDistinct !ColumnName + | DimId !TableName !ColumnName + | DimVal !TableName !ColumnName + | FactCount !(Maybe ColumnName) !ColumnName + | FactSum !ColumnName !ColumnName + | FactAverage !ColumnName !ColumnName + | FactCountDistinct !(Maybe ColumnName) !ColumnName deriving (Eq, Show) factColumnName :: FactColumn -> Maybe ColumnName -factColumnName (DimTime cName) = Just cName -factColumnName (NoDimId cName) = Just cName -factColumnName (DimId _ cName) = Just cName -factColumnName (DimVal _ cName) = Just cName -factColumnName (FactCount _) = Nothing -factColumnName (FactSum cName _) = Just cName -factColumnName (FactAverage cName _) = Just cName -factColumnName (FactCountDistinct _) = Nothing +factColumnName (DimTime cName) = Just cName +factColumnName (NoDimId cName) = Just cName +factColumnName (DimId _ cName) = Just cName +factColumnName (DimVal _ cName) = Just cName +factColumnName (FactCount cName _) = cName +factColumnName (FactSum cName _) = Just cName +factColumnName (FactAverage cName _) = Just cName +factColumnName (FactCountDistinct cName _) = cName data Settings = Settings { settingDimPrefix :: !Text @@ -74,7 +74,6 @@ data Settings = Settings , settingTimeUnit :: !TimeUnit , settingAvgCountColumSuffix :: !Text , settingAvgSumColumnSuffix :: !Text - , settingCountDistinctColumSuffix :: !Text , settingDimTableIdColumnName :: !Text , settingDimTableIdColumnType :: !Text , settingFactCountColumnType :: !Text @@ -91,7 +90,6 @@ defSettings = Settings , settingTimeUnit = Minute , settingAvgCountColumSuffix = "_count" , settingAvgSumColumnSuffix = "_sum" - , settingCountDistinctColumSuffix = "_hll" , settingDimTableIdColumnName = "id" , settingDimTableIdColumnType = "serial" , settingFactCountColumnType = "integer"