Glue의 choice형으로 빠진 건

2307 단어 AthenaglueAWS

자기소개



온프레 출신 인프라 엔지니어, AWS 초보자를 위해 공부 중
Qiita 첫글

개요



하고 싶은 것은 간단하고, S3의 json 데이터를 Athena로 검색하거나 가공하여 S3로 내보내고 싶습니다!
다른 부서 분들에게 최신 데이터를 제공하고 다양한 분석하고 받고 싶다!

구현 방법




Glueのクローラーを毎日実行   ↓Glueのテーブルを毎日更新   ↓jobを毎日実行(不要なカラム削除)   ↓S3にエクスポート

문제점



어느 칼럼안에 int형과 double형이 혼재하고 있으므로, export 했을 때 어느 쪽인가가 null가 되어 버린다. 제공한 다른 부서에게 지적되어 눈치챘습니다.
그 절은 폐를 끼쳤습니다. . 이 자리를 빌려 사과드립니다.

실시한 것



복수의 형태가 있었을 경우는 choice형이 선택되어 좋은 느낌에 해 주는 것 같기 때문에, 출력 방법을 변경해 본다
applymapping1 = ApplyMapping.apply(frame = datasource3, mappings = [("columnA", "int", "columnA", "string")]

에서 문자열로 출력, 하지만 할 수 없다!
그렇다면 double 형으로 여러 가지 시도해 보자.
applymapping1 = ApplyMapping.apply(frame = datasource3, mappings = [("columnA", "int", "columnA", "double")]

applymapping1 = ApplyMapping.apply(frame = datasource3, mappings = [("columnA", "double", "columnA", "double")]

applymapping1 = ApplyMapping.apply(frame = datasource3, mappings = [("columnA", "double", "columnA", "int")]

applymapping1 = ApplyMapping.apply(frame = datasource3, mappings = [("columnA", "double", "columnA", "string")]

할 수 없다! ! !

resolveChoice 사용하면 할 것 같아! !
서포트에게 물어 보았다.

ResolveChoice 의 제1 인수는 JSON 파일의 속성과 일치시킬 필요가 있으므로, 이하와 같이 기술하는 것으로 int 형에의 캐스트가 가능합니다.

해결 방법


datasource1 = datasource0.resolveChoice(specs = [('columnA','cast:int')])

applymapping1 = ApplyMapping.apply(frame = datasource3, mappings = [("columnA", "int", "columnA", "int")]

과연~!
choice형으로 들어가 있기 때문에, 한번 형을 가지런히 하고 나서 출력해 주면 할 수 있네요.

미래의 망상



S3내의 데이터를 Athena로 골고리 검색할 수 있는, export하고 다른 부서에 전개할 수 있다!
불필요한 컬럼을 삭제함으로써 검색 시간을 절감, 요금 절감도 할 수 있다!

참고

좋은 웹페이지 즐겨찾기