在 Zeppelin Impala 输出 table 列中生成 HTML 链接?

Generating HTML links in a Zeppelin Impala output table column?

我正在尝试找出一种方法,从 Zeppelin 笔记中的 Impala 查询(一个 link 每行,它们将在 table 中各自的列中)。单击 link 将导致相关数据文件从文件系统下载到用户计算机(这很简单)。

棘手的一点是如何在 Impala 输出 table 中生成 link。是否有特定的 SELECT 查询可以执行此操作?我可以为 Zeppelin 用来显示 Impala 结果的输出 table 生成自定义模板吗?还有其他解决方案吗?

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

谢谢

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

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

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

使用 Python 解释器和 jaydebeapi 的示例:

%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 查询,然后检索JDBC 段使用 Zeppelin API 请求的结果。然后解析结果,将%html <a href>添加到解析后的数据中。

%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)