2017-04-26 8 views
2

나는 아래와 비슷한 스크립트를 사용하여 teradata python 모듈을 사용하여 Teradata에 데이터 배치를 삽입하는 python 스크립트를 사용하고 있습니다. 이것은 ODBC 연결을 사용하며 때로는 다음 오류가 발생합니다. [HY001][Teradata][ODBC Teradata Driver] Memory allocation error. 이 오류는 무엇을 의미합니까? 그리고 이것을 고치는 방법에 대한 제안?ODBC Teradata Driver HY001 메모리 할당 오류. 무엇을 의미 하는가?

connection.executemany(
    'INSERT INTO {}.{} ("{}") VALUES ({})' 
    .format(database, table_name, 
      '","'.join(column_names), 
      ','.join(['?']*len(columns_names))), 
      records_for_insert, 
      batch=True 
) 
+0

동일한 문제가 있습니다. 질문은 포럼에서 답변을 찾을 수 없습니다 : https://community.teradata.com/t5/Connectivity/python-redhat-7-odbc-running-into-HY001-Memory-Allocation-Error/m-p/73000. IBM은 http://www-01.ibm.com/support/docview.wss?uid=swg1JR55512를 통해 '해결'한 일부 제품에 대한 패치를 릴리스했습니다. – jamesmf

답변

0

Teradata 팀은이 오류의 원인을 파악하는 데 도움을 줄 수있었습니다. ODBC는 요청 크기를 1MB로 제한합니다 (요청 크기가 1MB를 초과하면 오류 코드 22001으로 오류가 발생 함). .

"최대 1MB의 크기가 요청 메시지와 엔지니어링 계약에 의해 발견 된 ODBC 버그 데이터 크기가 1메가바이트 이하이면, ODBC 드라이버가 12 바이트를 추가 (KeepResp 소포 : 테라 데이타 팀에 따르면

) 추가 바이트로 인해 1MB 요청 메시지 제한이 초과되는 경우 메모리 할당 오류가 반환됩니다.이 경우의 해결책은 응용 프로그램에서 처리하는 메모리 할당 오류 대신 1MB 오류를 반환하는 것입니다. ODBC-17861에 의해 추적되고 11 월 하순에 예정된 ODBC 15.10.01.07을 대상으로합니다. "

0

내 배치를 1MB 미만의 작은 배치로 나누어 Teradata 1MB 제한을 피하는 경향이 있습니다. 예를 들어, 사용하여 테라 데이타 모듈 :

import teradata 
import pandas as pd 
import numpy as np 

udaExec = teradata.UdaExec (appName="test", version="1.0", logConsole=False) 
connect = udaExec.connect(method="odbc",system="DBName", username="UserName", password="Password", driver="DriverName") 

#We can divide our huge_df to small chuncks. E.g. 100 churchs 
chunks_df = np.array_split(huge_df, 100) 

#Import chuncks to Teradata 
for i,_ in enumerate(chunks_df): 

    data = [tuple(x) for x in chuncks_df[i].to_records(index=False)] 
    connect.executemany("INSERT INTO DATABASE.TABLEWITH15COL") values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",data,batch=True) 
    print('Batch',i+1,'Completed') 

나는 이것이 당신이, limitation.Here가 Teradata Module Documentation에 대한 링크는 것을 극복 할 수있는 방법을 찾으를 사용하여 선택하도록했다 도움이되기를 바랍니다.