1

我正在尝试使用 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 表,因此它尝试创建它并失败。

4

3 回答 3

1

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

于 2017-01-25T15:50:25.253 回答
1

问题是今天的雪花不支持DATETIME数据类型。它确实支持标准 SQLDATE和。TIMESTAMP

正在努力将其添加到 Snowflake 中,将要求处理它的团队在此处添加更新。

于 2017-01-25T18:02:19.723 回答
1

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

在此处输入图像描述

于 2020-06-30T11:33:38.030 回答