了解使用REGEX表达式的查询

时间:2018-02-22 19:30:23

标签: sql regex google-bigquery

所以,我正在查看已经离开一段时间的前雇员遗留下来的文件。我理解正则表达式,我只是不知道在这种情况下发生了什么。

TABLE_QUERY(server_logs_abc, 'REGEXP_MATCH(table_id, r"^def_[A-Za-z0-9]{5}_[\d]{8}") and datediff( current_timestamp(), timestamp( regexp_extract(table_id,r"(\d{8})$") ) ) < 30')

还有每日表格看起来像这样

iserver_cogs_abc.def_4J389_20180221
iserver_cogs_abc.def_4J389_20180220
iserver_cogs_abc.def_4J389_20180219
iserver_cogs_abc.def_4J389_20180218

依旧按时间顺序排列。

所以我理解了两个正则表达式。 REGEXP_MATCH的第一个是命名约定:

def_4J389_2018XXXX

(XXXX表示月和日时间码,即0221)

REGEXP_EXTRACT中的第二个正则表达式是8位数的时间码(即20180221

但是当把它放在一起时,这意味着什么呢?此外,领先r的意思是指两个正则表达式部分(即r"^def_[A-Za-z0-9]{5}_[\d]{8}"

1 个答案:

答案 0 :(得分:3)

第二个正则表达式提取表名的YYYYMMDD部分,然后将其转换为时间戳,最后与当前时间戳进行比较,然后DATEDIFF返回这两个时间戳之间的天数

因此,他们一起返回仅返回与第一个正则表达式匹配的最后30天的表

r开始 - 当用作字符串的前缀时 - 它使得它被称为原始字符串,在正则表达式中广泛使用。例如 - 您可以使用两个反斜杠转义“\”,“_”或“%”。例如, ”\%”。如果使用原始字符串,则只需要一个反斜杠。例如,r“\%” 我建议你google raw / literal字符串以获取更多关于此

的详细信息