KeyError: "['HUM', 'EQP_DESC', 'FL', 'DVC_DESC', 'DVC_ID', 'TEMP', 'DEW'] not in index"
- res = query_api.query_data_frame(org = org, query = query)
의 결과인 res에는 result, table, _time, ISPRI, ISSEC, OUTHUM, OUTTEMP, PROJ_NO
밖에 없다.
- 해당 쿼리의 eqp_id는 2509_T1_03이다.
- 쿼리가 잘못된건지, cols를 바꿔야하는지 아직 모른다.
- 매개변수로 cols는 dfs_cols를 받아온다.
- dfs_cols는 다음과 같다. dfs_cols = ['_time', 'HUM', 'EQP_DESC', 'FL', 'DVC_DESC', 'DVC_ID', 'ISSEC', 'OUTHUM', 'TEMP', 'ISPRI', 'DEW', 'OUTTEMP', 'PROJ_NO']
- dfs_cols - res = [HUM, EQP_DSEC, FL, DVC_DESC, DVC_ID, TEMP. DEW]
이다. 이건 오류가 발생한 항목과 똑같다.
- 이 중 EQP_DESC, FL(층), DVC_DESC, DVC_ID, ISSEC, ISPRI, PROJ_NO
는 필요없는 col이다.
- 그럼 새로운 cols를 선언해서 진행해보자. dfs_cols_next = ['_time', 'ISSEC', 'OUTHUM', 'ISPRI', 'OUTTEMP', 'PROJ_NO']
- 어느정도 정상적으로 진행이 되다가 필요없는 col를 drop하는 코드에서 에러가 발생했다. df.drop(['EQP_DESC', 'FL', 'DVC_DESC', 'DVC_ID', 'ISSEC', 'ISPRI', 'PROJ_NO'], axis=1, inplace=True)
- 앞의 cols 목록을 변경했기 때문에 일부 인덱스가 이미 없다. 그래서 drop 구문을 변경해주었다. df.drop(['ISSEC', 'ISPRI', 'PROJ_NO'], axis=1, inplace=True)
- 이제 dfh를 처리하다가 오류가 날 것으로 예상되는데, 기다리는 중이다.
- 이어진 dfs에서 contract_dfs_cols에서 오류가 난다. contract_dfs_cols = ['_time', 'HUM', 'OUTHUM', 'TEMP', 'DEW', 'OUTTEMP']
, KeyError: "['HUM', 'TEMP', 'DEW'] not in index"
- contract_dfs_cols도 수정해주었다.
- 역시나 dfh에서도 오류가 발생한다.KeyError: "['INPUT_STATUS', 'SETPLAYTEMP', 'SETWARMTEMP', 'SETDEHUM', 'SETSTATUS', 'PROJ_NO'] not in index"
이것도 수정해주었다. 이런식으로 처리하면 정상적인 결과를 얻을 수 없을 것 같은데, 일단 진행한다.
- df.drop(['INPUT_STATUS', 'SETPLAYTEMP', 'SETWARMTEMP', 'SETDEHUM', 'SETSTATUS', 'PROJ_NO'], axis=1, inplace=True)
에서도 오류가 발생했다. 아까 전부 삭제해준 것들이다. 그래서 drop 구문을 삭제했다.
- bucket을 for문으로 돌면서 하나씩 처리하기 때문에 influxdb 형식으로 처리를 해주던 dfs에서 문제가 발생한다.
코드는 문제 없이 돌아가긴 하는데 The batch item wasn't processed successfully because: (422) Reason: Unprocessable Entity HTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json; charset=utf-8', 'X-Influxdb-Build': 'OSS', 'X-Influxdb-Version': '2.1.1', 'X-Platform-Error-Code': 'unprocessable entity', 'Date': 'Thu, 27 Jan 2022 08:24:34 GMT', 'Content-Length': '243'}) HTTP response body: {"code":"unprocessable entity","message":"failure writing points to database: partial write: field type conflict: input field \"POWER\" on measurement \"dehumidifier_2513_T4_T0014\" is type string, already exists as type integer dropped=1000"}
에러가 있다.
- 중간에 POWER를 int로 바꿔주는 구문이 있는데, for문을 돌면서 제대로 적용되지 않는 부분이 생긴 것 같다. for eqp_id, df in dfh.items(): df['POWER'] = pd.to_numeric(df['POWER'])
- 기존의 코드는 문제가 없지만, 이후로 서비스 관점에서 생각해보면 이미 존재하는 버킷, mesurements는 삭제되면 안된다. 기존 코드는 기존 버킷을 삭제하고 재생성 후 실행하기 때문에 문제가 없던 것.
- ㅁㅁ
위 문제를 해결하고 모두 돌렸더니 기존 코드의 결과와 다르게 sensor 데이터의 결과가 부족하다.
['_time', 'HUM', 'OUTHUM', 'TEMP', 'DEW', 'OUTTEMP']
['_time', 'OUTHUM', 'OUTTEMP']
['HUM', 'TEMP', 'DEW']