Python 从oracle获取一个随机行的最有效方法
我有一个场景,我必须在数据库中混淆数据(=出于测试目的,进行置乱,因此不可能看到真实数据,不需要解读/取消混淆)。有多个表正在引用address_表。我不能混淆address_表,所以我想我只是用随机的其他address_表ID-s更改这些表中的引用。address_表包含6M+条记录。因此,我将创建一个包含所有地址ID的临时表,然后在需要时调用一些函数从中随机获得一个临时表。所以我可能会生成一个随机值,并将该行取为:Python 从oracle获取一个随机行的最有效方法,python,sql,oracle,random,obfuscation,Python,Sql,Oracle,Random,Obfuscation,我有一个场景,我必须在数据库中混淆数据(=出于测试目的,进行置乱,因此不可能看到真实数据,不需要解读/取消混淆)。有多个表正在引用address_表。我不能混淆address_表,所以我想我只是用随机的其他address_表ID-s更改这些表中的引用。address_表包含6M+条记录。因此,我将创建一个包含所有地址ID的临时表,然后在需要时调用一些函数从中随机获得一个临时表。所以我可能会生成一个随机值,并将该行取为: Select * From ( Select Id, Rownum Rn F
Select * From (
Select Id, Rownum Rn From myTempTable )
WHERE RN = x;
其中x是由dbms_random生成的某个随机值。现在,尽管这是我所需要的,但它的性能与我的预期相差甚远。
我尝试过的另一件事是调用sample()函数,它(至少在小表上)的性能稍好一些,但还不够好
我知道在这个问题上有几个线程,比如or,但它们并没有直接从性能方面回答这个问题
此外,我不局限于使用pl/sql。我对pl/sql知之甚少,它的性能如何?我的意思是,这只是DB服务器处理队列中的另一个进程,也许我可以在客户端使用python之类的东西进行处理(我的意思是生成更新脚本、填充随机数等),甚至考虑到网络延迟等,从而获得更好的性能?有人有这方面的经验吗 使用示例子句
select * from myTempTable SAMPLE(10);
这将只返回10%的行。如果您只想隐藏真实数据,为什么不在查询的选择部分处理这些数据呢。不要质疑:
select column_name from table;
你可以选择
select scrambling_function(column_name) from table;
置乱函数可以是您喜欢的任何函数。据我所知,没有一种使用SQL随机采样的好方法。某些SQL版本中可用的示例函数不是足够的随机示例。最好的方法是导出完整的样本集,并使用随机软件确定最终解决方案中要包含的行的索引。或者,如果您有一个简单的数字索引(1,2,3…n),并且知道需要从中选择多少行,那么您可以上传一个索引列表,以包含并查询该索引。请尝试random.org生成随机数,他们的API位于。出于兴趣,您计划如何消除数据混淆(假设这是一项要求)?“混淆”是什么意思?选择随机记录是如何解决此问题的?我不是,它更像是数据的混乱。我必须为测试创建一个测试数据库,这样就不可能看到真实的数据。数据库将被分发出去,真实的数据一定不在那里。