使用 Databricks JDBC 驱动程序处理指标视图元数据

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 后缀。

后续步骤