Db2 Warehouse on Cloud에서 ICOS의 CSV에서 외부 테이블 작성

IBM Cloud Object Storage(이하 ICOS)의 CSV를 배치해 Db2 Warehouse on Cloud(이하 Db2 WHOC)에 표로 표시할 수 있는 외부 표를 만든다.
다음과 같은 이점을 고려할 수 있습니다.
  • 사용 빈도가 낮은 데이터를 ICOS 등 저렴한 저장 장치에 두고, RDB에 사용 빈도가 높은 데이터를 배치하는 동시에 ICOS의 데이터도 같은 SQL 문구로 접근할 수 있다.
  • 로 SQL의 ICOS CSV 접근이 가능해졌고SQL Query 기능도 있습니다., Db2 접근을 통해 기존 Db2의 ODBC 드라이버를 사용할 수도 있고 Db2의 테이블과 결합할 수도 있었다.
  • 전체적인 인상은 다음과 같다.
  • Bucket 제작
  • 서비스 자격 정보의 창설
  • 서비스 ID의 정의
  • 외부 시계의 제작
  • 참고로 여기는 ICOS의 데이터를 처리하는데 AWS의 S3의 데이터도 같은 방법으로 처리할 수 있다.
    1. ICOS의 Bucket 제작
    ICOS 관리 화면에서 세그먼트를 작성합니다.

    사용자 정의 작성.

    세그먼트 이름으로 만듭니다.

    제작된 통에 CSV 파일을 업로드합니다.

    CSV 파일은 다음과 같습니다.열 제목과 쉼표 구분자가 있습니다.
    20210101sensor.csv
    DATE,M_CD,POWER,TEMP,ERR_CD
    2021-01-01,104,1003,244,0
    2021-01-01,111,1071,254,0
    2021-01-01,127,1050,244,0
    2021-01-01,143,1088,244,0
    
    2. 서비스 자격 정보 제작
    아래 매뉴얼을 참고하여 서비스 자격 정보를 작성합니다.

    다음을 설정합니다.
    Db2WHOC의 외부 테이블 접근에서 HMAC 인증을 하기 때문에 HMAC를 사용해야 합니다.
    이름: 임의의 이름
    역할: 라이터
    서비스 ID: 새 서비스 ID 선택
    새 서비스 ID 이름: 임의의 이름
    HMAC 인증 정보: ON
    CREATE EXTERNAL TABLE 문 설명서에는 다음과 같은 내용이 적혀 있다.
    참고: IBM Cloud Object Storage의 경우 HMAC 자격 정보를 만들려면 새 서비스 자격 정보를 만들 때 "내부 구성 매개 변수 추가"필드에 {"HMAC: 참}"을 지정하십시오.

    나는 제작된 서비스 자격 정보를 잘 복사할 것이다.

    access_key_id 및 시크릿access_외부 테이블을 만들 때 키를 사용합니다.
    CREATE EXTERNAL TABLE 문 설명서에는 다음과 같은 내용이 적혀 있다.
    구문:
    S3 (endpoint, authKey1, authKey2, bucket)
    authKey1
    IBM Cloud Object Storage의 경우 HMAC 인증 정보에 대한 액세스 키 ID입니다.
    authKey2
    IBM Cloud Object Storage의 경우 HMAC 자격 정보에 대한 비밀 액세스 키입니다.
    3. 서비스 ID의 정의
    다음 설명서를 참조하여 서비스 자격 정보를 작성할 때 작성되는 서비스 ID를 해당 Bucket으로 제한하여 액세스를 제한하는 설정을 설정합니다.
    먼저 관리에서 액세스 관리(IAM) 메뉴를 엽니다.

    서비스 ID 일람에서 방금 작성한 서비스 ID를 찾아 클릭하세요.

    방문 정책에서 방금 한 라이터의 역할을 클릭하십시오.

    다음 설정을 추가합니다.
    자원 유형
    자원 ID의 bucket 이름(예: sensorcsv)
    .이렇게 하면 이 서비스 ID는 이 buckt에만 접근할 수 있습니다.
    CSV 파일을 읽을 수 있도록 Object Reader의 서비스 액세스 권한을 확인합니다.

    이번에는 CSV 데이터를 읽는 것만 생각했지만 오류가 발생했을 때 로그를 쓸 수 있는 권한이 필요하기 때문에 쓸 수 있는 권한이 있습니다.(LOGDIR도 잘 떼어낼 수 있다)
    CREATE EXTERNAL TABLE 문 설명서에는 다음과 같은 내용이 적혀 있다.
    필요한 권한:
    외부 테이블이 명명된 외부 테이블인 경우 소유자는 해당 파일에 대한 읽기 및 LOGDIR 디렉토리에 대한 쓰기 권한을 가져야 합니다.
    외부 테이블이 임시 외부 테이블인 경우 문에서는 ID가 파일에 대한 읽기 및 LOGDIR 디렉토리에 대한 쓰기 권한을 가져야 합니다.
    업데이트는 다음과 같습니다.

    4. Db2WHOC의 외부 테이블 제작
    다음 설명서를 참조하여 Db2WHOC를 통해 외부 테이블을 작성하십시오.
    S3 호환 객체 저장소에 소스 데이터 파일을 지정합니다.파일 이름을 지정하려면 DATAOBJECT 옵션을 사용합니다.
    構文:
    S3 (endpoint, authKey1, authKey2, bucket)
    
    endpoint
    S3 호환 웹 서비스의 URL에 대한 문자열을 지정합니다.
    ICOS의 끝점은 아래에 쓰여 있습니다.
    https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-endpoints&locale=ja
    예를 들어 개인 AP 일본의 지역 단점을 사용했다.
    authKey1:
    사용자 및 모든 사용자 작업을 검증하는 액세스 키의 S3 액세스 키 ID를 지정하는 문자열입니다.IBM Cloud Object Storage의 경우 HMAC 인증 정보에 대한 액세스 키 ID입니다.
    authKey2:
    사용자 및 모든 사용자 동작을 검증하는 액세스 키에 대한 S3 개인 키의 문자열을 지정합니다.IBM Cloud Object Storage의 경우 HMAC 자격 정보에 대한 비밀 액세스 키입니다.
    bucket
    파일이 들어 있는 S3 섹션의 이름입니다.(예: sensorcsv)
    그리고 여기 있습니다.
    DELIMITER에서 쉼표 구분자 지정하기
    SKIPROWS1에서 머리글 행 무시를 지정합니다.
    다음은 SQL 문입니다.
    CREATE EXTERNAL TABLE SENSOR_20210101("DATE" DATE,M_CD SMALLINT,POWER SMALLINT,TEMP SMALLINT,ERR_CD SMALLINT) using 
      (dataobject '20210101sensor.csv' 
       s3('s3.private.jp-tok.cloud-object-storage.appdomain.cloud', 
        '86xxxxxxxxxxxxxxxxxxxxxxx',
        'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 
        'sensorcsv'
       ) DELIMITER ',' SKIPROWS 1
      )
    
    다음 표와 같이 SELECT를 수행할 수 있습니다.

    5. 문제 판단의 힌트
    나는 아래의 오류를 만났기 때문에 참고로 써 놓았다.
  • Endpoint URL 오류 시
  • The external table operation failed due to a problem with the corresponding data file or diagnostic files. File name: "20210101sensor.csv". Reason code: "1".. SQLCODE=-20569, SQLSTATE=428IB, DRIVER=4.26.14
  • 모드가 다르고 DELIMITER가 같지 않습니다.파일은 버킷 안에 있을 수 있습니다.
  • The statement failed because the number of rejected rows exceeds the limit set in the MaxErrors option value. Log file name: "BLUDB.HKWD.SENSOR_20210101.20210101sensor.csv.00064525.0000003.log".. SQLCODE=-20570, SQLSTATE=22551, DRIVER=4.26
  • 권한 부족 시
  • An attempt to access media ""is denied.. SQLCODE=-2061, SQLSTATE= , DRIVER=4.26.14
  • 오류가 발생했을 때 LOGDIR을 지정하지 않았을 때 데이터가 있는 버킷에서 로그 파일을 출력합니다.이log 파일은 문제를 판단하는 데 도움이 된다.

    좋은 웹페이지 즐겨찾기