技术文章
使用业务应用程序工作室在计算视图中实现快照
在HANA的早期版本中,为了提高模型/计算视图的性能,建议使用一个过程在一些物理表中暂存在数据,然后在该暂存在表上创建计算视图。这有助于我们快速获取大量的数据,因为不涉及计算。为了避免这种手工工作,从2022年第二季度开始,SAP在计算视图中提出了SNAPSHOT选项,如果查询不需要基于最新的数据,这将帮助我们加快查询速度。
创建快照表
我们直接在模型中定义了一个“快照查询”。要在模型中定义/启用快照,我们需要遵循以下步骤:
- 在计算视图中,选择语义节点。
- 在“视图属性”选项卡上,选择“快照”子选项卡。
- 选择“+(添加)”添加快照查询。
查询被添加到列表中。
- 选择查询以编辑详细信息。
- 在“查询名称”字段中,输入快照查询的名称。
- 在查询部分,用快照查询覆盖默认查询。
- 保存并部署计算视图。
快照表自动创建。
- 在SAP HANA数据库资源管理器目录中,找到新创建的快照表,名称如下:< calculation_view_name >/< query_name >/快速/快照
- 在快照表的上下文菜单中,选择开放数据.
显示的数据对应于快照查询的结果。
创建接口视图
现在我们需要创建一个基于现有的计算视图和快照表的接口视图。
生成的计算视图使用联合剪枝,以便在生成的计算视图上运行查询时,根据为输入参数指定的值访问原始计算视图或快照表I_SOURCE.
要创建一个Interface视图(Generated Calculation视图),请遵循以下步骤:
- 在计算视图中(CVR_ZSUM_M01_Q022副本在本例中),选择语义节点。
- 在“查看属性”选项卡上,选择快照subtab。
- 选择快照查询。
- 在“Interface View Name”中输入要生成的计算视图的名称。
- 选择“生成接口计算视图”。
例如:
新生成的计算视图列在工作区中。它包含一个联合节点,该联合节点是原始计算视图(基本视图)和快照表之间的联合。联合节点还有一个名为源,用于以下过滤器表达式:“I_SOURCE美元美元”=“源”.输入参数I_SOURCE默认值为SNAPSHOT,因此默认访问快照表。可以将其设置为BASE(基本视图),以允许访问原始计算视图。
- 部署生成的计算视图。
- 在SAP HANA数据库资源管理器目录中,找到生成的计算视图并在其上执行SELECT语句,指定输入参数如下:
选项 | 描述 |
快照 | (占位符“$ $ I_SOURCE $ $”= >“快照”) |
基地 | (占位符“$ $ I_SOURCE $ $”= >“基地”) |
在下图中我们可以看到,界面视图是如何生成的
在这里CVR_ZFIAP_M03_copy(Base View)是原HANA视图,我们要对其数据进行快照。CVR_ZFIAP_M03_copy / Query_1 /快速/快照(SnapShot)是快照表,其中包含使用基本视图中定义的查询插入的数据。静态列表类型的输入参数自动创建,帮助我们从基本视图/快照表进行联合剪枝。
过程和快照表
在部署过程中,将根据已定义的快照查询生成用于创建、插入数据和删除“快照表”的过程。过程和快照表的命名规则如下:
- 程序:< calculation_view_name > / < query_name > /快速/ /创建快照| |插入
- 表快照:< calculation_view_name > / < query_name > /快速/快照
请注意:过程和快照表耦合到各自的计算视图,其中定义了快照查询。因此,删除计算视图也将删除相应的表和过程。
授权
过程使用调用方模式,这意味着应用调用方的授权。因此,快照包含INSERT过程调用者可见的数据。可以根据单个计算视图生成几个不同的快照。这些快照可以由不同的数据库用户生成。通过这种方式,可以公开反映不同权限的数据。
要在快照表上运行SELECT语句,必须对相应的快照表具有SELECT权限。
调度插入
您可以计划何时填充快照表,例如,通过使用作业调度器定期执行INSERT过程。有关作业调度器的详细信息,请参见CREATE SCHEDULER JOB Statement(数据定义).
对于大型数据集,也就是说,当特别大的查询导致大量的记录时,安排多个插入并根据输入参数将每个插入限制为一组不重叠的记录是有益的。例如,你可以在下面的例子中使用一个名为IP_year的输入参数,将单个年份加载到快照表中:
调用" snapshotCV/Query_1/SNAP/SNAPSHOT/INSERT " (IP_YEAR => ' 2022 ')
然后可以使用作业调度器对各个负载进行调度。
如果您希望避免在计算视图未被用于填充快照时提示输入“技术性”输入参数,您可以通过在计算视图中向输入参数添加默认值,然后在筛选器表达式中检查该默认值来实现这一点。
例如,如果输入参数IP_year的默认值为' no influence ',你可以使用下面的过滤器表达式:
“IP_year美元美元”=“没有影响”或“年”=“IP_year美元美元”
如果IP_year与它的默认值不同,这将对列“year”进行过滤。否则,过滤器将被忽略。
监控快照
您可能希望了解访问快照的频率以及快照的大致大小。
例如,您可以执行以下语句,以获取对您(即运行查询的用户)可见的元数据的所有快照表上执行的SELECT语句的数量:
select SELECT_COUNT,* from
SYS。M_TABLE_STATISTICS
where TABLE_NAME like ' %SNAPSHOT '
您可以通过运行下面的语句来估计快照的大小:
select MEMORY_SIZE_IN_TOTAL,* from
M_CS_TABLES
where TABLE_NAME like ' %SNAPSHOT '
为M_TABLE_STATISTICS在监视视图中,必须在indexserver.ini文件的SQL部分启用以下参数:
- table_statistics_modify_enabled
- table_statistics_select_enabled
通过快照,我们现在有了一种简单而灵活的方式来提供不需要在线数据的查询,从而减少了资源消耗。
引用:
https://help.sap.com/docs/HANA_CLOUD_DATABASE/d625b46ef0b445abb2c2fd9ba008c265/d35f768ce50145d2ad0e5916898f004d.html
限制
- 不能为具有层次结构的模型/计算视图实现快照
- 有时候,当我们部署生成的接口视图时,所有的列都变成了度量值。我们需要手动将它们更改为属性。希望在未来的版本中可以修复这个问题。
希望本文能帮助您回答与计算视图中的快照功能相关的问题。