
Zillion是一款强大的数据建模和分析工具,它允许通过简单的API将多个数据源的数据结合起来进行分析。Zillion在您的数据之上充当语义层,为您编写SQL,并可以轻松地与现有的数据库基础设施集成。Zillion的NLP扩展还提供了实验性的AI支持的自然语言查询和仓库配置功能。
使用Zillion,您可以:

警告: 该项目处于alpha状态,可能会发生变化。请仔细测试生产使用并报告任何问题。
$ pip install zillion
或
$ pip install zillion[nlp]
以下内容旨在快速概述Zillion中用于数据仓库的一些理论和术语,这对于该领域的新手来说会很有用。
简而言之:Zillion为您编写SQL,并通过非常简单的API使数据可访问:
result = warehouse.execute( metrics=["revenue", "leads"], dimensions=["date"], criteria=[ ("date", ">", "2020-01-01"), ("partner", "=", "Partner A") ] )
在Zillion中,报告请求中使用的主要有两种类型的字段:
维度:用于标记、分组和过滤的数据属性指标:可以沿维度分解的事实和度量字段封装了数据中列的概念。例如,您可能有一个名为"revenue"的字段。该字 段可能出现在多个数据源中,或者可能出现在单个数据源内的多个表中。Zillion理解所有这些列代表相同的概念,它可以尝试使用其中任何一个来满足请求"revenue"的报告。
同样,用于构建仓库的主要有两种类型的表:
维度表:仅包含相关维度的参考/属性表指标表:可能包含指标和一些相关维度/属性的事实表维度表通常在行数方面是静态的或缓慢增长的,并且包含与主键相关的属性。一些常见的例子是美国邮政编码列表或公司/合作伙伴目录。
指标表通常更具事务性。一些常见的例子是Web请求记录、电子商务销售或股票市场价格历史。
如果您真的想深入了解Zillion采用的维度建模和钻取查询技术,我建议阅读Ralph Kimball关于数据仓库的书。
总之,钻取查询形成一个或多个查询,以满足对可能存在于多个数据源和/或表中特定维度粒度的指标的报告请求。
Zillion支持灵活的仓库设置,如雪花模式或星型模式,尽管它并不挑剔。您可以通过父子血统指定表关系,Zillion还可以根据维度表主键的存在推断可接受的连接。Zillion目前不支持多对多关系,尽管大多数面向分析的场景应该能够通过在模型中添加视图来解决这个问题。
Zillion报告可以被认为在两个层次上运行:
数据源层:针对仓库数据源的SQL查询组合层:针对数据源层组合数据的最终SQL查询组合层只是另一个SQL数据库(默认为内存中的SQLite),用于将数据源数据联系在一起,并应用一些其他功能,如汇总、行过滤、行限制、排序、透视和技术计算。
有多种方法可以从本地或远程文件快速初始化仓库:
# 路径/链接到CSV、XLSX、XLS、JSON、HTML或Google表格 # 这将构建一个单表仓库,用于快速/临时分析。 url = "https://raw.githubusercontent.com/totalhack/zillion/master/tests/dma_zip.xlsx" wh = Warehouse.from_data_file(url, ["Zip_Code"]) # 第二个参数是主键 # 路径/链接到sqlite数据库 # 这可以构建单表或多表仓库 url = "https://github.com/totalhack/zillion/blob/master/tests/testdb1?raw=true" wh = Warehouse.from_db_file(url) # 路径/链接到WarehouseConfigSchema(或传递dict) # 这是推荐的生产方法! config = "https://raw.githubusercontent.com/totalhack/zillion/master/examples/example_wh_config.json" wh = Warehouse(config=config)
Zillion还提供了一个辅助脚本来为现有数据库引导DataSource配置文件。请参阅zillion.scripts.bootstrap_datasource_config.py。引导脚本需要连接/数据库url和输出文件作为参数。有关更多选项,请参阅--help输出,包括可选的--nlp标志,该标志利用OpenAI推断配置信息,如列类型、表类型和表关系。NLP功能需要安装NLP扩展,并在您的Zillion配置文件中设置以下内容:
Zillion的主要目的是针对Warehouse执行报告。在高层次上,您将按照以下方式制作报告:
result = warehouse.execute( metrics=["revenue", "leads"], dimensions=["date"], criteria=[ ("date", ">", "2020-01-01"), ("partner", "=", "Partner A") ] ) print(result.df) # Pandas DataFrame
与编写SQL相比,将维度视为group by SQL语句的目标列会有所帮助。将指标视为您正在聚合的列。将条件视为where子句。您的条件在数据源层SQL查询中应用。
ReportResult有一个Pandas DataFrame,其中维度作为索引,指标作为列。
据说Report有一个粒度,它定义了每个指标必须能够加入的维度,以满足Report要求。粒度是所有维度的组合,包括在条件或指标公式中引用的维度。在上面的例子中,粒度将是{date, partner}。"revenue"和"leads"都必须能够加入这些维度,才能实现这个报告。
这些概念可能需要一些时间才能理解,显然会随着数据模型的具体情况而变化,但当您开始针对数据仓库制作报告时,您会变得更加熟悉它们。
通过NLP扩展,Zillion对数据仓库的自然语言查询提供了实验性支持。例 如:
result = warehouse.execute_text("revenue and leads by date last month") print(result.df) # Pandas DataFrame
此NLP功能需要运行Qdrant(向量数据库)实例,并在Zillion配置文件中设置以下值:
嵌入将在Qdrant和本地缓存中生成和存储 。向量数据库将在您首次尝试使用它时通过分析仓库中的所有字段进行初始化。在此repo的根目录中提供了运行Qdrant的示例docker文件。
您可以控制字段的嵌入方式。特别是在任何字段的配置中,您可以选择是否从嵌入中排除字段或覆盖哪些嵌入映射到该字段。默认情况下,包括所有字段。以下示例将从嵌入中排除net_revenue字段,并将revenue指标请求映射到gross_revenue字段。
{ "name": "gross_revenue", "type": "numeric(10,2)", "aggregation": "sum", "rounding": 2, "meta": { "nlp": { // enabled defaults to true "embedding_text": "revenue" // str or list of str } } }, { "name": "net_revenue", "type": "numeric(10,2)", "aggregation": "sum", "rounding": 2, "meta": { "nlp": { "enabled": false } } },
此外,您还可以通过以下仓库级配置设置排除字段:
{ "meta": { "nlp": { "field_disabled_patterns": [ // list of regex patterns to exclude "rpl_ma_5" ], "field_disabled_groups": [ // list of "groups" to exclude, assuming you have // set group value in the field's meta dict. "No NLP" ] } }, ... }
如果在上述任何级别禁用了字段,它将被忽略。随着数据模型变得更加复杂,当您想在可能混淆类似命名字段的情况下指导NLP逻辑时,这种类型的控制会变得有用。每当您调整要排除的字段时,您都需要使用Warehouse.init_embeddings上的force_recreate标志强制重新创建嵌入集合。
注意: 这个功能还处于初级阶段。它的有用性将取决于输入查询和数据模型(即良好的字段名称)的质量!
除了配置Warehouse的结构(将在下面进一步讨论)之外,Zillion还有一个全局配置来控制一些基本设置。ZILLION_CONFIG环境变量可以指向yaml配置文件。有关可以设置的值的更多详细信息,请参阅examples/sample_config.yaml。以ZILLION_前缀的环境变量可以覆盖配置设置(即ZILLION_DB_URL将覆盖DB_URL)。
用于存储Zillion报告规范的数据库可以通过在Zillion配置中将DB_URL值设置为有效的数据库连接字符串来配置。默认情况下,使用/tmp中的SQLite数据库。
下面我们将介绍一个简单的假设销售数据模型,演示基本的DataSource和Warehouse配置,然后展示一些示例报告。数据是Zillion测试代码的一部分的简单SQLite数据库。作为参考,架构如下:
CREATE TABLE partners ( id INTEGER PRIMARY KEY, name VARCHAR NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE campaigns ( id INTEGER PRIMARY KEY, name VARCHAR NOT NULL UNIQUE, category VARCHAR NOT NULL, partner_id INTEGER NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE leads ( id INTEGER PRIMARY KEY, name VARCHAR NOT NULL, campaign_id INTEGER NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE sales ( id INTEGER PRIMARY KEY, item VARCHAR NOT NULL, quantity INTEGER NOT NULL, revenue DECIMAL(10, 2), lead_id INTEGER NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
可以从定义其字段、数据源和表的JSON或YAML配置创建Warehouse。下面的代码显示了如何在一行代码中完成,如果您有指向JSON/YAML Warehouse配置的指针:
from zillion import Warehouse wh = Warehouse(config="https://raw.githubusercontent.com/totalhack/zillion/master/examples/example_wh_config.json")
此示例配置在其DataSource connect信息中使用data_url,告诉Zillion动态下载该数据并将其连接为SQLite数据库。这对于快速示例或分析很有用,尽管在大


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+ 淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号