改进 ODBC 和 JDBC API 中的雪花元数据调用
Posted
技术标签:
【中文标题】改进 ODBC 和 JDBC API 中的雪花元数据调用【英文标题】:Improve Snowflake MetaData calls in the ODBC & JDBC APIs 【发布时间】:2020-02-26 19:01:28 【问题描述】:我们已经看到了许多关于如何避免在仅指定特定数据库或数据库架构时检索所有对象的元数据的问题。这有助于提高元数据操作的性能并减少开销,尤其是对于部署非常庞大且可能包含大量数据库、模式、表和视图的 Snowflake 客户。
雪花数据保存在数据库中,每个数据库由一个或多个模式组成。诸如表和视图之类的数据库对象在这些数据库模式中进行了逻辑分组。
如果表、架构或数据库的名称中包含下划线字符,则需要以特定方式处理 getMetaData 调用。 ODBC 和 JDBC 调用中下划线字符的默认解释是将其作为通配符处理,即引用特定模式 database1.schema_name 将实际检索 database1 中的所有元数据。类似的解释也适用于数据库和表命名约定。
为避免将下划线字符用作通配符并检索所有对象的元数据,需要在下划线字符前面使用反斜杠“\”字符来转义用作通配符的下划线。然后,驱动程序将正确识别对象执行元数据调用的特定路径。
还有什么需要说明的吗?
【问题讨论】:
这个问题实际上看起来并不是一个问题,而更多的是对产品改进的要求。您有需要回答的具体问题吗? Snowflake 正在与一些合作伙伴和客户合作解决此问题。如果您在合作伙伴或客户处工作,请随时通过在我的名字和姓氏之间添加一个点来与我联系,以便在 Snowflake 发送电子邮件。我可以让你联系到合适的人。谢谢。 【参考方案1】:之前有没有遇到过Snowflake Session参数CLIENT_METADATA_REQUEST_USE_CONNECTION_CTX?
来自docs:
默认情况下,如果未指定数据库和架构(即您 为数据库和模式传递 NULL 值),然后这些 方法/函数返回有关所有数据库和所有模式的元数据。
请注意,检索所有数据库和所有模式的元数据可以 暂时消耗足够的资源来影响性能。
为避免这种潜在的性能影响,请将 CLIENT_METADATA_REQUEST_USE_CONNECTION_CTX 参数为 TRUE。当。。。的时候 启用参数,如果数据库和模式参数都是 NULL,这些方法/函数仅检索当前的元数据 数据库和模式,基于当前的连接上下文。这 参数也可以影响方法/函数的行为,但是 不是同时传递数据库和架构参数。
关于如何处理/解释 getMetData 调用的请求,此类改进请求最好发布在 Snowflake Ideas 页面中,因为此提要由 Snowflake 产品团队审核。
【讨论】:
以上是关于改进 ODBC 和 JDBC API 中的雪花元数据调用的主要内容,如果未能解决你的问题,请参考以下文章