DLA SQL分析函数:SQL语句审计与分析的利器
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语句审计与分析的利器相关推荐
- oracle 分页语句效率高,Oracle 10g SQL分页查询语句和效率分析
下面统计一下这张表中的记录数: SQL> select count(*) from customers; COUNT(*) ---------- 55500 已用时间: 00: 00: 00. ...
- DRDS SQL 审计与分析——全面洞察 SQL 之利器
背景 数据库存储着系统的核心数据,其安全方面的问题在传统环境中已经成为泄漏和被篡改的重要根源.而在云端,数据库所面临的威胁被进一步的放大.因此,对云数据库的操作行为尤其是全量 SQL 执行记录的审计日 ...
- SQL语句优化技术分析
SQL语句优化技术分析 操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...
- mysql 执行顺序 SQL语句执行顺序分析
最近在做一个数据库的大作业,算是复习了下MySql里面比较复杂的一些语句的用法,如Left Join之类的.在这里就不对具体语法进行记录了,希望能在以后经常用到,而不是隔好长时间用一次.在这里就记录下 ...
- 常见SQL语句的加锁分析
这篇博客将对一些常见的 SQL 语句进行加锁分析,看看我们平时执行的那些 SQL 都会加什么锁.只有对我们所写的 SQL 语句加锁过程了如指掌,才能在遇到死锁问题时倒推出是什么锁导致的问题.在前面的博 ...
- MYSQL死锁之路 - 常见SQL语句的加锁分析
这篇博客将对一些常见的 SQL 语句进行加锁分析,看看我们平时执行的那些 SQL 都会加什么锁.只有对我们所写的 SQL 语句加锁过程了如指掌,才能在遇到死锁问题时倒推出是什么锁导致的问题.在前面的博 ...
- 常见 SQL 语句的加锁分析
这篇博客将对一些常见的 SQL 语句进行加锁分析,看看我们平时执行的那些 SQL 都会加什么锁.只有对我们所写的 SQL 语句加锁过程了如指掌,才能在遇到死锁问题时倒推出是什么锁导致的问题.在前面的博 ...
- MYSQL解决死锁之路 - 常见 SQL 语句的加锁分析
目录 前言 一.基本的加锁规则 二.简单 SQL 的加锁分析 2.1 聚簇索引,查询命中 2.2 聚簇索引,查询未命中 2.3 二级唯一索引,查询命中 2.4 二级唯一索引,查询未命中 2.5 二级非 ...
- Oracle之SQL分析函数
这个做统计分析的时候就用的比较多了,咱们来看一下ORACLE的分析函数,就是OVER函数,OVER PARTITION BYOVER PARTITION BY ORDER BY,还有row_numbe ...
最新文章
- 判断二叉树是否为平衡二叉树
- Permutations I II leetcode
- leetcode221 Maximal Square
- 20140328项目日志
- Verilog inout 双向口使用和仿真
- 初学C语言,你的“行囊”需要准备什么呢?
- Ocelot.JwtAuthorize:一个基于网关的Jwt验证包
- LeetCode 1026. 节点与其祖先之间的最大差值(二叉树DFS)
- I-EIM分享一套局域网通讯源码
- Docker创建一个镜像
- java程序片的三种元素符号是什么_JAVA试题及答案(精致)
- 【Android开发日记】妙用 RelativeLayout 实现3 段布局
- 移动磁盘提示使用驱动器中的光盘之前需要格式化文件怎么找回
- 解决办法:error LNK2005: void * __cdecl operator new(unsigned int) 已经在 LIBCMTD.lib(new.obj) 中定义
- 计算机游戏蜘蛛纸牌如何还原,经典PC纸牌游戏空当接龙、蜘蛛纸牌等登陆iOS/Android...
- 非线性视频编辑软件百科全书式介绍
- plc和变频器通讯接线图详解
- 一文读懂数据脱敏技术在智能汽车中的应用
- python刷新腾讯云cdn
- 授权(authorization)的设计思路
热门文章
- HTTP请求中的请求字段
- delphi 查找指定后缀名的函数_Excel明星函数系列2:掌握这5类VLOOKUP查询方法,搞定查询...
- EXCEL 将选中列改为只读
- 微会显示服务器当前线路忙,免费电话之争:触宝电话/微会谁更强
- 20190824:(leetcode习题)报数
- linux处理除零异常,linux – 如何在x86程序集中使用中断来触发被零除错误异常?...
- c语言输入一个字符 对其进行归类,计算机二级C语言改错题归类 - 图文
- hive和hadoop关系
- hbase的数据结构的简单总结
- ArrayList<object> list 转org.json.JSONArray