我正在使用 Couchbase Java SDK 来查询 couchbase 分析服务。本教程介绍了该过程:https ://docs.couchbase.com/java-sdk/2.7/analytics-using-sdk.html
Java SDK 提供了一个Bucket
对象作为访问 couchbase 的方法。但是,存储桶是与分析数据集分开的实体。例如,我的存储桶名为data
,并且我有一个要查询的分析数据集requests
。
我找不到仅连接到requests
数据集的方法。SDK 只会连接到data
存储桶。从那里我可以requests
通过编写一些 N1QL 来查询数据集。这种解决方法意味着我用来运行分析查询的用户凭据也必须能够访问我的主生产data
存储桶,我宁愿阻止这种情况。
有没有办法使用 SDK 连接到简单的分析数据集?
我当前创建连接的代码如下所示:
public class CouchbaseConfig {
@Bean
public Bucket bucket(CouchbaseProperties properties) {
return cluster().openBucket("data"); // Changing this to the data-set name returns error
}
private Cluster cluster() {
Cluster cluster = CouchbaseCluster.create("localhost");
cluster.authenticate("Administrator", "password");
return cluster;
}
}
在存储桶名称中使用requests
数据集名称会导致此错误:
Failed to instantiate [com.couchbase.client.java.Bucket]: Factory method 'bucket' threw exception; nested exception is com.couchbase.client.java.error.BucketDoesNotExistException: Bucket "requests" does not exist.
使用data
存储桶名称,但身份验证用户名/密码“analytics-reader”/“password”(只有Analytics Reader
)角色会导致此错误:
Could not load bucket configuration: FAILURE({"message":"Forbidden. User needs one of the following permissions","permissions":["cluster.bucket[data].settings!read"]})
我发现的唯一解决方法是为analytics-reader
用户提供对数据存储桶的“应用程序访问权限”