Python Teradata 接続

Abid Ullah 2024年2月15日
  1. Python の Teradata データベース
  2. PyODBC ライブラリを使用して Python で Teradata に接続する
  3. Teradata SQL を使用して Python で Teradata に接続する
  4. Teradata モジュールを使用して Python で 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 にアップロードできます。

  1. Pandas が Python にインストールされた環境。
  2. Teradata データベースのホスト名/IP アドレスと接続方法がわかっている。
  3. Teradata に接続しようとしているマシンに ODBC ドライバーをインストールする必要があります。

あるいは、Teradata のデータベースの詳細がわからない場合は、会社の DBA に問い合わせることもできます。 Teradata ODBC ドライバーがなければ、JDBCPySpark を使用する必要があるかもしれません。

このチュートリアルでは、他の方法についても説明します。

PyODBC ライブラリを使用する

PyODBC を使用すると、Python を使用して ODBC データベースに簡単に接続できます。 さらに、このライブラリは DB API 2.0 仕様を実装し、さらに多くの Python 機能を備えています。

Python 環境では、PyODBC ライブラリをインストールする必要があります。 次に、Conda または Pip を使用してライブラリをインストールできます。

pip install pyodbc

また

conda install pyodbc

パッケージ、ライブラリ、およびモジュールのインストールには、pipという Python パッケージが使用されます。 たとえば、pipPyODBC モジュールと TeradataODBC ドライバーをインストールした後、次の Python コードを実行して既存のドライバーを一覧表示します。

Teradata ドライバーの名前に注意して、このリストに Teradata が表示されていることを確認します。

pyodbc.drivers()

python teradata 接続 - pyodbc

Teradata から Pandas データ フレームにデータを抽出する

次のコード フェンスは、SQL から Pandas データ フレームにデータを抽出する方法を示しています。 ただし、最初に、次の出力データ フレームを確認します。

teradata_df.head()

Python の df.head() は、常に 5 行を超える最初の行を返します。 ここでは、0-4 から Teradata のデフォルト テーブルの最初の 5 行を表示します。

python teradata 接続 - df_head

teradata_df.info()

python teradata 接続 - teradataInfo

接続文字列には、hostnamedriverusernamepassword、および 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() コマンドは変更をコミットし、永続化します。

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 は次のパラメータ hostusername & password で接続します。 接続が成功すると、クエリが読み取られて実行されます。

もう 1つの方法は、Giraffez モジュールを使用することです。 このモジュールには、MLOADFASTLOADBULKEXPORT などの多くの便利な機能があります。ただし、初心者向けの要件はごくわずかです (例: 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)、DSNtd16vm であり、コンピューターで次のパラメーターで構成されます。

次のステップでは、Teradata 用の仮想マシンを作成する必要があります。 上記のサンプル コードの実行結果は次のとおりです。

python テラデータ接続 - テラデータ接続

説明したように、Teradata を Python に接続する方法はいくつかあります。 ステップバイステップの指示により、Python で Teradata モジュールを接続するすべての可能な方法がここで明らかになりました。

著者: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

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