Metabase x Bigquery와 함께 java.util.ArrayList cannot be cast to java.lang.String 오류 해결
배경
5월부터 일하고 있는 회사에서는
firebase
x react
x typescript
를 이용하여 서비스를 개발하고 있습니다.또한 마케팅 등에서 사용되는 BI 도구로
metabase
를 사용하고 있으며 데이터를 Bigquery
Firestore
-> cloud storage
-> Bigquery
-> Metabase
출시 전에 실제로 사용해 가는 중, ,, 눈치채는!
해결 방법 만 볼 때 아래로 단번에 진행하십시오 :)
발각
일부 데이터 테이블을 열 수 없습니다!
뭔가 오류가 나오고 있지만 모르겠습니다.
java.util.ArrayList cannot be cast to java.lang.String
그래서,
코코 라헨을 포치 포치하고 어째서인지를 돌아 보면
아무래도 Bigquery측에서
type: INTEGER
x mode: REPEATED
가 되어 있으면 에러가 되는 것을 알 수 있다.간단히 말하면 ARRAY 형의 데이터를
Metabase
측에 건네주면(자) 에러가 발생하는 것을 알 수 있다1년 전에도 같은 문제가, 그리고 해소는 되지 않았다.
라는 것으로 몇 가지 방법은 있었습니다만, 급히 빨리 할 것 같은 녀석으로 대응해 갑니다!
방법 후보
firebase functions
를 사용하여 데이터를 bigquery까지 格納
하고 있으므로 그 사이에 functions
에서 int -> string
로 변경하도록 한다 Bigquery
의 View
에 해당 이번에는 물론 쉬운 2로갑니다
해결 방법 절차
Bigquery 측면 작업
변환 방법 1
대상 데이터에 대해 ARRAY -> ARRAY로 변환
SELECT
ARRAY(
SELECT
CAST(favoriteId AS string)
FROM
UNNEST(favoriteIds) AS favoriteId
) AS favoriteIds,
FROM
`project-name.project_database.table`
변환 방법 2
UDF(User Defined Functions)
도라라를 사용하면 View
중에서도 함수를 부를 수 있다고 알았기 때문에, 조금 도전해 보았다.UDF
대신 TEMP
function이면 View
중 오류가 발생하므로 조심UDF를 만드는 방법
CREATE OR REPLACE FUNCTION
`project-name.project_database.functionName`(intArr ARRAY<INT64>)
RETURNS
ARRAY<STRING>
AS (
ARRAY(
SELECT CAST(value AS string)
FROM UNNEST(intArr) AS value
)
);
UDF를 부르는 방법
SELECT
`project-name.project_database.functionName`(favoriteIds) AS favoriteIds
FROM
`project-name.project_database.table`
Metabase 측면 작업
Bigquery 측에서 View 작성이 완료되면, 나머지는 metabase뿐이므로 간단합니다!
Sync database schema now
& Re-scan field values now
를 클릭 감상
아무튼 이번에는 급한 느낌도 나왔습니다만 일단 데이터를
Metabase
로 확인할 수 있다는 목적을 달성할 수 있어서 좋았습니다만, 고쳐 보고 싶은 기분이 있어 보았다 Clojure
로 만들어져 있었다.만진 것입니다.
그래서 이번 기사는 근본적인 해결책까지 가지 않았지만 최저한 목적을 달성하는 데는 뭔가 도움이 될 수 있을까 생각합니다.
뭔가 다른 좋은 방법이 있다면 알려주세요.
Reference
이 문제에 관하여(Metabase x Bigquery와 함께 java.util.ArrayList cannot be cast to java.lang.String 오류 해결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/GenkiAma/items/e1b99df7693df93cf382텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)