在 Apache Superset 中以编程方式设置源数据库
Programmatically set source database in Apache Superset
我是 运行 AWS-ECS 上的 Apache Superset,以促进直接与我们的 RDS 的连接。此连接有效,但必须手动配置。
有没有办法使用 Apache Superset 以编程方式配置源数据库?
我试过设置 SQLALCHEMY_DATABASE_URI
,但那只适用于 Superset 后端配置和设置。
Superset 有一个 API,因此您可以 create/update/delete 通过 HTTP 请求访问数据库。授权是 non-trivial,因为您需要先登录才能获取 CSRF 令牌并存储 cookie:
import requests
from bs4 import BeautifulSoup
from yarl import URL
superset_url = URL('https://superset.example.org/')
session = requests.Session()
# get CSRF token
response = session.get(superset_url / "login/")
soup = BeautifulSoup(response.text, "html.parser")
csrf_token = soup.find("input", {"id": "csrf_token"})["value"]
# get cookies
session.post(
superset_url / "login/",
data=dict(username=username, password=password, csrf_token=csrf_token),
)
# create database
database = {
"database_name": "my db",
"sqlalchemy_uri": "gsheets://",
...
}
session.post(
superset_url / "api/v1/database/",
json=database,
headers={"X-CSRFToken": csrf_token},
)
我是 运行 AWS-ECS 上的 Apache Superset,以促进直接与我们的 RDS 的连接。此连接有效,但必须手动配置。
有没有办法使用 Apache Superset 以编程方式配置源数据库?
我试过设置 SQLALCHEMY_DATABASE_URI
,但那只适用于 Superset 后端配置和设置。
Superset 有一个 API,因此您可以 create/update/delete 通过 HTTP 请求访问数据库。授权是 non-trivial,因为您需要先登录才能获取 CSRF 令牌并存储 cookie:
import requests
from bs4 import BeautifulSoup
from yarl import URL
superset_url = URL('https://superset.example.org/')
session = requests.Session()
# get CSRF token
response = session.get(superset_url / "login/")
soup = BeautifulSoup(response.text, "html.parser")
csrf_token = soup.find("input", {"id": "csrf_token"})["value"]
# get cookies
session.post(
superset_url / "login/",
data=dict(username=username, password=password, csrf_token=csrf_token),
)
# create database
database = {
"database_name": "my db",
"sqlalchemy_uri": "gsheets://",
...
}
session.post(
superset_url / "api/v1/database/",
json=database,
headers={"X-CSRFToken": csrf_token},
)