created: 2022-09-11T01:22:41.171Z
GoogleCloudPlatform/bigquery-utils にパッチを送る
こちらのリポジトリ。
fork/clone
たぶんやり方が色々あるはずだが、元のリポジトリを fork して、自分のリポジトリをローカルに clone して作業をした。
自分のローカルのリポジトリが古くなっていたら fetch しておく。
$ git remote add upstream ssh://git@github.com/GoogleCloudPlatform/bigquery-utils.git
$ git fetch upstream
変更
自分の GCP プロジェクトでぽいぽいクエリを発行しながら動作確認をしつつ実装する。
例
こんなSQLを使って動作確認する。
DECLARE s STRING;
SET
s = "http://facebook.com/~tilde/hy-phen/do.t/under_score.php?k1=v1&k2=v2#Ref1";
CREATE TEMP FUNCTION url_parse(url STRING, part STRING)
AS (
CASE
WHEN UPPER(part) = 'HOST' THEN REGEXP_EXTRACT(url, r'(?:[a-zA-Z]+://)?([a-zA-Z0-9-.]+)/?')
WHEN UPPER(part) = 'PATH2' THEN REGEXP_EXTRACT(url, r'(?:[a-zA-Z]+://)?(?:[a-zA-Z0-9-.]+)/{1}([a-zA-Z0-9-.~_/]+)')
WHEN UPPER(part) = 'PATH' THEN REGEXP_EXTRACT(url, r'(?:[a-zA-Z]+://)?(?:[a-zA-Z0-9-.]+)/{1}([a-zA-Z0-9-./]+)')
WHEN UPPER(part) = 'QUERY' THEN REGEXP_EXTRACT(url, r'\?(.*)')
WHEN UPPER(part) = 'REF' THEN REGEXP_EXTRACT(url, r'#(.*)')
WHEN UPPER(part) = 'PROTOCOL' THEN REGEXP_EXTRACT(url, r'^([a-zA-Z]+)://')
ELSE NULL
END
);
SELECT
url_parse(s, "PATH"),
url_parse(s, "PATH2");
テスト
こちらに書いてある通りにすればテストが CloudBuild 上で(ちょっと時間がかかるが)動かせる。GCSのバケットかディレクトリを用意する必要があるのでそこが手間なだけだった。
試しに落ちるテストを書いてみたらちゃんと落ちる。
$ bash run_unit_tests.sh
...(中略)...
Step #5 - "test_udfs": url_parse_86335eeb-0000-4f36-9c96-9bc725533d74: failed
Step #5 - "test_udfs": For row 4 and column "udf_output": expected "~tilde/hy-phen/do.t/under_score.php", but saw "hy-phen/do.t/under".
...(中略)...
Step #5 - "test_udfs": nautical_miles_conversion_21eb5c5b-0000-4c3d-8eb4-1dbab604713a: passed
Step #5 - "test_udfs": azimuth_to_geog_point_d14eb053-1718-0000-b5cf-7267a42b4ea7: passed
Step #5 - "test_udfs": FAILURE: Encountered an error when running UDF tests for dataset: fn_test_env
Step #5 - "test_udfs":
Finished Step #5 - "test_udfs"
ERROR
ERROR: build step 5 "gcr.io/bqutil/bq_udf_ci" failed: step exited with non-zero status: 1
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BUILD FAILURE: Build step failure: build step 5 "gcr.io/bqutil/bq_udf_ci" failed: step exited with non-zero status: 1
ERROR: (gcloud.builds.submit) build c928c2a8-0000-4076-b337-4893e10e5ead completed with status "FAILURE"
CLA?
Google のオープンソースプロジェクトにコントリビュートする際には規約に同意する必要がある。(同意していないとCIがコケるようになっている)
↓のページからフォームで GitHub アカウントなどを入れてサブミットしておく。