1. 简介

Data Lake Analytics(https://www.aliyun.com/product/datalakeanalytics)最新release一组SQL内置函数,用来进行SQL语句的分析、信息提取,方便用户对SQL语句进行语法层面的审计、分析,可以应用于很多安全、数据库日志分析等场景。参考DLA(Data Lake Analytics)之前的文档,只要您的SQL语句文本保存在DLA支持的数据源系统中,就能使用DLA的SQL分析函数,方便、快捷的进行SQL语句的审计和分析,或者基于此构建相关应用程序和系统。

前提条件,您的SQL语句文本已经作为一个字符串、文本字段存储在DLA支持的数据源中,或者在统一格式的日志文件中,日志文件放到OSS中(应用自己上传、开源日志工具上传、日志服务投递(https://help.aliyun.com/document_detail/107980.html)、Datahub投递等),然后采用DLA进行SQL分析。

2. SQL分析函数详解

所有提供的SQL分析函数都是scalar标量函数。SQL分析函数支持多种SQL方言,默认SQL方言是mysql。

SQL方言
mysql
postgresql
oracle
db2
sqlserver
hive
odps

支持的函数列表:

Name Description
sql_export_columns 提取SQL语句中所有出现的列
sql_export_functions 提取SQL语句中所有出现的函数
sql_export_predicate_columns 提取SQL语句中所有出现的谓词条件表达式涉及的列
sql_export_predicates 提取SQL语句中所有出现的谓词条件表达式
sql_export_select_list_columns 提取SQL语句中SELECT子句表达式中出现的列(包括子查询)
sql_export_tables 提取SQL语句中所有出现的表
sql_format 对SQL语句进行格式化
sql_params 提取SQL语句中所有的literal值
sql_pattern 提取SQL语句参数化后的SQL pattern,literal用?代替
sql_pattern_hash 提取sqlText的SQL语句参数化后的SQL pattern,并生成hash值
sql_syntax_check 对sqlText进行语法检查

2.1 sql_export_columns

函数调用形式:

  • sql_export_columns(sqlText)
  • sql_export_columns(sqlText, dbType)
  • sql_export_columns(sqlText, dbType, throwError)

参数说明:

参数名 类型 说明
sqlText VARCHAR 必选
dbType VARCHAR 可选。SQL方言,默认为mysql
throwError BOOLEAN 可选。true时,遇到非法SQL抛出异常;false时,遇到非法SQL不抛出异常,返回null

返回值:

类型 说明
VARCHAR sqlText的SQL语句中所有出现的列,用逗号分隔,列所属的表会进行关联推导,如果没有找到明确的表,则为UNKNOWN

示例:

SELECT sql_export_columns(a.sql_text)
FROM (
SELECT 'SELECT   s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM     part, supplier, partsupp, nation, region
WHERE    p_partkey = ps_partkey
AND      s_suppkey = ps_suppkey
AND      p_size = 35
AND      p_type LIKE ''%NICKEL''
AND      s_nationkey = n_nationkey
AND      n_regionkey = r_regionkey
AND      r_name = ''MIDDLE EAST''
AND      ps_supplycost IN ( SELECT min(ps_supplycost) FROM   partsupp, supplier, nation, region WHERE  s_suppkey = ps_suppkey AND    s_nationkey = n_nationkey AND    n_regionkey = r_regionkey AND    r_name = ''MIDDLE EAST'' )
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT    100;' AS sql_text
) a;+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sql_export_columns(a.sql_text)                                                                                                                                                                                                                                                                                                                  |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| UNKNOWN.s_acctbal,UNKNOWN.s_name,UNKNOWN.n_name,UNKNOWN.p_partkey,UNKNOWN.p_mfgr,UNKNOWN.s_address,UNKNOWN.s_phone,UNKNOWN.s_comment,UNKNOWN.ps_partkey,UNKNOWN.s_suppkey,UNKNOWN.ps_suppkey,UNKNOWN.p_size,UNKNOWN.p_type,UNKNOWN.s_nationkey,UNKNOWN.n_nationkey,UNKNOWN.n_regionkey,UNKNOWN.r_regionkey,UNKNOWN.r_name,UNKNOWN.ps_supplycost |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

2.2 sql_export_functions

函数调用形式:

  • sql_export_functions(sqlText)
  • sql_export_functions(sqlText, dbType)
  • sql_export_functions(sqlText, dbType, throwError)

参数说明:

参数名 类型 说明
sqlText VARCHAR 必选
dbType VARCHAR 可选。SQL方言,默认为mysql
throwError BOOLEAN 可选。true时,遇到非法SQL抛出异常;false时,遇到非法SQL不抛出异常,返回null

返回值:

类型 说明
VARCHAR sqlText的SQL语句中所有出现的函数名,用逗号分隔,列所属的表会进行关联推导,如果没有找到明确的表,则为UNKNOWN

示例:

SELECT sql_export_functions(a.sql_text)
FROM (
SELECT 'SELECT   s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM     part, supplier, partsupp, nation, region
WHERE    p_partkey = ps_partkey
AND      s_suppkey = ps_suppkey
AND      p_size = 35
AND      p_type LIKE ''%NICKEL''
AND      s_nationkey = n_nationkey
AND      n_regionkey = r_regionkey
AND      r_name = ''MIDDLE EAST''
AND      ps_supplycost IN ( SELECT min(ps_supplycost) FROM   partsupp, supplier, nation, region WHERE  s_suppkey = ps_suppkey AND    s_nationkey = n_nationkey AND    n_regionkey = r_regionkey AND    r_name = ''MIDDLE EAST'' )
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT    100;' AS sql_text
) a;+----------------------------------+
| sql_export_functions(a.sql_text) |
+----------------------------------+
| min                              |
+----------------------------------+

2.3 sql_export_predicate_columns

函数调用形式:

  • sql_export_predicate_columns(sqlText)
  • sql_export_predicate_columns(sqlText, dbType)
  • sql_export_predicate_columns(sqlText, dbType, throwError)

参数说明:

参数名 类型 说明
sqlText VARCHAR 必选
dbType VARCHAR 可选。SQL方言,默认为mysql
throwError BOOLEAN 可选。true时,遇到非法SQL抛出异常;false时,遇到非法SQL不抛出异常,返回null

返回值:

类型 说明
VARCHAR sqlText的SQL语句中出现在谓词条件表达式中的列名,用逗号分隔,列所属的表会进行关联推导,如果没有找到明确的表,则为UNKNOWN

示例:

SELECT sql_export_predicate_columns(a.sql_text)
FROM (
SELECT 'SELECT   s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM     part, supplier, partsupp, nation, region
WHERE    p_partkey = ps_partkey
AND      s_suppkey = ps_suppkey
AND      p_size = 35
AND      p_type LIKE ''%NICKEL''
AND      s_nationkey = n_nationkey
AND      n_regionkey = r_regionkey
AND      r_name = ''MIDDLE EAST''
AND      ps_supplycost IN ( SELECT min(ps_supplycost) FROM   partsupp, supplier, nation, region WHERE  s_suppkey = ps_suppkey AND    s_nationkey = n_nationkey AND    n_regionkey = r_regionkey AND    r_name = ''MIDDLE EAST'' )
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT    100;' AS sql_text
) a;+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sql_export_predicate_columns(a.sql_text)                                                                                                                                                                                     |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| UNKNOWN.p_partkey,UNKNOWN.ps_partkey,UNKNOWN.s_suppkey,UNKNOWN.ps_suppkey,UNKNOWN.p_size,UNKNOWN.p_type,UNKNOWN.s_nationkey,UNKNOWN.n_nationkey,UNKNOWN.n_regionkey,UNKNOWN.r_regionkey,UNKNOWN.r_name,UNKNOWN.ps_supplycost |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

2.4 sql_export_predicates

函数调用形式:

  • sql_export_predicates(sqlText)
  • sql_export_predicates(sqlText, dbType)
  • sql_export_predicates(sqlText, dbType, compactValues)
  • sql_export_predicates(sqlText, dbType, compactValues, throwError)

参数说明:

参数名 类型 说明
sqlText VARCHAR 必选
dbType VARCHAR 可选。SQL方言,默认为mysql
compactValues BOOLEAN 可选。true时,谓词条件中值以数组的形式出现在返回值中
throwError BOOLEAN 可选。true时,遇到非法SQL抛出异常;false时,遇到非法SQL不抛出异常,返回null

返回值:

类型 说明
VARCHAR sqlText的SQL语句中所有出现的谓词条件表达式元素数组,用逗号分隔,列所属的表会进行关联推导,如果没有找到明确的表,则为UNKNOWN

示例:

SELECT sql_export_predicates(a.sql_text, 'mysql', true)
FROM (
SELECT 'SELECT   s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM     part, supplier, partsupp, nation, region
WHERE    p_partkey = ps_partkey
AND      s_suppkey = ps_suppkey
AND      p_size = 35
AND      p_type LIKE ''%NICKEL''
AND      s_nationkey = n_nationkey
AND      n_regionkey = r_regionkey
AND      r_name = ''MIDDLE EAST''
AND      ps_supplycost IN ( SELECT min(ps_supplycost) FROM   partsupp, supplier, nation, region WHERE  s_suppkey = ps_suppkey AND    s_nationkey = n_nationkey AND    n_regionkey = r_regionkey AND    r_name = ''MIDDLE EAST'' )
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT    100;' AS sql_text
) a;+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sql_export_predicates(a.sql_text)                                                                                                                                                                                                                                                                                                                                                                                                                  |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [["UNKNOWN","p_partkey","=",null],["UNKNOWN","ps_partkey","=",null],["UNKNOWN","s_suppkey","=",null],["UNKNOWN","ps_suppkey","=",null],["UNKNOWN","p_size","=",35],["UNKNOWN","p_type","LIKE","%NICKEL"],["UNKNOWN","s_nationkey","=",null],["UNKNOWN","n_nationkey","=",null],["UNKNOWN","n_regionkey","=",null],["UNKNOWN","r_regionkey","=",null],["UNKNOWN","r_name","=",["MIDDLE EAST","MIDDLE EAST"]],["UNKNOWN","ps_supplycost","IN",null]] |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

2.5 sql_export_select_list_columns

函数调用形式:

  • sql_export_select_list_columns(sqlText)
  • sql_export_select_list_columns(sqlText, dbType)
  • sql_export_select_list_columns(sqlText, dbType, throwError)

参数说明:

参数名 类型 说明
sqlText VARCHAR 必选
dbType VARCHAR 可选。SQL方言,默认为mysql
throwError BOOLEAN 可选。true时,遇到非法SQL抛出异常;false时,遇到非法SQL不抛出异常,返回null

返回值:

类型 说明
VARCHAR sqlText的SQL语句中SELECT子句返回列中出现的列名列表(包括子查询),用逗号分隔,列所属的表会进行关联推导,如果没有找到明确的表,则为UNKNOWN

示例:

SELECT sql_export_select_list_columns(a.sql_text)
FROM (
SELECT 'SELECT   s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM     part, supplier, partsupp, nation, region
WHERE    p_partkey = ps_partkey
AND      s_suppkey = ps_suppkey
AND      p_size = 35
AND      p_type LIKE ''%NICKEL''
AND      s_nationkey = n_nationkey
AND      n_regionkey = r_regionkey
AND      r_name = ''MIDDLE EAST''
AND      ps_supplycost IN ( SELECT min(ps_supplycost) FROM   partsupp, supplier, nation, region WHERE  s_suppkey = ps_suppkey AND    s_nationkey = n_nationkey AND    n_regionkey = r_regionkey AND    r_name = ''MIDDLE EAST'' )
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT    100;' AS sql_text
) a;+------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sql_export_select_list_columns(a.sql_text)                                                                                                                 |
+------------------------------------------------------------------------------------------------------------------------------------------------------------+
| UNKNOWN.s_acctbal,UNKNOWN.s_name,UNKNOWN.n_name,UNKNOWN.p_partkey,UNKNOWN.p_mfgr,UNKNOWN.s_address,UNKNOWN.s_phone,UNKNOWN.s_comment,UNKNOWN.ps_supplycost |
+------------------------------------------------------------------------------------------------------------------------------------------------------------+

2.6 sql_export_tables

函数调用形式:

  • sql_export_tables(sqlText)
  • sql_export_tables(sqlText, dbType)
  • sql_export_tables(sqlText, dbType, throwError)

参数说明:

参数名 类型 说明
sqlText VARCHAR 必选
dbType VARCHAR 可选。SQL方言,默认为mysql
throwError BOOLEAN 可选。true时,遇到非法SQL抛出异常;false时,遇到非法SQL不抛出异常,返回null

返回值:

类型 说明
VARCHAR sqlText的SQL语句中所有出现的表名,用逗号分隔

示例:

SELECT sql_export_tables(a.sql_text)
FROM (
SELECT 'SELECT   s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM     part, supplier, partsupp, nation, region
WHERE    p_partkey = ps_partkey
AND      s_suppkey = ps_suppkey
AND      p_size = 35
AND      p_type LIKE ''%NICKEL''
AND      s_nationkey = n_nationkey
AND      n_regionkey = r_regionkey
AND      r_name = ''MIDDLE EAST''
AND      ps_supplycost IN ( SELECT min(ps_supplycost) FROM   partsupp, supplier, nation, region WHERE  s_suppkey = ps_suppkey AND    s_nationkey = n_nationkey AND    n_regionkey = r_regionkey AND    r_name = ''MIDDLE EAST'' )
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT    100;' AS sql_text
) a;+--------------------------------------+
| sql_export_tables(a.sql_text)        |
+--------------------------------------+
| part,supplier,partsupp,nation,region |
+--------------------------------------+

2.7 sql_format

函数调用形式:

  • sql_format(sqlText)
  • sql_format(sqlText, dbType)
  • sql_format(sqlText, dbType, throwError)

参数说明:

参数名 类型 说明
sqlText VARCHAR 必选
dbType VARCHAR 可选。SQL方言,默认为mysql
throwError BOOLEAN 可选。true时,遇到非法SQL抛出异常;false时,遇到非法SQL不抛出异常,返回null

返回值:

类型 说明
VARCHAR 格式化sqlText的SQL语句

示例:

SELECT sql_format(a.sql_text)
FROM (
SELECT 'SELECT   s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM     part, supplier, partsupp, nation, region
WHERE    p_partkey = ps_partkey
AND      s_suppkey = ps_suppkey
AND      p_size = 35
AND      p_type LIKE ''%NICKEL''
AND      s_nationkey = n_nationkey
AND      n_regionkey = r_regionkey
AND      r_name = ''MIDDLE EAST''
AND      ps_supplycost IN ( SELECT min(ps_supplycost) FROM   partsupp, supplier, nation, region WHERE  s_suppkey = ps_suppkey AND    s_nationkey = n_nationkey AND    n_regionkey = r_regionkey AND    r_name = ''MIDDLE EAST'' )
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT    100;' AS sql_text
) a;+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sql_format(a.sql_text)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| SELECT s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM part, supplier, partsupp, nation, region
WHERE p_partkey = ps_partkeyAND s_suppkey = ps_suppkeyAND p_size = 35AND p_type LIKE '%NICKEL'AND s_nationkey = n_nationkeyAND n_regionkey = r_regionkeyAND r_name = 'MIDDLE EAST'AND ps_supplycost IN (SELECT min(ps_supplycost)FROM partsupp, supplier, nation, regionWHERE s_suppkey = ps_suppkeyAND s_nationkey = n_nationkeyAND n_regionkey = r_regionkeyAND r_name = 'MIDDLE EAST')
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT 100; |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

2.8 sql_params

函数调用形式:

  • sql_params(sqlText)
  • sql_params(sqlText, dbType)
  • sql_params(sqlText, dbType, throwError)

参数说明:

参数名 类型 说明
sqlText VARCHAR 必选
dbType VARCHAR 可选。SQL方言,默认为mysql
throwError BOOLEAN 可选。true时,遇到非法SQL抛出异常;false时,遇到非法SQL不抛出异常,返回null

返回值:

类型 说明
VARCHAR 提取sqlText的SQL语句中的literal值

示例:

SELECT sql_params(a.sql_text)
FROM (
SELECT 'SELECT   s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM     part, supplier, partsupp, nation, region
WHERE    p_partkey = ps_partkey
AND      s_suppkey = ps_suppkey
AND      p_size = 35
AND      p_type LIKE ''%NICKEL''
AND      s_nationkey = n_nationkey
AND      n_regionkey = r_regionkey
AND      r_name = ''MIDDLE EAST''
AND      ps_supplycost IN ( SELECT min(ps_supplycost) FROM   partsupp, supplier, nation, region WHERE  s_suppkey = ps_suppkey AND    s_nationkey = n_nationkey AND    n_regionkey = r_regionkey AND    r_name = ''MIDDLE EAST'' )
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT    100;' AS sql_text
) a;+------------------------------------------------+
| sql_params(a.sql_text)                         |
+------------------------------------------------+
| [35,"%NICKEL","MIDDLE EAST","MIDDLE EAST",100] |
+------------------------------------------------+

2.10 sql_pattern

函数调用形式:

  • sql_pattern(sqlText)
  • sql_pattern(sqlText, dbType)
  • sql_pattern(sqlText, dbType, throwError)

参数说明:

参数名 类型 说明
sqlText VARCHAR 必选
dbType VARCHAR 可选。SQL方言,默认为mysql
throwError BOOLEAN 可选。true时,遇到非法SQL抛出异常;false时,遇到非法SQL不抛出异常,返回null

返回值:

类型 说明
VARCHAR 提取sqlText的SQL语句参数化后的SQL pattern, literal值换成?

示例:

SELECT sql_pattern(a.sql_text)
FROM (
SELECT 'SELECT   s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM     part, supplier, partsupp, nation, region
WHERE    p_partkey = ps_partkey
AND      s_suppkey = ps_suppkey
AND      p_size = 35
AND      p_type LIKE ''%NICKEL''
AND      s_nationkey = n_nationkey
AND      n_regionkey = r_regionkey
AND      r_name = ''MIDDLE EAST''
AND      ps_supplycost IN ( SELECT min(ps_supplycost) FROM   partsupp, supplier, nation, region WHERE  s_suppkey = ps_suppkey AND    s_nationkey = n_nationkey AND    n_regionkey = r_regionkey AND    r_name = ''MIDDLE EAST'' )
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT    100;' AS sql_text
) a;+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sql_pattern(a.sql_text)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| SELECT s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM part, supplier, partsupp, nation, region
WHERE p_partkey = ps_partkeyAND s_suppkey = ps_suppkeyAND p_size = ?AND p_type LIKE ?AND s_nationkey = n_nationkeyAND n_regionkey = r_regionkeyAND r_name = ?AND ps_supplycost IN (SELECT min(ps_supplycost)FROM partsupp, supplier, nation, regionWHERE s_suppkey = ps_suppkeyAND s_nationkey = n_nationkeyAND n_regionkey = r_regionkeyAND r_name = ?)
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT ?; |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

2.11 sql_pattern_hash

函数调用形式:

  • sql_pattern_hash(sqlText)
  • sql_pattern_hash(sqlText, dbType)
  • sql_pattern_hash(sqlText, dbType, throwError)

参数说明:

参数名 类型 说明
sqlText VARCHAR 必选
dbType VARCHAR 可选。SQL方言,默认为mysql
throwError BOOLEAN 可选。true时,遇到非法SQL抛出异常;false时,遇到非法SQL不抛出异常,返回null

返回值:

类型 说明
VARCHAR 提取sqlText的SQL语句参数化后的SQL pattern,并生成hash值

示例:

SELECT sql_pattern_hash(a.sql_text)
FROM (
SELECT 'SELECT   s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM     part, supplier, partsupp, nation, region
WHERE    p_partkey = ps_partkey
AND      s_suppkey = ps_suppkey
AND      p_size = 35
AND      p_type LIKE ''%NICKEL''
AND      s_nationkey = n_nationkey
AND      n_regionkey = r_regionkey
AND      r_name = ''MIDDLE EAST''
AND      ps_supplycost IN ( SELECT min(ps_supplycost) FROM   partsupp, supplier, nation, region WHERE  s_suppkey = ps_suppkey AND    s_nationkey = n_nationkey AND    n_regionkey = r_regionkey AND    r_name = ''MIDDLE EAST'' )
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT    100;' AS sql_text
) a;+------------------------------+
| sql_pattern_hash(a.sql_text) |
+------------------------------+
|           925870115679910184 |
+------------------------------+

2.12 sql_syntax_check

函数调用形式:

  • sql_syntax_check(sqlText)
  • sql_syntax_check(sqlText, dbType)
  • sql_syntax_check(sqlText, dbType, throwError)

参数说明:

参数名 类型 说明
sqlText VARCHAR 必选
dbType VARCHAR 可选。SQL方言,默认为mysql
throwError BOOLEAN 可选。true时,遇到非法SQL抛出异常;false时,遇到非法SQL不抛出异常,返回null

返回值:

类型 说明
BOOLEAN 对sqlText进行语法检查,1表示正确,0表示错误

示例:

SELECT sql_syntax_check(a.sql_text)
FROM (
SELECT 'SELECT   s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
FROM     part, supplier, partsupp, nation, region
WHERE    p_partkey = ps_partkey
AND      s_suppkey = ps_suppkey
AND      p_size = 35
AND      p_type LIKE ''%NICKEL''
AND      s_nationkey = n_nationkey
AND      n_regionkey = r_regionkey
AND      r_name = ''MIDDLE EAST''
AND      ps_supplycost IN ( SELECT min(ps_supplycost) FROM   partsupp, supplier, nation, region WHERE  s_suppkey = ps_suppkey AND    s_nationkey = n_nationkey AND    n_regionkey = r_regionkey AND    r_name = ''MIDDLE EAST'' )
ORDER BY s_acctbal DESC, n_name, s_name, p_partkey
LIMIT    100;' AS sql_text
) a;+------------------------------+
| sql_syntax_check(a.sql_text) |
+------------------------------+
|                            1 |
+------------------------------+

DLA SQL分析函数:SQL语句审计与分析的利器相关推荐

  1. oracle 分页语句效率高,Oracle 10g SQL分页查询语句和效率分析

    下面统计一下这张表中的记录数: SQL> select count(*) from customers; COUNT(*) ---------- 55500 已用时间:  00: 00: 00. ...

  2. DRDS SQL 审计与分析——全面洞察 SQL 之利器

    背景 数据库存储着系统的核心数据,其安全方面的问题在传统环境中已经成为泄漏和被篡改的重要根源.而在云端,数据库所面临的威胁被进一步的放大.因此,对云数据库的操作行为尤其是全量 SQL 执行记录的审计日 ...

  3. SQL语句优化技术分析

    SQL语句优化技术分析 操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...

  4. mysql 执行顺序 SQL语句执行顺序分析

    最近在做一个数据库的大作业,算是复习了下MySql里面比较复杂的一些语句的用法,如Left Join之类的.在这里就不对具体语法进行记录了,希望能在以后经常用到,而不是隔好长时间用一次.在这里就记录下 ...

  5. 常见SQL语句的加锁分析

    这篇博客将对一些常见的 SQL 语句进行加锁分析,看看我们平时执行的那些 SQL 都会加什么锁.只有对我们所写的 SQL 语句加锁过程了如指掌,才能在遇到死锁问题时倒推出是什么锁导致的问题.在前面的博 ...

  6. MYSQL死锁之路 - 常见SQL语句的加锁分析

    这篇博客将对一些常见的 SQL 语句进行加锁分析,看看我们平时执行的那些 SQL 都会加什么锁.只有对我们所写的 SQL 语句加锁过程了如指掌,才能在遇到死锁问题时倒推出是什么锁导致的问题.在前面的博 ...

  7. 常见 SQL 语句的加锁分析

    这篇博客将对一些常见的 SQL 语句进行加锁分析,看看我们平时执行的那些 SQL 都会加什么锁.只有对我们所写的 SQL 语句加锁过程了如指掌,才能在遇到死锁问题时倒推出是什么锁导致的问题.在前面的博 ...

  8. MYSQL解决死锁之路 - 常见 SQL 语句的加锁分析

    目录 前言 一.基本的加锁规则 二.简单 SQL 的加锁分析 2.1 聚簇索引,查询命中 2.2 聚簇索引,查询未命中 2.3 二级唯一索引,查询命中 2.4 二级唯一索引,查询未命中 2.5 二级非 ...

  9. Oracle之SQL分析函数

    这个做统计分析的时候就用的比较多了,咱们来看一下ORACLE的分析函数,就是OVER函数,OVER PARTITION BYOVER PARTITION BY ORDER BY,还有row_numbe ...

最新文章

  1. 判断二叉树是否为平衡二叉树
  2. Permutations I II leetcode
  3. leetcode221 Maximal Square
  4. 20140328项目日志
  5. Verilog inout 双向口使用和仿真
  6. 初学C语言,你的“行囊”需要准备什么呢?
  7. Ocelot.JwtAuthorize:一个基于网关的Jwt验证包
  8. LeetCode 1026. 节点与其祖先之间的最大差值(二叉树DFS)
  9. I-EIM分享一套局域网通讯源码
  10. Docker创建一个镜像
  11. java程序片的三种元素符号是什么_JAVA试题及答案(精致)
  12. 【Android开发日记】妙用 RelativeLayout 实现3 段布局
  13. 移动磁盘提示使用驱动器中的光盘之前需要格式化文件怎么找回
  14. 解决办法:error LNK2005: void * __cdecl operator new(unsigned int) 已经在 LIBCMTD.lib(new.obj) 中定义
  15. 计算机游戏蜘蛛纸牌如何还原,经典PC纸牌游戏空当接龙、蜘蛛纸牌等登陆iOS/Android...
  16. 非线性视频编辑软件百科全书式介绍
  17. plc和变频器通讯接线图详解
  18. 一文读懂数据脱敏技术在智能汽车中的应用
  19. python刷新腾讯云cdn
  20. 授权(authorization)的设计思路

热门文章

  1. HTTP请求中的请求字段
  2. delphi 查找指定后缀名的函数_Excel明星函数系列2:掌握这5类VLOOKUP查询方法,搞定查询...
  3. EXCEL 将选中列改为只读
  4. 微会显示服务器当前线路忙,免费电话之争:触宝电话/微会谁更强
  5. 20190824:(leetcode习题)报数
  6. linux处理除零异常,linux – 如何在x86程序集中使用中断来触发被零除错误异常?...
  7. c语言输入一个字符 对其进行归类,计算机二级C语言改错题归类 - 图文
  8. hive和hadoop关系
  9. hbase的数据结构的简单总结
  10. ArrayList<object> list 转org.json.JSONArray