Python Teradata连接
这篇Python文章将展示如何使用Python连接到Teradata
。连接到Teradata
并将表导出到 Pandas 的选项很多。
本文将讨论一些基本的正确准则,并在讨论连接方法之前,看看Teradata
模块是如何工作的。
Python中的Teradata
数据库
你可以使用Python和Teradata
模块编写与Teradata
数据库的强大交互。
采用udaSQL
的理念提供了一个面向DevOps的SQL引擎,在这个引擎中,开发人员可以专注于他们的SQL逻辑,而不是执行外部配置、查询带和日志。
我们可以在MIT许可下下载Teradata
模块。下一步是安装和下载PyPI
的软件包。
由于其开源性质,这个模块得到了社区的支持。然而,客户和工程师没有得到该模块与第三方应用程序的互操作性的支持,如Teradata
‘sODBC driver
和sqlalchemy-Teradata
。
使用PyODBC
库在Python中连接到Teradata
Pandas数据框可以用SQL创建,并通过Teradata
数据框上传到Teradata
。
- 一个在Python中安装有Pandas的环境。
-
Teradata
数据库的主机名/IP地址和连接方式是已知的。 - 在你试图连接到
Teradata
的机器上必须安装一个ODBC
驱动程序。
另外,如果你不确定Teradata
‘的数据库细节,你可以联系你公司的DBA。如果没有Teradata
ODBC
驱动程序,你可能需要使用JDBC
和PySpark
。
在本教程中,我们还将讨论其他方法。
使用PyODBC
库
通过PyODBC
,你可以使用 Python 轻松地连接到ODBC
数据库。此外,这个库实现了DB API 2.0规范,具有更多的Pythonic特性。
在你的Python环境中,你应该安装PyODBC
库。然后,你可以用Conda
或Pip
来安装这个库。
pip install pyodbc
或者
conda install pyodbc
一个叫做pip
的 Python 包用来安装包、库和模块。例如,在pip
安装了PyODBC
模块和Teradata
‘sODBC
驱动程序之后,运行下面的 Python 代码来列出现有的驱动程序。
通过注意Teradata
驱动程序的名字来验证Teradata
是否出现在这个列表中。
pyodbc.drivers()
从Teradata
中提取数据到Pandas数据框中
下面的代码栅栏显示了如何从SQL中提取数据到Pandas数据框架中。但是,首先,检查下输出的数据框。
teradata_df.head()
Python的df.head()
总是返回上面第一个5
的行。所以在这里,它将显示来自0-4
的默认表Teradata
的前五行。
teradata_df.info()
在连接字符串中有很多相关的信息,如:hostname
,driver
,username
,password
, 和authentication protocol
。
你可能需要传递可选参数,这取决于你的Teradata
设置。与ODBC兼容的参数可以传给PyODBC
。
从Pandas上传数据框到Teradata
拉取数据的过程很简单,但上传数据的过程却比较复杂。
- Pandas的数据框架需要被转化成一个模式。
- 我们应该把数据框架分解成几块。
ODBC
数据库每次插入最多只能有1MB
,所以如果你的数据框架很大,它就会失败。 - 我们应该按顺序插入记录。
你可以按照下面的代码来上传数据框。
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)
一旦导入terasql
,Teradata
将以下列参数连接host
,username
&password
。然后在连接成功后,查询将被读取和执行。
另一种方法是使用Giraffez
模块。这个模块有很多有用的功能,如MLOAD
,FASTLOAD
,BULKEXPORT
, 等。然而,对于初学者来说,只有少数要求(例如,C/C++编译器,Teradata CLIv2
,和TPT API headers/lib
文件)。
请注意,上下文管理器已被更新,以确保会话从13-07-2018
。DF
,可以用来发送数据到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 mode
是Teradata
;ODBC
是连接method
(另一个选项是REST
),DSN
是td16vm
,在计算机中配置了以下参数。
在下一步,你需要为Teradata
创建一个虚拟机。下面是上述示例代码的运行结果:
正如所讨论的,存在几种将Teradata
连接到 Python 的方法。通过一步步的指导,这里揭示了在Python中连接Teradata
模块的所有可能的方法。