【发布时间】:2018-06-29 10:37:17
【问题描述】:
我在 Google BigQuery 中有一个查询,它在 BigQuery Web-UI(我用于测试)中运行良好,但在 Python/Pandas 中运行时无法返回任何结果。
BigQuery 网络用户界面:
SELECT COUNT(foo) AS Foo FROM `dataset.table` WHERE
REGEXP_CONTAINS(LOWER(title),r'(\b(bar)\b)')
返回:
Row Foo
1 4087
在 Python / Pandas 中:
import pandas as pd
project_id = 'some_id'
query = """SELECT COUNT(foo) AS Foo FROM `dataset.table` WHERE
REGEXP_CONTAINS(LOWER(title),r'(\b(bar)\b)')"""
df=pd.read_gbq(query, project_id, dialect='standard')
返回:
print(df)
Foo
0 0
到目前为止,这不是我使用的最复杂的正则表达式查询,而且到目前为止,使用 Web-UI 来测试查询就像一个魅力。
知道我在这里做错了什么吗?
---编辑---
我能够使用public Shakespeare dataset 重新创建问题,我将其复制到我现有的项目中作为'sample:shakespeare_copy' 以避免可能的身份验证问题。
GBQ 网页界面:
SELECT COUNT(word_count) AS Foo FROM `bigquery-public-
data.samples.shakespeare` WHERE
REGEXP_CONTAINS(LOWER(corpus),r'(\b(sonnets)\b)')
返回:
Row Foo
1 3677
Python / 熊猫:
import pandas as pd
project_id = 'some_id'
query="""SELECT COUNT(word_count) AS Foo FROM sample.shakespeare_copy
WHERE REGEXP_CONTAINS(LOWER(corpus),r'(\b(sonnets)\b)')"""
df=pd.read_gbq(query,project_id,dialect='standard')
返回:
print(df)
Foo
0 0
在没有REGEXP_CONTAINS() 的情况下运行查询时,一切都会按预期运行。
query="""SELECT COUNT(word_count) AS Foo FROM sample.shakespeare_copy"""
df=pd.read_gbq(query,projectid,dialect='standard')
print(df)
Foo
0 164656
提前非常感谢!
斯蒂芬
【问题讨论】:
-
我的第一个猜测是你读错了项目。
-
感谢 Gordon,我检查了这一点,还运行了一些其他查询,所有这些都按预期工作。我强烈怀疑这个问题与 REGEX_CONTAINS() 有关。不过,我确实遵循了文档,并且所有其他正则表达式查询都按预期工作,所以我仍然感到困惑。
-
。 .我的第二个猜测是正则表达式中的反引号。尝试使用更简单的正则表达式。
-
谢谢 Gordon,后面的引号确实是问题所在:stackoverflow.com/questions/41070708/…
标签: python sql pandas google-bigquery