Google bigquery python客户端库SQL选择正则表达式错误

时间:2017-01-14 10:11:37

标签: python sql regex google-bigquery

我正在尝试使用this blog post中的正则表达式查询google bigquery表。在这里,稍作修改:

pd\.([^”,\.\(\,\`) \’:\[\]\/\\={}]*)

regex101 example of its usage

然而,它不适用于我的google bigquery python客户端SQL查询:

query_results = client.run_sync_query(
"""
SELECT
  REGEXP_EXTRACT(SPLIT(content, '\n'),
                 r'pd\.([^”,\.\(\,\`) \’:\[\]\/\\={}]*)')
FROM
  [fh-bigquery:github_extracts.contents_py]
LIMIT 10
""")

query_results.run()

data = query_results.fetch_data()
data
  

BadRequest:BadRequest:400无法解析正则表达式“pd。([^”,。(\,`)\':[] / \ = {}] *)“:无效的转义序列:\'

1 个答案:

答案 0 :(得分:2)

这里的问题是BigQuery使用re2库进行正则表达式操作。

如果你尝试使用相同的正则表达式但使用 golang 风格,你会看到完全相同的error(golang也使用re2)。

所以,如果您只是删除了'字符的转义,那么您已经拥有它可以为您工作(因为我在这里测试它似乎正常工作)。

您可能会发现另一个问题是SPLIT操作的结果是ARRAY。这意味着BigQuery不会处理您的查询,说明REGEXP_EXTRACT的签名不允许ARRAY<STRING>作为输入。您可以改为使用REGEXP_REPLACE

"""
SELECT
  REGEXP_EXTRACT(REGEXP_REPLACE(content, r'.*(\\n)', ''),
                 r'pd\.([^”,\.\(\,\`) ’:\[\]\/\\={}]*)')
FROM
  [fh-bigquery:github_extracts.contents_py]
LIMIT 10
"""

在此操作中,字符“\ n”将替换为“”,结果为STRING