Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 블로그 게시물
ODBC 드라이버 버전 2.x와 1.x의 차이점
이 섹션에서는 ODBC 1.x 드라이버와 ODBC 2.x 드라이버의 차이점을 설명하고 2.x 드라이버로 마이그레이션하는 방법에 대한 지침을 제공합니다. 애플리케이션에 영향을 미칠 수 있는 변경 사항과 이를 해결하는 방법을 설명합니다.
해결해야 할 주요 차이점
다음 작업은 가장 일반적인 마이그레이션 문제를 해결합니다. 대부분의 애플리케이션에는 이 중 일부만 필요합니다.
DSN 및 연결 문자열
-
DSN에서 제거되거나 이름이 변경되었을 수 있는 드라이버 옵션을 검토합니다. 일부 ODBC 1.x 드라이버 옵션은 ODBC 2.x 드라이버에서 지원되지 않습니다. 나머지는 이름이 변경되었습니다. 세부 정보는 연결 문자열 및 DSN 옵션 섹션을 참조하세요.
-
애플리케이션이 와이드 문자 유형 코드(
SQL_WVARCHAR,SQL_WCHAR)에 의존하는 경우UseUnicode=true를 설정합니다. ODBC 2.x 드라이버에서UseUnicode는 기본적으로false로 설정되어 좁은 문자 유형을 보고합니다. -
로깅 설정을
[ODBC]섹션으로 이동합니다. Linux 및 macOS에서는 개별 DSN 섹션이 아닌odbc.ini의 글로벌[ODBC]섹션에서LogLevel및LogPath를 설정해야 합니다.
쿼리 및 스키마
-
SQLTables유형 필터에EXTERNAL TABLE을 포함합니다. ODBC 2.x에서는 Amazon Redshift Spectrum 테이블과 데이터 공유 테이블이 모두EXTERNAL TABLE로 보고됩니다. 유형별로SQLTables를 필터링하는 경우EXTERNAL TABLE을 추가하여 이러한 객체를 계속 확인합니다. -
간격 데이터 유형을 지원하지 않는 애플리케이션의 경우
INTERVAL을VARCHAR에 캐스팅합니다. 일부 클라이언트는 ODBC 간격 유형을 지원하지 않습니다. 이러한 클라이언트의 경우 쿼리에서 해당 열을 캐스팅합니다.SELECT col::VARCHAR FROM ...
애플리케이션 코드
-
쿼리 제한 시간 설정을 확인합니다. ODBC 2.x는 ODBC 사양에 따라
SQL_ATTR_QUERY_TIMEOUT을 올바르게 적용합니다. ODBC 1.x는 이 설정을 자동으로 무시했습니다. 이전에 성공한 장기 실행 쿼리는 이제 제한 시간 오류와 함께 실패할 수 있습니다. 필요에 따라 제한 시간 값을 검토하고 조정합니다. -
data-at-execution 파라미터의 데이터 길이를 제공합니다. 2.x는
SQL_NEED_LONG_DATA_LEN을Y(1.x는N을 보고함)로 보고합니다.SQL_DATA_AT_EXEC파라미터를 바인딩하는 애플리케이션은 이제StrLen_or_IndPtr에서 총 데이터 길이를 미리 제공해야 합니다.
연결 문자열 및 DSN 옵션
다음 표에는 이름이 변경되었거나 ODBC 2.x 드라이버에 직접적으로 대응하는 ODBC 1.x 드라이버 옵션이 나와 있습니다.
| 1.x 옵션 | 2.x 동등 | 참고 |
|---|---|---|
MaxLongVarChar |
MaxLongVarcharSize |
기본값이 8190에서 65535로 변경되었습니다. |
ConnectionTimeout |
LoginTimeout |
동일한 연결 제한 시간, 이름이 변경되었습니다. 기본값은 0(제한 시간 없음)입니다. |
VpcEndpointUrl |
vpc_endpoint_url |
|
SSLCertPath |
TrustStore 또는 CaFile |
서버를 확인하는 데 사용되는 CA 인증서의 경로입니다. Windows에서는 DSN 설정 대화 상자의 Trust Store 필드에서 이 값을 설정합니다. 대화 상자에는 CaFile 필드가 없습니다. 둘 다 설정하면 TrustStore가 우선순위를 갖습니다. |
다음 1.x 옵션은 현재 2.x 드라이버에서 지원되지 않습니다. 2.x 드라이버는 이를 무시하므로 연결에 영향을 주지 않습니다. DSN에서 제거하는 것은 선택 사항이지만 혼동을 방지하기 위해 권장됩니다.
-
SingleRowMode- 클라이언트 메모리를 제한하려면 대신StreamingCursorRows를 사용합니다. -
UseSystemTrustStore- 지원되지 않습니다. Windows에서 1.x 드라이버는 Windows 시스템 인증서 스토어에 대해 서버 인증서를 검증할 수 있습니다. 2.x 드라이버는 CA 인증서 파일을 기준으로 검증합니다. 기본적으로 번들 Amazon Redshift 루트 인증서 또는TrustStore나CaFile에서 지정한 파일을 사용합니다. -
BoolsAsChar- 애플리케이션이"0"및"1"문자열(SQL_VARCHAR)로 반환되는 BOOLEAN 열에 의존하는 경우 쿼리에서 열을VARCHAR로 캐스팅합니다(예:SELECT col::VARCHAR FROM ...). -
TextAsLongVarchar,CheckCertRevocation,EnableAwsSdkLogs,UseLogPrefix,Locale,UseDeclareFetch,UseMultipleStatements,EnforceSingleStatement,EnableTableTypes– 현재 릴리스에는 동등한 기능이 없습니다. Amazon Redshift 팀은 향후 릴리스에서 이러한 옵션에 대해 동등한 기능이나 대안을 검토하고 있습니다.
지원되는 2.x 옵션의 전체 목록은 ODBC 드라이버 옵션 섹션을 참조하세요.
데이터 유형 변경
다음 표에는 ODBC 사양을 준수하기 위해 ODBC 2.x에서 변경된 Amazon Redshift 데이터 유형 매핑이 나와 있습니다. 대부분의 애플리케이션은 유형 코드가 아닌 인덱스 또는 이름으로 열을 바인딩하기 때문에 영향을 받지 않습니다.
| Amazon Redshift 데이터 형식 | ODBC 1.x | ODBC 2.x |
|---|---|---|
DOUBLE PRECISION |
SQL_FLOAT(6) |
SQL_DOUBLE(8) |
INTERVAL YEAR TO MONTH |
SQL_VARCHAR(12), 텍스트 |
SQL_INTERVAL_YEAR_TO_MONTH(107), 간격 구문 |
INTERVAL DAY TO SECOND |
SQL_VARCHAR(12), 텍스트 |
SQL_INTERVAL_DAY_TO_SECOND(110), 간격 구문 |
VARCHAR / CHAR /
TEXT |
와이드 유형(SQL_WVARCHAR, SQL_WCHAR, SQL_WLONGVARCHAR), 기본값 UseUnicode=true |
좁은 유형(SQL_VARCHAR, SQL_CHAR, SQL_LONGVARCHAR). 와이드 유형을 복원하도록 UseUnicode=true를 설정합니다. |
GEOMETRY / GEOGRAPHY(SQL_C_BINARY) |
16진수 인코딩 ASCII 문자열 | 원시 바이너리 바이트 |
SQLColumns에서 반환한 COLUMN_SIZE 값도 GEOMETRY, GEOGRAPHY 및 SUPER 데이터 유형에 대해 변경되었으며, 이제 ODBC 사양에 따라 크기가 조정되지 않은 열을 나타내기 위해 NULL을 반환합니다. COLUMN_SIZE를 기반으로 버퍼를 할당하는 애플리케이션은 기본 버퍼 크기를 사용하여 NULL을 처리해야 합니다.
마이그레이션 후 문제 해결
다음 표에서는 마이그레이션 후 발생할 수 있는 일반적인 문제와 이를 해결하는 방법을 설명합니다.
| 증상 | 원인 | 수행할 작업 |
|---|---|---|
| 스키마 브라우저에 외부 테이블이 표시되지 않음 | Spectrum 및 데이터 공유 테이블은 EXTERNAL
TABLE로 보고됩니다. |
SQLTables 유형 필터에 EXTERNAL TABLE을 포함합니다. |
| 간격 열의 pyodbc 오류 | pyodbc는 ODBC 간격 유형을 지원하지 않음 | 쿼리에서 간격을 VARCHAR로 캐스팅합니다. |
| 문자 데이터가 예기치 않은 문자로 표시됨(mojibake) | UseUnicode 기본값이 false로 변경되었습니다. 와이드 문자(UTF-16) 데이터를 예상하는 애플리케이션은 좁은 문자 바이트를 와이드 페어로 잘못 해석하여 출력이 깨질 수 있습니다. 데이터 자체는 변경되지 않습니다. |
DSN에서 UseUnicode=true를 설정하거나 열을 SQL_C_WCHAR 대신 SQL_C_CHAR로 바인딩하도록 애플리케이션을 업데이트합니다. |
| 장기 실행 쿼리는 제한 시간 오류를 반환함 | 이제 SQL_ATTR_QUERY_TIMEOUT이 적용됩니다. ODBC 1.x는 이 설정을 자동으로 무시했습니다. |
DSN에서 QueryTimeout을 늘리거나 제거하거나 애플리케이션에서 SQL_ATTR_QUERY_TIMEOUT을 0으로 설정합니다. |
SQL_ATTR_CURRENT_CATALOG 설정 시 HY011 반환 |
속성은 열린 연결에서 설정할 수 없습니다. 열린 연결의 데이터베이스 전환은 지원되지 않습니다. | 연결하기 전에 속성을 설정하거나 대상 데이터베이스에서 연결을 닫았다가 다시 엽니다. |
| 듀얼 스택 환경에서 연결이 끊김 | 버전 <= 2.1.16의 제한 사항 | 2.1.17 이상으로 업그레이드. |
| 오류 메시지 구문 분석이 예상치 못한 결과를 반환함 | 메시지 형식 변경됨, SQLSTATE 코드가 변경되지 않음 | 메시지 텍스트 대신 SQLSTATE 코드를 구문 분석합니다. |
| Data-at-execution 파라미터 바인딩이 다르게 동작함 | SQL_NEED_LONG_DATA_LEN이 FALSE에서 TRUE로 변경되었습니다. SQL_DATA_AT_EXEC를 사용하는 애플리케이션은 이제 총 데이터 길이를 미리 제공해야 합니다. |
SQL_DATA_AT_EXEC 파라미터를 바인딩할 때 StrLen_or_IndPtr의 길이 값을 설정합니다. |
| 드라이버 로그가 생성되지 않음 | 개별 DSN 섹션이 아닌 odbc.ini의 [ODBC] 글로벌 섹션에 LogLevel 및 LogPath가 있어야 합니다. |
로깅 설정을 DSN에서 [ODBC] 섹션으로 이동합니다. |
이전 ODBC 2.x 버전에서 업그레이드
이전 ODBC 2.x 버전을 이미 실행 중인 경우 최신 릴리스로 업그레이드하세요. 모든 버전의 개선 사항 및 버그 수정에 대한 전체 목록은 GitHub의 Amazon Redshift ODBC 드라이버 변경 로그