生成UUID论英雄:Python、MySQL和Power BI谁强?
我们在实际编程过程中会经常遇到需要用唯一ID的场合,这些唯一ID还会存到数据库中以便于我们将来进行查询和匹配。
例如用户编号、订单编号、客户编号等等,几乎凡是需要用来严格划分用户数据归属性的地方就需要用到唯一ID,否则A的数据到了B那,数据乱了整个系统也就算是毁了。
那么唯一ID该如何有效的生成就变成了一门学问了。
其实最简单的办法就是从1开始,逐行检验重复值,如果是新的值,就+1,不断循环,但是这办法显然十分低能。
国际上对于ID标准化、唯一化有一些统一的标准,比如:
UUID全称:Universally Unique Identifier,即通用唯一识别码。是一个由4个连字号(-)将32个字节长的字符串分隔后生成的字符串,总共36个字节长。比如:d656baaf-42d6-4422-8df8-aa544058ec93。 目前最广泛应用的UUID,是微软公司的全局唯一标识符(GUID),而其他重要的应用,则有Linux ext2/ext3文件系统、LULS加密分区、GNOME、KDE、Mac OS X等等。
既然是“通用的”识别码,那么在不同的语言中,如何生成UUID呢?
Python
有专门生成uuid的库:uuid
import uuid
uid=uuid.uuid1()
print(uid)
用的是uuid1方法生成,默认会生成一个带减号(-)的字符串,我们可以通过hex拿到不带减号的版本,可以根据实际情况使用。
那么什么是uuid1呢?我们来看看Python关于UUID的源码。
从源码注释里得知,uuid1这个方法主要是根据当前机器ID,一个随机序列号和时间戳生成的一个随机字符串。
当然,使用过mongodb的朋友们很清楚,它的文档默认的key其实也是一个uuid,所以我们也可以利用mongodb的ObjectId来产生一个UUID。
在python中有个bson包,BSON是一种计算机数据交换格式,主要被用作MongoDB数据库中的数据存储和网络传输格式。
代码直接生成:
import bson
demoid = bson.ObjectId()
print(demoid)
结果:
MySQL
在MySQL中,我们可以用uuid()函数来生成一个UUID,如下图:
默认生成的uuid含有'-',我们可以使用replace函数替换掉'-'。当然,也是视具体情况而定,SQL如下:
select replace(uuid(),"-","") as uuid;
结果:
Power BI
那么在Power BI中我们如何生成UUID呢?
在微软的整个体系中,UUID的标准是GUID。
GUID 是 Globally Unique IDentifier 的首字母缩写。简而言之,GUID 是一个十六进制数,相当于一个包含 39 位数字的十进制数 – 类似于 1,000,000,000,000,000,000,000,000,000,000,000,000,000,000(十二进制)。换句话说,GUID 是一个高度唯一的 ID,即使它是随机生成的,也不太可能重现(基于概率) - 确实如此,且与UUID一致。
在DAX中并没有这样一个生成GUID的函数:
尝试在power query中寻找:
Guid.From函数是将文本的不带“-”的guid变成带“-”的标准化guid:
这显然不是我们想要的。
而Text.NewGuid是直接生成一个新的GUID:
直接对其进行调用:
比如我们要在Power BI中对一个姓名表生成不同的UUID,以下为姓名表:
我想为每一个NAME随机生成一个UUID,那么先对列去重,然后添加一行:
= Table.AddColumn(删除的副本, "自定义", each Text.NewGuid())
结果发现:
所有的行都是相同的值,这显然不是我们想要的。
而且,如果我们仔细审视这张图,深入思考,就会发现,Text.NewGuid只运行了一次!对于所有的行,Text.NewGuid只运行了一次!
也就是说,在添加自定义列时,pq并不是循环每一行来实现添加,而是直接一次性添加!
相关文章
- Python使用tkinter组件Label显示简单数学公式
- 内网渗透之DCOM横向移动
- 以目标为导向的语义交流的共同语言——一个课程学习框架
- python爬虫前奏【成信笔记】
- HTML 5 File API:文件拖放上传功能
- 教你快速创建 Python 虚拟环境
- pyenv 实现Python多版本自由切换
- 用 Python 对 Excel文件进行批量操作
- Python - 接入钉钉机器人
- Python - 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务
- crontab - 解决 mac 下通过 crontab 设置了 Python 脚本的定时任务却无法运行
- [源码解析] PyTorch分布式(5) ------ DistributedDataParallel 总述&如何使用
- Python科普系列——类与方法(上篇)
- SAP对STO的交货单执行PGI,报错 -Fld selectn for mvmt type 643 acct 400020 differs
- Spring Boot 实现通用 Auth 认证的 4 种方式
- 盘点4种使用Python批量合并同一文件夹内所有子文件夹下的Excel文件内所有Sheet数据
- OushuDB 学习经验分享(三):技术特点
- Java和Python思维方式的不同之处
- Python中日志记录新技能
- 奥比中光Gemini OpenCV—Python使用