【问题标题】:issue with using liquibase and snowflake db使用 liquibase 和雪花数据库的问题
【发布时间】:2017-06-09 23:37:12
【问题描述】:

我正在尝试使用 Snowflake DB,想看看它如何与 Liquibase 一起使用。我在创建 databasechangelog 表时遇到了问题,因为 Snowflake 有一个时间戳字段,但 Liquibase 正在尝试使用 datetime 数据类型发出 SQL。

我遵循http://www.liquibase.org/databases.html 上的想法,刚刚在 liquibase 部署之外创建了 databasechangelog 表。

CREATE TABLE bruces.DATABASECHANGELOG (ID VARCHAR(255) NOT NULL, AUTHOR VARCHAR(255) NOT NULL, FILENAME VARCHAR(255) NOT NULL, DATEEXECUTED timestamp NOT NULL, ORDEREXECUTED INT NOT NULL, EXECTYPE VARCHAR(10) NOT NULL, MD5SUM VARCHAR(35), DESCRIPTION VARCHAR(255), COMMENTS VARCHAR(255), TAG VARCHAR(255), LIQUIBASE VARCHAR(20), CONTEXTS VARCHAR(255), LABELS VARCHAR(255))

然后我通过 maven 开始了 liquibase 部署。

WARNING 1/24/17 5:03 PM: liquibase: Unknown database: Snowflake
[INFO] Executing on Database: jdbc:snowflake://*****.snowflakecomputing.com/?db=BRUCE_DB&warehouse=BRUCE_WH
INFO 1/24/17 5:03 PM: liquibase: Successfully acquired change log lock
INFO 1/24/17 5:03 PM: liquibase: Creating database history table with name: bruces.DATABASECHANGELOG
INFO 1/24/17 5:03 PM: liquibase: Successfully released change log lock
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15.432 s
[INFO] Finished at: 2017-01-24T17:03:56-06:00
[INFO] Final Memory: 16M/305M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.4.0:update (default) on project snowflake.snowflake_app: Error setting up or running Liquibase: SQL compilation error:
[ERROR] Unsupported data type 'TOK_DATETIME'. [Failed SQL: CREATE TABLE bruces.DATABASECHANGELOG (ID VARCHAR(255) NOT NULL, AUTHOR VARCHAR(255) NOT NULL, FILENAME VARCHAR(255) NOT NULL, DATEEXECUTED datetime NOT NULL, ORDEREXECUTED INT NOT NULL, EXECTYPE VARCHAR(10) NOT NULL, MD5SUM VARCHAR(35), DESCRIPTION VARCHAR(255), COMMENTS VARCHAR(255), TAG VARCHAR(255), LIQUIBASE VARCHAR(20), CONTEXTS VARCHAR(255), LABELS VARCHAR(255))]
[ERROR] -> [Help 1]

liquibase 似乎找不到 databasechangelog 表,因此它尝试创建它并失败。

【问题讨论】:

  • 我使用Snowflake的History机制查看已经执行过的查询,看到它执行了“show tables like 'DATABASECHANGELOG' in account”,返回1条记录。但它会继续尝试创建表。
  • 我最终为 Snowflake 编写了一个 Liquibase 扩展。可在github.com/CDKGlobal/liquibase-snowflake 获得。

标签: liquibase snowflake-cloud-data-platform


【解决方案1】:

对 SnowflakeDB 一无所知,我建议最好的方法是为 SnowflakeDB 编写一个新的数据库实现。 SQL 方言差异很大,如果您在早期遇到问题,那么您可能会在前进的过程中遇到更多问题。

【讨论】:

  • 是的,我认为如果我们继续使用 Snowflake,为 liquibase 编写雪花扩展是正确的方式。
【解决方案2】:

问题是今天 Snowflake 不支持 DATETIME 数据类型。它确实支持DATETIMESTAMP,它们是标准SQL。

目前正在努力将其添加到 Snowflake,将要求开发它的团队在此处添加更新。

【讨论】:

  • 是的,我知道 Snowflake 不支持 DATETIME。这就是为什么我在正常进程之外添加了 DATABASECHANGELOG 表,将 DATETIME 更改为 TIMESTAMP。然后问题是 Liquibase 不理解雪花方言,因此无论如何尝试创建表并失败。我期待看到 DATETIME 数据类型的版本。
【解决方案3】:

我看到这是添加的。然而,Snowflake 在创建属性时将数据类型转换为 TIMESTAMP_NTZ。尝试使用 Snowflake 扩展并使用 XML 创建表并提供 TIMESTAMP_NTZ 或 TIMESTAMP_NTZ(9) 或 DATETIME。雪花中的一切似乎都一样 -

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多