TL;DR
Le surensemble fait référence à une connexion à une source de données distincte en tant que base de données. Un seul cluster Presto peut se connecter à plusieurs sources de données en configurant un catalogue Presto pour chaque source de données souhaitée. Par conséquent, pour établir une connexion de base de données Superset à une source de données particulière via Presto, vous devez spécifier le cluster et le catalogue Presto dans l’URI SQLAlchemy comme suit : presto://<presto-username>:<presto-password>@<presto-coordinator-url>:<http-server-port>/<catalog>
.
Superset et SQLAlchemy
Superset est conçu comme une application Web Python Flask et exploite SQLAlchemy, une boîte à outils Python SQL, pour fournir une couche d’abstraction cohérente aux sources de données relationnelles. Superset utilise un URI SQLAlchemy cohérent comme chaîne de connexion pour une base de données Superset définie. Le schéma de l’URI est le suivant : dialect+driver://username:password@host:port/database
. Nous allons déconstruire le dialect
, driver
, et database
dans les sections suivantes.

SQLAlchemy définit un dialecte en tant que système qu’il utilise pour communiquer avec les différentes bases de données spécifiques (par exemple, la saveur de SQL) et DB-API, des API Python de bas niveau pour parler à des sources de données relationnelles spécifiques. Une base de données Python DB-API conducteur est requis pour une source de données donnée. Par exemple, PyHive est un pilote DB-API pour se connecter à Presto. Il est possible pour un même dialecte de choisir entre plusieurs pilotes DB-API. Par exemple, le dialecte PostgreSQL peut prendre en charge les pilotes DB-API suivants : psycopg2
, pg8000
, psycop2cffi
, un pygresql
. En règle générale, un seul pilote DB-API est défini par défaut pour un dialecte et utilisé lorsqu’aucune DB-API explicite n’est spécifiée. Pour PostgreSQL, le pilote DB-API par défaut est psycopg2
.
Le terme database
peut être déroutant car il est fortement chargé. Dans un scénario typique, une source de données donnée, telle que PostgeSQL, possède plusieurs regroupements logiques de tables appelés « bases de données ». D’une certaine manière, ces « bases de données » fournissent des espaces de noms pour les tables ; des tables portant le même nom peuvent exister dans deux « bases de données » différentes sans collision. À titre d’exemple, nous pouvons utiliser l’instance PostgreSQL disponible lors de l’installation locale de Superset avec Docker Compose.
Dans cette instance de PostgreSQL, nous avons quatre bases de données : postgres
, superset
, template0
, et template1
.
superset@localhost:superset> \l
+-----------+----------+----------+------------+------------+-----------------------+
| Name | Owner | Encoding | Collate | Ctype | Access privileges |
|-----------+----------+----------+------------+------------+-----------------------|
| postgres | superset | UTF8 | en_US.utf8 | en_US.utf8 | <null> |
| superset | superset | UTF8 | en_US.utf8 | en_US.utf8 | <null> |
| template0 | superset | UTF8 | en_US.utf8 | en_US.utf8 | =c/superset |
| | | | | | superset=CTc/superset |
| template1 | superset | UTF8 | en_US.utf8 | en_US.utf8 | =c/superset |
| | | | | | superset=CTc/superset |
+-----------+----------+----------+------------+------------+-----------------------+
Nous pouvons examiner le superset
base de données et voir les tables de cette base de données.
L’élément clé à retenir ici est qu’en fin de compte, une base de données Superset doit se résoudre en une collection de tables, quelle que soit la référence dans un dialecte particulier.
superset@localhost:superset> c superset
You are now connected to database "superset" as user "superset"
Schema | Name | Type | Owner |
|--------+----------------------------+-------+----------|
| public | Clean | table | superset |
| public | FCC 2018 Survey | table | superset |
| public | ab_permission | table | superset |
| public | ab_permission_view | table | superset |
| public | ab_permission_view_role | table | superset |
| public | ab_register_user | table | superset |
| public | ab_role | table | superset |
| public | ab_user | table | superset |
| public | ab_user_role | table | superset |
| public | ab_view_menu | table | superset |
| public | access_request | table | superset |
| public | alembic_version | table | superset |
| public | alert_logs | table | superset |
| public | alert_owner | table | superset |
| public | alerts | table | superset |
| public | annotation | table | superset |
| public | annotation_layer | table | superset |
| public | bart_lines | table | superset |
| public | birth_france_by_region | table | superset |
| public | birth_names | table | superset |
| public | cache_keys | table | superset |
| public | channel_members | table | superset |
| public | channels | table | superset |
| public | cleaned_sales_data | table | superset |
| public | clusters | table | superset |
| public | columns | table | superset |
| public | covid_vaccines | table | superset |
:
Avec une compréhension des dialectes, des pilotes et des bases de données à notre actif, consolidons-la avec quelques exemples. Supposons que nous voulons créer une base de données Superset sur une source de données PostgreSQL et une base de données PostgreSQL particulière nommée mydatabase
. Notre source de données PostgreSQL est hébergée sur pghost
sur le port 5432
et nous nous connecterons en tant que sonny
(le mot de passe est foobar
). Voici trois URI SQLAlchemy que nous pourrions utiliser (en fait inspirés de la documentation SQLAlchemy) :
postgresql+psycopg2://sonny:foobar@pghost:5432/mydatabase
Nous spécifions explicitement lepostgresql
dialecte etpsycopg2
conducteur.postgresql+pg8000://sonny:foobar@pghost:5432/mydatabase
Nous utilisons lepg8000
conducteur.postgresql://sonny:foobar@pghost:5432/mydatabase
Nous ne listons explicitement aucun pilote, et par conséquent, SQLAlchemy utilisera le pilote par défaut, qui estpsycopg2
pourpostgresql
.
Superset répertorie ses packages Python recommandés pour les pilotes de base de données dans la documentation publique.
Bientôt Catalogues
Étant donné que Presto peut se connecter à plusieurs sources de données, lors de la connexion à Presto en tant que base de données Superset définie, il est important de comprendre à quoi vous vous connectez réellement.
Dans Presto, la notion équivalente d’une « base de données » (c’est-à-dire une collection logique de tables) est appelée un schéma. L’accès à un schéma spécifique (« base de données ») dans une source de données, est défini dans un catalogue.
A titre d’exemple, la liste ci-dessous est la configuration de catalogue équivalente pour se connecter à l’exemple mydatabase
Base de données PostgreSQL que nous avons décrite précédemment. Si nous interrogeions une table dans ce catalogue directement à partir de Presto, une table entièrement qualifiée serait spécifiée comme catalog.schema.table
(par exemple select * from catalog.schema.table
). Par conséquent, interroger le Clean
le tableau serait select * from postgresql.mydatabase.Clean
.
connector.name=postgresql
connection-url=jdbc:postgresql://pghost:5432/mydatabase
connection-user=sonny
connection-password=foobar

Superset à Presto
Pour en revenir à Superset, pour créer une base de données Superset pour se connecter à Presto, nous spécifions le dialecte Presto. Cependant, étant donné que Presto est l’intermédiaire vers une source de données sous-jacente, telle que PostgreSQL, le username
et password
nous devons fournir (et nous authentifier) est le nom d’utilisateur et le mot de passe Presto. De plus, nous devons spécifier un catalogue Presto pour le database
dans l’URI SQLAlchemy. À partir de là, Presto, via sa configuration de catalogue, s’authentifie auprès de la source de données de sauvegarde avec les informations d’identification appropriées (par ex. sonny
et foobar
). Par conséquent, l’URI SQLAlchemy pour se connecter à Presto dans Superset est le suivant : presto://<presto-username>:<presto-password>@<presto-coordinator-url>:<http-server-port>/<catalog>

Les http-server-port
se réfère à la http-server.http.port
configuration sur le coordinateur et les travailleurs (voir les propriétés de configuration de Presto) ; il est généralement défini sur 8080.
Nouvelle interface utilisateur de connexion à la base de données Superset
Dans Superset 1.3, il existe une version avec indicateur de fonctionnalité d’une nouvelle interface utilisateur de connexion à la base de données qui simplifie la connexion aux données sans construire l’URI SQLAlchemy. La nouvelle interface utilisateur de connexion à la base de données peut être activée dans config.py
avec FORCE_DATABASE_CONNECTIONS_SSL = True
(RP #14934). La nouvelle interface utilisateur peut également être consultée dans la documentation Superset.