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

More than 1 year has passed since last update.

【Terraform x Snowflake】Terraformで外部テーブルを定義するときのlocation指定方法

2
Posted at

結論

Terraform Snowflakeプロバイダの外部テーブルより、locationの指定は「Required」との事だが、ドキュメントには具体的な記載方法が載っていないためよくわからなかったが、以下のように書くとよい。

resource "snowflake_external_table" "external_table" {
  database    = "MY_DATABASE"
  schema      = "MY_SCHEMA"
  name        = "MY_EXTERNAL_TABLE"
  location    = "@MY_DATABASE.MY_SCHEMA.MY_EXTERNAL_STAGE/path_to_file/"
  file_format = "TYPE = PARQUET"

  column {
    name = "ID"
    type = "VARCHAR"
  }

  column {
    name = "DATA"
    type = "VARCHAR"
  }

}

背景

前述の通り、Terraformでのlocationの記述方法がわからなかったため、Snowflake公式ドキュメントの外部テーブルの記載を参考にTerraformに書いてみた。

その結果はエラー。どうやら書き方が違うらしい。
同じlocation(外部ステージ)を認識させるのに複数の書き方が考えられるが、なかなか正解に辿り着かなかったため記録に残しておこうと思った。

ぼやき

公式ドキュメントに記載例が書いてないパターン。
さらに、Terraform上の記載と、Snowflake(SQL)上の記載とではまた勝手が違うのも厄介。

  • ステージを参照する書き方のバリエーション
    • @指定の省略表記

      # SnowflakeのSQLではOK、TerraformではNGな書き方
      @MY_EXTERNAL_STAGE
      

      これがTerraformで通らないのは、納得がいかない。

      なぜなら、外部テーブルを定義する際はdatabaseとschemaも必須パラメータであり、これら指定する時点でどのスキーマオブジェクトであるのかは(=どのスキーマ配下に存在する外部ステージなのか)は明確であるはずなので。

      だが、Terraformでは認識できない仕様らしいので仕方ない。

    • @を付けない完全修飾表記

      # SnowflakeのSQLではOK、TerraformではNGな書き方
      MY_DATABASE.MY_SCHEMA.MY_EXTERNAL_STAGE
      
    • @指定の完全修飾表記

      # これで通るんかい...
      @MY_DATABASE.MY_SCHEMA.MY_EXTERNAL_STAGE
      

      Snowflake上ではまずこのような指定はしないんじゃなかろうか。

      -- SQLワークシートで書く時は、大体こうやるはず
      USE MY_DATABASE.MY_SCHEMA;
      CREATE EXTERNAL TABLE MY_EXTERNAL_TABLE(
           -- 中略
           LOCATION=@MY_EXTERNAL_STAGE/path_to_file/
           FILE_FORMAT = (TYPE = PARQUET)
           -- 中略
      ;
      

よくわからんものですな...

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