华为云用户手册

  • JSON JSON是通过提取JSON字段将其拆分为键值对。 选择示例日志:应选择一条比较典型的日志作为示例日志。在“步骤1 选择示例日志”中,可单击“从已有日志中选择”,在弹出框中根据业务需求选择待操作的日志,也可以直接在输入框中输入待操作的日志,单击“确定”。通过选择不同时间段筛选日志。 时间范围有三种方式,分别是相对时间、整点时间和自定义。您可以根据自己的实际需求,选择时间范围。 相对时间:表示查询距离当前时间1分钟、5分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置相对时间1小时,表示查询18:20:31~19:20:31的日志数据。 整点时间:表示查询最近整点1分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置整点时间1小时,表示查询18:00:00~19:00:00的日志数据。 自定义:表示查询指定时间范围的日志数据 字段提取。可将输入或选择的日志自动提取为以一个示例字段对应一个字段名称的格式的日志解析结果。 在“步骤2 字段提取”下单击“智能提取”。以如下原始日志为例进行分析: 将以下原始日志输入待操作框中。 {"a1": "a1", "b1": "b1", "c1": "c1", "d1": "d1"} 当日志提取字段的类型为float时,精度为16位有效数字。如果超过16位有效数字,则会导致提取字段内容不准确,从而影响可视化查看和快速分析,因此建议将字段类型修改为String。 当日志提取字段的类型为long时,日志内容超过16位有效数字,只会精确显示前16位有效数字,后面的数字会变为0。 当日志提取字段的类型为long时,日志内容超过21位有效数字,则会识别为float类型,建议将字段类型修改为String。 在字段提取完成后,可对日志模板进行设置。结构化字段设置规则请参考设置结构化字段。 若需要指定某一字段作为日志时间,详细请参考自定义日志时间。 单击“保存”,完成日志结构化配置,初次设置完成后将不能对字段类型编辑修改。
  • 云端结构化解析 登录 云日志 服务控制台,进入“日志管理”页面。 单击目标日志组和日志流名称。 在日志流详情页面,单击右上角,在弹出页面中,选择“云端结构化解析”,进行日志结构化配置。 正则分析:使用正则表达式提取字段。 JSON:通过提取JSON字段将其拆分为键值对。 分隔符:使用分隔符(例如:冒号、空格或字符等)提取字段。 Nginx:通过log_format指令来自定义访问日志的格式。 结构化模板:通过自定义模板或系统内置模板提取字段。 云端结构化解析配置完成后,支持修改或删除结构化配置。 在云端结构化解析页面中,单击,修改结构化配置。 在云端结构化解析页面中,单击,删除结构化配置。 结构化配置删除后,将无法恢复,请谨慎操作。
  • 响应方案 针对以上背景, 安全云脑 提供的HSS文件隔离查杀剧本,自动隔离查杀恶意软件。 “HSS文件隔离查杀”剧本已匹配“HSS文件隔离查杀”流程,当有恶意软件和勒索软件告警生成时,通过判断受攻击资产HSS防护版本,版本为专业版或者高于专业版但未开启自动隔离查杀的就满足隔离查杀条件,人工审批进行隔离查杀,就会通过HSS文件隔离查杀进行告警处置,隔离软件成功,关闭告警。隔离失败,添加手动处理的评论,提示需要进行手动操作。 图1 HSS文件隔离查杀
  • 事件响应 获取、保护、记录证据。 根据您华为云环境的配置,通过主机安全服务配置可通过AV检测和HIPS检测帮助您发现资产中的安全威胁,检测到恶意软件和勒索软件。 可通过SSH等方法访问云服务器,查看实例状态和监控等信息,查看是否有异常。或者通过其他方式收到攻击信息或勒索信息请求发现潜在威胁。 一旦确认攻击是事件,需要评估受影响范围、受攻击机器和受影响业务及数据信息。 通过安全云脑“转事件”能力,持续跟踪对应事件,记录所有涉及事件信息。详细操作请参见告警转事件。 同时可通过日志信息溯源,通过“安全分析”能力审核所有相关日志信息,在“事件管理”中记录存档,便于后续跟踪运营。 控制事件。 通过告警和日志信息,确定攻击类型、影响主机和业务进程信息。 通过HSS文件隔离查杀脚本对涉及进程软件进行进程查杀、软件隔离操作。降低后续影响。 排查感染范围,有感染风险都需要进行排查,一旦有沦陷及时处理控制。 同时也可使用其他剧本流程进行风险控制,比如“主机隔离”,通过安全组策略,从访问控制方面隔离受感染机器,隔离网络传播风险。 消除事件。 评估受影响机器是否需要加固恢复。如果已经沦陷,需要通过溯源结果加固恢复机器。如安全凭证泄露造成的攻击,则删除任何未经授权的 IAM 用户、角色和策略,并吊销凭据等操作进行主机加固。 对受感染机器可以进行风险排查,排查是否有漏洞、过时的软件、未修补的漏洞等,这些都可能会造成后续机器的持续沦陷,可以通过“漏洞管理”排查和修复处理对应机器漏洞;排查是否有风险配置,可以通过“基线检查”排查机器配置,针对有风险配置进行及时处理修复。 评估影响范围,如果已经有其他机器沦陷,需要同步处理所有影响主机。 从事故中恢复。 确定从备份执行的所有还原操作的还原点。 查看备份策略,以确定是否可以恢复所有对象和文件,这取决于在资源上应用的生命周期策略。 使用取证方法确认数据在恢复之前是安全的,然后从备份中恢复数据,或者恢复到E CS 实例的早期快照。 如果您已成功使用任何开源解密工具恢复数据,请从实例中删除该数据,并执行必要的分析以确认数据是安全的。然后,恢复实例,终止或隔离实例并创建新的实例,并将数据还原至新实例中。 如果从备份恢复或解密数据都不可行,请评估在新环境中重新开始的可能性。 事故后活动。 通过整个告警处理流程中分析告警发生详细信息,持续运营优化模型,提升模型告警准确率。如判断是业务相关的,无风险的告警可以直接通过模型进行筛选。 通过溯源告警发生,更好的了解事件的整个流程,持续优化资产防护策略,降低资源风险,收缩攻击面。 通过告警事件处理,结合自己业务实际场景,优化自动化处理剧本流程,例如,通过分析之后告警准确率提升可替换人工审核策略,以全自动化替代,提升处理效率,更快速的对风险进行处理。 风险分析可结合所有同类恶意软件和勒索软件攻击点,进行风险前置,在未发生事件之前进行风险控制处理。
  • 背景说明 恶意软件攻击是指通过电子邮件、远程下载、恶意广告等多种手段,向用户传播恶意软件(如病毒、蠕虫、木马、勒索软件等),并在目标主机上执行恶意程序,从而实现对远程主机的控制、攻击网络系统、窃取敏感信息或进行其他恶意行为。这类攻击对计算机系统、网络和个人设备的安全构成了严重威胁,可能导致数据泄露、系统崩溃、个人隐私泄露、金融损失以及其他安全风险。 针对以上问题,通过程序特征、行为检测,结合AI图像指纹算法以及云查杀,能有效识别后门、木马、挖矿软件、蠕虫和病毒等恶意程序,检测出主机中未知的恶意程序和病毒变种,也可检测来自网页、软件、邮件、存储介质等介质捆绑、植入的勒索软件。因此,当有此类攻击发生的时候如何预防降低风险就至关重要。 本文档就恶意软件和勒索软件隔离查杀进行详细介绍。
  • 背景说明 攻击链路在网络安全领域中是一个重要的概念,它主要指的是攻击者为了达成攻击目的,在目标网络或系统中采取的一系列攻击步骤和路径。这些步骤和路径构成了攻击链路,通过它们,攻击者能够逐步深入目标系统,最终实现其攻击目标。 攻击链路对目标网络或系统的危害是巨大的。一旦攻击者成功构建了攻击链路,并突破了目标系统的防御措施,就可以对目标系统进行任意操作,包括窃取敏感信息、破坏系统数据、瘫痪系统服务等。这些危害不仅会导致经济损失,还可能对国家安全和社会稳定造成严重影响。
  • 事件响应 获取、保护、记录证据。 根据您华为云环境的配置,通过主机安全服务(HSS)以及 Web应用防火墙 (WAF)来源检测相关类型的告警。 可通过SSH等方法访问云服务器,查看实例状态和监控等信息,查看是否有异常。或者通过其他方式收到的告警信息。 一旦确认攻击是事件,需要评估受影响范围、攻击机器和受影响业务及数据信息。 通过安全云脑“转事件”能力,持续跟踪对应事件,记录所有涉及事件信息。详细操作请参见告警转事件。 同时可通过日志信息溯源,通过“安全分析”能力审核所有相关日志信息,在“事件管理”中记录存档,便于后续跟踪运营。 控制事件。 通过告警和日志信息,确定攻击类型、影响主机和业务进程信息。 通过隔离查杀,策略阻断等脚本对涉及进程软件进行进程查杀、软件隔离等操作,降低后续影响。 排查感染范围,有感染风险都需要进行排查,一旦有沦陷及时处理控制。 同时也可使用其他剧本流程进行风险控制,比如“主机隔离”,通过安全组策略,从访问控制方面隔离受感染机器,隔离网络传播风险。 消除事件。 评估受影响机器是否需要加固恢复。如果已经沦陷,需要通过溯源结果加固恢复机器。如安全凭证泄露造成的攻击,则删除任何未经授权的IAM用户、角色和策略,并吊销凭据等操作进行主机加固。 对受感染机器可以进行风险排查,排查是否有漏洞、过时的软件、未修补的漏洞等,这些都可能会造成后续机器的持续沦陷,可通过“漏洞管理”排查和修复处理对应机器漏洞;排查是否有风险配置,可以通过“基线检查”排查机器配置,针对有风险配置进行及时处理修复。 评估影响范围,如果已经有其他机器沦陷,需要同步处理所有影响主机。 从事故中恢复。 确定从备份执行的所有还原操作的还原点。 查看备份策略,以确定是否可以恢复所有对象和文件,这取决于在资源上应用的生命周期策略。 使用取证方法确认数据在恢复之前是安全的,然后从备份中恢复数据,或者恢复到ECS实例的早期快照。 如果您已成功使用任何开源解密工具恢复数据,请从实例中删除该数据,并执行必要的分析以确认数据是安全的。然后,恢复实例,终止或隔离实例并创建新的实例,并将数据还原至新实例中。 如果从备份恢复或解密数据都不可行,请评估在新环境中重新开始的可能性。 事故后活动。 通过整个告警处理流程中分析告警发生详细信息,持续运营优化模型,提升模型告警准确率。如判断是业务相关的,无风险的告警可以直接通过模型进行筛选。 通过溯源告警发生,更好的了解事件的整个流程,持续优化资产防护策略,降低资源风险,收缩攻击面。 通过告警事件处理,结合自己业务实际场景,优化自动化处理剧本流程,例如,通过分析之后告警准确率提升可替换人工审核策略,以全自动化替代,提升处理效率,更快速的对风险进行处理。 通过风险分析,结合攻击链路告警分析,进行风险前置,在未发生事件之前进行风险控制处理。
  • 响应方案 攻击者攻击 域名 成功之后会对后端服务器进行攻击,因此针对此链路攻击的路径,安全云脑提供了攻击链路分析告警通知剧本。当攻击者通过层层攻击到主机之后,进行告警,通知运营人员进行处置。 “攻击链路分析告警通知”剧本已匹配“攻击链路分析告警通知”流程,该流程需要使用 消息通知 服务(Simple Message Notification, SMN )来创建安全云脑告警通知主题,并完成订阅即可接收到告警通知。 “攻击链路分析告警通知”流程是通过资产关联,查询对应HSS告警影响资产所关联的网站资产列表,流程预置默认查询最多3条网站资产。 如果有关联网站资产,则每条网站资产查询3小时前到现在这个时间段内对应的WAF告警数据(告警类型为XSS、SQL注入、命令注入、本地文件包含、远程文件包含、Webshell、漏洞攻击),同样的,最多查询3条告警数据。 如果有对应WAF告警,则将WAF告警数据与本条HSS告警数据进行关联,并通过SMN通知到邮箱。 图1 攻击链路分析告警通知
  • 事件类型:勒索软件攻击 勒索软件(Ransomware)又称勒索病毒,是一种特殊的恶意软件,属于“阻断访问式攻击”(denial-of-access attack)的一种。它通过技术手段限制受害者访问自己的系统或系统内的数据,如文档、邮件、数据库、源代码等,以此达到勒索钱财的目的。 一旦勒索软件对系统攻击成功后,再对系统实行中断攻击并减轻损害的措施是有限,并且极具挑战性的。因此,关注预防措施以减少此类攻击显得至关重要。 本文档介绍了一系列旨在有效管理和应对勒索软件攻击的步骤和策略。
  • 事件响应流程 获取、保存、记录证据。 根据您的华为云环境的配置情况,您可能通过各种来源了解到潜在的勒索软件事件: 某IT员工反馈,通过SSH及其他类似方式无法访问ECS实例。 ECS实例创建正常,华为云的 云监控 (Cloud Eye)或其他监控工具也没有上报告警,但依然无法访问ECS实例。 由ECS实例的异常指标或异常日志触发生成一个工单在您的工单系统中。 ECS实例在华为云控制台或云监控的告警中上报网络异常问题。 攻击者通过其他通信渠道(如电子邮件)收到勒索软件的请求。 通过华为 云安全 服务或其他安全工具发现ECS实例遭受到攻击。 您的华为云或者其他第三方监控系统发出告警或显示指标异常。 当确认某个事件为安全事件后,评估其影响范围至关重要,包括受影响资源的数量和所涉及数据的敏感性。 排查是否有任何已知事件可能导致服务中断或影响实例指标,例如,由于正在进行的事件导致云监控中的网络指标增加。 使用云监控或其他应用程序性能监控工具将记录的应用程序的性能基线指标与当前异常指标进行对比,判断是否存在异常行为。 确定存储在ECS实例、OBS桶或其他存储中的数据的分类级别。 请确保已为该事件创建工单。如果未创建,请手动创建一个。 如果为已有工单,请确定当前指示问题的告警或指标是什么。 如果工单是由告警或指标触发自动生成的工单,可明确其自动生成工单的什么的原因;如果工单非自动生成,则记录导致识别问题的告警或通知。确认服务中断是由已知事件还是其他原因造成的,如果不能判断,则记录攻击的实际媒介。 使用日志搜索来确定勒索攻击发生的时间。 可以使用华为云的 云审计 服务(Cloud Trace Service)服务,它提供对各种云资源操作记录的收集、存储和查询功能。 确定并记录对最终用户的影响及其体验。 如果用户受到影响,请在工单中记录导致攻击事件的详细步骤,以帮助识别攻击媒介并制定适当的缓解策略。 根据您企业/组织的事件响应计划确定事件涉及的角色。通知相关角色,包括法务人员、技术团队和开发人员,并确保他们被添加到工单和WarRoom中持续响应该事件。 确保您的组织的法律顾问了解并参与到事件的内部响应和外部沟通中,并将负责公共或外部沟通的同事添加到工单中,以便他们能够及时履行其沟通职责。如果地方或联邦法规要求报告此类事件,请通知有关当局,并向其法律顾问或执法部门寻求关于收集证据和保存监管链的指导。如果法规没有要求,向开放数据库、政府机构或非政府组织报告此类事件也可能有助于推进响应此事件。 控制事件。 尽早检测异常用户行为或网络活动是减少勒索软件事件影响的关键。可以参考以下步骤来帮助您控制事件。如果以下步骤适用,请与您的企业/组织的法律和合规团队合作,采取任何必要的响应措施,并继续进行事件响应流程。 确定攻击事件中涉及的勒索软件的类型。常见的勒索软件类型如下: 加密勒索软件:加密文件和对象。 锁定勒索软件:锁定对设备的访问。 其他类型:新类型或以前未记载的类型。 受攻击影响的工作负载,对于已识别出的与其相关联的华为云资源,可以通过修改安全组、OBS桶策略或相关身份和访问管理策略来隔离网络或互联网连接,以最大限度地减少感染传播的机会,或最大限度地减少攻击者访问这些资源的机会。 请注意,由于连接跟踪,有时修改安全组可能不会达到预期效果。 评估ECS实例是否需要恢复。如果该实例属于弹性伸缩组,则请从组中移除该实例。此外,如果事件与主机操作系统中的漏洞有关,请更新系统并确保已修补漏洞。 通过云审计服务查看操作日志,查看是否存在未经授权的活动,例如,创建未经授权的IAM用户、策略、角色或临时安全凭证。如果有,请删除任何未经授权的IAM用户、角色和策略,并撤销所有临时凭据。 如果攻击媒介是由未修补的软件、操作系统更新、过期的恶意软件或防病毒工具造成的,请确保所有ECS实例都更新到最新版本的操作系统,所有软件包和补丁程序都是最新的,并且所有ECS实例上的病毒特征码和定义文件都是最新的。您可以通过如下方式进行处理:针对可变架构,请立即进行修补;针对不可变架构,请进行重新部署。 根据5中的更新,删除被识别为有感染风险的所有剩余资源(可能访问了下载勒索软件的同一媒介,无论是通过电子邮件、访问受感染的网站,还是其他方式)。对于通过弹性伸缩管理的资源,重点识别攻击媒介,并采取措施防止其他资源通过同一媒介受到感染。 消除事件。 评估事件的影响是否仅限于环境的特定部分。如果能从备份或快照中恢复被勒索的数据,请参考备份或快照进行恢复。 请注意,在隔离的环境下调查事件以进行根本原因分析,对于实施控制措施以防止将来发生类似事件具有极大价值。 考虑使用最新的防病毒或防恶意软件来消除勒索软件。 请谨慎此操作,因为此操作可能会向攻击者发出警报。建议在隔离的取证环境中查看被锁定或加密的对象,例如,从受感染的ECS实例中删除网络访问权限。 删除在取证分析过程中识别到的所有恶意软件,并识别入侵指标。 如果已确定勒索软件毒种,请检查是否有可用的第三方解密工具或其他可能有助于解密数据的在线资源。 从事故中恢复。 确定从备份执行的所有还原操作的还原点。 查看备份策略,以确定是否可以恢复所有对象和文件,这取决于在资源上应用的生命周期策略。 使用取证方法确认数据在恢复之前是安全的,然后从备份中恢复数据,或者恢复到ECS实例的早期快照。 如果您已成功使用任何开源解密工具恢复数据,请从实例中删除该数据,并执行必要的分析以确认数据是安全的。然后,恢复实例,终止或隔离实例并创建新的实例,并将数据还原至新实例中。 如果从备份恢复或解密数据都不可行,请评估在新环境中重新开始的可能性。 事故后活动。 将在模拟和现场事件中吸取的经验教训记录并应用到后续的流程和程序中,可以使受害方更好地了解事件是如何在系统配置和流程中发生的(例如,哪里存在弱点、哪里的自动化可能出现故障、哪里缺乏可见性),以及如何加强其整体安全态势。 如果您已经确定了最初的攻击媒介或进入点,请如何降低风险再次发生的最佳方法。 例如,如果恶意软件最初通过一个未修补的面向公众的ECS实例进入,并且您已将缺失的补丁程序应用于所有当前实例,请考虑如何改进补丁程序管理流程,旨在更快速和一致地测试和应用补丁程序,以防止将来出现类似问题。 如果您已经制定了解决特定威胁的技术步骤,请评估当检测到相关威胁时自动执行这些步骤的几率。使用自动化处理,可以帮助更快地减轻威胁,从而最大限度地减少影响的范围和严重性。 向响应过程中的所有角色收集其获得的经验教训,并根据需要更新您的事件响应计划、灾难恢复计划和本响应方案。同时,酌情考虑和资助新的技术能力和人员技能,以弥补已发现的差距。
  • 剧本说明 安全云脑提供的高危漏洞自动通知剧本,当新增主机漏洞,且等级为高危时,自动通知运营人员。 “高危漏洞自动通知”剧本已匹配“高危漏洞自动通知”流程,该流程需要使用消息通知服务(Simple Message Notification,SMN)来创建安全云脑告警通知主题,并完成订阅即可接收到告警通知。 当新增HSS的高危漏洞时,会通过SMN服务对运营人员发送漏洞通知。 图1 高危漏洞自动通知流程
  • 剧本说明 安全云脑提供的自动更改告警名称剧本,支持用户按照不同维度自定义告警名称。 “自动更改告警名称”剧本已匹配“自动更改告警名称”流程,配置该剧本,需要对流程及流程中的插件进行适配。 “自动更改告警名称”流程共四个插件节点:获取告警类型id、获取告警详情、SecMasterBiz、告警名称更新。本流程只需配置SecMasterBiz插件节点,该节点用来定制告警名称的。 图1 自动更改告警名称流程
  • 保留关键字 目前,由于SecMaster SQL特性功能还在不断更新完善中,其中有一些字符串的组合已被预留为关键字在后续功能特性中使用,因此,如果您需要使用这些字符串作为字段名,请使用反引号将字段名进行包装,例如,`value`, `count`。 具体保留关键字如下: 表1 保留关键字 首字母 安全云脑保留关键字 A A, ABS, ABSOLUTE, ACTION, ADA, ADD, ADMIN, AFTER, ALL, ALLOCATE, ALLOW, ALTER, ALWAYS, AND, ANALYZE, ANY, ARE, ARRAY, AS, ASC, ASENSITIVE, ASSERTION, ASSIGNMENT, ASYMMETRIC, AT, ATOMIC, ATTRIBUTE, ATTRIBUTES, AUTHORIZATION, AVG B BEFORE, BEGIN, BERNOULLI, BETWEEN, BIGINT, BINARY, BIT, BLOB, BOOLEAN, BOTH, BREADTH, BY, BYTES C C, CALL, CALLED, CARDINALITY, CASCADE, CASCADED, CASE, CAST, CATA LOG , CATALOG_NAME, CEIL, CEILING, CENTURY, CHAIN, CHAR, CHARACTER, CHARACTERIS TICS , CHARACTERS, CHARACTER_LENGTH, CHARACTER_SET_CATALOG, CHARACTER_SET_NAME, CHARACTER_SET_SCHEMA, CHAR_LENGTH, CHECK, CLASS_ORIGIN, CLOB, CLOSE, COALESCE, COBOL, COLLATE, COLLATION, COLLATION_CATALOG, COLLATION_NAME, COLLATION_SCHEMA, COLLECT, COLUMN, COLUMNS, COLUMN_NAME, COMMAND_FUNCTION, COMMAND_FUNCTION_CODE, COMMIT, COMMITTED, CONDITION, CONDITION_NUMBER, CONNECT, CONNECTION, CONNECTION_NAME, CONSTRAINT, CONSTRAINTS, CONSTRAINT_CATALOG, CONSTRAINT_NAME, CONSTRAINT_SCHEMA, CONSTRUCTOR, CONTAINS, CONTINUE, CONVERT, CORR, CORRESPONDING, COUNT, COVAR_POP, COVAR_SAMP, CREATE, CROSS, CUBE, CUME_DIST, CURRENT, CURRENT_CATALOG, CURRENT_DATE, CURRENT_DEFAULT_TRANSFORM_GROUP, CURRENT_PATH, CURRENT_ROLE, CURRENT_SCHEMA, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_TRANSFORM_GROUP_FOR_TYPE, CURRENT_USER, CURSOR, CURSOR_NAME, CYCLE D DATA, DATABASE, DATE, DATETIME_INTERVAL_CODE, DATETIME_INTERVAL_PRECISION, DAY, DEALLOCATE, DEC, DECADE, DECIMAL, DECLARE, DEFAULT, DEFAULTS, DEFERRABLE, DEFERRED, DEFINED, DEFINER, DEGREE, DELETE, DENSE_RANK, DEPTH, DEREF, DERIVED, DESC, DESCRIBE, DESCRIPTION, DESCRIPTOR, DETERMINISTIC, DIAGNOSTICS, DISALLOW, DISCONNECT, DISPATCH, DISTINCT, DOMAIN, DOUBLE, DOW, DOY, DROP, DYNAMIC, DYNAMIC_FUNCTION, DYNAMIC_FUNCTION_CODE E EACH, ELEMENT, ELSE, END, END-EXEC, EPOCH, EQUALS, ESCAPE, EVERY,EXCEPT, EXCEPTION, EXCLUDE, EXCLUDING, EXEC, EXECUTE, EXISTS, EXP, EXPLAIN, EXTEND, EXTERNAL, EXTRACT F FALSE, FETCH, FILTER, FINAL, FIRST, FIRST_VALUE, FLOAT, FLOOR, FOLLOWING, FOR, FOREIGN, FORTRAN, FOUND, FRAC_SECOND, FREE, FROM, FULL, FUNCTION, FUSION G G, GENERAL, GENERATED, GET, GLOBAL, GO, GOTO, GRANT, GRANTED, GROUP, GROUPING H HAVING, HIERARCHY, HOLD, HOUR I IDENTITY, IMMEDIATE, IMPLEMENTATION, IMPORT, IN, INCLUDING, INCREMENT, INDICATOR, INITIALLY, INNER, INOUT, INPUT, INSENSITIVE, INSERT, INSTANCE, INSTANTIABLE, INT, INTEGER, INTERSECT, INTERSECTION, INTERVAL, INTO, INVOKER, IS, ISOLATION J JAVA, JOIN K K, KEY, KEY_MEMBER, KEY_TYPE L LABEL, LANGUAGE, LARGE, LAST, LAST_VALUE, LATERAL, LEADING, LEFT, LENGTH, LEVEL, LIBRARY, LIKE, LIMIT, LN, LOCAL, LOCALTIME, LOCALTIMESTAMP, LOCATOR, LOWER M M, MAP, MATCH, MATCHED, MAX, MAXVALUE, MEMBER, MERGE, MESSAGE_LENGTH, MESSAGE_OCTET_LENGTH, MESSAGE_TEXT, METHOD, MICROSECOND, MILLENNIUM, MIN, MINUTE, MINVALUE, MOD, MODIFIES, MODULE, MODULES, MONTH, MORE, MULTISET, MUMPS N NAME, NAMES, NATIONAL, NATURAL, NCHAR, NCLOB, NESTING, NEW, NEXT, NO, NONE, NORMALIZE, NORMALIZED, NOT, NULL, NULLABLE, NULLIF, NULLS, NUMBER, NUMERIC O OBJECT, OCTETS, OCTET_LENGTH, OF, OFFSET, OLD, ON, ONLY, OPEN, OPTION, OPTIONS, OR, ORDER, ORDERING, ORDINALITY, OTHERS, OUT, OUTER, OUTPUT, OVER, OVERLAPS, OVERLAY, OVERRIDING P PAD, PA RAM ETER, PARAMETER_MODE, PARAMETER_NAME, PARAMETER_ORDINAL_POSITION, PARAMETER_SPECIFIC_CATALOG, PARAMETER_SPECIFIC_NAME, PARAMETER_SPECIFIC_SCHEMA, PARTIAL, PARTITION, PASCAL, PASSTHROUGH, PATH, PERCENTILE_CONT, PERCENTILE_DISC, PERCENT_RANK, PLACING, PLAN, PLI, POSITION, POWER, PRECEDING, PRECISION, PREPARE, PRESERVE, PRIMARY, PRIOR, PRIVILEGES, PROCEDURE, PUBLIC Q QUARTER R RANGE, RANK, RAW, READ, READS, REAL, RECURSIVE, REF, REFEREN CES , REFERENCING, REGR_AVGX, REGR_AVGY, REGR_COUNT, REGR_INTERCEPT, REGR_R2, REGR_SLOPE, REGR_SXX, REGR_SXY, REGR_SYY, RELATIVE, RELEASE, REPEATABLE, RESET, RESTART, RESTRICT, RESULT, RETURN, RETURNED_CARDINALITY, RETURNED_LENGTH, RETURNED_OCTET_LENGTH, RETURNED_SQLSTATE, RETURNS, REVOKE, RIGHT, ROLE, ROLLBACK, ROLLUP, ROUTINE, ROUTINE_CATALOG, ROUTINE_NAME, ROUTINE_SCHEMA, ROW, ROWS, ROW_COUNT, ROW_NUMBER S SAVEPOINT, SCALE, SCHEMA, SCHEMA_NAME, SCOPE, SCOPE_CATALOGS, SCOPE_NAME, SCOPE_SCHEMA, SCROLL, SEARCH, SECOND, SECTION, SECURITY, SELECT, SELF, SENSITIVE, SEQUENCE, SERIALIZABLE, SERVER, SERVER_NAME, SESSION, SESSION_USER, SET, SETS, SIMILAR, SIMPLE, SIZE, SMALLINT, SOME, SOURCE, SPACE, SPECIFIC, SPECIFICTYPE, SPECIFIC_NAME, SQL, SQLEXCEPTION, SQLSTATE, SQLWARNING, SQL_TSI_DAY, SQL_TSI_FRAC_SECOND, SQL_TSI_HOUR, SQL_TSI_MICROSECOND, SQL_TSI_MINUTE, SQL_TSI_MONTH, SQL_TSI_QUARTER, SQL_TSI_SECOND, SQL_TSI_WEEK, SQL_TSI_YEAR, SQRT, START, STATE, STATEMENT, STATIC, STDDEV_POP, STDDEV_SAMP, STREAM, STRING, STRUCTURE, STYLE, SUBCLASS_ORIGIN, SUBMULTISET, SUBSTITUTE, SUBSTRING, SUM, SYMMETRIC, SYSTEM, SYSTEM_USER T TABLE, TABLESAMPLE, TABLE_NAME, TEMPORARY, THEN, TIES, TIME, TIMESTAMP, TIMESTAMPADD, TIMESTAMPDIFF, TIMEZONE_HOUR, TIMEZONE_MINUTE, TINYINT, TO, TOP_LEVEL_COUNT, TRAILING, TRANSACTION, TRANSACTIONS_ACTIVE, TRANSACTIONS_COMMITTED, TRANSACTIONS_ROLLED_BACK, TRANSFORM, TRANSFO RMS , TRANSLATE, TRANSLATION, TREAT, TRIGGER, TRIGGER_CATALOG, TRIGGER_NAME, TRIGGER_SCHEMA, TRIM, TRUE, TYPE U UESCAPE, UNBOUNDED, UNCOMMITTED, UNDER, UNION, UNIQUE, UNKNOWN, UNNAMED, UNNEST, UPDATE, UPPER, UPSERT, USAGE, USER, USER_DEFINED_TYPE_CATALOG, USER_DEFINED_TYPE_CODE, USER_DEFINED_TYPE_NAME, USER_DEFINED_TYPE_SCHEMA, USING V VALUE, VALUES, VARBINARY, VARCHAR, VARYING, VAR_POP, VAR_SAMP, VERSION, VIEW W WEEK, WHEN, WHENEVER, WHERE, W IDT H_BUCKET, WINDOW, WITH, WITHIN, WITHOUT, WORK, WRAPPER, WRITE X XML Y YEAR Z ZONE 父主题: 数据操作语句DML
  • 语法说明 ROW_NUMBER(): 从第一行开始,依次为每一行分配一个唯一且连续的号码。 PARTITION BY col1[, col2...]: 指定分区的列,例如去重的键。 ORDER BY time_attr [asc|desc]: 指定排序的列。所制定的列必须为时间属性。目前仅支持proctime。升序( ASC )排列指只保留第一行,而降序排列( DESC )则指保留最后一行。 WHERE rownum = 1: Flink 需要 rownum = 1 以确定该查询是否为去重查询。
  • 示例 根据order_id对数据进行去重,其中proctime为事件时间属性列。 SELECT order_id, user, product, number FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY proctime ASC) as row_num FROM Orders) WHERE row_num = 1;
  • Join表函数(UDTF) 功能描述 将表与表函数的结果进行 join 操作。左表(outer)中的每一行将会与调用表函数所产生的所有结果中相关联行进行 join 。 注意事项 针对横向表的左外部联接当前仅支持文本常量 TRUE 作为谓词。 示例 若表函数返回了空结果,左表(outer)的行将会被删除 SELECT users, tag FROM Orders, LATERAL TABLE(unnest_udtf(tags)) t AS tag; 若表函数返回了空结果,将会保留相对应的外部行并用空值填充 SELECT users, tag FROM Orders LEFT JOIN LATERAL TABLE(unnest_udtf(tags)) t AS tag ON TRUE;
  • Join Temporal Table Function 功能描述 注意事项 目前仅支持在 Temporal Tables 上的 inner join。 示例 假如Rates是一个 Temporal Table Function, join 可以使用 SQL 进行如下的表达: SELECT o_amount, r_rate FROM Orders, LATERAL TABLE (Rates(o_proctime)) WHERE r_currency = o_currency;
  • GROUP WINDOW 语法说明 Group Window定义在GROUP BY里,每个分组只输出一条记录,包括以下几种: 分组函数 表1 分组函数表 分组窗口函数 说明 TUMBLE(time_attr, interval) 定义一个滚动窗口。滚动窗口把行分配到有固定持续时间( interval )的不重叠的连续窗口。比如,5 分钟的滚动窗口以 5 分钟为间隔对行进行分组。滚动窗口可以定义在事件时间(批处理、流处理)或处理时间(流处理)上。 HOP(time_attr, interval, interval) 定义一个跳跃的时间窗口(在 Table API 中称为滑动窗口)。滑动窗口有一个固定的持续时间( 第二个 interval 参数 )以及一个滑动的间隔(第一个 interval 参数 )。若滑动间隔小于窗口的持续时间,滑动窗口则会出现重叠;因此,行将会被分配到多个窗口中。比如,一个大小为 15 分组的滑动窗口,其滑动间隔为 5 分钟,将会把每一行数据分配到 3 个 15 分钟的窗口中。滑动窗口可以定义在事件时间(批处理、流处理)或处理时间(流处理)上。 SESSION(time_attr, interval) 定义一个会话时间窗口。会话时间窗口没有一个固定的持续时间,但是它们的边界会根据 interval 所定义的不活跃时间所确定;即一个会话时间窗口在定义的间隔时间内没有时间出现,该窗口会被关闭。例如时间窗口的间隔时间是 30 分钟,当其不活跃的时间达到30分钟后,若观测到新的记录,则会启动一个新的会话时间窗口(否则该行数据会被添加到当前的窗口),且若在 30 分钟内没有观测到新纪录,这个窗口将会被关闭。会话时间窗口可以使用事件时间(批处理、流处理)或处理时间(流处理)。 在流处理表中的 SQL 查询中,分组窗口函数的 time_attr 参数必须引用一个合法的时间属性,且该属性需要指定行的处理时间或事件时间。 time_attr设置为event-time时参数类型为timestamp(3)类型。 time_attr设置为processing-time时无需指定类型。 对于批处理的 SQL 查询,分组窗口函数的 time_attr 参数必须是一个timestamp类型的属性。 窗口辅助函数 可以使用以下辅助函数选择组窗口的开始和结束时间戳以及时间属性。 表2 窗口辅助函数表 辅助函数 说明 TUMBLE_START(time_attr, interval) HOP_START(time_attr, interval, interval) SESSION_START(time_attr, interval) 返回相对应的滚动、滑动和会话窗口范围内的下界时间戳。 TUMBLE_END(time_attr, interval) HOP_END(time_attr, interval, interval) SESSION_END(time_attr, interval) 返回相对应的滚动、滑动和会话窗口范围以外的上界时间戳。 注意: 范围以外的上界时间戳不可以 在随后基于时间的操作中,作为行时间属性使用,比如基于时间窗口的join以及分组窗口或分组窗口上的聚合。 TUMBLE_ROWTIME(time_attr, interval) HOP_ROWTIME(time_attr, interval, interval) SESSION_ROWTIME(time_attr, interval) 返回的是一个可用于后续需要基于时间的操作的时间属性(rowtime attribute),比如基于时间窗口的join以及 分组窗口或分组窗口上的聚合。 TUMBLE_PROCTIME(time_attr, interval) HOP_PROCTIME(time_attr, interval, interval) SESSION_PROCTIME(time_attr, interval) 返回一个可用于后续需要基于时间的操作的 处理时间参数,比如基于时间窗口的join以及分组窗口或分组窗口上的聚合. 辅助函数必须使用与GROUP BY 子句中的分组窗口函数完全相同的参数来调用。 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 // 每天计算SUM(金额)(事件时间)。 SELECT name, TUMBLE_START(ts, INTERVAL '1' DAY) as wStart, SUM(amount) FROM Orders GROUP BY TUMBLE(ts, INTERVAL '1' DAY), name; // 每天计算SUM(金额)(处理时间)。 SELECT name, SUM(amount) FROM Orders GROUP BY TUMBLE(proctime, INTERVAL '1' DAY), name; // 每个小时计算事件时间中最近24小时的SUM(数量)。 SELECT product, SUM(amount) FROM Orders GROUP BY HOP(ts, INTERVAL '1' HOUR, INTERVAL '1' DAY), product; // 计算每个会话的SUM(数量),间隔12小时的不活动间隙(事件时间)。 SELECT name, SESSION_START(ts, INTERVAL '12' HOUR) AS sStart, SESSION_END(ts, INTERVAL '12' HOUR) AS sEnd, SUM(amount) FROM Orders GROUP BY SESSION(ts, INTERVAL '12' HOUR), name;
  • OVER WINDOW Over Window与Group Window区别在于Over window每一行都会输出一条记录。 语法格式 1 2 3 4 5 6 7 8 9 10 11 SELECT agg1(attr1) OVER ( [PARTITION BY partition_name] ORDER BY proctime|rowtime ROWS BETWEEN (UNBOUNDED|rowCOUNT) PRECEDING AND CURRENT ROW FROM TABLENAME SELECT agg1(attr1) OVER ( [PARTITION BY partition_name] ORDER BY proctime|rowtime RANGE BETWEEN (UNBOUNDED|timeInterval) PRECEDING AND CURRENT ROW FROM TABLENAME 语法说明 表5 参数说明 参数 参数说明 PARTITION BY 指定分组的主键,每个分组各自进行计算。 ORDER BY 指定数据按processing time或event time作为时间戳。 ROWS 个数窗口。 RANGE 时间窗口。 注意事项 所有的聚合必须定义到同一个窗口中,即相同的分区、排序和区间。 当前仅支持 PRECEDING (无界或有界) 到 CURRENT ROW 范围内的窗口、FOLLOWING 所描述的区间并未支持。 ORDER BY 必须指定于单个的时间属性。 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 // 计算从规则启动到目前为止的计数及总和(in proctime) SELECT name, count(amount) OVER (PARTITION BY name ORDER BY proctime RANGE UNBOUNDED preceding) as cnt1, sum(amount) OVER (PARTITION BY name ORDER BY proctime RANGE UNBOUNDED preceding) as cnt2 FROM Orders; // 计算最近四条记录的计数及总和(in proctime) SELECT name, count(amount) OVER (PARTITION BY name ORDER BY proctime ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) as cnt1, sum(amount) OVER (PARTITION BY name ORDER BY proctime ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) as cnt2 FROM Orders; // 计算最近60s的计数及总和(in eventtime),基于事件时间处理,事件时间为Orders中的timeattr字段。 SELECT name, count(amount) OVER (PARTITION BY name ORDER BY timeattr RANGE BETWEEN INTERVAL '60' SECOND PRECEDING AND CURRENT ROW) as cnt1, sum(amount) OVER (PARTITION BY name ORDER BY timeattr RANGE BETWEEN INTERVAL '60' SECOND PRECEDING AND CURRENT ROW) as cnt2 FROM Orders;
  • Union/Union ALL/Intersect/Except 语法格式 1 query UNION [ ALL ] | Intersect | Except query 语法说明 UNION返回多个查询结果的并集。 Intersect返回多个查询结果的交集。 Except返回多个查询结果的差集。 注意事项 集合运算是以一定条件将表首尾相接,所以其中每一个SELECT语句返回的列数必须相同,列的类型一定要相同,列名不一定要相同。 UNION默认是去重的,UNION ALL是不去重的。 示例 输出Orders1和Orders2的并集,不包含重复记录。 1 2 SELECT * FROM Orders1 UNION SELECT * FROM Orders2;
  • IN 语法格式 1 2 3 SELECT [ ALL | DISTINCT ] { * | projectItem [, projectItem ]* } FROM tableExpression WHERE column_name IN (value (, value)* ) | query 语法说明 IN操作符允许在where子句中规定多个值。若表达式在给定的表子查询中存在,则返回 true 。 注意事项 子查询表必须由单个列构成,且该列的数据类型需与表达式保持一致。 示例 输出Orders中NewProducts中product的user和amount信息。 1 2 3 4 5 SELECT user, amount FROM Orders WHERE product IN ( SELECT product FROM NewProducts );
  • 表达式GROUP BY 功能描述 按表达式对流进行分组操作。 语法格式 1 2 3 4 SELECT [ ALL | DISTINCT ] { * | projectItem [, projectItem ]* } FROM tableExpression [ WHERE booleanExpression ] [ GROUP BY { groupItem [, groupItem ]* } ] 语法说明 groupItem:可以是单字段,多字段,也可以是字符串函数等调用,不能是聚合函数。 注意事项 无。 示例 先利用substring函数取字段name的子字符串,并按照该子字符串进行分组,返回每个子字符串及对应的记录数。 1 2 SELECT substring(name,6),count(name) FROM student GROUP BY substring(name,6);
  • 按列GROUP BY 功能描述 按列进行分组操作。 语法格式 1 2 3 4 SELECT [ ALL | DISTINCT ] { * | projectItem [, projectItem ]* } FROM tableExpression [ WHERE booleanExpression ] [ GROUP BY { groupItem [, groupItem ]* } ] 语法说明 GROUP BY:按列可分为单列GROUP BY与多列GROUP BY。 单列GROUP BY:指GROUP BY子句中仅包含一列。 多列GROUP BY:指GROUP BY子句中不止一列,查询语句将按照GROUP BY的所有字段分组,所有字段都相同的记录将被放在同一组中。 注意事项 GroupBy在流处理表中会产生更新结果。 示例 根据score及name两个字段对表student进行分组,并返回分组结果。 1 2 SELECT name,score, max(score) FROM student GROUP BY name,score;
  • Grouping sets, Rollup, Cube 功能描述 GROUPING SETS 的 GROUP BY 子句可以生成一个等效于由多个简单 GROUP BY 子句的 UNION ALL 生成的结果集,并且其效率比 GROUP BY 要高。 ROLLUP与CUBE按一定的规则产生多种分组,然后按各种分组统计数据。 CUBE生成的结果集显示了所选列中值的所有组合的聚合。 Rollup生成的结果集显示了所选列中值的某一层次结构的聚合。 语法格式 SELECT [ ALL | DISTINCT ] { * | projectItem [, projectItem ]* } FROM tableExpression [ WHERE booleanExpression ] [ GROUP BY groupingItem] 语法说明 groupingItem:是Grouping sets(columnName [, columnName]*)、Rollup(columnName [, columnName]*)、Cube(columnName [, columnName]*) 注意事项 无。 示例 分别产生基于user和product的结果。 SELECT SUM(amount) FROM Orders GROUP BY GROUPING SETS ((user), (product));
  • DML语句 语法定义 query: values | { select | selectWithoutFrom | query UNION [ ALL ] query | query EXCEPT query | query INTERSECT query } [ ORDER BY orderItem [, orderItem ]* ] [ LIMIT { count | ALL } ] [ OFFSET start { ROW | ROWS } ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY] orderItem: expression [ ASC | DESC ] select: SELECT [ ALL | DISTINCT ] { * | projectItem [, projectItem ]* } FROM tableExpression [ WHERE booleanExpression ] [ GROUP BY { groupItem [, groupItem ]* } ] [ HAVING booleanExpression ] [ WINDOW windowName AS windowSpec [, windowName AS windowSpec ]* ] selectWithoutFrom: SELECT [ ALL | DISTINCT ] { * | projectItem [, projectItem ]* } projectItem: expression [ [ AS ] columnAlias ] | tableAlias . * tableExpression: tableReference [, tableReference ]* | tableExpression [ NATURAL ] [ LEFT | RIGHT | FULL ] JOIN tableExpression [ joinCondition ] joinCondition: ON booleanExpression | USING '(' column [, column ]* ')' tableReference: tablePrimary [ matchRecognize ] [ [ AS ] alias [ '(' columnAlias [, columnAlias ]* ')' ] ] tablePrimary: [ TABLE ] [ [ catalogName . ] schemaName . ] tableName | LATERAL TABLE '(' functionName '(' expression [, expression ]* ')' ')' | UNNEST '(' expression ')' values: VALUES expression [, expression ]* groupItem: expression | '(' ')' | '(' expression [, expression ]* ')' | CUBE '(' expression [, expression ]* ')' | ROLLUP '(' expression [, expression ]* ')' | GROUPING SETS '(' groupItem [, groupItem ]* ')' windowRef: windowName | windowSpec windowSpec: [ windowName ] '(' [ ORDER BY orderItem [, orderItem ]* ] [ PARTITION BY expression [, expression ]* ] [ RANGE numericOrIntervalExpression {PRECEDING} | ROWS numericExpression {PRECEDING} ] ')' matchRecognize: MATCH_RECOGNIZE '(' [ PARTITION BY expression [, expression ]* ] [ ORDER BY orderItem [, orderItem ]* ] [ MEASURES measureColumn [, measureColumn ]* ] [ ONE ROW PER MATCH ] [ AFTER MATCH ( SKIP TO NEXT ROW | SKIP PAST LAST ROW | SKIP TO FIRST variable | SKIP TO LAST variable | SKIP TO variable ) ] PATTERN '(' pattern ')' [ WITHIN intervalLiteral ] DEFINE variable AS condition [, variable AS condition ]* ')' measureColumn: expression AS alias pattern: patternTerm [ '|' patternTerm ]* patternTerm: patternFactor [ patternFactor ]* patternFactor: variable [ patternQuantifier ] patternQuantifier: '*' | '*?' | '+' | '+?' | '?' | '??' | '{' { [ minRepeat ], [ maxRepeat ] } '}' ['?'] | '{' repeat '}'
  • 语法支持的类型 SecMaster SQL语法支持的类型如下: STRING,BOOLEAN,BYTES,DECIMAL,TINYINT,SMALLINT,INTEGER,BIGINT,FLOAT,DOUBLE,DATE,TIME,TIMESTAMP,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL,ARRAY,MULTISET,MAP,ROW。 父主题: SecMaster SQL语法参考
  • 分析语句语法 完整的分析语句语法如下: SELECT [DISTINCT] (* | expression) [AS alias] [, ...] [GROUP BY expression [, ...] [HAVING predicates]] [ORDER BY expression [ASC | DESC] [, ...]] [LIMIT size OFFSET offset] 其中,LIMIT表示指定返回数据的条数。本章节内容将介绍LIMIT语法参数说明及示例。
  • 分析语句语法 完整的分析语句语法如下: SELECT [DISTINCT] (* | expression) [AS alias] [, ...] [GROUP BY expression [, ...] [HAVING predicates]] [ORDER BY expression [ASC | DESC] [, ...]] [LIMIT size OFFSET offset] 其中,ORDER BY表示按字段值排序。本章节内容将介绍ORDER BY语法参数说明及示例。
  • 分析语句语法 完整的分析语句语法如下: SELECT [DISTINCT] (* | expression) [AS alias] [, ...] [GROUP BY expression [, ...] [HAVING predicates]] [ORDER BY expression [ASC | DESC] [, ...]] [LIMIT size OFFSET offset] 其中,HAVING子句用于指定过滤分组结果(GROUP BY)或聚合计算结果的条件。本章节内容将介绍HAVING语法参数说明及示例。
  • 分析语句语法 完整的分析语句语法如下: SELECT [DISTINCT] (* | expression) [AS alias] [, ...] [GROUP BY expression [, ...] [HAVING predicates]] [ORDER BY expression [ASC | DESC] [, ...]] [LIMIT size OFFSET offset] 其中,GROUP BY表示按值分组。本章节内容将介绍GROUP BY语法参数说明及示例。
共100000条