使用 liquibase 和 snowflake 数据库的问题

issue with using liquibase and snowflake db

我正在试用 Snowflake DB,想看看它如何与 Liquibase 配合使用。我 运行 在创建数据库变更日志 table 时遇到了问题,因为 Snowflake 有一个时间戳字段,但 Liquibase 试图发布 SQL 数据类型为日期时间。

我遵循了 http://www.liquibase.org/databases.html 上的想法,并在 liquibase 部署之外创建了数据库变更日志 table。

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 似乎无法找到数据库更改日志 table 因此它尝试创建它但失败了。

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

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

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

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