ひできちの楽天ブログ

2025/09/19
XML
テーマ: snowflake(3)
カテゴリ: snowflake
snowflakeで利用できる言語はSQL以外にも
JAVASCRIPT やPython が使えるということで
ユーザー定義関数でいろいろと試してみておりますよ

  • JAVASCRIPT ベースの配列を返すUDF

--JAVASCRIPT ベースのUDF
CREATE OR REPLACE FUNCTION make_array_js(val1 STRING,val2 STRING)
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS
$$
return [VAL1,VAL2];
$$;
select make_array_js('test','test1');
select make_array_js('test','test1')[0];


JAVASCRIPT はつかえるのですが、SQLの発行はできないという制約がありましたよ
なので、活用するには使い分け、そして関数のネストが必要になりそうですな


  • SQLベースの配列を返すUDF

--配列を返すUDF
CREATE OR REPLACE FUNCTION test_array(id STRING)
RETURNS VARIANT
LANGUAGE SQL
as
declare
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

--半構造体データを引数に受け取って操作するUDF
CREATE 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を内包するUDF
CREATE OR REPLACE FUNCTION extract_from_object2(x OBJECT, key VARCHAR)
RETURNS VARIANT
LANGUAGE SQL
as
$$
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ベースのブロック構造を使ったUDF

create 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 03:59:17 AM
コメント(0) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

PR

×

キーワードサーチ

▼キーワード検索

カテゴリ

カテゴリ未分類

(41)

楽天サービス

(45)

ポイント生活

(51)

電子書籍

(30)

yahoo

(3)

クレジットカード

(36)

楽天Edy

(35)

楽天銀行デビットカード

(14)

nanacoカード

(8)

WAON

(2)

ジャパンネット銀行

(4)

ECサイト比較

(17)

majica カード

(5)

Tポイント

(3)

動画配信

(81)

デビットカード

(10)

PASMO

(2)

電気自由化

(2)

音楽配信

(9)

楽天ブックス

(9)

au WALLET

(9)

年末商戦

(4)

ふるさと納税

(2)

Yahooプレミアム会員特典

(7)

楽天ポイント獲得数報告

(5)

ポイント交換

(2)

クレカ入会特典

(6)

楽天市場

(7)

電子マネー

(12)

福袋・初売り

(2)

BABYMETAL

(7)

Yahooショッピング

(30)

Yahooクレジットカード

(6)

税金対策

(2)

楽天銀行プリペイドカード

(3)

楽天ペイ

(5)

ゾンビ

(4)

銀行カード

(2)

ヤフオク!

(1)

ポイント・キャンペーン

(23)

Amazon

(3)

Ponta

(2)

ギタリスト

(3)

プリペイドカード

(1)

クーポン・キャンペーン

(18)

暗号・分割・隠蔽

(2)

ガジェット

(43)

プログラミング

(15)

ネット銀行

(7)

Chrome 機能拡張

(1)

リアル銀行

(1)

数学と算数

(14)

格安SIM

(5)

将棋

(89)

クラウド

(14)

国語

(3)

ニュース

(26)

社会

(2)

電子決済

(2)

割引券

(0)

日記

(1)

TIPS

(4)

ソフトウェア

(18)

商品レビュー

(1)

映画視聴

(7)

洋楽

(2)

マンガ

(0)

お買い物パンダ

(1)

3Gケータイ3Gスマホ

(3)

互換オフィス

(4)

IT用語

(0)

地球温暖化

(53)

植民地時代

(0)

古代史

(1)

楽天ポイントビットコイン

(11)

ITの仕事

(1)

楽天購入品リスト

(0)

ご挨拶

(0)

楽天リワード

(1)

Visual Studio

(4)

wikipedia

(1)

コロナ

(1)

python

(4)

地球温暖化懐疑/否定論者

(14)

youtubeライブカメラ

(1)

自然災害

(4)

SNS

(1)

動物

(1)

楽天ブログ

(4)

藤岡幹大

(1)

グレタ

(2)

HTML

(1)

AIの活用

(0)

令和のコメ騒動

(2)

xEV

(2)

スポーツ

(1)

EV

(2)

VSCode

(0)

エネルギー

(1)

snowflake

(4)

Microsoft Copilot

(2)

VBA

(2)

Excel計算式

(1)

Windows

(1)

お気に入りブログ

【重要なお知らせ】… 楽天家計簿スタッフさん

【6月2日】メンテナ… infoseeknewsさん

5月25日(月) シス… 楽天 ブックスさん

DeNA南場智子オーナ… ミスミ ジローさん

【楽天ポイントモー… 楽天ポイントモールさん

[お知らせ]メンテナ… ROOM編集部さん

【重要】接続しづら… 楽天ブログスタッフさん

楽天レシピスタッフB… 楽天レシピスタッフさん
楽天アフィリエイト… 楽天アフィリエイト事務局スタッフさん
楽天モバイルからの… モバタロウさん

コメント新着

弱火の中火@ Re:ファイル名の先頭に指定文字を付加するバッチとな?(01/25) ひできちくん、最近楽天PLAYの記事見てな…

プロフィール

ひできち(hidekichi45)

ひできち(hidekichi45)


© Rakuten Group, Inc.
X
Create a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: