1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Snowflakeを使用する際によく使うSQLまとめ①

Posted at

書いたきっかけ

3月末にSnowflakeの資格取得するための自身のアウトプットの場でもあるのですが、
自分の辞書代わりや、みなさまにも共有して便利になれたら一石N鳥だと思い投稿しました。

CREATE FUNCTION

UDFを作成することが可能となっております。
以下はSnoflakeの組み込み関数を使用して、UDFを作成しております。

CREATE OR REPLACE FUNCTION DAY_NAME_ON(NUM_OF_DAYS INT)
    RETURNS STRING
        AS
        $$
        SELECT 'IN' || CAST(NUM_OF_DAYS AS STRING) || ' DAYS IT WILL BE A ' || DAYNAME(DATEADD(DAY,NUM_OF_DAYS,CURRENT_DATE()))
        $$;


SELECT DAY_NAME_ON(100);

LANGUAGEを指定することで、
以下の高級言語も使用することができます。
デフォルトでは、上のクエリの通り、sqlになります。

image.png

CREATE EXTERNAL FUNCTION

もし仮に、既にAWSのLambdaなどに関数が用意されていて、それを用いりたい場合は、
これを使用します。

API GatewayなどとAPI連携することで、Snowflakeからクラウドリソースを使用することで
実行することができます。

一例をこちらに記載します

CREATE OR REPLACE API INTEGRATION DEMONSTRATION_EXTERNAL_API_INTEGRATION_01
    API_PROVIDER = AWS_API_GATEWAY
    -- API GATEWAY を正常に動作することができるロールを付与
    API_AWS_ROLE_ARN = 'ARN'
    -- エンドポイントURLを記載
    API_ALLOWED_PREFIXES = ('API GATEWAY URL')
    ENABLED = TRUE;


CREATE OR REPLACE EXTERNAL FUNCTION LOCAL_ECHO(STRING_COL VARCHAR)
    RETURNS VARIANT
    API_INTEGRATION = DEMONSTRATION_EXTERNAL_API_INTEGRATION_01
    AS 'PROXY SERVICE URL'


SELECT LOCAL_ECHO('test')

メリットとして、
そのままある既存の関数を使用することができること
開発コストが少なくなる

デメリットとしては、
通信の関係で、レスポンスが遅れることです。

基本的にはUDFを使用することが推奨されていますが、
snowflakeではサポートされていない言語が使用されていることだったり、
やむを得ない場合は使用することを検討すると言ったところでしょうか。

CREATE SEQUENCE

テーブルをINSERTする際など、レコードごとに一意な値を情報として欲しい場合が
実務においてほしいタイミングがかなりあります。

その際にレコードごとにシーケンス番号をつけることができるのが、
CREATE SEQUENCEです

以下に一覧を記載します


CREATE SEQUENCE TRANSACTION_SEQ

START = 1001

INCREMENT = 1;

CREATE OR REPLACE TABLE TRANSACTIONS(
ID INTEGER DEFAULT TRANSACTION_SEQ.NEXTVAL,
AMOUNT DOUBLE
);

INSERT INTO TRANSACTIONS(AMOUNT)
VALUES(1000.0);

SELECT * FROM TRANSACTIONS;

結果は以下のようになります。
INSERTにはAMOUNTしか追加していませんが、前列取得してみると、IDに値が入っていることがわかります。

image.png

私自身、当初実務でこの機能を知らずに、あるテーブルのシーケンス番号を作成する際に、
PKキーを使用して、クエリを作成してシーケンス番号を作成していました。

CRETE TASK

日々のクエリを自動化させたい場合に、使用するSQLになります。
よく使用されるのは、COPY INTOと合わせて、データレイクからSnowflakeにロードする場面などです。

簡単な一例を作成しました。
SCHEDULEについては、cronを使用することも可能です。

CREATE TASK T1
    WAREHOUSE = COMPUTE_WH
    SCHEDULE = '30 MINUTE'
AS
    SELECT 1;
    

また、DAGで定義することも可能です。
TASK3を参照すると、AFTERというものが追加されていることがわかります。
あるタスクが終了したら次のタスクを開始させることができます。

これはかなりの場面で使用されるので、とても便利です

CREATE TASK T1
    WAREHOUSE = COMPUTE_WH
    SCHEDULE = '30 MINUTE'
AS
    SELECT 1;

CREATE TASK T2
    WAREHOUSE = COMPUTE_WH
    SCHEDULE = '30 MINUTE'
AS
    SELECT 1;


CREATE TASK T3
    WAREHOUSE = COMPUTE_WH
    AFTER T1,T2
AS
    SELECT 1;
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?