分析ContourPerformance and correctness优化您的分析

注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

优化您的分析

请遵循以下建议以提高您的Contour分析和仪表盘的性能。


结构化您的分析

最小化重复逻辑

如果您的分析包含多个路径,应用了大量重复逻辑来计算多个输出(例如,在多个路径上应用相同的筛选条件,只是最后几个路径用于计算新的指标),请尽量减少这些路径的重复。相反,使用一个通用输入路径,并使用该路径的结果作为其他路径的输入。

合并

尽可能多地在合并之前筛选数据集。您可以通过在新的Contour路径中打开数据集、添加筛选条件,然后合并该路径的结果而不是数据集来进行筛选。这可以显著提高性能。

在多条件下合并“任意匹配”

由于数据的分布式特性,使用“任意匹配”的多条件合并在Spark中特别耗费资源。确保在操作之前尽可能减少规模,例如通过将筛选推向上游。通过不同的分析设计,例如应用多个单独的合并并将结果合并,经常可以避免多条件合并。

另存为数据集

如果一个面板或一系列面板的输出被多个下游面板使用(在同一路径中或不同路径中),那么将输出另存为Foundry数据集并从这个新保存的数据集开始所有下游计算将非常有益。尤其是在输出涉及复杂计算(例如合并、数据透视表或正则表达式筛选)时。

使用参数

如果用户更改参数的值,分析中的所有面板都将重新计算。想象一个分析,有一个起始数据集,许多不使用参数的计算,然后是使用参数的筛选。如果可能,在不使用参数的计算后将输出保存为数据集。这将确保在报告中重新计算图表和图形时能够快速刷新以适应新的参数输入。

前端性能

为了确保加载分析快速响应,我们建议每个分析不超过15 - 20条路径。如果超过此限制,请将您的分析分解为多个分析。


使用筛选

尽可能使用特定筛选

在应用筛选时,启用区分大小写,倾向于“精确匹配”筛选而不是“包含”,或者将底层数据全部转换为大写或小写。特别是,使用正则表达式在计算上代价很高。

例如,您可以通过确保数据集全部为小写或大写(以启用区分大小写的筛选)并且筛选条件尽可能精确并使用精确匹配(例如,对于文本使用等于而不是包含)来提高性能。

filter-1

为列类型应用正确的筛选

确保为列的类型使用正确类型的筛选。

例如,在整数长整数双精度类型列中应用精确数字筛选时,使用“数字等于”筛选将比“字符串精确匹配”筛选快得多。

filter-2


输入数据集

分区

确保在您的Contour分析中使用的数据集具有良好的分区。数据集中文件的平均文件大小应至少为128 MB。您可以通过打开数据集并选择“关于”选项卡查看文件数量和数据集大小。

在下面的示例中,有80个文件,数据集为365 MB。这是分区不佳的,因为最多应该只有三个文件。

number-partitions

如果您发现输入数据集分区不佳,可以在上游变换中对其进行分区。

要分区上游Python变换,请添加以下代码行:

Copied!
1 2 3 # Repartition – df.repartition(num_output_partitions) # 重新分区 – df.repartition(num_output_partitions) df = df.repartition(3) # 将DataFrame重新分为3个分区

有关Spark中分区及其影响的更多信息,请查看Spark优化概念

投影

数据集所有者可以在他们的数据集上配置投影以提高各种查询类型的性能。

如果您的输入数据集已配置投影,则投影将列在起始面板的优化部分,如下所示。您可以通过在列出的列之一上配置精确匹配筛选来利用这些投影。Contour目前仅公开关于筛选优化投影的信息,其中投影包括输入数据集的所有列。

contour-projection-alert

一般来说,我们建议在具有可预测查询模式的数据集上配置投影,以提高Contour中的性能。作为减少计算使用的一种方式,我们建议仅在数据集被频繁使用时设置投影(即每次写入特定模式的读取次数为10-100次)。搭建和存储投影需要在每次写入数据集时进行额外的计算,因此只有当这种计算在下游被持续利用时才能实现节省。


维护和共享您的分析

如果您的Contour分析被大量用户消费,上述所有优化将尤其重要。

调度搭建

在Contour中设置搭建数据集的计划时,应充分规划频率。设置计划后,监控搭建以确保计划在您需要的频率下呈现数据,而不会因不必要的搭建而消耗资源。例如,如果在Contour中搭建的数据集每天更新一次,则不需要每小时搭建该数据集。

限制参数

如果您的Contour分析在报告中被大量用户消费,最好将参数数量限制到最低。

理想的报告微件根据用户输入的参数值执行一些筛选,然后进行聚合以向用户显示相关的可视化。理想情况下,所有其他复杂逻辑(合并和透视)都在Foundry中的数据集中预先计算,以便每次参数更改不需要重新计算。