如何将Superset与AWS Athena连接?

6

有人尝试过将Superset连接到AWS Athena吗?

我能够使用SQLAlchemy URI连接到Redshift: postgresql://username:password@xxxx.redshift.amazonaws.com:port/dbname

但是我很难连接到AWS Athena。AWS有JDBC驱动程序(http://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html),但我不知道如何在Superset中使用它。有任何示例吗?

7个回答

7

如果有其他人到这里来:

awsathena+jdbc://username:password@xxxx.redshift.amazonaws.com:port/dbname

这是来自Superset文档的。


提示:以上为IT技术相关内容,是AWS Athena连接JDBC的地址,可用于连接AWS Redshift数据库。

3

我们尝试使用PyAthena JDBC和REST安装Superset。我们的经验表明,PyAthena(REST)比PyAthenaJDBC要好得多,建议在生产中使用相同的配置。

安装PyAthena(纯Python库,不需要Java)

pip install "PyAthena>1.2.0"

通过创建连接URL访问数据库

awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...

我发现了这篇文章,它是关于部署superset的一个好指南。


我应该在哪里编写pip install命令?我已经在EC2实例上安装了Superset,并通过端口进行访问。 - Debapratim Chakraborty
pip是Python的软件包管理器。您应该在EC2实例的终端中编写此命令。 - Dmitrij Kultasev

1
请查看this github PR。您需要将PyAthenaJDBC包安装到pip中。您所指的驱动程序是Java驱动程序,非常好,但是Superset主要是Python应用程序,因此它需要一个Python驱动程序来连接/与Athena交互。 上面的答案是正确的,但您需要安装该软件包以确保您实际上可以连接到Athena。

0

Superset 的官方指导:

https://superset.apache.org/docs/databases/athena

awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...

你需要自己进行一些调整。在2021年12月12日阅读了许多帖子后,这对我有用:

awsathena+rest://{secret id}:{secret access key}@athena.ap-southeast-1.amazonaws.com/test?s3_staging_dir=s3://{your bucket where Athena query result is stored}/test/&work_group=primary

请注意,在我的示例中:

"schema_name = test": 在此时,您必须在Athena \查询编辑器\数据库下看到名为“test”的数据库。它是通过Glue控制台\数据目录\数据库使用爬虫或手动创建的。

s3://{您的存储桶}/{路径(如果需要)}/test: 您需要前往 Athena 工作组,选择一个工作组并检查设置是否打开了“查询结果位置”。在我的情况下,工作组的名称是“primary”,“test”数据库的查询结果将存储在 s3://{您存储 Athena 查询结果的存储桶}/test/ 中。

请确保已在 Python 虚拟环境下安装以下内容::

pip install "PyAthenaJDBC>1.0.9"

pip install "PyAthena>1.2.0"

了解如何在Python环境下创建Superset:

https://superset.apache.org/docs/installation/installing-superset-from-scratch

安全组:

我从这里得到了指令:https://www.youtube.com/watch?v=vzuPQPRcT-0

我在EC2实例上构建了Superset。因此,您需要检查安全组设置。因为它涉及到EC2服务、Athena服务和运行UI中的Superset的网站。

在我的情况下,我已经打开了所有这些设置,以确保第一次可以运行。然后您可以缩小设置范围。

自定义TCP - TCP - 8088 - ::/0 ; 0.0.0.0/0

HTTP - TCP - 80 - ::/0 ; 0.0.0.0/0

SSH - TCP - 22 - ::/0 ; 0.0.0.0/0

自定义ICMP - IPv4 - 回显请求 - N/A - 0.0.0.0/0

所有ICMP - IPv6 - IPv6 ICMP - 所有 - ::/0

所有ICMP - IPv6 - IPv6 ICMP - 所有 - 0.0.0.0/0


0

连接 Athena 的驱动程序时,必须定义属性 s3_staging_dir。

示例:s3_staging_dir=s3://your_bucket


0

经过很多的努力,我终于成功创建了可用的连接字符串。需要注意的是,所有的密钥和S3路径都需要进行编码。以下格式适用于我:

awsathena+rest://{encoded aws_access_key_id}:{encoded aws_secret_access_key}@athena.{region_name}.amazonaws.com:443/{schema_name}?s3_staging_dir={encoded s3_staging_dir}

您可以使用以下代码生成连接字符串,将其保存到文件中并运行

from urllib.parse import quote_plus

conn_str = "awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com:443/"\
       "{schema_name}?s3_staging_dir={s3_staging_dir}"
               
print(conn_str.format(
      aws_access_key_id=quote_plus("{aws_access_key_id}"),
      aws_secret_access_key=quote_plus("{aws_secret_access_key}"),
      region_name="{region_name}",
      schema_name="{schema_name}",
      s3_staging_dir=quote_plus("{s3_staging_dir}")))

0

我使用 PyAthenaJDBC(python 3.6.7)成功运行了它,以下是步骤:

1)确保已安装 PyAthenaJDBC 包:

pip install "PyAthenaJDBC>1.0.9"

2) 重新启动Superset

3) 下载JDBC驱动程序:从aws driver download下载,我使用的是AthenaJDBC41-2.0.6.jar版本

4) 将数据源添加到Superset:

awsathena+jdbc://AWS_KEY:AWS_SECRET@athena.us-west-2.amazonaws.com/mydb?s3_staging_dir=s3://path/to/my/data/&driver_path=/drivers/AthenaJDBC41_2.0.6.jar

注意:
如果Superset正在运行ECS / EC2上,您可以分配IAM角色,并从URI中删除AWS KEY/SECRET。以下是示例原始连接URI:
awsathena+jdbc://{aws_key}:{aws_secret}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&driver_path={driver_path}

更多信息请点击这里
:

嗨,如果我正在使用EC2实例,我应该把驱动程序保存在哪里? - Debapratim Chakraborty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接