Databricks JDBC 驱动程序支持增强的元数据作,这些作允许商业智能(BI)工具和应用程序发现指标视图,并使用标准 JDBC 元数据方法识别其中的度量值列。
BI 工具可以在数据源浏览器中单独筛选和显示指标视图,通过区分度量值和维度来生成适当的 SQL,并生成丰富的语义层功能。 数据浏览工具可帮助用户发现和了解目录中可用的业务指标。
启用增强的元数据
默认情况下禁用指标视图的增强元数据以保持向后兼容性。 使用 JDBC 连接属性或 Spark SQL 配置设置启用它。
在建立 JDBC 连接时将 EnableMetricViewMetadata 连接属性设置为 1 。
使用连接属性
Properties properties = new Properties();
properties.setProperty("UID", "<username>");
properties.setProperty("PWD", "<password>");
properties.setProperty("EnableMetricViewMetadata", "1");
String url = "jdbc:databricks://<workspace-host>:443/default;httpPath=<http-path>";
Connection connection = DriverManager.getConnection(url, properties);
使用 JDBC URL 参数
String url = "jdbc:databricks://<workspace-host>:443/default;" +
"httpPath=<http-path>;" +
"EnableMetricViewMetadata=1";
Connection connection = DriverManager.getConnection(url, properties);
或者,在 SQL 会话中将spark.databricks.metadata.metricview.enabled设置为1:
Connection connection = DriverManager.getConnection(url, properties);
Statement statement = connection.createStatement();
statement.execute("SET spark.databricks.metadata.metricview.enabled=1");
// Metadata operations now return enhanced metric view information
识别指标视图
使用 DatabaseMetaData.getTables() 方法探索指标视图。 启用增强元数据后,此方法将METRIC_VIEW作为指标视图返回TABLE_TYPE,因此你可以将它们与常规视图和表区分开来。
Connection connection = DriverManager.getConnection(url, properties);
DatabaseMetaData metadata = connection.getMetaData();
ResultSet tables = metadata.getTables(catalog, schema, "<metric_view>", null);
while (tables.next()) {
String tableName = tables.getString("TABLE_NAME");
String tableType = tables.getString("TABLE_TYPE"); // Returns "METRIC_VIEW"
System.out.println("Metric View: " + tableName);
}
确定指标列
使用DatabaseMetaData.getColumns()方法识别指标视图中的度量列。 启用增强元数据后,TYPE_NAME列将返回<data_type> measure度量值列(例如,int measuredouble measure)。
Connection connection = DriverManager.getConnection(url, properties);
DatabaseMetaData metadata = connection.getMetaData();
ResultSet columns = metadata.getColumns(catalog, schema, metricViewName, "%");
while (columns.next()) {
String columnName = columns.getString("COLUMN_NAME");
String typeName = columns.getString("TYPE_NAME");
if (typeName.endsWith(" measure")) {
System.out.println("Measure column: " + columnName + " (" + typeName + ")");
} else {
System.out.println("Dimension column: " + columnName + " (" + typeName + ")");
}
}
按表类型进行筛选
使用此方法 DatabaseMetaData.getTableTypes() 可发现目录中的可用表类型。 启用增强元数据后,此方法包含在 METRIC_VIEW 可用表类型列表中。
Connection connection = DriverManager.getConnection(url, properties);
DatabaseMetaData metadata = connection.getMetaData();
ResultSet tableTypes = metadata.getTableTypes();
while (tableTypes.next()) {
String tableType = tableTypes.getString("TABLE_TYPE");
System.out.println("Available table type: " + tableType);
// Output includes: TABLE, VIEW, METRIC_VIEW, ...
}
向后兼容性
默认情况下, EnableMetricViewMetadata 设置为 0 保持与现有应用程序的向后兼容性。 Azure Databricks 返回常规的指标视图作为 VIEW 类型,并且度量字段显示其基本数据类型,没有 measure 后缀。