【问题标题】:Google bigquery python client library SQL select regex error谷歌 bigquery python 客户端库 SQL 选择正则表达式错误
【发布时间】:2017-05-29 15:56:50
【问题描述】:

我正在尝试使用来自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.([^”,.(\,`)\':[]/\={}]*)":无效的转义序列:\'

【问题讨论】:

    标签: python sql regex google-bigquery


    【解决方案1】:

    这里的问题是 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

    【讨论】:

    • 干杯@Will,我很欣赏解决方案和解释。 REGEXP_EXTRACT 似乎正在处理数组,但如果我发现该错误,我会试验你的方法。
    猜你喜欢
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多