首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

离线数仓从0到1

对于数仓而言,又何尝不是?互联网的发展,导致大数据的人才缺口。互联网公司雨后春笋,传统行业机巧转身。短短几年,数据行业已沧海桑田。...回到主题,最近负责一个数据中台项目的建设,从0到1的建立数仓。模型建设,参考维度模型的方式。通过维度+事实,支持业务数据需求。走了不少弯路,在这里总结总结,更希望和大家交流。...建设数仓 什么是数仓,为什么建设数仓,怎么建设数仓?(我是谁,我从哪里来,我到哪里去) Inmon将数据仓库定义为:在企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的数据集合。...数仓中体现为: ods/dw/dm。每一层都干着自己的事情,像房子中的厨房、卫生间、客厅。你总不想还在睡眠中,被别人清晨的第一股清流所吵醒。...从大局出发,看待数仓建设,要考虑与源数据的交互,质量的监控,如何对外提供数据服务等。而在这些工作中,模型的建设可以说是灵魂式的存在。

1.5K22

二进制数的补码及运算(1)

1.正数的补码表示 正数的补码 = 原码 负数的补码 = {原码符号位不变} + {数值位按位取反后+1} or = {原码符号位不变} + {数值位从右边数第一个1及其右边的0保持不变...此处将n取16,得 X = 41943d = 1010_0011_1101_0111b 即0.64的二进制表示在左移了16位后为1010_0011_1101_0111b,因此可以认为0.64d = 0.1010...3.纯小数的补码 纯小数的补码遵循的规则是:在得到小数的源码后,小数点前1位表示符号,从最低(右)位起,找到第一个“1”照写,之后“见1写0,见0写1”。...1110_0001.1010_0011_1101_0111b 笔算过程: -97.64 * 2^16 = -6398935 = 1110_0001_1010_0011_1101_0111b,其中小数点在右数第...+1 = 1110_0001(.)1010_0011_1101_0111b 与查询结果一致 6.补码的拓展 在运算时必要时要对二进制补码进行数位拓展,此时应将符号位向前拓展。

73010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    大数据计数原理1+0=1这你都不会算No.77

    HyperLogLog Counting 其实就是 LC 基数估计法从算术平均数换成调和平均数。先补充一下小学算术,什么叫算术平均数什么叫调和平均数哈。首先是算术平均数,其实就是加起来求和。...第二是调和平均数,其实就是倒数求和除n的倒数。 呐,这样就可以解释清楚了。LC 里边是对 m 个桶里边的值进行求算术平均数然后直接进行基数估计,而 LLC 则是使用调和平均数。...其中 LLC 使用算术平均数,那么如果数值比较稀疏的时候,也即是有一些偏离值的时候,整个数据的求和会变得很偏远。用人话来说就是,我跟姚明平均身高两米。。。非常容易受到异常值的影响。...而 HyperLogLog Counting 使用调和平均数则可以有效降低偏离值的影响。虽然来说也有一点影响但是影响程度没有算术平均数那么大。

    60450

    大数据计数原理1+0=1这你都不会算(四)No.52

    大数据计数原理1+0=1这你都不会算(一)No.47 大数据计数原理1+0=1这你都不会算(二)No.50 大数据计数原理1+0=1这你都不会算(三)No.51 B+树是现在很多索引系统的数据结构,...一个M阶的B-树的结构定义如下: 1.定义任意非叶子结点最多只有M个儿子;且M>2; 2.根结点的儿子数为[2, M]; 3.除根结点以外的非叶子结点的儿子数为...非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] 1]; 7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[...有小伙伴就要问了,我特么看了这么久,这跟大数据计数有什么关系呢? 我们之前都是讲,如何将已经出现过的值保存,并索引下来,B-树就是一个很好的数据结构,来进行值的保存。...只要不在树中出现过的,插入到树中,并将数值加1,这就可以达到统计的效果了,错误率是0。

    61070

    大数据计数原理1+0=1这你都不会算(一)No.47

    事不过三~ 1+0=1你都不会谈什么大数据? 这篇呢,又是开坑之作,这是一个系列,主要会将大数据下的计数原理。说到计数,不知道大家会第一印象想到什么,我估计会是。。数手指。。...没错,小蕉从小学开始就开始数手指,所有20以内的加减法很早就掌握了。研表究明,这估计也是我们现在使用十进制的原因,如果我们每个人每只手都有6只手指,那我们可能就用十二进制了。...0 : hash(key.hashCode()); for (Entry e = table[indexFor(hash, table.length)]; e !...这时候计数就不用+1了。 那如果一个值不存在呢?那就计数+1,顺便把自己放到集合里边嘛~怎么放呢?程序员有一句黑话叫,"don't bb,show me the code"。...size++ 哇哇哇,size++,嗯,计数靠谱了,可以计数了。

    65450

    大数据计数原理1+0=1这你都不会算(九)No.64

    大数据计数原理1+0=1这你都不会算(一)No.47 <- HashSet 大数据计数原理1+0=1这你都不会算(二)No.50 <- BitMap 大数据计数原理1+...0=1这你都不会算(三)No.51 <- BloomFilter 大数据计数原理1+0=1这你都不会算(四)No.52 <- B-Tree 大数据计数原理1+0=1这你都不会算...(五)No.55 <- B+Tree 大数据计数原理1+0=1这你都不会算(六)No.57 <- LinearCounting(一) 大数据计数原理1+0=1这你都不会算...(七)No.59 <- LinearCounting(二) 大数据计数原理1+0=1这你都不会算(八)No.60 <- RoaringBitMaps 啦啦啦~有小伙伴说我最近怎么不更新...等,我们发现这些串第一个1出现的位置在第3位上(按1、2、3、4这样从左往右数),那我们就猜,总共有2^3这么多个数。主要算法思路就是上面这样,取第一个1出现的位置,然后靠猜。

    56260

    大数据计数原理1+0=1这你都不会算(三)No.51

    大数据计数原理1+0=1这你都不会算(一)No.47 大数据计数原理1+0=1这你都不会算(二)No.50 我们都知道BitMap已经非常节省空间了,一个值只需要一个 bit 就可以进行统计了,但是...这个算法的存储结构跟 BitMap 是相同的,区别在于它使用了多个 Hash 算法,一个字符串经过N个 Hash 算法会生成多个 Hash 值,如果N个值的 bit位 都为1 ,才判定该字符串已经存在。...比如字符串 “小蕉写得这么给力你不点个赞吗”,经过 Hash 算法1、Hash 算法2、Hash 算法3,生成了数字,1、11、21。 ?...这时候又来了一个字符串 “小蕉写得这么给力你不点个赞”,经过 Hash 算法1、Hash 算法2、Hash 算法3、生成了数字,1,11,19。 发现,咦,没有全部出现,所以该字符串没有出现过。 ?...我们这样想,即使真的真的真的那么巧,k-1个Hash函数的值都一样,只要第k个不一样,那这个算法依然会把它当成新的元素。

    60590

    大数据计数原理1+0=1这你都不会算(十)No.77

    大数据计数原理1+0=1这你都不会算(一)No.47 <- HashSet 大数据计数原理1+0=1这你都不会算(二)No.50 <- BitMap 大数据计数原理1+...0=1这你都不会算(三)No.51 <- BloomFilter 大数据计数原理1+0=1这你都不会算(四)No.52 <- B-Tree 大数据计数原理1+0=1这你都不会算...(五)No.55 <- B+Tree 大数据计数原理1+0=1这你都不会算(六)No.57 <- LinearCounting(一) 大数据计数原理1+0=1这你都不会算...(七)No.59 <- LinearCounting(二) 大数据计数原理1+0=1这你都不会算(八)No.60 <- RoaringBitMaps 大数据计数原理1+0=1...HyperLogLog Counting 其实就是 LC 基数估计法从算术平均数换成调和平均数。 先补充一下小学算术,什么叫算术平均数什么叫调和平均数哈。首先是算术平均数,其实就是加起来求和。 ?

    511100

    大数据计数原理1+0=1这你都不会算(六)No.57

    大数据计数原理1+0=1这你都不会算(一)No.47 <- HashSet 大数据计数原理1+0=1这你都不会算(二)No.50 <- BitMap 大数据计数原理1+0...=1这你都不会算(三)No.51 <- BloomFilter 大数据计数原理1+0=1这你都不会算(四)No.52 <- B-Tree 大数据计数原理1+0=1这你都不会算...基数估计,故名思议,估计,意思就是使用概率论的思想,用更低空间更低时间的成本,以一个很低很低的误差率来估计数据的基数。 能不能说说人话呢? 好好好,你长得好看说什么都对。...我们先创建一个长度为m的数组,每一个bit都设置为0,然后搞个Hash算法把这些值的位置所对应的0改为1。...比如字符串 “小蕉写得这么给力你不点个赞吗”,经过 Hash 算法1、Hash 算法2、Hash 算法3,生成了数字,1、11、21。 ?

    60060

    大数据计数原理1+0=1这你都不会算(五)No.55

    大数据计数原理1+0=1这你都不会算(一)No.47 <- HashSet 大数据计数原理1+0=1这你都不会算(二)No.50 <- BitMap 大数据计数原理1+0...=1这你都不会算(三)No.51 <- BloomFilter 大数据计数原理1+0=1这你都不会算(四)No.52 <- B-Tree 所谓B+树,跟B-树主要有这么几个差别...从根节点开始搜索,找到其中一个子树,然后继续遍历,直到叶子节点。遍历叶子节点的所有数据,从而找到对应的数据。若需要附属数据,则直接拿卫星数据。若需要继续遍历这棵树,则使用next指针进行树的遍历。...1、数据库索引。 比如Mysql,Oracle等。 2、文件系统索引。 比如NTFS。 3、搜索引擎索引。...那问题来了,这跟大数据计数又有什么关系呢? 请参照上一篇B-树,跟B-树一样。都是将数据存储起来,然后进行搜索,搜索不到就添加到树中。

    55190

    大数据计数原理1+0=1这你都不会算(七)No.59

    大数据计数原理1+0=1这你都不会算(一)No.47 <- HashSet 大数据计数原理1+0=1这你都不会算(二)No.50 <- BitMap 大数据计数原理1+...0=1这你都不会算(三)No.51 <- BloomFilter 大数据计数原理1+0=1这你都不会算(四)No.52 <- B-Tree 大数据计数原理1+0=1这你都不会算...(五)No.55 <- B+Tree 大数据计数原理1+0=1这你都不会算(六)No.57 <- LinearCounting(一) ---- 来了喔。...对事件进行定义: A = “经过n个元素进行Hash后,第j个桶值为0” ? 则A出现的概率如上。...意思就是坑为1的概率都是1/m,那么坑为0的概率为 (1 - 1/m),如此重复n次 ,就得到上面的式子了。 又因为每个桶都是独立的,所以整个BitMap的期望值为A的概率直接乘以m。 ?

    55750

    大数据计数原理1+0=1这你都不会算(二)No.50

    上一次我们说完了用 HashSet 来进行计数了。我们可以发现,如果我们估计有N个数,那么我们至少需要N*32bit(按照int在32位操作系统下占用32个bit)的空间来进行存储,这太费钱了。...数字可以表示0~31位置的情况,如果我们使用bit的位置信息来存储会怎样?我们来试试看。 如果我们得到Hash的值为0,那就直接将第0位置上的bit位置为1。 ?...如果我们得到Hash的值为31,那就直接将第31上的bit位置为1。 ? 如果发现位置上已经有值了,那当前的值就已经存在了,不再进行统计,这样子就可以完成超大数据量的统计啦。...a[0] 可以表示0~31位,a[1] 可以表示32~63位,以此类推,几乎可以无限大。如果数据确实非常巨大,连下标也到达int的界限了,也可以用其他的单个空间更大的数据类型来进行存储。...相比较于HashSet,BitMap 进行统计所使用的存储只需要 HashSet 的1/32。

    44980

    大数据计数原理1+0=1这你都不会算(八)No.60

    大数据计数原理1+0=1这你都不会算(一)No.47 <- HashSet 大数据计数原理1+0=1这你都不会算(二)No.50 <- BitMap 大数据计数原理1+...0=1这你都不会算(三)No.51 <- BloomFilter 大数据计数原理1+0=1这你都不会算(四)No.52 <- B-Tree 大数据计数原理1+0=1这你都不会算...(五)No.55 <- B+Tree 大数据计数原理1+0=1这你都不会算(六)No.57 <- LinearCounting(一) 大数据计数原理1+0=1这你都不会算...1、把n长的区间划分为2^16个桶(n为Roaring BitMaps 的总长度),每个桶放一个Container,作为一级索引存在。...如果Container是BitMap,直接找到对应的位是不是1就行了。 好啦,算法方面就这样说完了,但是又有小朋友要问了,那这样存储完有什么用呢?

    86070

    编程之美求二进制数中1的个数

    题目: 对于一个字节(8bit)的变量,求其二进制中“1”的个数,要求算法的执行效率尽可能地高。 举例: 十进制整数162的二进制表示为10 100 010,则162的二进制数中1的个数为3....要统计二进制数中1的个数,最容易想到的思路是从最右边开始逐个的看该位是否为1,如图1-1所示: ? 图1- 1 162的二进制表示 思路很简单,接下来就是分析该思路中涉及到的主要的技术点。...(1)如何判断该二进制位是否为1? 最简单的方式就是将该数与0x01做与操作即162& 0x01 = 0x0,如图1-2所示。 ? 图1- 2 162&0x01 注:0x01为十六进制表示。...// 求二进制数中1的个数 int count(int v){ int num = 0;//保存二进制数中1的个数 while(v){ num+= v & 0x01;//将二进制数与...0x01做与操作 v>> 1;// 二进制数右移一位 } return num; } 您是否还有更好的解法呢?

    1K20

    0-1背包之A - 高数Umaru系列(9)——哈士奇

    A - 高数Umaru系列(9)——哈士奇 Description 由于高数巨养的喵星人太傲娇了,要天天吃新鲜猫粮而且还经常欺负高数巨,所以高数巨决定买几条哈士奇尝尝鲜。...高数现在手里有X元,她想通过购买若干条哈士奇来获得尽可能多的萌值。现在给定高数巨手里的钱X以及N条哈士奇的价格和萌值,求高数巨最多可获得多少萌值 Input 多组输入。...对于每组输入,第一行有两个整数N,X(1 1 数巨的钱数 接下来的N行每行有两个整数Pi,Mi(1 < = Pi,Mi...40 3 100 20 55 20 35 90 95 1 10 20 50 Output 40 95 0 Hint #include #include using...for(int i=0; i<n; i++) { //当前这个买得起的话,将j,j+1,...x的目前最大的s都算出来!

    18620

    输出该数二进制表示中1的个数

    题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。...如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。...举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。...减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了。...如1100&1011=1000.也就是说,把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。

    55620

    设计分享|基于51单片机的TIMER0控制LED二进制计数

    单片机设计分享与定制 电子工程师成长日记 具体实现功能: 利用51单片机TIMER0控制LED实现二进制计数,通按键手动计数及自动计数。...51系列单片机具有以下标准功能: 8k字节Flash,512字节RAM, 32位I/O口线,看门狗定时器, 内置4KB EEPROM, MAX810复位电路, 三个16位定时器/计数器, 一个6向量2级中断结构...另外, 51系列在空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机停止工作,直到下一个中断或硬件复位为止。...本设计由C语言编写,全部代码如下: #include void main() { TMOD = 0x05; TH0 = 0x00; TL0 = 0x00; TR0...= 1; while(1) { P1 = TH0; P2 = TL0; } } 运行结果如图: Keil C51软件资料及使用教程: Keil C51安装及破解教程(内附安装包

    9200
    领券