Redshiftベースのクエリー資産をBigQueryで活かしたいが、書き換えを最小限にしたい。
Redshiftの JSON_EXTRACT_PATH_TEXT
に近いのは JSON_VALUE
であったが第2引数をどうしても自動処理できなかった。
仕方ないので1階層だけ拾えればよかったので JavaScript UDF で対処した。
CREATE TEMPORARY FUNCTION JSON_EXTRACT_PATH_TEXT(json_string STRING, path_elem STRING, null_if_invalid BOOLEAN)
RETURNS STRING
LANGUAGE js
as """
return JSON.parse(json_string)[path_elem];
""";
JSON_EXTRACT_PATH_TEXT
を完全再現するには最大7つの引数を受け取る(ANY TYPE
として STRINGでもBOOLでも受け付ける)ようにして、分岐を書かないとイケないのでそこまではしなかった。
こんな感じでRedshift固有の関数をUDFで揃えていけば移行が捗るか?