Databricks 语义模型设置
脚本用途
此脚本作为 Tabular Editor x Databricks 系列的一部分创建。 在 Databricks Unity Catalog 中,表名不能使用大写字母。 在不使用大写字母的前提下,让表名更易读的一种常见做法是采用 snake_case。 另外,虽然列名可以包含空格,但通常不建议这样做,因为用起来很麻烦;因此数据工程师多半会使用 snake_case、camelCase 或 PascalCase。
不过,我们希望语义模型的用户在模型中看到业务友好的名称。
下面的脚本会遍历模型中的所有表,并确保应用友好的 Proper Case 格式。
在此过程中,它还会遵循一些最佳实践建议:将所有列的默认汇总方式设为“无”,并为所有 DateTime 类型字段设置格式字符串(脚本当前使用格式 'yyyy-mm-dd';如果你更偏好其他格式,可在第 61 行修改脚本)
Note
此脚本并非仅供 Databricks 使用——你可以把它用于任何你喜欢的模型,不管数据源是什么;只是它在设计时考虑了 Databricks 的一些限制。
脚本
Databricks 语义模型设置
/*
* Title: Databricks 语义模型设置
* Author: Johnny Winter, greyskullanalytics.com
*
* 此脚本执行后,将遍历模型中的所有表和列,并将其重命名为更友好的名称。
* 采用 snake_case、camelCase 或 PascalCase 的名称都会转换为 Proper Case。
* 无需选择表,因为会处理模型中的所有表;只需运行脚本即可。
* 在遍历列的同时,还会将默认汇总设置为 none,并为所有 DateTime 类型字段设置格式字符串
* (目前设置的格式为 'yyyy-mm-dd',如有需要可在第 61 行更改)。
*
*/
using System;
using System.Globalization;
//将脚本创建为类,以便复用
class p {
public static void ConvertCase(dynamic obj)
{
TextInfo textInfo = CultureInfo.CurrentCulture.TextInfo;
//将下划线替换为空格
var oldName = obj.Name.Replace("_", " ");
var newName = new System.Text.StringBuilder();
for(int i = 0; i < oldName.Length; i++) {
//首字母始终大写:
if(i == 0) newName.Append(Char.ToUpper(oldName[i]));
//当出现两个大写字母后跟一个小写字母时
//在第一个字母后插入空格:
else if(i + 2 < oldName.Length && char.IsLower(oldName[i + 2]) && char.IsUpper(oldName[i + 1]) && char.IsUpper(oldName[i]))
{
newName.Append(oldName[i]);
newName.Append(" ");
}
//其他情况下,当小写字母后跟大写字母时,应在第一个字母后
//插入空格:
else if(i + 1 < oldName.Length && char.IsLower(oldName[i]) && char.IsUpper(oldName[i+1]))
{
newName.Append(oldName[i]);
newName.Append(" ");
}
else
{
newName.Append(oldName[i]);
}
}
//若上述步骤尚未处理,则应用 Proper Case
obj.Name = textInfo.ToTitleCase(newName.ToString());
}
}
foreach(var t in Model.Tables) {
//转换表名
p.ConvertCase(t);
//转换列名
foreach(var c in t.Columns) {
p.ConvertCase(c);
c.SummarizeBy = AggregateFunction.None;
if (c.DataType == DataType.DateTime)
{c.FormatString = "yyyy-mm-dd";}
}
}
说明
此脚本执行后,会遍历模型中的所有表和列,并将其重命名为更友好的名称。 以 snake_case、camelCase 或 PascalCase 命名的名称都会转换为 Proper Case。 无需选择表,因为会处理模型中的所有表;直接运行脚本即可。 在遍历列的同时,它还会将默认汇总设置为“无”,并为所有 DateTime 类型字段设置格式字符串。