2017-01-24 3 views
0

Я пинаю шины на базе Snowflake DB и хотел посмотреть, как это работает с Liquibase. У меня возникает проблема при создании таблицы базы данных database, поскольку у Snowflake есть поле timestamp, но Liquibase пытается выпустить SQL с типом данных datetime.вопрос с использованием Liquibase и снежинки db

Я следил за идеей на http://www.liquibase.org/databases.html и просто создал таблицу базы данных базы данных вне развертывания Liquibase.

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.

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 таблицу поэтому он пытается создать его и терпит неудачу.

+0

Я использовал механизм истории Snowflake, чтобы увидеть выполненные запросы и увидеть, что он выполняет «показать таблицы типа« DATABASECHANGELOG »в учетной записи», который возвращает 1 запись. Но он идет вперед и пытается создать таблицу в любом случае. –

+0

В итоге я написал продление Liquibase для Snowflake. Доступно по адресу https://github.com/CDKGlobal/liquibase-snowflake/. –

ответ

1

Не знаю ничего о SnowflakeDB, я бы предположил, что лучший подход - написать новую реализацию базы данных для SnowflakeDB. SQL-диалекты варьируются довольно немного, и если у вас возникли проблемы на раннем этапе, вы, скорее всего, столкнетесь с большим количеством проблем, когда будете двигаться вперед.

+0

Да, я думаю, что если мы идем вперед со Снежинка, писать удлинение снежинки для ликбазы - это правильный путь. –

0

Проблема в том, что сегодня Snowflake не поддерживает тип данных DATETIME. Он поддерживает DATE и TIMESTAMP, которые являются стандартными SQL.

Постоянно прилагается усилия, чтобы добавить его в Snowflake, попросите команду, работающую над ней, добавить обновления здесь.

+0

Yup, я получаю, что Snowflake не поддерживает DATETIME. Именно поэтому я добавил таблицу DATABASECHANGELOG вне нормального процесса, изменив DATETIME на TIMESTAMP. Тогда проблема в том, что Liquibase не понимает диалект Snowflake и поэтому пытается создать таблицу в любом случае и терпит неудачу. Я с нетерпением жду появления издания типа данных DATETIME. –