Snowflakeとなにかをつないで、データ更新がうまく行くかどうか、検証環境を作りたい。"SNOWFLAKE_SAMPLE_DATA"."WEATHER"."HOURLY_16_TOTAL"
というテーブルが自動更新されるようなので、これを使えば良いと思っていたけど、数年前からdeprecated
らしく、データが更新されていない。Snowflakeがまだよくわからないので、MySQLのイベントスケジューラーみたいな機能を使って、できないかと調べていたら、タスクという機能があるようで、それを使えば検証できそう。
下記、1分毎に1行インサートするタスクを作成し、起動するためのスクリプト。乱数系の関数とかをつかうと、サイレントエラー状態で、実行もうまく行かなかった。またドキュメントを時間あるときにでも読もう。
// タイムゾーン関連の設定 alter session set timestamp_type_mapping = 'TIMESTAMP_LTZ'; alter session set timezone = 'Asia/Tokyo'; // `task_demo.public.job_tracker`を作成 use role accountadmin; create or replace database task_demo; use schema public; CREATE SEQUENCE "TASK_DEMO"."PUBLIC".id_seq START 1 INCREMENT 1; //create or replace table job_tracker ( // id integer, // created_at timestamp, // val1 integer, // val2 integer //); //create or replace table join_tbl ( // id integer, // joined_val varchar(10) //); //insert into join_tbl(id, joined_val) values (1, 'tanaka'),(2, 'sato'),(3, 'suzuki'),(4, 'takahashi'),(5, 'Tom'); //insert into join_tbl(id, joined_val) values (47, 'cat'),(48, 'cat3'),(48, 'ca5t'); //select * from join_tbl; // select current_timestamp() // task1という名前のtaskを作成し、適当に値をインサートする create or replace task task1 warehouse = COMPUTE_WH schedule = '1 minute' as insert into job_tracker values ( id_seq.nextval, current_timestamp(), second(current_timestamp()) * hour(current_timestamp())::integer, hour(current_timestamp())::integer ); // task1を起動して確認 alter task task1 resume; show tasks; // 値がインサートされているかを確認 select * from job_tracker; // 役目を終えたらtask1を削除 drop task task1; drop table job_tracker; drop table join_tbl; drop database task_demo; select * from job_tracker; // select * from job_tracker left join join_tbl on job_tracker.id = join_tbl.id;