Overview
2.3 版新增功能:
默认, mongosqld对连接的MongoDB实例上的每个集合进行采样,并生成模式的关系表示,然后将其缓存在内存中。
注意
如果已启用authentication ,请确保 MongoDB 用户具有正确的权限。 请参阅下面的“用户权限”。
默认情况下, mongosqld在生成模式后不会自动对数据进行重新采样。 指定--schemaRefreshIntervalSecs选项以指示mongosqld自动对数据进行重采样并按固定安排重新生成模式。
如果mongosqld创建的模式不能满足 BI 工作负载需求,您可以手动生成模式文件并根据需要进行编辑。
要了解有关采样模式的更多信息,请参阅采样模式参考图。
缓存采样的用户权限
如果您的 MongoDB 实例使用身份验证,而您希望使用缓存采样,则 BI Connector 实例也必须使用身份验证。 通过mongosqld程序连接到 MongoDB 的管理员用户必须有权读取要从中采样数据的所有命名空间。
对所有命名空间进行采样
如果要对所有命名空间进行采样,则管理员用户需要以下权限:
listDatabases在集群上listCollections在每个数据库上find在每个数据库上
或者,创建具有内置readAnyDatabase角色的用户:
use admin db.createUser( { user: "<username>", pwd: "<password>", roles: [ { "role": "readAnyDatabase", "db": "admin" } ] } )
注意
在将readAnyDatabase角色授予用户之前,请了解该角色包含的所有权限。
要对所有命名空间进行采样,请启动不带 选项的 {mongosqld --sampleNamespaces。
mongosqld --auth --mongo-username <username> --mongo-password <password>
特定命名空间示例
如果您希望对特定命名空间进行采样,则管理员用户需要以下权限:
listCollections对于每个对所有collection进行采样的数据库find对所有集合进行采样的每个集合或每个数据库
或者,创建一个具有内置readAnyDatabase角色的用户。 有关创建具有此角色的用户的示例,请参阅“所有命名空间示例”部分。
注意
在将readAnyDatabase角色授予用户之前,请了解该角色包含的所有权限。
以下示例在 中创建一个 自定义角色 mongoshell,该角色具有对test 数据库中的每个集合进行采样所需的最低特权:
创建一个新用户并为其分配新创建的角色
db.createUser( { user: "<username>", pwd: "<password>", roles: [ "samplingReader" ] } )
注意
上述示例中的用户没有 权限,因此在运行listDatabases 时,您必须使用--sampleNamespaces mongosqld选项指定要从中示例数据的数据库。
在启用身份验证的情况下启动mongosqld
在启用身份验证的情况下运行mongosqld ,并使用--sampleNamespaces选项对test数据库中所有集合的数据进行采样:
mongosqld --auth --mongo-username <username> --mongo-password <password> \ --sampleNamespaces 'test.*'