【问题标题】:Snowflake terraform Error: 002043 (02000): SQL compilation error: Object does not exist, or operation cannot be performedSnowflake terraform 错误:002043(02000):SQL编译错误:对象不存在,或无法执行操作
【发布时间】:2022-06-16 21:49:07
【问题描述】:

我有下面的代码。

terraform {
  required_providers {
    snowflake = {
      source  = "chanzuckerberg/snowflake"
      version = "0.22.0"
    }
  }
}

provider "snowflake" {
  alias = "sys_admin"
  role  = "SYSADMIN"
  username = "tf-snow"
  private_key_path = "..."
  region = "ap-southeast-2"
  account = "..."

}

resource "snowflake_warehouse" "star_warehouse" {
  provider       = snowflake.sys_admin
  name           = "STAR_WAREHOUSE"
  warehouse_size = "XSmall"

  auto_suspend = 60
}

resource "snowflake_database" "STAR_DB" {
  provider = snowflake.sys_admin
  name     = "STAR_DB"
}

resource "snowflake_schema" "public" {
  provider            = snowflake.sys_admin
  database            = "STAR_DB"
  name                = "public"
  data_retention_days = 1
}

resource "snowflake_table" "sales" {
  provider            = snowflake.sys_admin
  database            = "STAR_DB"
  schema              = "public"
  name                = "sales"

  column {
    name     = "id"
    type     = "int"
  }
}

我决定将“STAR_DB”重命名为小写“star_db”。

现在,无论我做什么,我都会不断收到此错误。

Error: 002043 (02000): SQL compilation error: Object does not exist, or operation cannot be performed.
with snowflake_schema.public
on snowflake.tf line 33, in resource "snowflake_schema" "public":
Error: 002043 (02000): SQL compilation error: Object does not exist, or operation cannot be performed.
with snowflake_table.sales
on snowflake.tf line 40, in resource "snowflake_table" "sales":

我还原了代码,删除了大部分代码,删除了底层资源,然后重新创建了它们,但仍然是同样的错误。

有人知道怎么回事吗?

注意:我使用的是 terraform cloud

【问题讨论】:

  • 我要冒险了:我觉得它不能删除数据库,因为它不知道应该先删除表和模式。我不喜欢这个提供者的一点是,我没有看到任何属性在创建后被导出,这意味着您只能使用显式依赖项。换句话说,尝试在snowflake_schemasnowflake_table 中使用depends_on = [snowflake_database.STAR_DB]
  • 不幸的是,似乎没有帮助,即使我删除了文件本身也无济于事。我在其他文件中有一堆 AWS 配置,我必须手动将其全部删除并重新开始。这是一个非常糟糕的错误。
  • 是的,我会在他们的 Github 存储库中为提供商提交问题。
  • 刚弄好了,还是谢谢你的帮助
  • 我将depends_on = [snowflake_schema.public] 放在桌面上,它消除了其中一个错误!奇怪的是,将depends_on = [snowflake_database.STAR_DB] 放在架构上并不能消除其他错误。好奇。

标签: terraform snowflake-cloud-data-platform


【解决方案1】:

我在这里记录了一个问题。 https://github.com/chanzuckerberg/terraform-provider-snowflake/issues/892

发现在小写和大写之间重命名会导致雪花中的映射问题。

我最后所做的只是从状态文件中删除了资源。

【讨论】:

    【解决方案2】:

    我之前也遇到过同样的问题;当您拥有相互依赖的资源(例如数据库和模式)时,最好引用它们的依赖关系。在这里,如果您在表和架构块中引用数据库名称而不是将其添加为字符串会更好。

    这里当你更改数据库名称时,Terraform 会删除旧的并创建一个新的(你可以通过运行terraform plan 来验证这一点);但是,由于名称是在没有引用的情况下添加的,因此您的 Schema 和 Table 不会知道更改并给您上述错误。这就是我引用您的依赖项的意思:

    resource "snowflake_database" "STAR_DB" {
      provider = snowflake.sys_admin
      name     = "STAR_DB"
    }
    
    resource "snowflake_schema" "public" {
      provider            = snowflake.sys_admin
      database            = snowflake_database.STAR_DB.name     
      name                = "public"
      data_retention_days = 1
    }
    
    resource "snowflake_table" "sales" {
      provider            = snowflake.sys_admin
      database            = snowflake_database.STAR_DB.name
      schema              = snowflake_schema.public.name
      name                = "sales"
    
      column {
        name     = "id"
        type     = "int"
      }
    }
    

    如果有帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2022-11-15
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多