使用liquibase和雪花数据库的问题

时间:2017-01-24 23:06:33

标签: liquibase snowflake-datawarehouse

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

3 个答案:

答案 0 :(得分:1)

对SnowflakeDB一无所知,我建议最好的方法是为SnowflakeDB编写一个新的数据库实现。 SQL方言的变化很大,如果你早期遇到问题,你可能会在移动时遇到更多问题。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

enter image description here