SQL查询导出示例

要开始使用SQL查询导出开发SQL查询,您需要熟悉基本的SQL查询语法。以下概念将是根据关系,维度模型编写基本查询的关键:

  • 基本的SQL语法,包括:
    • 加入,特别是自然的加入(你很少需要使用外连接)
    • GROUP BY表达式,内置聚合,如MIN, MAX, COUNT等。
  • PostgreSQL 9.0 SQL语法,如果您需要非标准的SQL语法
  • PostgreSQL函数和运算符(用于翻译和格式化数据,特别是数字和日期输出)
  • 基本尺寸建模和数据仓库概念,Kimball组维建模技术页面是一个很好的资源

第一步

如果您完成以下步骤,您将最好地配备用于使用报告数据模型。

第一步:阅读手册

是的,有文件记录。是的,你需要阅读它。构建SQL查询导出的报表数据模型通过一组关系表和函数提供了应用程序编程接口(API)。因此,该模型中的事实和维度具有定义良好的关于其名称、数据类型和关系的文档。打开产品内帮助链接或相关主题在这里.文档分为四个部分:

  1. 介绍—提供了维度建模、术语、数据类型的基本概述,并快速入门编写SQL查询。
  2. 事实 - 为尺寸模型内暴露的所有事实提供API,包括每个列的名称和类型,具有每个事实表的图形星/雪花尺寸模式
  3. Dimensions -为维度模型中暴露的所有维度提供API,
  4. 函数——为几个辅助函数提供API,这些辅助函数对于编写更复杂的查询非常有用,特别是历史查询和趋势查询。

步骤2:运行示例查询

产品中内置了几个示例查询。尝试使用其中一个示例运行一个报告,以熟悉流程。然后获取一个查询并尝试自定义它。

步骤3:写下你的第一个查询

最后,跳进去。最好的学习方法是实践。

最佳实践

以下是在编写SQL查询时要记住的一些简单的最佳实践和设计技巧:

自然连接

在编写查询时,通常只需要使用自然join。在极少数情况下,可能需要左、右或外连接,但通常情况不是这样。在执行JOIN时,您将注意到JOIN应该始终使用相同的列名。所有应该联接的主键和外键具有相同的列名。这有助于发现简单的连接错误,即您不小心将一个列从一个表连接到另一个表,但实际上连接与连接没有关系(SQL不会阻止您这样做)。这也使得using关键字的使用变得简单和容易。

使用关键字

PostgreSQL支持使用表达式,并强烈推荐。此加入的简短表示法将简化查询,并使它们更可读。我们的示例将使用它们,因此我们也建议您的查询。

别名

对列名使用清晰、详细和可读的别名。这不仅使CSV中的输出更加清晰,而且还有助于SQL设计人员了解输出应该是什么。例如,如果输出包含资产名称和站点名称列,则不要两次使用“name”别名。相反,更喜欢像“site_name”和“asset_name”这样的名称来区分它们。当别名表名时,我们倾向于使用每个表名的首字母。所以fact_asset_vulnerability_finding是别名favf.你可以随意使用你自己的风格,但它应该是清晰和容易阅读的。

风格

您会注意到我们的示例使用我们认为是清晰可读的风格。这包括缩进和上外壳SQL关键字。像这样的样式可以真正帮助可读性,特别是对于具有嵌套和子选择的更复杂的查询。

用表达式

用表达式也可用于增强样式。对于特别复杂和长的查询,备份表达式可用于将大型查询划分为具有清晰名称的更小的,更多的逻辑作品。在某些情况下,如果多次引用相同的表,则使用表达式也可用于优化查询的性能。

构建自底向上

我们强烈建议您以小迭代的方式构建查询。通常在维度模型中,您将从事实表开始。这通常会回答一个业务问题(例如,我的站点有什么漏洞?)从这里开始,首先尝试格式化、操作和翻译您的数字数据。然后转到维度数据。根据需要逐个连接维度表,并根据需要添加过滤、分组和排序。

性能

使用所有资产的范围构建查询可能会非常耗时且效率低下。除非指定范围筛选器,否则查询将针对您有权限访问的所有资产运行。在构建查询时,使用报告配置中的范围过滤器来减少结果的大小,以便在开发和测试周期中快速响应。以下是基本步骤:

  1. 创建一个新的报告配置
  2. 选择要测试的范围的子集(单个站点,资产或资产组 - 越越好)
  3. 编辑、预览和保存您的查询内容
  4. 将范围修改为最终首选项
  5. 保存报告并运行它

SQL查询导出报告

使用SQL查询导出报告功能,您可以直接针对Security Console数据库运行SQL查询,然后将结果输出到CSV文件。