三步走: (1)建立一个connection (2)创建一个ConnectionWrapper实例 (3)创建 FactTable import MySQLdb import pygrametl from pygrametl.tables import FactTable conn = MySQLdb.connect(host="localhost", user="root", passwd="123 ", db="ustcck", charset="utf8") conn = pygrametl.ConnectionWrapper(connection=conn) factTable = FactTable ( name='facttable', measures=['price'], keyrefs=['storeid', 'productid', 'dateid']) (row) conn.commit() # Lookup retunes all both keys and measures given only the keys factTable.lookup
// 构建一个明细表,有重复项 VAR FactTable = SELECTCOLUMNS( { "D" , "A" , "C" , "B" , "B" , "A" , "D" , "D" } , "Item " , [Value] ) // 从明细表提出主表,元素唯一化 VAR MasterTable = DISTINCT( SELECTCOLUMNS( FactTable , "Item" , [Item ] ) ) // 为明细表建立一个索引列替换在主表中出现的列,并按主表的列排序 RETURN SUBSTITUTEWITHINDEX( FactTable , "Index" , MasterTable // 构建一个明细表,有重复项 VAR FactTable = SELECTCOLUMNS( { "D" , "A" , "C" , "B" , "B" , "A" , "D" , "D" } , "Item " , [Value] ) // 为明细表添加 索引元素,与 原元素 相同 VAR FactWithIndex = ADDCOLUMNS( FactTable , "Index" , [Item] )
// 构建星型模式 deviceLogDF.createOrReplaceTempView("device_logs"); Dataset<Row> factTable JOIN experiments e ON dl.experiment_id = e.experiment_id """); factTable.write
left side 要查的表就是 firstTableScan;如果 query 不包含 join,from 后面的表就是 firstTableScan firstTableScan 会被当做是 factTable ,无论它事实上是不是 factTable 会影响后面的 realization 选择 由于 firstTableScan 会被当做是 factTable,与概览中的 sql 同义的下面这条 sql 查询时会报 No realization found 的异常,这是因为 Kylin 很不智能的把 left table 作为 firstTableScan(及对应 factTable),但在 Kylin 中没有用以 由于 OLAPTableScan 必定是整个 plan(或者说某个 subquery )的叶子节点,上层任何算子要操作的列只能由 OLAPTableScan 提供,如上层要把对 factTable 某列做 = 1000 GROUP BY KYLIN_SALES.TRANS_ID ORDER BY TRANS_ID LIMIT 10 报错 Kylin 机械的将 join 坐表作为 factTable 4、最内层的
核心结构:星型模型(StarSchema)维度模型通常由两类表组成:事实表(FactTable):位于中心,存储业务过程的度量值(如金额、数量)和外键。通常是窄而深的表。
→这是“维度”事实表(FactTable)特点行数多(千万级、亿级)只存“度量”和“外键”不要放文本(存也要存编码)维度表(DimensionTable)特点小而美(几万到几十万一般)存“描述性信息”有业务意义
核心概念:事实表与维度表两种设计共享相同的基础词汇:事实表(FactTable):存储可量化、可度量事件的核心表——销售记录、页面浏览量、支付记录。