Flyway clean 命令在雪花上失败,且 ASSOCIATE_SEMANTIC_CATEGORY_TAGS' 不存在或未授权

问题描述 投票:0回答:1

我们在雪花实例上执行 Flyway clean 命令时遇到错误,错误 ASSOCIATE_SEMANTIC_CATEGORY_TAGS' 不存在或未授权。

然而,这是雪花提供的存储过程,我们不拥有它,并且它不属于任何模式。

下面是 StackTrace

024-02-27T14:12:10.5828869Z 消息:SQL 编译错误: 2024-02-27T14:12:10.5829911Z 过程“..ASSOCIATE_SEMANTIC_CATEGORY_TAGS不存在或未授权。 2024-02-27T14:12:10.5830338Z 2024-02-27T14:12:10.5831459Z 在 org.flywaydb.core.internal.database.base.Schema.clean(Schema.java:123) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5832649Z 在 org.flywaydb.core.internal.command.DbClean.lambda$doCleanSchema$3(DbClean.java:216) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5833975Z 在 org.flywaydb.core.internal.jdbc.TransactionalExecutionTemplate.execute(TransactionalExecutionTemplate.java:55) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5835289Z 在 org.flywaydb.core.internal.command.DbClean.doCleanSchema(DbClean.java:215) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5836784Z 在 org.flywaydb.core.internal.command.DbClean.cleanSchema(DbClean.java:208) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5837880Z 在 org.flywaydb.core.internal.command.DbClean.cleanSchemas(DbClean.java:196) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5839210Z 在 org.flywaydb.core.internal.command.DbClean.clean(DbClean.java:112) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5840542Z 在 org.flywaydb.core.internal.command.DbClean.clean(DbClean.java:90) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5841707Z 在 org.flywaydb.core.internal.command.DbClean.clean(DbClean.java:76) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5842839Z 在 org.flywaydb.core.internal.command.DbClean.clean(DbClean.java:67) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5844539Z 在 org.flywaydb.core.Flyway.doClean(Flyway.java:367) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5845578Z 在 org.flywaydb.core.Flyway.access$400(Flyway.java:56) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5846573Z 在 org.flywaydb.core.Flyway$3.execute(Flyway.java:214) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5847475Z 在 org.flywaydb.core.Flyway$3.execute(Flyway.java:211) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5848448Z 在 org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:207) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5849503Z 在 org.flywaydb.core.Flyway.clean(Flyway.java:211) ~[flyway-core-8.5.0.jar!/:?] 2024-02-27T14:12:10.5850377Z 在 com.varian.acdp.flyway.executor.AcdpFlywayExecutor.clean(AcdpFlywayExecutor.java:75) ~[classes!/:2.0] 2024-02-27T14:12:10.5851227Z 在 com.varian.acdp.flyway.FlywayUtil.runFlyWay(FlywayUtil.java:30) ~[classes!/:2.0] 2024-02-27T14:12:10.5852058Z 在 com.varian.acdp.flyway.SnowflakeFlywayApp.run(SnowflakeFlywayApp.java:80) ~[classes!/:2.0] 2024-02-27T14:12:10.5853431Z 在 org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:769) ~[spring-boot-3.0.6.jar!/:3.0.6] 2024-02-27T14:12:10.5854151Z ... 13 更多 2024-02-27T14:12:10.5855061Z 引起:net.snowflake.client.jdbc.SnowflakeSQLException:SQL编译错误:

spring spring-boot spring-data-jpa flyway redgate
1个回答
0
投票

这看起来像雪花问题

SQL 编译错误:集成“”不存在或未授权。

解决方案

  1. 在不使用存储集成的情况下配置访问

建议的解决方案或解决方法是不使用存储集成来配置访问,而是为 S3 存储桶配置安全策略并为特定 IAM 用户配置访问凭证,以便以安全的方式访问外部阶段。

CREATE OR REPLACE STAGE s3_stage
  URL='s3://mybucket/load/files/'
  CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z')
  ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID = 'aws/key');

CREATE OR REPLACE VIEW v1 (
    first_name, 
    last_name, 
    email, 
    gender, 
    zip_code
) AS (
SELECT
    $1,
    $2,
    $3,
    $4,
    $5
FROM @s3_stage/testfile.csv);

//使用函数提取视图“v1”中列的语义和隐私类别:

SELECT EXTRACT_SEMANTIC_CATEGORIES('v1', 10); 

//使用存储过程将 EXTRACT_SEMANTIC_CATEGORIES 函数的结果应用为视图“v1”中的列上的标记:

CALL ASSOCIATE_SEMANTIC_CATEGORY_TAGS('v1',EXTRACT_SEMANTIC_CATEGORIES('v1',10)); 

在视图“v1”上使用 EXTRACT_SEMANTIC_CATEGORIES 函数或调用存储过程 ASSOCIATE_SEMANTIC_CATEGORY_TAGS 现在可以按预期工作。

  1. 使用外部表/在外部表上创建的视图

另一种解决方法是使用外部表来使用外部存储位置中的数据,并在外部表上使用函数和存储过程以及在此外部表上创建的视图按预期工作:

CREATE OR REPLACE EXTERNAL TABLE et1
 WITH LOCATION = @s3_stage/
 REFRESH_ON_CREATE =  TRUE
 FILE_FORMAT = (TYPE = CSV);

CREATE OR REPLACE VIEW ext_v1
 AS
SELECT * FROM et1;

参考:https://community.snowflake.com/s/article/Storage-Integration-authorization-error-when-using-the-EXTRACT-SEMANTIC-CATEGORIES-function-with-externally-stored-data

© www.soinside.com 2019 - 2024. All rights reserved.