首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Bigquery中的模算法计算`x %y‘,其中`x’是128位数

Bigquery中的模算法计算`x %y‘,其中`x’是128位数
EN

Stack Overflow用户
提问于 2019-12-20 02:23:49
回答 1查看 638关注 0票数 1

将字符串的MD5作为整数x的128位表示形式,如何在Google中计算x % y,其中y通常相对较小(大约1000)?

Bigquery有一个MD5函数,返回带有16个字节(即128位)的BYTES类型的结果。

(背景:这是用来计算确定性伪随机数的。但是,由于遗留和兼容性的原因,我在算法上没有灵活性!尽管我们知道它有一个https://stackoverflow.com/a/13104569。)

对于不同的输入字符串和不同的模块,每天需要进行数百万/数十亿次的操作,因此希望能够有效地完成。作为倒退,我可以用另一种语言从外部计算它,然后上传到Bigquery;但是如果我可以在Bigquery中直接这样做,那就太好了。

我学过很多数论,所以也许我们可以用一些数学技巧。然而,我仍然停留在更基本的BiqQuery问题上

  • 如何将字节数组转换为某种“大整数”类型?
  • 我可以从BYTES数组访问字节的子范围吗?
  • 给定一个字节(或者可能是四个字节?),我能否将其转换为一个整数类型,以便应用算术操作?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-20 08:43:17

使用数学力量和一个长时SQL函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TEMP FUNCTION modulo_md5(str ANY TYPE, m ANY TYPE) AS ((
  SELECT MOD(MOD(MOD(MOD(MOD(MOD(MOD(MOD(MOD(MOD(MOD(MOD(MOD(MOD(MOD(MOD(0 
    * 256 + num[OFFSET(0)], m ) 
    * 256 + num[OFFSET(1)], m )  
    * 256 + num[OFFSET(2)], m ) 
    * 256 + num[OFFSET(3)], m ) 
    * 256 + num[OFFSET(4)], m )  
    * 256 + num[OFFSET(5)], m ) 
    * 256 + num[OFFSET(6)], m ) 
    * 256 + num[OFFSET(7)], m )  
    * 256 + num[OFFSET(8)], m ) 
    * 256 + num[OFFSET(9)], m ) 
    * 256 + num[OFFSET(10)], m )  
    * 256 + num[OFFSET(11)], m ) 
    * 256 + num[OFFSET(12)], m ) 
    * 256 + num[OFFSET(13)], m )  
    * 256 + num[OFFSET(14)], m ) 
    * 256 + num[OFFSET(15)], m ) 
  FROM (SELECT TO_CODE_POINTS(MD5(str)) num)
));


SELECT title, modulo_md5(title, 177) result, TO_HEX(MD5(title)) md5
FROM `fh-bigquery.wikipedia_v3.pageviews_2019` 
WHERE wiki='en'
LIMIT 100000

现在您可以使用它作为一个持久的共享UDF:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT fhoffa.x.modulo_md5("any string", 177) result
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59423636

复制
相关文章
谷歌又傻X之BigQuery ML
最近工作忙,又努力在写干活,没怎么关注互联网行业的发展。周末好不容易补补课,就发现了谷歌在其非常成功的云产品BigQuery上发布了BigQuery ML。说白了就是利用SQL语句去做机器学习。
用户1564362
2018/08/17
1K0
谷歌又傻X之BigQuery ML
Spark Scala当中reduceByKey(_+_) reduceByKey((x,y) => x+y)的用法
reduceByKey(_+_)是reduceByKey((x,y) => x+y)的一个 简洁的形式 */ val rdd08 = sc.parallelize(List((1, 1), (1, 4),(1, 3), (3, 7), (3, 5))) val rdd08_1 = rdd08.reduceByKey((x, y) => x + y) println("reduceByKey 用法 " + rdd08_1.collect().mkString(",")) sc.stop() } def myunion(rdd05: RDD[Int], rdd06: RDD[Int]): Unit = { val res: RDD[Int] = rdd05.union(rdd06)
马克java社区
2019/07/20
1.9K0
Spark Scala当中reduceByKey(_+_) reduceByKey((x,y) => x+y)的用法
求z=x-y的概率密度_X和Y独立同分布
总结过一次,一般方法是可以由分布函数再求导得到概率密度,计算一定更要小心才能得到正确的解。
全栈程序员站长
2022/11/02
1.6K0
求z=x-y的概率密度_X和Y独立同分布
X电容与Y电容
X电容和Y电容统称为安规电容,安规电容即经过安全认证的电容,经过国家权威机构检验测试通过的交流电容,产品有各国认证标志。失效后,不会导致电击,不危及人身安全。
crazy_hw
2022/08/29
1K0
X电容与Y电容
python学习----pearsonr(x,y)相关系数计算
print "Lower noise",pearsonr(x,x+np.random.normal(0,1,size))
用户7886150
2020/12/30
2.3K0
为python(x,y)安装python
为了给我的python(x,y) 2.7.10安装xlwt包,在windows的命令行界面执行如下命令即可:
py3study
2020/01/08
8320
为python(x,y)安装python
前任de密码:(x^2+y^2-1)^3+x^2*y^3
正要下班,前任发来一串代码。按照一贯的尿性来看,这应该是TMD发错了。但鉴于今天日期特殊,仔细思考了一下好像不太对。
xjjdog
2021/05/27
4580
R语言建模入门:如何理解formula中y~.和y~x:z的含义?
背景:2019年的某月末日,三路人开局,兴趣所致组建了“花儿少年”:一个有组织、有纪律的R语言入门交流学习组织。自此,开启了一段小白&大师的成长史。
拴小林
2020/07/10
8K0
C语言:定义一个计算两个整数的和的函数int sum(int a,int b),在主函数中输入两个整数x和y,调用sum(x,y)输出x+y的和。
最近也没学python,倒是忙着写起了C语言作业,我也分享一下我的作业吧,希望对大家有用。 我就不想分析了,直接上代码好吗?有问题留言好吧。 关注我,我是川川,计算机大二菜鸟,有问题可以找我,一起交流。QQ:2835809579
川川菜鸟
2021/10/18
5K0
求延长线坐标 已知 点1的(x1,y1) 点2的(x2,y2) 求点3的x3求y3或者 点3的y3求x3
求延长线坐标 已知 点1的(x1,y1) 点2的(x2,y2) 求点3的x3求y3或者 点3的y3求x3
不要方要圆
2023/03/16
7850
2023-04-10:给定两个正整数x、y,都是int整型(java里) 返回0 ~ x以内,每位数字加起来是y的数字个数。 比如,x = 20、y = 5,返
本文介绍了两种解决给定 x 和 y,求 0~x 中每位数字之和为 y 的数字个数的方法。第一种方法使用暴力枚举的方式,遍历 0~x 中的每一个数字,计算其每位数字之和是否等于 y,并统计符合条件的数字数量。第二种方法使用动态规划的思想,通过数位 DP 的方式快速计算符合条件的数字数量。
福大大架构师每日一题
2023/04/10
3940
2023-04-10:给定两个正整数x、y,都是int整型(java里) 返回0 ~ x以内,每位数字加起来是y的数字个数。 比如,x = 20、y = 5,返
递归的练习1:求x的y次方
#include<iostream> using namespace std; //递归案例:计算x的y次方 //x:底数 y:次方 int test(int x, unsigned int y) { if (y == 0) { return 1; } //递归结束条件 if (y == 1) { return x; } return x*test(x, y-1); } int main() { cout << test(2,3) << endl; system("paus
大忽悠爱学习
2021/03/07
9350
0x7ffffffff什么意思(y9000x)
运行之后发现: 0x7FFFFFFF 对应 int.MaxValue 即 2147483647
全栈程序员站长
2022/07/28
5520
gmap构建离线地图,用createCustomerTiledLayer方法,瓦片地址尾部多了 ?x={x}&y={y}&z&{
gmap构建离线地图,用createCustomerTiledLayer方法,瓦片地址尾部多了 ?x={x}&y={y}&z&{z} 导致无法显示地图。 function initMap(
福大大架构师每日一题
2023/07/09
3210
gmap构建离线地图,用createCustomerTiledLayer方法,瓦片地址尾部多了 ?x={x}&y={y}&z&{
【小Y学算法】⚡️每日LeetCode打卡⚡️——21.x 的平方根
在二分查找的每一步中,我们只需要比较中间元素 mid 的平方与 x 的大小关系,并通过比较的结果调整上下界的范围。 由于我们所有的运算都是整数运算,不会存在误差
呆呆敲代码的小Y
2021/09/06
2890
条件分布_Y关于X的条件分布律
给定另一随机变量Y的随机变量X的条件分布是当观察到Y取某一值时X的分布。 虽然涉及精确的数学定义,但对于离散和连续变量,它等于将X和Y的联合PDF或PMF除以Y的PDF或PMF。
全栈程序员站长
2022/09/20
6880
17*x^2-16*abs(x)*y+17*y^2-225=0公式画爱心。
1、点击[命令行窗口] 2、按<Enter>键
裴来凡
2022/05/28
5630
17*x^2-16*abs(x)*y+17*y^2-225=0公式画爱心。
python中的if x 与if x == True
测试一下时间,显然第一种略快一点。第二个多了比较的操作,略慢一点。并且,考虑到PEP的规范,运行速度和简洁性等方面,if x更加合适。此外,在python中判断为假的主要有:
生信编程日常
2020/04/01
2.9K0
Skill语言实现将一个table中的坐标point(x,y)按照x和y进行从小到大排序的函数
/***************** 对table中的point进行排序,按照type值将x或者y从小到大排 *******************/ defun(TableSort (table type) table_len=length(table) let((sortedTable) sortedTable=makeTable("table") for(i 0 table_len-1 sortedTable[i]=table[i] ) for(i 0 table_len-2
黑马Amos
2023/03/21
7460
sum(x) over( partition by y ORDER BY z ) 分析
1. 从最简单的开始   sum(...) over( ),对所有行求和   sum(...) over( order by ... ),和 = 第一行 到 与当前行同序号行的最后一行的所有值求和,文字不太好理解,请看下图的算法解析。 with aa as( SELECT 1 a,1 b, 3 c FROM dual unionSELECT 2 a,2 b, 3 c FROM dual unionSELECT 3 a,3 b, 3 c FROM dual unionSELECT 4 a,4 b, 3 c
java达人
2018/01/31
1.2K0
sum(x) over( partition by y ORDER BY z ) 分析

相似问题

算法:将y球放入x框中,其中x <= y

48

Python中的算法帮助,查找对(x,y),其中y/x > const

45

如何在java中实现( x,y),其中x,y是双倍的?

615

浮点算法中x<=y和x<=y<=0是等价的吗?

11

Y= base64(X)其中X是整数-是Y字母数字吗?

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文