Python Teradata 接続
-
Python の
Teradata
データベース -
PyODBC
ライブラリを使用して Python でTeradata
に接続する -
Teradata
SQL を使用して Python でTeradata
に接続する -
Teradata
モジュールを使用して Python でTeradata
に接続する
この Python の記事では、Python を使用して Teradata
に接続する方法を示します。 Teradata
に接続し、テーブルを Pandas にエクスポートするオプションは数多くあります。
この記事では、いくつかの重要な適切なガイドラインについて説明し、接続方法について説明する前に、Teradata
モジュールがどのように機能するかを見ていきます。
Python の Teradata
データベース
Python と Teradata
モジュールを使用して、Teradata
データベースとの強力な対話をスクリプト化できます。
udaSQL
哲学を採用することで、開発者が外部構成、クエリ バンディング、およびロギングを実行するのではなく、SQL ロジックに集中できる DevOps 指向の SQL エンジンが提供されます。
Teradata
モジュールは MIT ライセンスの下でダウンロードできます。 次のステップは、PyPI
からパッケージをインストールしてダウンロードすることです。
このモジュールはオープンソースであるため、コミュニティによってサポートされています。 ただし、顧客とエンジニアは、このモジュールとサードパーティ アプリケーション (Teradata の ODBC ドライバーや sqlalchemy-Teradata など) との相互運用性についてはサポートされていません。
PyODBC
ライブラリを使用して Python で Teradata
に接続する
Pandas データ フレームは、SQL で作成し、Teradata
データ フレームを使用して Teradata
にアップロードできます。
- Pandas が Python にインストールされた環境。
Teradata
データベースのホスト名/IP アドレスと接続方法がわかっている。Teradata
に接続しようとしているマシンにODBC
ドライバーをインストールする必要があります。
あるいは、Teradata
のデータベースの詳細がわからない場合は、会社の DBA に問い合わせることもできます。 Teradata
ODBC
ドライバーがなければ、JDBC
と PySpark
を使用する必要があるかもしれません。
このチュートリアルでは、他の方法についても説明します。
PyODBC
ライブラリを使用する
PyODBC
を使用すると、Python を使用して ODBC
データベースに簡単に接続できます。 さらに、このライブラリは DB API 2.0 仕様を実装し、さらに多くの Python 機能を備えています。
Python 環境では、PyODBC
ライブラリをインストールする必要があります。 次に、Conda
または Pip
を使用してライブラリをインストールできます。
pip install pyodbc
また
conda install pyodbc
パッケージ、ライブラリ、およびモジュールのインストールには、pip
という Python パッケージが使用されます。 たとえば、pip
が PyODBC
モジュールと Teradata
の ODBC
ドライバーをインストールした後、次の Python コードを実行して既存のドライバーを一覧表示します。
Teradata
ドライバーの名前に注意して、このリストに Teradata
が表示されていることを確認します。
pyodbc.drivers()
Teradata
から Pandas データ フレームにデータを抽出する
次のコード フェンスは、SQL から Pandas データ フレームにデータを抽出する方法を示しています。 ただし、最初に、次の出力データ フレームを確認します。
teradata_df.head()
Python の df.head()
は、常に 5
行を超える最初の行を返します。 ここでは、0-4
から Teradata
のデフォルト テーブルの最初の 5 行を表示します。
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()
コマンドは変更をコミットし、永続化します。
Teradata
SQL を使用して Python で 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
で接続します。 接続が成功すると、クエリが読み取られて実行されます。
もう 1つの方法は、Giraffez
モジュールを使用することです。 このモジュールには、MLOAD
、FASTLOAD
、BULKEXPORT
などの多くの便利な機能があります。ただし、初心者向けの要件はごくわずかです (例: C/C++ コンパイラ、Teradata CLIv2
、および TPT API headers/lib
ファイル)。
セッションが 13-07-2018
の時点で確実に閉じられるように、コンテキスト マネージャーが更新されていることに注意してください。 DF
を使用して Teradata
にデータを送信できます。
rest
メソッドを使用すると、odbc
によって課される 1MB
制限と odbc
ドライバーへの依存を排除できます。 driver 引数の代わりにホスト 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
)
ODBC
Teradata
ドライバーを使用する場合、HY001[ODBC Teradata Driver] メモリ割り当てエラー
を回避するには、データを 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 values(?,?,?,?,?)", data, batch=True
)
以下は、Teradata
を Python に接続するもう 1つの簡単な方法です。
Teradata
モジュールを使用して Python で Teradata
に接続する
pip が既にインストールされている場合は、次のコマンドを実行することで、このモジュールを直接インストールできます。
pip install Teradata
パッケージをお持ちでない場合は、https://pypi.org/pypi/teradata の URL からダウンロードできます。
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
に接続するには、次のパラメーターを構成する必要があります。 トランザクション モード
は Teradata
です。 ODBC
は接続 メソッド
(その他のオプションは REST
)、DSN
は td16vm
であり、コンピューターで次のパラメーターで構成されます。
次のステップでは、Teradata
用の仮想マシンを作成する必要があります。 上記のサンプル コードの実行結果は次のとおりです。
説明したように、Teradata
を Python に接続する方法はいくつかあります。 ステップバイステップの指示により、Python で Teradata
モジュールを接続するすべての可能な方法がここで明らかになりました。
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedIn