Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从oracle获取一个随机行的最有效方法_Python_Sql_Oracle_Random_Obfuscation - Fatal编程技术网

Python 从oracle获取一个随机行的最有效方法

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

我有一个场景,我必须在数据库中混淆数据(=出于测试目的,进行置乱,因此不可能看到真实数据,不需要解读/取消混淆)。有多个表正在引用address_表。我不能混淆address_表,所以我想我只是用随机的其他address_表ID-s更改这些表中的引用。address_表包含6M+条记录。因此,我将创建一个包含所有地址ID的临时表,然后在需要时调用一些函数从中随机获得一个临时表。所以我可能会生成一个随机值,并将该行取为:

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位于。

出于兴趣,您计划如何消除数据混淆(假设这是一项要求)?“混淆”是什么意思?选择随机记录是如何解决此问题的?我不是,它更像是数据的混乱。我必须为测试创建一个测试数据库,这样就不可能看到真实的数据。数据库将被分发出去,真实的数据一定不在那里。