0
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で変数を扱う ~~ $変数名とIDENTIFIER($変数名)の違い

Posted at

はじめに

Snowflakeで変数を扱うときに

  • $変数名
    と書いてるのと
  • IDENTIFIER($変数名)
    と書いてるのの2種類あって、
    なんで2パターンあるの?
    使い分けは?
    と疑問に思ったので調べました。

公式ドキュメント

$変数名

公式ドキュメントにあったものをちょっといじってやってみます。

--変数セット
SET my_variable1=10;
SET my_variable2='example';

--変数の値をselect
select $my_variable1;
--$MY_VARIABLE1
--10
select $my_variable2;
--$MY_VARIABLE2
--example

こんな具合に、変数値としてセットしたものを$変数名でSELECTできました。

単純なSELECTだと面白くないのでINSERTも見てみます。

--事前準備START
create database test_db;
create schema test_schema;
create table test_table (id number,name varchar);
insert into test_table (id,name) values (1,'a');
insert into test_table (id,name) values (2,'b');
--事前準備END

作ったテーブルに対して、変数を使ってもう1件、INSERTしてみます。

SET insert_id=3;
SET insert_name='c';
insert into test_table (id,name) values ($insert_id,$insert_name);
select * from test_table;
--ID	NAME
--1	a
--2	b
--3	c

変数でセットした値を使ってINSERTできました。

次はテーブル名の方を変数にしてみます。

SET table_name='test_table';
select * from $table_name;
--SQLコンパイルエラー:
--位置 14 の構文エラー行 1 、予期しない「$table_name」。

テーブル名だと$変数名が使えないようです。

IDENTIFIER($変数名)

そこで登場するのがIDENTIFIER($変数名)。

SET table_name='test_table';
select * from IDENTIFIER($table_name);
--ID	NAME
--1	a
--2	b
--3	c

エラーにならずに取得できました。

まとめ

テーブル名とかカラム名とか、SnowflakeのオブジェクトにあたるものはIDENTIFIER($変数名)でないとうまく取れませんよ。ということだと理解しました。
間違ってたらご指摘ください。

なお、下記の投稿ではIDENTIFIERを書きまくってますが、その辺全然わかってなくて適当に書いてました。

0
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
0
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?