【大数据clickhouse】clickhouse物化视图使用详解

您所在的位置:网站首页 cjson打包数据 【大数据clickhouse】clickhouse物化视图使用详解

【大数据clickhouse】clickhouse物化视图使用详解

2023-01-06 22:10| 来源: 网络整理| 查看: 265

前言

视图这个概念大家并不陌生,在mysql中,视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。通过视图,可以展现基表(用来创建视图的表)的部分数据,视图数据来自定义视图的查询中使用的表,使用视图动态生成。

clickhouse 物化视图

ClickHouse 的物化视图是一种查询结果的持久化,它的存在是为了带来查询效率的提升。用户使用物化视图时跟普通的表没有太大区别,其实它就是一张逻辑表,也像是一张时刻在预计算的表,创建的过程它是用了一个特殊引擎,加上后来 as select,就是 create 一个 table as select 的写法。

“查询结果集” 范围很宽泛,可以是基础表中部分数据的一份简单拷贝,也可以是多表 join 之后产生的结果或其子集,或者原始数据的聚合指标等等。所以,物化视图不会随着基础表的变化而变化,所以它也称为快照(snapshot);

物化视图与普通视图的区别 *[En]*

**

*[En]*

**

物化视图优缺点优点

查询速度快,要是把物化视图这些规则全部写好,它比原数据查询快了很多,总的行数少了,因为都预计算好了。

缺点 *[En]*

**

使用场景受限,并不适用于所有的场景;*[En]*

**

物化视图操作使用1、基本语法

CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db.]table_name [TO[db.]name][ENGINE = engine] [POPULATE] AS SELECT …

使用create 创建一个物化视图,会创建一个隐藏的目标表来保存视图数据,也可以 TO 表名,保存到 一 张显式的表。没有加 TO 表名,表名默认就是.inner.物化视图名;

2、前置准备 创建一张测试使用的表 CREATE TABLE hits_test ( EventDate Date, CounterID UInt32, UserID UInt64, URL String, Income UInt8 ) ENGINE = MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID)) SAMPLE BY intHash32(UserID) SETTINGS index_granularity = 8192;

【大数据clickhouse】clickhouse物化视图使用详解 给测试表导入一些数据

这里直接从之前导入的一个测试表中导入部分数据

INSERT INTO hits_test SELECT EventDate, CounterID, UserID, URL, Income FROM hits_v1 limit 10000;

【大数据clickhouse】clickhouse物化视图使用详解 3、创建物化视图

物化视图建表sql如下

CREATE MATERIALIZED VIEW hits_mv ENGINE=SummingMergeTree PARTITION BY toYYYYMM(EventDate) ORDER BY (EventDate, intHash32(UserID)) AS SELECT UserID, EventDate, count(URL) as ClickCount, sum(Income) AS IncomeSum FROM hits_test WHERE EventDate >= '2014-03-20' #设置更新点,该时间点之前的数据可以另外通过 GROUP BY UserID,EventDate;

这个物化视图要做的事情就是:从hits_test表中查询几个字段,同时对其中的两个字段做了聚合计算,并且查询的数据在2014年3月20之后的;

【大数据clickhouse】clickhouse物化视图使用详解 *[En]*

**

【大数据clickhouse】clickhouse物化视图使用详解 补充说明:

或者可以用下列语法,表 A 可以是一张 mergetree 表:CREATE MATERIALIZED VIEW 物化视图名 TO 表 AAS SELECT FROM 表 B;

不建议添加 populate 关键字进行全量更新。

4、为视图导入一些数据 导入增量数据

即源表已经存在数据了,如果继续为源表新增数据,此时物化视图所在表的数据和源表数据保持增量同步;

从前面的描述我们知道,物化视图作为一个逻辑上存在的表,和源表是有内在的联系的,即当我们对源表做一些操作的时候,将会触发对物化视图所在表的数据变化,执行下面的sql数据导入;

INSERT INTO hits_test SELECT EventDate, CounterID, UserID, URL, Income FROM hits_v1 WHERE EventDate >= '2014-03-23' limit 10;

【大数据clickhouse】clickhouse物化视图使用详解

执行完成后,查询下物化视图的数据,可以看到数据已经存在了;

【大数据clickhouse】clickhouse物化视图使用详解 导入历史数据

如果源表已经存在数据了,业务上如果需要物化视图所在的表的数据和源表保持一致,就需要考虑导入源表的历史数据到物化视图所在表中去;

使用下面的sql导入历史数据

INSERT INTO hits_mv SELECT UserID, EventDate, count(URL) as ClickCount, sum(Income) AS IncomeSum FROM hits_test WHERE EventDate = '2014-03-20' GROUP BY UserID,EventDate;

【大数据clickhouse】clickhouse物化视图使用详解 *[En]*

**

【大数据clickhouse】clickhouse物化视图使用详解 物化视图的总结 1、关于 创建物化视图的限制 必须指定物化视图的 engine 用于数据存储; TO [db].[table]语法的时候,不得使用 POPULATE;

查询语句(select)可以包含下面的子句: DISTINCT, GROUP BY, ORDER BY, LIMIT…

物化视图的 alter 操作有些限制,操作起来不大方便;

若物化视图的定义使用了 TO [db.]name 子语句,则可以将目标表的视图 卸载DETACH 再装载 ATTACH; 2、关于物化视图的数据更新 *[En]*

**

*[En]*

**

物化视图是一种特殊的数据表,可以使用 show tables 查看;POPULATE 关键字决定了物化视图的更新策略;若有 POPULATE 则在创建视图的过程会将源表已经存在的数据一并导入,类似于create table … as ;若无 POPULATE 则物化视图在创建之后没有数据,只会在创建只有同步之后写入源表的数据;clickhouse 官方并不推荐使用 POPULATE,因为在创建物化视图的过程中同时写入的数据不能被插入物化视图;

Original: https://blog.csdn.net/congge_study/article/details/128354450Author: congge_studyTitle: 【大数据clickhouse】clickhouse物化视图使用详解

相关阅读 Title: 电商领域知识图谱:常识抽取,表示与应用

原文标题:《AliCoCo2: Commonsense Knowledge Extraction, Representation and Application in E-commerce》

背景

在网购时,消费者会输入query检索自己想要的商品,在人的主观意识中,搜索query隐含着许多常识性的知识,比如”天气转凉时需要穿更厚更保暖的衣服”,”商务风格的衬衫通常的立领的”,”孕妇需要防滑的鞋子和防辐射的衣服”等。人的这些常识往往来源于生活经验,但这些常识很难被机器学习到,AliCoCo2的一部分工作就是让机器学习这部分常识,并加入到AliCoCo的图谱中。

但不同的是,常识组成的三元组

在构建图谱后,要想将图谱中的知识应用到各类下游任务中以提升下游任务的指标,往往需要对知识进行embediing(KGE, knowledge graph Embedding),但对本文抽取的常识知识来说,在embediing的过程中会遇到两个挑战:1)与传统的知识图谱相比,常识图谱非常稀疏;2)在电商的场景下,表示关系的常识又是特殊的。比如”subclass_of/is_a”这类关系的具有等级结构(类目层级),所以现存的KGE方法例如transE等利用欧式空间就很难灵活的embed树形结构的数据。再有,在具有类目约束的条件下,关系具有n元的特殊结构,现有的KGE方法都是基于三元组embed,针对4月组的embed还需要探索。

主要贡献

在大规模电商concept网络AliCoCo的基础上 丰富了更多基于”常识”(commonsense)关系构成的”知识”,是第一个构建电商领域常识知识图谱(AliCoCo2)的工作;

作者对AliCoCo2进行了编码,使用编码后的表示进行知识图谱补全的工作(KGC, knowledge graph completion),证明了稳重提到的知识图谱表示方法达到了SOTA;

为了验证抽取到的常识知识的有效性,作者把AliCoCo2中的常识知识,利用在搜索引擎、推荐系统等电商核心算法真实场景,实验结果的指标均有提升;

该工作也贡献了一个电商领域QA任务的benchmark,供研究者们参考使用。

定义AliCoCo2

AliCoCo2主要补充的是两个节点属于不同class之间的关系,比如

【大数据clickhouse】clickhouse物化视图使用详解

图中包含了n元的关系。,在embedding时,为了不破坏这种类目约束,可以采用增加新的concept节点和虚关系,但这会带来更多的节点和边,导致额外的储存和计算。

常识抽取

给定一个head concept,预先定义好的relation和类目约束,目标是抽取相应的tail concept,例如已知在衬衫类目下,给定head concept”商务风”,relation”设计风格”,希望得到tail concept “立领”。文中将这个问题转化成了QA问题,在文本中抽取答案的span。

例如对于”冬天 牛仔裤”这个例子,把它变成”什么材料的牛仔裤适合冬天”这样的问题,然后,从导购语”冬天来了,是时候准备温暖的棉毛衣,羊毛裤”中获得答案。将常识抽取的任务转化成QA的任务,有几个有点:1)在编码问题的时候,会把concept以及关系,约束,自然地融合在一起;2)更好的拓展了机器阅读理解(MRC,machine reading comprehension)任务;3)生成的自然语言问题是直接出现在众包中的,减少了直接标注常识关系的难度。

抽取的过程是迭代,半自动化的。1)从用户搜索购买行为和产品评论中收集QA对;2)通过众包标注QA对,产生种子数据集;3)从商家编辑的详情页中抽取相关的内容

在种子数据集构建完成后,可以搭建并训练一个MRC模型来预测更多常识关系,再加入数据集继续迭代训练过程。

QA收集过程

对每一对用户搜索query的购买行为数据,利用query中的concept作为head,使用对应的item 标题或者评论作为tail concept。然后利用传统的召回方法,例如tf-idf分数来计算正确性。利用一个很紧的阈值来保证候选pair的相关性比较低,以此修剪数据

内容抽取

在上述收集的QA数据对中,搜索大规模商家填写的产品描述,构成SquAD类似风格的数据集。在这个数据集中,从商品的标题匹配head concept ,答案就从商品的详情信息中匹配。对于每一个QA对,平均有87.4个候选答案内容被匹配,多的可以达到1000多个。再利用Jaccard相似度和预训练语言模型计算每个候选的相似度和困惑度,最终保留20个不相似的,质量最高的文本内容作为候选。最终选出了420K个不同的

阅读理解任务的模型

MRC模型用的是BERT,对于AliCoCo中的每个head concept,通过标题匹配取回商品,并利用问题模版产生相应的question,然后通过训练MRC模型从详情页中自动抽取可能的答案(常识),最后将提取的候选QA对分发给众包标注,整个过程不断迭代。

电商常识图谱的表示

定义:电商常识图谱(ECKG,E-commerce Commonsense Knowledge Graph)是一个

图谱表示的目标就是将每个节点E,关系R映射到低维空间向量中去,且这个向量表示可以改善下游任务的性能。

用BERT这种大规模预训练语言模型解决之前提到的常识数据稀疏问题,增强文本特征,并利用图神经网络(GNN)学习图结构特征,来解决结构化数据的问题,并利用不同模型的多任务联合训练的方式解码不同类型的关系,如下图。

【大数据clickhouse】clickhouse物化视图使用详解 Encoding的具体细节

预训练模型:利用QA种子数据集finetune BERT,仅利用masked language modeling损失来编码cocept。在finetune时,先利用所有的cocept微调BERT,输入的数据格式是[cls]+e+[SEP],通过masked language modeling任务来实现。在使用时,利用最后一层的[CLS]编码来作为结点的语义信息表示。

图神经网络模型:用来图谱信息的结构,利用GAN(Graph Attention Networks)来整合一跳邻居的编码,其中

【大数据clickhouse】clickhouse物化视图使用详解是关系的权重,【大数据clickhouse】clickhouse物化视图使用详解是代表了一阶邻居的重要度的attentin权重

【大数据clickhouse】clickhouse物化视图使用详解

【大数据clickhouse】clickhouse物化视图使用详解 通过多任务学习Decoding

decoding的过程设置了3个任务模型:层级树状机构;n元关系结构和普通的三元结构。分别利用不同模型建模这些结构,并使用多任务的方法联合训练。

普通的三元组就用常见的TransE模型,树形结构例如”is a”,”subclass_of”这类上下位的关系利用庞加莱embedding,这种方法使用了类似庞加莱球的双曲线空间表示层级结构,与欧式空间的主要区别在于距离的表示如下:

【大数据clickhouse】clickhouse物化视图使用详解

对于n元的关系结构

【大数据clickhouse】clickhouse物化视图使用详解

其中ti和tc是通过BERT计算出来的语义embedding。一般情况下,head 或者 tail的cocept时一种类目属性,这个兼容度分数可以代表了节点e属于类目c的可能性。然后带约束的head和tail concept的表示可以计算为:

【大数据clickhouse】clickhouse物化视图使用详解

c1表示叶子类目c对应的一级类目,用一级类目代替叶子类目的原因时由于叶子类目比较多,参数矩阵计算量过大,一级类目与叶子类目的空间近似,所以可以用一级类目替代叶子类目。这样,head 和tail concept就被建模在被类目约束的空间下了。这种方法可以适用于任何二进制的decoder

联合训练

encoding阶段是对每个任务共享的,但在decoding阶段,不同的任务有不同的解码阶段和得分函数,把每一个模型当作单独的任务训练,在每一个训练epoch中,随机选择一个任务中的采样batch进行训练,重复这个过程直到每个任务收敛。

应用 query 重写

用于扩大搜索场景下的召回。召回目前存在的问题是在用户的query和商品之间存在的语义gap。比如用户的query可以表达成”冬季牛仔裤”,但”冬季”很难出现在商品的描述中,通常会出现”羊绒”、”棉花”、”保暖”等字眼。使用AliCoCo2中的关系就可以直接改写query,扩大商品的召回。

搜索相关性

主要解决搜索引擎中用户quey和document之间词之间的gap,可以用上文中concept的embedding来提升相关性模型的性能。

【大数据clickhouse】clickhouse物化视图使用详解

Query和title中出现concept的拼接到BERT模型中的embediing,不是concept的不用用[UNK]代替。

推荐系统

【大数据clickhouse】clickhouse物化视图使用详解

embedding通常用于推荐系统的match阶段。通过图embedding计算得到触发商品的相似商品用于推荐。在利用GE(Graph Embedding)模型训练商品embedding时,如果加上边的信息(类目,属性),相似度计算时会有提升,因为有相似边的商品在embedding空间中会更相近。可以将图谱中边的信息额外整合到GE模型中去,来学习更好的商品embeeding。图谱中节点的embedding可以拉近相关但属性不完全一致的商品的向量距离,所以初始化每个商品embedding的边的时候(类目,属性)可以更换成AliCoCo2中的embedding。

实验评估

感兴趣的同学可以去看看,这里不再贴出来了。

Original: https://blog.csdn.net/qq_22472047/article/details/124147880Author: 爱吃腰果的李小明Title: 电商领域知识图谱:常识抽取,表示与应用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/306892/

转载文章受原作者版权保护。转载请注明原作者出处!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3