Python Teradata连接

这篇Python文章将展示如何使用Python连接到Teradata 。连接到Teradata 并将表导出到 Pandas 的选项很多。

本文将讨论一些基本的正确准则,并在讨论连接方法之前,看看Teradata 模块是如何工作的。

Python中的Teradata 数据库

你可以使用Python和Teradata 模块编写与Teradata 数据库的强大交互。

采用udaSQL 的理念提供了一个面向DevOps的SQL引擎,在这个引擎中,开发人员可以专注于他们的SQL逻辑,而不是执行外部配置、查询带和日志。

我们可以在MIT许可下下载Teradata 模块。下一步是安装和下载PyPI 的软件包。

由于其开源性质,这个模块得到了社区的支持。然而,客户和工程师没有得到该模块与第三方应用程序的互操作性的支持,如Teradata‘sODBC driversqlalchemy-Teradata

使用PyODBC 库在Python中连接到Teradata

Pandas数据框可以用SQL创建,并通过Teradata 数据框上传到Teradata

  1. 一个在Python中安装有Pandas的环境。
  2. Teradata 数据库的主机名/IP地址和连接方式是已知的。
  3. 在你试图连接到Teradata 的机器上必须安装一个ODBC 驱动程序。

另外,如果你不确定Teradata‘的数据库细节,你可以联系你公司的DBA。如果没有Teradata ODBC 驱动程序,你可能需要使用JDBCPySpark

在本教程中,我们还将讨论其他方法。

使用PyODBC

通过PyODBC ,你可以使用 Python 轻松地连接到ODBC 数据库。此外,这个库实现了DB API 2.0规范,具有更多的Pythonic特性。

在你的Python环境中,你应该安装PyODBC 库。然后,你可以用CondaPip 来安装这个库。

pip install pyodbc

或者

conda install pyodbc

一个叫做pip 的 Python 包用来安装包、库和模块。例如,在pip 安装了PyODBC 模块和Teradata‘sODBC 驱动程序之后,运行下面的 Python 代码来列出现有的驱动程序。

通过注意Teradata 驱动程序的名字来验证Teradata 是否出现在这个列表中。

pyodbc.drivers()

Python Teradata连接

Teradata 中提取数据到Pandas数据框中

下面的代码栅栏显示了如何从SQL中提取数据到Pandas数据框架中。但是,首先,检查下输出的数据框。

teradata_df.head()

Python的df.head() 总是返回上面第一个5 的行。所以在这里,它将显示来自0-4 的默认表Teradata 的前五行。

Python Teradata连接

teradata_df.info()

Python Teradata连接

在连接字符串中有很多相关的信息,如:hostname,driver,username,password, 和authentication protocol

你可能需要传递可选参数,这取决于你的Teradata 设置。与ODBC兼容的参数可以传给PyODBC

从Pandas上传数据框到Teradata

拉取数据的过程很简单,但上传数据的过程却比较复杂。

  1. Pandas的数据框架需要被转化成一个模式。
  2. 我们应该把数据框架分解成几块。ODBC 数据库每次插入最多只能有1MB ,所以如果你的数据框架很大,它就会失败。
  3. 我们应该按顺序插入记录。

你可以按照下面的代码来上传数据框。

cnxn.commit()
print('Query complete. Running time is %s sec/s.'%(round(end_time-start_time)))

cnxn.commit() 命令将提交更改并使其成为永久性的。

在Python中使用Teradata SQL来连接到Teradata

要使用这个包,你不需要安装Teradata 驱动程序(除此以外)。

import teradatasql
with teradatasql.connect(host='name', user='name', password='*****') as connect:
    df = pd.read_sql(query, connect)

一旦导入terasqlTeradata 将以下列参数连接host,username &password 。然后在连接成功后,查询将被读取和执行。

另一种方法是使用Giraffez 模块。这个模块有很多有用的功能,如MLOAD,FASTLOAD,BULKEXPORT, 等。然而,对于初学者来说,只有少数要求(例如,C/C++编译器,Teradata CLIv2 ,和TPT API headers/lib 文件)。

请注意,上下文管理器已被更新,以确保会话从13-07-2018DF ,可以用来发送数据到Teradata

使用rest ,我们可以消除odbc 所施加的1MB 的限制和对odbc 驱动程序的依赖。我们应该使用主机的IP地址来代替驱动程序的参数。

import teradata
import pandas as pd
udaExec = teradata.UdaExec (appName="webApp", version="1.0", logConsole=False)
with udaExec.connect(method="rest_one",system="DB_Name", username="user_name",
                      password="*******", host="HOST_IP_ADDRESS") as connect:
    data = [tuple(x) for x in df.to_records(index=False)]
    connect.executemany("INSERT INTO DATABASE.TABLEWITH5COL values(?,?,?,?,?)",data,batch=True)

为了避免HY001[ODBC Teradata Driver] Memory allocation error ,在使用ODBC Teradata 驱动程序时,把你的数据分成小于1MB 的块。比如说:

import teradata
import pandas as pd
import numpy as np
udaExec = teradata.UdaExec (appName="test", version="1.0", logConsole=False)
with udaExec.connect(method="odbc",system="DBName", username="User_Name",
                      password="*******", driver="Driver_Name") as connect:
    chunks_df = np.array_split(huge_df, 100)
     for i,_ in enumerate(chunks_df):
        data = [tuple(x) for x in chuncks_df[i].to_records(index=False)]
        connect.executemany("INSERT INTO DATABASE.TABLEWITH5COL v

下面是另一种用Python连接Teradata 的简单方法。

使用Teradata 模块在Python中连接到Teradata

如果已经安装了pip,通过执行下面的命令,你可以直接安装这个模块:

pip install Teradata

如果你还没有这个包,你可以从以下网址下载:https://pypi.python.org/pypi/teradata。

一旦你下载了teradata 包,将其解压,然后使用命令提示符导航到包含setup.py的目录,加上执行以下命令进行安装:

python setup.py install

示例代码:

import teradata
import sys
udaExec = teradata.UdaExec(
appName="HelloPeople", version="1.0", logConsole=False)
session = udaExec.connect(method="odbc", dsn="td16vm",
username="", password="", autocommit=True,
transactionMode="Teradata")
for row in session.execute('select getqueryband();'):
    print(row)
for row in session.execute('select top 20 tablename, tablekind from dbc.tables;'):
    print(row)
session.close()
input('Type <Enter> to exit...')

要连接到Teradata ,我们必须配置这些参数:transaction modeTeradataODBC 是连接method (另一个选项是REST ),DSNtd16vm ,在计算机中配置了以下参数。

在下一步,你需要为Teradata 创建一个虚拟机。下面是上述示例代码的运行结果:

Python Teradata连接

正如所讨论的,存在几种将Teradata 连接到 Python 的方法。通过一步步的指导,这里揭示了在Python中连接Teradata 模块的所有可能的方法。