如何使用 Cx_Oracle Python 从 Oracle SQL 数据库中检索压缩数据?
How to retrieve compressed data from Oracle SQL database using Cx_Oracle Python?
假设我正在执行一个非常复杂的查询,我想使用 Cx_Oracle 从 Python 检索查询结果。
现在我使用这些行检索数据:
result = cur_out.getvalue()
raw_data = result.fetchall()
当我看到里面的内容时 raw_data 我得到一个包含查询结果的非常大的元组列表(数百万个观察值)。
这些结果未压缩:
raw_data = [("Renult Kangoo 2008", "SPEED", 123),
("Renult Kangoo 2008", "SPEED", 125),
("Renult Kangoo 2008", "WEIGH", 1231),
("Renult Kangoo 2008", "SPEED", 112)..]
如您所见,通过创建对应字典可以很容易地压缩此数据
{"Renult Kangoo 2008":1,
"SPEED":2,
"WEIGHT"3}
现在,我不再检索一百万个具有重复字符的观察值,而是使用重复数字,这将使数据传输更小,并降低检索所有数据的速度。
我想实现类似 zip 或 rar 压缩的功能。这是在 Cx_Oracle 模块中以某种方式实现的吗?
如果没有,是否有解决此问题并提高数据传输效率的解决方法。
当前的解决方法
现在我只在一次查询中检索汽车 ID 和变量 ID 以及它们的值。
在其他查询中,我正在检索汽车 ID 和汽车名称,在其他查询中,我正在检索变量 ID 和变量名称。
稍后,我在客户端映射值,这比发送具有重复数据的数百万行更省时。
您可以在查询中对 return 不同的值进行各种映射,例如使用 CASE 或 REPLACE 子句或其他。您还可以在 PL/SQL 块中进行各种映射。
假设我正在执行一个非常复杂的查询,我想使用 Cx_Oracle 从 Python 检索查询结果。
现在我使用这些行检索数据:
result = cur_out.getvalue()
raw_data = result.fetchall()
当我看到里面的内容时 raw_data 我得到一个包含查询结果的非常大的元组列表(数百万个观察值)。 这些结果未压缩:
raw_data = [("Renult Kangoo 2008", "SPEED", 123),
("Renult Kangoo 2008", "SPEED", 125),
("Renult Kangoo 2008", "WEIGH", 1231),
("Renult Kangoo 2008", "SPEED", 112)..]
如您所见,通过创建对应字典可以很容易地压缩此数据
{"Renult Kangoo 2008":1,
"SPEED":2,
"WEIGHT"3}
现在,我不再检索一百万个具有重复字符的观察值,而是使用重复数字,这将使数据传输更小,并降低检索所有数据的速度。
我想实现类似 zip 或 rar 压缩的功能。这是在 Cx_Oracle 模块中以某种方式实现的吗?
如果没有,是否有解决此问题并提高数据传输效率的解决方法。
当前的解决方法
现在我只在一次查询中检索汽车 ID 和变量 ID 以及它们的值。
在其他查询中,我正在检索汽车 ID 和汽车名称,在其他查询中,我正在检索变量 ID 和变量名称。
稍后,我在客户端映射值,这比发送具有重复数据的数百万行更省时。
您可以在查询中对 return 不同的值进行各种映射,例如使用 CASE 或 REPLACE 子句或其他。您还可以在 PL/SQL 块中进行各种映射。