【问题标题】:Extract a few million records from Teradata to Python (pandas)从 Teradata 中提取几百万条记录到 Python (pandas)
【发布时间】:2018-12-04 17:38:46
【问题描述】:

我的 teradata 表中有来自 6 个月电子邮件的数据(电子邮件属性,如发送日期、主题行以及收件人详细信息,如年龄、性别等,总共大约 20 列)。它总共大约有 2000 万,我想将其引入 Python 以进行进一步的预测建模。

我尝试使用“pyodbc”连接器运行选择查询,但它只能运行数小时和数小时。然后我停止了它并修改了查询以仅获取 1 个月的数据(可能是 3-4 百万),但仍然需要很长时间。

有没有比 'pyodbc' 更好(更快)的选项或完全不同的方法?

感谢任何输入。谢谢

【问题讨论】:

  • 即使使用 ODBC 导出 2000 万行也不应该运行数小时,甚至数分钟。您是否将数据写入平面文件?然后 TPT 作业应该运行
  • 您可以检查客户端是否禁用了 ODBC 跟踪和类似的调试功能,因为这些功能会大大减慢速度。

标签: python sql odbc teradata


【解决方案1】:

在 Python 和 Teradata 之间进行通信时,我建议使用 Teradata 包(pip teradata;https://developer.teradata.com/tools/reference/teradata-python-module)。它利用 ODBC(或 REST)进行连接。

除此之外,您还可以通过 JayDeBeApi 使用 JDBC。 JDBC 有时可能比 ODBC 快一些。

这两个选项都支持 Python 数据库 API 规范,因此您无需触及其他代码。例如。 pandas.read_sql 可以很好地与上面的连接一起工作。

您的性能问题看起来像其他一些问题:

  1. 网络连接

  2. Python (Pandas) 内存处理

ad 1) 吞吐量只能用更多的吞吐量代替

ad 2) 您可以尝试在数据库中做尽可能多的事情(特征工程)+ 您的本地机器应该有 RAM(“pandas 的经验法则:RAM 是数据集大小的 5 到 10 倍") - 也许 Apache Arrow 可以解决您的一些本地 RAM 问题

检查:

【讨论】:

  • 谢谢@hhoeck。我认为缺乏足够的 RAM 会导致问题,因为文件大小几乎是 RAM 容量的一半。我现在已经优化了查询以仅提取所需的变量并非常快速地导入数据。
猜你喜欢
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多