【问题标题】:Generating HTML links in a Zeppelin Impala output table column?在 Zeppelin Impala 输出表列中生成 HTML 链接?
【发布时间】:2021-06-04 09:28:24
【问题描述】:

我正在尝试找出一种方法来从 Zeppelin 注释中的 Impala 查询生成输出表中的 HTML 链接(每行一个链接,它们将位于表中自己的列中)。单击链接会导致相关数据文件从文件系统下载到用户的计算机(这很简单)。

棘手的一点是如何在 Impala 输出表中生成链接。是否有特定的 SELECT 查询可以做到这一点?我可以为 Zeppelin 用来显示 Impala 结果的输出表生成自定义模板吗?还有其他解决办法吗?

每个链接都有一个稍微不同的href,因为系统上会有一个与每个输出行相关的不同文件,我认为根据行数据生成href会很简单,但这更多的是关于什么语法会导致要生成并显示在列中的 HTML 链接?

谢谢

【问题讨论】:

  • 你可以使用 Zeppelin 的 %angular 解释器来显示 html 表格,而不是使用 Zeppelin 原生表格显示吗?原生表目前似乎不能有自定义 html。
  • @Golammott 谢谢。这实际上是个好主意,但我需要在非常大的数据集上使用 Impala(或 Hive)运行查询。不确定如何在 Angular 解释器中执行 SQL 查询并使其使用 Impala 或 Hive?

标签: impala apache-zeppelin


【解决方案1】:

在将 Impala 与现有的 Zeppelin %jdbc 解释器一起使用时,这将不起作用,因为该解释器严格读取/解释 SQL 语句,并且无法使用代码操作您的结果数据。

以下两种解决方法可能会有所帮助

选项 1:不要使用 %jdbc 解释器运行 Impala 查询,而是使用 %python%spark (Scala) 解释器通过 JDBC 运行 Impala 查询。然后在同一个单元格中进行数据操作(转换为 html 链接)。

使用带有 jaydebeapi 的 Python 解释器的示例:

%python
import jaydebeapi
conn = jaydebeapi.connect("com.cloudera.impala.jdbc3.Driver", "jdbc:hive2://myhost.example.com:21050/;auth=noSasl")
curs = conn.cursor()
curs.execute("select link, data from impala.table")
row = curs.fetchone()

result = """%table
linkItem\tdataItem
"""

while(row):
    result += "%html <a href='{}'>google</a>\t{}\n".format(row[0], row[1])
    row = curs.fetchone()
    
print(result)

选项 2: 更多的是 hack,继续使用 JDBC 解释器运行 Impala 查询,然后使用带有请求的 Zeppelin API 检索 JDBC 段落的结果。然后解析结果并将%html &lt;a href&gt;添加到解析的数据中。

%python
z.z.run("20210309-195201_1615214407")
paragraph_endpoint = "http://{}:8890/api/notebook/{}/paragraph/{}".format("10.241.XX.XX", "2FYFABCD1", "20250210-223517_1845423213")
paragraph_r = requests.get(paragraph_endpoint)
paragraph_resp = json.loads(paragraph_r.text)
rows = paragraph_resp["body"]["results"]["msg"][0]["data"].split()

result = """%table\n""".format(rows[0])
for row in rows[1:]:
    result+="%html <a href='{}'>google</a>{}\n".format(row)
print(result)  

【讨论】:

  • 感谢您的回答,非常有帮助。是否有端点/API 来运行段落并在一次调用中获取结果,即避免必须执行运行(它将使用标准显示系统在 UI 中显示表格)然后调用段落端点来获取表格数据?
  • 不幸的是,我没有看到。运行段落同步 API 看起来很接近,但我仍然认为它不会在响应中为您提供完整的结果。
猜你喜欢
  • 2017-04-16
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
相关资源
最近更新 更多