AWS Redshift에서 SQL Server에서 DBLink 연결 확인

9887 단어 SQLServerredshiftAWS

목적



"현재 SQL Server를 사용하는 시스템이 AWS Redshift의 데이터 소스를 참조하기 때문에 SQL Server에서 Redshift 로의 DBLink 연결을 수행하여 데이터 참조가 가능한지 확인합니다.

검증 결과


  • OpenQuery를 사용하면 Select 가능
  • View ← OpenQuery ← DBLink ← Redshift 라는 구성이 현실적

  • DBLink 대상 테이블을 직접 또는 SYNONYM을 통해 Select 할 수 없습니다.
  • View 상에 Redhisft 로부터 취득하는 컬럼을 정의할 필요가 있다


  • 검증 절차



    Redshift 구축



  • 순서대로 구축해 본다.
  • Getting Started with Amazon Redshift - Amazon Redshift
  • 클라이언트에는 pgAdmin 3 를 도입.


  • 구축시의 포인트
  • 미리 Amazon Redshift에 AmazonS3ReadOnlyAccess 역할을 만듭니다.
  • 클러스터를 만들 때 위의 역할을 부여합니다
  • 데이터로드 (copy) 중에도 위의 역할에 arn이 필요합니다


  • pgAdmin
  • 기본 DB 이름 (dev)은 연결할 때 DB 목록에 표시되지 않습니다
  • 데이터베이스가 없으면 쿼리 편집기가 열리지 않습니다.
  • 새 데이터베이스 만들기 → 쿼리 편집기 열기 → 대상을 dev로 전환



  • SQL Server 빌드



    RDS/SQL Server는 Link Server 작성 권한이 없으므로 EC2에 구축해야합니다.
  • 구성
  • Windows Server 2012 R2 Standard

  • Microsoft SQL Server Express Edition(64비트)
  • 로컬 DB 생성 (SQLExpress).

  • Redshift ODBC Driver를 설치했습니다.
  • ODBC 연결 설정 - Amazon Redshift



  • ODBC 데이터 소스 만들기





    포스 그레의 경우이지만 참고 자료 SQL Server and PostgreSQL Linked Server Configuration - Part 2

    SqlServer에 링크 서버 만들기




    EXEC master.dbo.sp_addlinkedserver 
        @server = N'REDSHIFT', --リンクサーバ 名
        @srvproduct=N'AWS Redshift', 
        @provider=N'MSDASQL', 
        @datasrc=N'MyRedshift' -- データソース
    EXEC master.dbo.sp_addlinkedsrvlogin 
        @rmtsrvname=N'REDSHIFT',
        @useself=N'False',
        @locallogin=NULL,
        @rmtuser=NULL,
        @rmtpassword=NULL
    

    SQL Server에서 OpenSql을 통해 View를 만들고 Select 할 수 있는지 확인



    위 Redshift의 Getting Started에서 Create, Copy하는 테이블을 예로 한다.
    Create view [dbo].[viw_users]
    (
        userid ,
        username ,
        firstname,
        lastname,
        city,
        state,
        email,
        phone ,
        likesports,
        liketheatre,
        likeconcerts,
        likejazz,
        likeclassical,
        likeopera,
        likerock,
        likevegas,
        likebroadway,
        likemusicals
    ) as select * from openquery ([REDSHIFT],'select * from [dev].[public].[users]')
    
    select top 10 * from viw_users
    

    문제: 링크 서버를 직접 선택하지 못함 - (40470) Conversion error


    select * from [REDSHIFT].[dev].[public].[users]
    select * from [REDSHIFT].[dev].[public].[venue]
    select * from [REDSHIFT].[dev].[public].[category]
    select * from [REDSHIFT].[dev].[public].[date]
    select * from [REDSHIFT].[dev].[public].[listing]
    select * from [REDSHIFT].[dev].[public].[sales]
    
    リンク サーバー "REDSHIFT" の OLE DB プロバイダー "MSDASQL" から、メッセージ "エラーを特定できません" が返されました。
    リンク サーバー "REDSHIFT" の OLE DB プロバイダー "MSDASQL" から、メッセージ "[Amazon][Support] (40470) Conversion error at column 16 and row 1: Numeric value out of range." が返されました。
    メッセージ 7311、レベル 16、状態 2、行 1
    リンク サーバー "REDSHIFT" の OLE DB プロバイダー "MSDASQL" のスキーマ行セット "DBSCHEMA_COLUMNS" を取得できません。プロバイダーはインターフェイスをサポートしていますが、インターフェイス使用時にエラー コードが返されました。
    

    ※ 동의어 경유에서도 변함없이
    create synonym [dbo].[s_users] FOR [REDSHIFT].[dev].[public].[users]
    select * from [s_users]
    

    대응:OpenQuery 경유라 할 수 있다


    select * from OPENQUERY([REDSHIFT],'select * from [dev].[public].[users]')
    select * from OPENQUERY([REDSHIFT],'select * from [dev].[public].[venue]')
    select * from OPENQUERY([REDSHIFT],'select * from [dev].[public].[category]')
    select * from OPENQUERY([REDSHIFT],'select * from [dev].[public].[date]')
    select * from OPENQUERY([REDSHIFT],'select * from [dev].[public].[listing]')
    select * from OPENQUERY([REDSHIFT],'select * from [dev].[public].[sales]')
    

    참고 링크



    Amazon Redshift에서 사용할 수있는 PostgreSQL 관리 도구를 몇 가지 시험해 보았습니다 | Developers.IO
    【AWS】Amazon Redshift의 클러스터 생성과 시작부터 연결까지의 방법(입문편) - TASK NOTES

    좋은 웹페이지 즐겨찾기