2017-01-24 6 views
0

저는 Snowflake DB에서 타이어를 걷어 차서 Liquibase와 어떻게 작동하는지보고 싶습니다. Snowflake가 타임 스탬프 필드를 가지고 있지만 Liquibase가 datetime의 데이터 형식으로 SQL을 발행하려고 시도 할 때 databasechangelog 테이블을 만들 때 문제가 발생합니다.liquibase와 snowflake db를 사용할 때 문제가 발생했습니다.

나는 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)) 

그리고 나는 받는다는 통해 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] 

그것을 만들려고하고 실패 있도록이 databasechangelog 테이블을 찾을 수 liquibase를 나타납니다.

+0

Snowflake의 History 메커니즘을 사용하여 실행 된 쿼리를보고 "DATABASECHANGELOG '계정과 같이 하나의 레코드를 반환하는 테이블을 보여줍니다. 하지만 앞으로 나아가 어쨌든 테이블을 만들려고합니다. –

+0

필자는 Snowflake 용 Liquibase 확장 프로그램을 작성했습니다. https://github.com/CDKGlobal/liquibase-snowflake/에서 다운로드 할 수 있습니다. –

답변

1

SnowflakeDB에 대해 전혀 모르는 경우, 가장 좋은 방법은 SnowflakeDB를위한 새로운 데이터베이스 구현을 작성하는 것입니다. SQL 언어는 상당히 다양합니다. 문제가 일찍 발생하는 경우, 앞으로 나아갈 때마다 더 많은 문제가 발생할 가능성이 높습니다.

+0

그래, 나는 우리가 눈송이와 함께 나아가면, liquibase를위한 눈송이 확장을 작성하는 것이 올바른 방법이라고 생각한다. –

0

오늘 Snowflake가 DATETIME 데이터 형식을 지원하지 않는 것이 문제입니다. 표준 SQL 인 DATETIMESTAMP을 지원합니다.

Snowflake에 추가하려는 지속적인 노력이 있습니다. 팀에서 업데이트를 추가 할 것을 요청할 것입니다.

+0

그래, 나는 Snowflake가 DATETIME을 지원하지 않는다는 것을 알게된다. 그래서 DATETIME을 TIMESTAMP로 변경하여 DATABASECHANGELOG 테이블을 일반 프로세스 외부에 추가했습니다. 그렇다면 Liquibase는 Snowflake 방언을 이해하지 못하기 때문에 어쨌든 테이블을 만들려고 시도하고 실패합니다. DATETIME 데이터 형식의 버전을 보길 기대합니다. –