全4件 (4件中 1-4件目)
1

snowflakeで利用できる言語はSQL以外にもJAVASCRIPT やPython が使えるということでユーザー定義関数でいろいろと試してみておりますよJAVASCRIPT ベースの配列を返すUDF--JAVASCRIPT ベースのUDFCREATE OR REPLACE FUNCTION make_array_js(val1 STRING,val2 STRING)RETURNS ARRAYLANGUAGE JAVASCRIPTAS$$return [VAL1,VAL2];$$;select make_array_js('test','test1');select make_array_js('test','test1')[0];JAVASCRIPT はつかえるのですが、SQLの発行はできないという制約がありましたよなので、活用するには使い分け、そして関数のネストが必要になりそうですなSQLベースの配列を返すUDF--配列を返すUDFCREATE OR REPLACE FUNCTION test_array(id STRING)RETURNS VARIANTLANGUAGE SQLasdeclare val1 integer; val2 integer;begin val1:=1; val2:=2; if (id='test') then return object_construct( val1);else return object_construct(val2);end if;end;--実行時エラーとなってしまうselect test_array('test');単純なスカラーを返却するUDFでは平凡なので返却値を配列に拡張できるのか?を検証してみたのですがSQLベースのUDFではどうも無理っぽいですなJAVASCRIPT ベースのUDFとの併用ができれば回避できそうですが・・SCALAベースのUDF--半構造体データを引数に受け取って操作するUDFCREATE TABLE objectives (o OBJECT);INSERT INTO objectives SELECT PARSE_JSON('{"outer_key" : {"inner_key" : "inner_value"} }');CREATE OR REPLACE FUNCTION extract_from_object(x OBJECT, key VARCHAR) RETURNS VARIANT LANGUAGE SCALA RUNTIME_VERSION = 2.12 HANDLER='VariantLibrary.extract' AS $$ import scala.collection.immutable.Map class VariantLibrary { def extract(m: Map[String, String], key: String): String = { return m(key) } } $$; SELECT *,extract_from_object(o, 'outer_key'), extract_from_object(o, 'outer_key')['inner_key'] FROM OBJECTIVES; SELECT * from OBJECTIVES;snowflake公式のリソースを見るとSCALAでのサンプルもあったので試してみましたよ半構造体データから値を取り出すUDFがありましてこれはかなりありがたいソースですなSQLベースのUDFで取得した半構造体データから更に値を取り出して返却するUDFが実装できれば便利ですなSCALAベースのUDFを参照するUDF--scalaで書かれたUDFを内包するUDFCREATE OR REPLACE FUNCTION extract_from_object2(x OBJECT, key VARCHAR) RETURNS VARIANT LANGUAGE SQLas$$select extract_from_object(x , key )$$;select extract_from_object2(o, 'outer_key')FROM OBJECTIVES;SELECT *,extract_from_object2(o, 'outer_key'), extract_from_object2(o, 'outer_key')['inner_key'] FROM OBJECTIVES;scala で書かれたUDFを参照するUDFは作れるのか?を検証してみましたが問題なく実行できましたよSQLベースのUDFで少しだけ複雑な内容のものを検証してましたがここでなにやらよくわからない動作にぶつかってしまいましたよSQLベースのブロック構造を使ったUDFcreate or replace FUNCTION area(x float) returns float language SQL as $$ declare radius float; area_of_circle float; begin radius := x; area_of_circle := pi() * radius * radius; return area_of_circle; end; $$ ; select area(1);これは問題なく動作するのですが・・・他のUDFを参照するUDF(失敗例)create or replace FUNCTION test_udf_cycle2(x float) returns float language SQL as $$ area(x) $$;select test_udf_cycle2();これはコンパイルエラーとなってしまいましたよそしてエラー内容がまた意味不明でして・・・なんですかね?これは?
2025/09/19
コメント(0)

snowflake は基本的にはOLAP(分析)用のDBでございまして他のOLAP DBの例にもれず主キー制約などの制約が無視されてしまうのですがsnowflakeではハイブリッドテーブルと使うとそれらの制約が正しく動作してくれるというありがたい機能が提供されておりますよただしトライアルアカウントではハイブリッドテーブルは利用できないというオチがありましたよ
2025/09/19
コメント(0)

最近仕事でクラウドDBのsnowflakeをつかうケースが多くなっているので自分でも個人アカウントを作ってみましたよただ実際には一カ月ほぼなにも使わずに無料期間が終ってしまう状況になっていたのですがsnowflake から「トライアルはまもなく終了します。もっと時間が必要ですか?」こんなメールが来ましてメールにあったリンクからトライアル延長申請ができましてまたsnowflake から「[確認]試用期間が延長されました」というありがたいメールをいただきましたよ
2025/09/19
コメント(0)
PDFの書類に手書きで署名と捺印をしてメールで返送してくれと依頼されたのですがプリンターが故障していて印刷できないときにどうしましょうか?多機能コピー機があるコンビニでUSBメモリーやSDカード経由でPDFファイルを印刷できますな白黒A4 1枚10円と安いのでプリンター修理するよりずっと安いですなボールペンと印鑑を持参してコンビニで印刷した書類に署名捺印してしまえばよいですな文書(PDF)プリント新型マルチコピー機について|ローソン公式サイトプリント|セブン‐イレブンマルチコピー機|サービス|ファミリーマートで次はスキャナーで読み取りですがこれもコンビニでできるみたいですな新型マルチコピー機について|ローソン公式サイトスキャン|セブン‐イレブン1枚30円と高くないので、1,2枚ならコンビニでスキャンを済ませてしまってもよいですなスキャナーを持っていなくて事すみますな1枚ならたった40円で数分で完結する作業ですな手間暇を考えるならこれが一番楽かもしれませんなものすごくアナログっぽい感じがしてデジタル廃人としては敗北感がある作業ではありますなあと10枚とか枚数が多いとちょっとケチケチ根性も湧いてきますなというわけで次はPC作業で完結する方法を考えてみたいと思いますよ
2025/09/02
コメント(0)
全4件 (4件中 1-4件目)
1