파이썬 테라데이타 연결

Abid Ullah 2024년2월16일
  1. Python의 Teradata 데이터베이스
  2. PyODBC 라이브러리를 사용하여 Python에서 Teradata에 연결
  3. Teradata SQL을 사용하여 Python에서 Teradata에 연결
  4. Teradata 모듈을 사용하여 Python에서 Teradata에 연결
파이썬 테라데이타 연결

이 Python 문서에서는 Python을 사용하여 Teradata에 연결하는 방법을 보여줍니다. Teradata에 연결하고 테이블을 Pandas로 내보내는 옵션은 다양합니다.

이 기사에서는 몇 가지 필수적인 적절한 지침에 대해 설명하고 연결 방법에 대해 논의하기 전에 Teradata 모듈의 작동 방식을 살펴봅니다.

Python의 Teradata 데이터베이스

Teradata 모듈과 함께 Python을 사용하여 Teradata 데이터베이스와의 강력한 상호 작용을 스크립팅할 수 있습니다.

udaSQL 철학을 채택하면 개발자가 외부 구성, 쿼리 밴딩 및 로깅을 수행하는 대신 SQL 논리에 집중할 수 있는 DevOps 지향 SQL 엔진이 제공됩니다.

MIT 라이선스에 따라 Teradata 모듈을 다운로드할 수 있습니다. 다음 단계는 PyPI에서 패키지를 설치하고 다운로드하는 것입니다.

오픈 소스 특성으로 인해 이 모듈은 커뮤니티에서 지원됩니다. 그러나 고객과 엔지니어는 TeradataODBC 드라이버sqlalchemy-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 데이터베이스에 쉽게 연결할 수 있습니다. 또한 이 라이브러리는 훨씬 더 많은 Python 기능으로 DB API 2.0 사양을 구현합니다.

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-4Teradata 기본 테이블에서 처음 5개 행을 표시합니다.

python teradata 연결 - df_head

teradata_df.info()

python teradata 연결 - teradataInfo

연결 문자열에는 호스트 이름, 드라이버, 사용자 이름, 암호인증 프로토콜과 같은 많은 관련 정보가 있습니다.

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을 가져오면 Teradatahost, usernamepassword 매개 변수와 연결됩니다. 그런 다음 성공적으로 연결되면 쿼리를 읽고 실행합니다.

또 다른 방법은 Giraffez 모듈을 사용하는 것입니다. 이 모듈에는 MLOAD, FASTLOAD, BULKEXPORT 등과 같은 많은 유용한 기능이 있습니다. 그러나 초보자를 위한 몇 가지 요구 사항만 있습니다(예: C/C++ 컴파일러, Teradata CLIv2TPT 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] 메모리 할당 오류를 방지하려면 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 values(?,?,?,?,?)", data, batch=True
        )

다음은 Teradata를 Python과 연결하는 또 다른 쉬운 방법입니다.

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 연결 - teradata 연결

논의한 바와 같이 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