首页 > 解决方案 > 使用 INNER JOIN 时在 Bi​​gQuery 中获取“invalidQuery”异常

问题描述

我正在尝试使用join两个 StackOverflow 表来确定平均查询响应时间。但是我是新手,无法JOIN上桌,请帮忙。


Stackquery = """

    SELECT   
        ques.id,
        ques.accepted_answer_id,
        ques.creation_date,
        ques.last_activity_date,
        ansr.id, 
        ansr.accepted_answer_id, 
        ansr.creation_date, 
        ansr.last_activity_date
    FROM
        `bigquery-public-data:stackoverflow.posts_questions` as ques
        INNER JOIN
        'bigquery-public-data:stackoverflow.posts_answers' as ansr
        ON ques.accepted_answer_id = ansr.id
    WHERE
        MOD(ABS(FARM_FINGERPRINT(CAST(ques.last_activity_date AS STRING))),100000) = 1

"""

StackOverflowData = bq.Query(Stackquery).execute().result().to_dataframe()

ExceptionTraceback(最近一次调用最后一次)

<ipython-input-72-80c29a281162> in <module>() 18 
  """ 19 
---> 20 
  StackOverflowData = bq.Query(Stackquery).execute().result().to_dataframe() ... 491 
except KeyError: 492 
    # The query was in error --> 493 
    raise Exception(_utils.format_query_errors(query_result['status']['errors'])) 494 
    return _query_job.QueryJob(job_id, table_name, self._sql, context=self._context) 495 
Exception: invalidQuery: Encountered "" at line 14, column 3    

标签: pythonsqlgoogle-bigquery

解决方案


问题在于查询本身;这有效:

SELECT   
    ques.id,
    ques.accepted_answer_id,
    ques.last_activity_date,
    ansr.creation_date
FROM
    `bigquery-public-data.stackoverflow.posts_questions` as ques
    INNER JOIN
    `bigquery-public-data.stackoverflow.posts_answers` as ansr
    ON ques.accepted_answer_id = ansr.id
WHERE
    MOD(ABS(FARM_FINGERPRINT(CAST(ques.last_activity_date AS STRING))),100000) = 1

我建议在webUI中测试您的查询,而不是在 Python 中运行它们,因为它的编译器会检查查询并警告您潜在的错误。


推荐阅读