带有 Bigquery 的 Zeppelin 导致“SQL 执行返回错误!”

Posted

技术标签:

【中文标题】带有 Bigquery 的 Zeppelin 导致“SQL 执行返回错误!”【英文标题】:Zeppelin with Bigquery results in "SQL Execution returned an error!" 【发布时间】:2022-01-20 01:24:06 【问题描述】:

我按照文档中的说明安装并配置了 Zeppelin。

    我将 GOOGLE_APPLICATION_CREDENTIALS 设置为 conf/zeppelin-env.sh 中的环境变量
export GOOGLE_APPLICATION_CREDENTIALS=/home/anderson/.ssh/gcp-credentials.json
    通过设置 zeppelin.bigquery.project_id 配置 BigQuery 解释器。

完成这些设置后,我可以为公共数据集运行以下 BigQuery SQL,而不会出现任何问题。

%bigquery
#standardSQL
SELECT departure_airport,count(case when departure_delay>0 then 1 else 0 end) as no_of_delays 
FROM `bigquery-samples.airline_ontime_data.flights`
group by departure_airport 
order by 2 desc 
limit 10

它有效。但是当我连接到私有数据集时它不起作用。

例如...

%bigquery
#standardSQL
SELECT id FROM `private_project_id.dataset.table` limit 1

导致SQL Execution returned an error! ERROR!!

我尝试在 Python 中使用相同的 SQL。 并且......它有效。

%python
from google.cloud import bigquery

client = bigquery.Client()
# Perform a query.
QUERY = ('SELECT id FROM `private_project_id.dataset.bra_survey` limit 1')
query_job = client.query(QUERY)  # API request
rows = query_job.result()  # Waits for query to finish

for row in rows:
   print(row)

作为实验,我将gcp-credentials.json 文件名更改为gcp-credentials.json__backup 之类的名称,以测试zeppelin BigQuery 解释器是否实际读取了凭据。令人惊讶的是,当我运行 BigQuery 查询时,除了相同的错误消息 SQL Execution returned an error! 之外,没有任何错误消息。 我的意思是如果解释器实际上读取了凭证文件,我的期望是它会引发类似 cannot find credentials 错误的异常。

如何解决这个问题? 我是唯一遭受此错误的人吗?

是的。公共数据集运行良好。 问题是连接到 BigQuery 中的私有数据集。 在 Python 中,从私有数据集中检索数据没有这样的问题。 (我的意思是服务账号权限没有问题,我在几个应用中使用这个服务账号都没有问题)

【问题讨论】:

您能否确认您是在本地使用 Zeppelin 还是通过 Cloud Dataproc 使用?如果在本地,您能否分享您用于设置 Zeppelin 的文档(使用 GCP 凭据)? @SakshiGatyan 我使用了这个文档 zeppelin.apache.org/docs/0.6.2/interpreter/bigquery.html 我还阅读了 0.10.0 文档 zeppelin.apache.org/docs/0.10.0/interpreter/bigquery.html 但是 0.10.0 文档被破坏了。我的意思是文档中有一个链接,但链接已损坏。链接文字是“Zeppelin Google Cloud Storage” 由于NullPointerException 即抛出此错误。当返回一个空表时。您能否确认您是否在失败和成功的尝试中都查询同一个表? 嗨@Anderson,如果您觉得我的回答有帮助,请考虑按Stack Overflow guidelines 接受并投票,帮助更多 Stack 贡献者进行研究:) 【参考方案1】:

这个错误是由于NullPointerException 而引发的,即在您的情况下,错误似乎是在返回空表时发生的。尝试查询非空 BigQuery 表。

【讨论】:

以上是关于带有 Bigquery 的 Zeppelin 导致“SQL 执行返回错误!”的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 中,带有空值数组列的“where”子句导致问题

Apache zeppelin - 带有角度和 zeppelin 解释器的变量范围

带有企业安全包的 HDInsight 上的 Zeppelin 笔记本

使用 Apache Zeppelin 重新运行带有 -deprecation 的 Scala 代码

如何:Zeppelin + boto3 + AWS 凭证

Zeppelin+Spark+Kubernetes:让 Zeppelin Job 在现有的 Spark 集群上运行