百度日志服务BLS

    SQL语法

    目录

    1.语法支持
    2.运算符
    3.内置函数
    3.1类型转换函数
    3.2聚合函数
    3.3字符串函数
    3.4数学函数
    3.5日期时间函数
    3.6条件函数
    4.附录
    4.1 日期格式
    4.2 关键字

    语法支持

    BLS 支持基础的 SELECT 查询,具体查询语法是

    SELECT
        select_expr [, select_expr] ...
        [FROM subquery [AS] table_id]
        [WHERE where_condition]
        [GROUP BY {col_name | expr}, ... ]
        [HAVING where_condition]
        [ORDER BY {col_name | expr} [ASC | DESC], ...]
        [LIMIT [offset,] row_count]

    其中,where_condition 是一个执行结果为布尔值的条件表达式。不需要子查询的时候不写 FROM 子句。

    字段名大小写敏感,且尽量避免使用关键字,如果使用了关键字要加反引号,例如:`action`。

    运算符

    一元前缀运算

    操作符 示例 描述
    +/- -A 改变参数的符号

    二元运算

    操作符 示例 描述
    + A + B 加法运算
    - A - B 减法运算
    * A * B 乘法运算
    / A / B 除法运算
    % A % B 模数运算,结果是 A 除以 B 的余数

    关系运算

    操作符 示例 描述
    = A = B 如果 A 等于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
    != A != B 如果 A 不等于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
    > A > B 如果 A 大于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
    >= A >= B 如果 A 大于等于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
    < A < B 如果 A 小于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
    <= A <= B 如果 A 小于等于 B,返回 TRUE,否则返回 FALSE。如果 A 与 B 的类型不可比较,返回 NULL
    [NOT] LIKE A LIKE pattern 如果 A [不]符合 pattern,返回 TRUE,否则返回 FALSE
    IS [NOT] NULL A IS NULL 如果 A [不]为 NULL,返回 TRUE,否则返回 FALSE
    IS [NOT] TRUE/FALSE A IS TRUE 如果 A [不]为 TRUE/FALSE,返回 TRUE,否则返回 FALSE

    逻辑运算

    操作符 示例 描述
    [NOT] IN A IN (val1, val2, ...) 如果 A [不]等于 任何一个参数值,返回 TRUE,否则返回 FALSE
    AND A AND B 如果 A 和 B 都为 TRUE,返回 TRUE,否则返回 FALSE。如果 A 或 B 不是布尔类型,返回 NULL
    OR A OR B 如果 A 或 B 为 TRUE,返回 TRUE,否则返回 FALSE。如果 A 或 B 不是布尔类型,返回 NULL
    NOT NOT A 如果 A 为 FALSE,返回 TRUE,否则返回 FALSE。如果 A 不是布尔类型,返回 NULL

    内置函数

    类型转换函数

    函数签名 返回值 描述 示例
    cast(expr as <type>) <type> 将 expr 的值转换成 <type> 类型,<type> 支持 BIGINT, DECIMAL, VARCHAR, TIMESTAMP >select cast("123" as BIGINT)
    123

    聚合函数

    函数签名 返回值 描述 示例
    count(*),count(expr),count(DISTINCT expr) Int 计算符合条件的结果行数 >select count(*)
    10
    sum(col) T 计算元素的和 >select sum(num)
    983
    avg(col) Double 计算元素的平均值 >select avg(num)
    73.14
    max(col) T 计算元素的最大值 >select max(num)
    99
    min(col) T 计算元素的最小值 >select min(num)
    62
    first(col) T 计算元素的首个值 >select first(num)
    87
    last(col) T 计算元素的最后一个值 >select min(num)
    95

    字符串函数

    函数签名 返回值 描述 示例
    reverse(String str) String 返回顺序反转的字符串 >select reverse("hello")
    olleh
    lower(String str) String 返回小写格式字符串 >select lower("fOoBaR")
    foobar
    upper(String str) String 返回大写格式字符串 >select upper("fOoBaR")
    FOOBAR
    capitalize(String str) String 返回所有单词首字母大写格式的字符串 >select upper("fOoBaR")
    FOoBaR
    substring(String str, Int start [, Int len]) String 返回原字符串从 start 位置开始,长度为 len 的子串。start 从 1 开始,支持负数,此时从结尾开始反向计算位置。len 参数不传表示截取到字符串结尾 >select substr("fOoBaR", 2, 4)
    OoBa
    >select substr("fOoBaR", -3, 2)
    Ba
    substr(String str, Int start [, Int len]) String substring() 的别名
    replace(String str, String OLD, String NEW) String 返回 OLD 子串被替换为 NEW 子串的字符串 str >select replace("abcdef", "abc", "cba")
    cbadef
    length(String str) Int 返回字符串的长度 >replace("abcdef", "abc", "cba")
    cbadef
    locate(String substr, String str) Int 返回字符串 str 中 substr 的首个出现位置,如果没有则返回 0 >select locate(".", "3.14")
    2
    position(String substr, String str) Int locate() 的别名
    concat(String A, String B...) String 返回所有参数按照传入顺序拼接成的字符串 >select concat("foo", "bar")
    foobar

    数学函数

    函数签名 返回值 描述 示例
    abs(Double a), abs(Int a) Double/Int 计算绝对值 >select abs(-2)
    2
    sqrt(Double a) Double 计算平方根 >select sqrt(100)
    10
    greatest(T v1, T v2, ...) T 计算参数中的最大值,如果任何一个参数是 Null,则返回 Null >select greatest(1, 3.14, -5)
    3.14
    least(T v1, T v2, ...) T 计算参数中的最小值,如果任何一个参数是 Null,则返回 Null >select least(1, 3.14, -5)
    -5
    rand() Double 返回一个0到1之间的随机数,数据集的每一行得到的随机数不同 >select rand()
    0.3
    ceil(Double a) Int 返回大于等于 a 且最接近 a 的整数 >select ceil(3.14)
    4
    floor(Double a) Int 返回小于等于 a 且最接近 a 的整数 >select floor(3.14)
    3
    log(Double a) Double 计算以2为底的对数值 >select log(32)
    5
    ln(Double a) Double 计算自然对数 >select ln(100)
    4.61512051684126
    pow(Double a, Double p) Double 计算 a 的 p 次方 >select pow(2, 5)
    32

    日期时间函数

    函数签名 返回值 描述 示例
    now() DateTime 返回当前本地时间 >select now()
    2020-01-16T08:30:50Z
    current_timestamp() DateTime now() 的别名
    unix_timestamp([String/DateTime date[, String format]]) Int 将日期时间字符串或 DateTime 类型数值按照 format 格式转换成 Unix timestamp。默认支持 ISO8601 格式,根据字符串中的时区解析。如果根据 format 格式解析,将使用本地时区。 >select unix_timestamp("2019-11-11T11:11:11Z")
    1573470671
    >select unix_timestamp("2019-11-11 11:11:11", "%Y-%m-%d %H:%i:%s")
    1573441871
    from_unixtime(Int unixtime[, String format]) String 将 unixtime(从 1970-01-01 00:00:00 UTC 到现在到秒数)转换成表示本地时间的字符串,默认格式为"1970-01-01 00:00:00",可以通过 format 指定字符串格式。支持的 date_format 请参考附录 >select from_unixtime(0)
    1970-01-01 08:00:00
    >select from_unixtime(unix_timestamp("2019-11-11T11:11:11+08:00"))
    2019-11-11 11:11:11
    str_to_date(String str, String format) DateTime 根据 format 解析日期时间字符串 str >select str_to_date("2019-11-11 11:11:11", "%Y-%m-%d %H:%i:%s")
    2019-11-11T03:11:11Z
    year(String/DateTime date) Int 返回日期 date 的年份 >select year("2019-11-07T09:09:16+08:00")
    2019
    month(String/DateTime date) Int 返回日期 date 的月份 >select year("2019-11-07T09:09:16+08:00")
    11
    day(String/DateTime date) Int dayofmonth() 的别名
    weekday(String/DateTime date) Int 返回日期 date 在一星期中的位置 (0 = 星期一, 1 = 星期二, ... 6 = 星期日) >select weekday("2019-11-07T09:09:16+08:00")
    3
    dayofyear(String/DateTime date) Int 返回日期 date 在一年中的位置,可选值从 1 到 366 >select dayofyear("2019-11-07T09:09:16+08:00")
    311
    dayofmonth(String/DateTime date) Int 返回日期 date 在一个月中的位置 >select dayofmonth("2019-11-07T09:09:16+08:00")
    7
    dayofweek(String/DateTime date) Int 返回日期 date 在一星期中的位置 (1 = 星期日, 2 = 星期一, ... 7 = 星期六) >select dayofweek("2019-11-07T09:09:16+08:00")
    5

    条件函数

    函数签名 返回值 描述 示例
    if(Boolean testCondition, T valueTrue, T valueFalseOrNull) T 如果测试条件为 true,返回 ValueTrue,否则返回 ValueFalseOrNull >select if(2>1, 1, 0)
    1
    nullif(T a, T b) T 如果 a = b,返回 Null,否则返回 a >select nullif(1, 1)
    null
    coalesce(T v1, T v2, ...) T 返回第一个不是 Null 的值,如果参数都是 Null,返回 Null >select coalesce(null, 0, false, 1)
    0
    CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END T 如果 a = b,返回 c;如果 a = d,返回 e;否则返回 f >select case substring("abc", 1, 1) when "a" then "a" when "b" then "b" else "c" end
    a
    CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END T 如果 a = true,返回 b;如果 c = true,返回 d;否则返回 e >select case when substring("abc", 1, 1) = "a" then "a" when 2 > 1 then "b" else "c" end
    a

    附录

    日期格式

    时间函数支持的 date_format

    占位符 描述
    %a Abbreviated weekday name (Sun..Sat)
    %b Abbreviated month name (Jan..Dec)
    %c Month, numeric (0..12)
    %D Day of the month with English suffix (0th, 1st, 2nd, 3rd, …)
    %d Day of the month, numeric (00..31)
    %e Day of the month, numeric (0..31)
    %f Microseconds (000000..999999)
    %H Hour (00..23)
    %h Hour (01..12)
    %I Hour (01..12)
    %i Minutes, numeric (00..59)
    %j Day of year (001..366)
    %k Hour (0..23)
    %l Hour (1..12)
    %M Month name (January..December)
    %m Month, numeric (00..12)
    %p AM or PM
    %r Time, 12-hour (hh:mm:ss followed by AM or PM)
    %S Seconds (00..59)
    %s Seconds (00..59)
    %T Time, 24-hour (hh:mm:ss)
    %W Weekday name (Sunday..Saturday)
    %w Day of the week (0=Sunday..6=Saturday)
    %Y Year, numeric, four digits
    %y Year, numeric (two digits)
    %% A literal % character

    关键字

    #

    _binary
    _utf8mb4

    A - F

    accessible action add against all alter analyze and as asc asensitive auto_increment before begin between bigint binary bit blob bool boolean both by call cascade case cast change char character charset check collate collation column columns comment commit committed condition constraint continue convert create cross current_date current_time current_timestamp current_user cursor database databases date datetime day_hour day_microsecond day_minute day_second dec decimal declare default delayed delete desc describe descriptor deterministic distinct distinctrow div double drop duplicate each else elseif enclosed end engines enum escape escaped exists exit expansion explain false fetch fields float float4 float8 flush for force foreign from full fulltext

    G - N

    generated geometry geometrycollection get global grant group group_concat having high_priority hour_microsecond hour_minute hour_second if ignore in index infile inner inout insensitive insert int int1 int2 int3 int4 int8 integer interval into io_after_gtids is isolation iterate join json key key_block_size keys kill language last_insert_id leading leave left less level like limit linear lines linestring load localtime localtimestamp lock long longblob longtext loop low_priority master_bind match maxvalue mediumblob mediumint mediumtext middleint minute_microsecond minute_second mod mode modifies multilinestring multipoint multipolygon names natural nchar next no no_write_to_binlog not null numeric

    O - S

    off offset on only optimize optimizer_costs option optionally or order out outer outfile partition plugins point polygon precision primary procedure processlist query read read_write reads real references regexp release rename reorganize repair repeat repeatable replace require resignal restrict return revoke right rlike rollback schema schemas second_microsecond select sensitive separator serializable session set share show signal signed smallint spatial specific sql sql_big_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting status stored straight_join stream string substr substring

    T - Z

    table tables terminated text than then time timestamp timestampadd timestampdiff tinyblob tinyint tinytext to trailing transaction trigger true truncate uncommitted undo union unique unlock unsigned update usage use using utc_date utc_time utc_timestamp values varbinary varchar varcharacter variables varying view vindex vindexes virtual vitess_keyspaces vitess_shards vitess_tablets vitess_target vschema vschema_tables warnings when where while with write xor year year_month zerofill

    上一篇
    日志查询
    下一篇
    检索语法