| |
| @startuml erd |
| |
| title Apache Superset ERD |
| |
| !theme blueprint |
| |
| ' avoid problems with angled crows feet |
| |
| skinparam linetype ortho |
| skinparam classBorderColor #grey |
| |
| skinparam classBorderColor<<new>> #white |
| skinparam classBorderThickness<<new>> 1 |
| skinparam classLineStyle<<new>> Dashed |
| skinparam ClassBackgroundColor<<new>> #204143 |
| |
| ' Models |
| rectangle "Data Assets" #black { |
| entity "SqlMetric (sql_metrics)" as sql_metrics { |
| uuid: BINARY(16) |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| metric_name: VARCHAR(255) |
| verbose_name: VARCHAR(1024) |
| metric_type: VARCHAR(32) |
| description: TEXT |
| d3format: VARCHAR(128) |
| currency: VARCHAR(128) |
| warning_text: TEXT |
| table_id: INTEGER |
| expression: TEXT |
| extra: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "DatabaseUserOAuth2Tokens (database_user_oauth2_tokens)" as database_user_oauth2_tokens { |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| user_id: INTEGER |
| database_id: INTEGER |
| access_token: BLOB |
| access_token_expiration: DATETIME |
| refresh_token: BLOB |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "Table (sl_tables)" as sl_tables { |
| uuid: BINARY(16) |
| created_on: DATETIME |
| changed_on: DATETIME |
| extra_json: TEXT |
| id: INTEGER |
| database_id: INTEGER |
| catalog: TEXT |
| schema: TEXT |
| name: TEXT |
| is_managed_externally: BOOLEAN |
| external_url: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "Database (dbs)" as dbs { |
| uuid: BINARY(16) |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| verbose_name: VARCHAR(250) |
| database_name: VARCHAR(250) |
| sqlalchemy_uri: VARCHAR(1024) |
| password: BLOB |
| cache_timeout: INTEGER |
| select_as_create_table_as: BOOLEAN |
| expose_in_sqllab: BOOLEAN |
| configuration_method: VARCHAR(255) |
| allow_run_async: BOOLEAN |
| allow_file_upload: BOOLEAN |
| allow_ctas: BOOLEAN |
| allow_cvas: BOOLEAN |
| allow_dml: BOOLEAN |
| force_ctas_schema: VARCHAR(250) |
| extra: TEXT |
| encrypted_extra: BLOB |
| impersonate_user: BOOLEAN |
| server_cert: BLOB |
| is_managed_externally: BOOLEAN |
| external_url: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "Dataset (sl_datasets)" as sl_datasets { |
| uuid: BINARY(16) |
| created_on: DATETIME |
| changed_on: DATETIME |
| extra_json: TEXT |
| id: INTEGER |
| database_id: INTEGER |
| is_physical: BOOLEAN |
| is_managed_externally: BOOLEAN |
| name: TEXT |
| expression: TEXT |
| external_url: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "SqlaTable (tables)" as tables { |
| uuid: BINARY(16) |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| description: TEXT |
| default_endpoint: TEXT |
| is_featured: BOOLEAN |
| filter_select_enabled: BOOLEAN |
| offset: INTEGER |
| cache_timeout: INTEGER |
| params: VARCHAR(1000) |
| perm: VARCHAR(1000) |
| schema_perm: VARCHAR(1000) |
| is_managed_externally: BOOLEAN |
| external_url: TEXT |
| table_name: VARCHAR(250) |
| main_dttm_col: VARCHAR(250) |
| database_id: INTEGER |
| fetch_values_predicate: TEXT |
| schema: VARCHAR(255) |
| sql: TEXT |
| is_sqllab_view: BOOLEAN |
| template_params: TEXT |
| extra: TEXT |
| normalize_columns: BOOLEAN |
| always_filter_main_dttm: BOOLEAN |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "TableColumn (table_columns)" as table_columns { |
| uuid: BINARY(16) |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| column_name: VARCHAR(255) |
| verbose_name: VARCHAR(1024) |
| is_active: BOOLEAN |
| type: TEXT |
| advanced_data_type: VARCHAR(255) |
| groupby: BOOLEAN |
| filterable: BOOLEAN |
| description: TEXT |
| table_id: INTEGER |
| is_dttm: BOOLEAN |
| expression: TEXT |
| python_date_format: VARCHAR(255) |
| extra: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "Column (sl_columns)" as sl_columns { |
| uuid: BINARY(16) |
| created_on: DATETIME |
| changed_on: DATETIME |
| extra_json: TEXT |
| id: INTEGER |
| is_additive: BOOLEAN |
| is_aggregation: BOOLEAN |
| is_filterable: BOOLEAN |
| is_dimensional: BOOLEAN |
| is_increase_desired: BOOLEAN |
| is_managed_externally: BOOLEAN |
| is_partition: BOOLEAN |
| is_physical: BOOLEAN |
| is_spatial: BOOLEAN |
| is_temporal: BOOLEAN |
| name: TEXT |
| type: TEXT |
| advanced_data_type: TEXT |
| expression: TEXT |
| unit: TEXT |
| description: TEXT |
| warning_text: TEXT |
| external_url: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "RowLevelSecurityFilter (row_level_security_filters)" as row_level_security_filters { |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| name: VARCHAR(255) |
| description: TEXT |
| filter_type: VARCHAR(7) |
| group_key: VARCHAR(255) |
| clause: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| } |
| rectangle "System" #black { |
| entity "KeyValueEntry (key_value)" as key_value { |
| uuid: BINARY(16) |
| id: INTEGER |
| resource: VARCHAR(32) |
| value: BLOB |
| created_on: DATETIME |
| created_by_fk: INTEGER |
| changed_on: DATETIME |
| expires_on: DATETIME |
| changed_by_fk: INTEGER |
| } |
| entity "SSHTunnel (ssh_tunnels)" as ssh_tunnels { |
| uuid: BINARY(16) |
| created_on: DATETIME |
| changed_on: DATETIME |
| extra_json: TEXT |
| id: INTEGER |
| database_id: INTEGER |
| server_address: TEXT |
| server_port: INTEGER |
| username: BLOB |
| password: BLOB |
| private_key: BLOB |
| private_key_password: BLOB |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "KeyValue (keyvalue)" as keyvalue { |
| id: INTEGER |
| value: TEXT |
| } |
| entity "CacheKey (cache_keys)" as cache_keys { |
| id: INTEGER |
| cache_key: VARCHAR(256) |
| cache_timeout: INTEGER |
| datasource_uid: VARCHAR(64) |
| created_on: DATETIME |
| } |
| entity "Log (logs)" as logs { |
| id: INTEGER |
| action: VARCHAR(512) |
| user_id: INTEGER |
| dashboard_id: INTEGER |
| slice_id: INTEGER |
| json: TEXT |
| dttm: DATETIME |
| duration_ms: INTEGER |
| referrer: VARCHAR(1024) |
| } |
| } |
| rectangle "SQL Lab" #black { |
| entity "SavedQuery (saved_query)" as saved_query { |
| uuid: BINARY(16) |
| created_on: DATETIME |
| changed_on: DATETIME |
| extra_json: TEXT |
| id: INTEGER |
| user_id: INTEGER |
| db_id: INTEGER |
| schema: VARCHAR(128) |
| label: VARCHAR(256) |
| description: TEXT |
| sql: TEXT |
| template_parameters: TEXT |
| rows: INTEGER |
| last_run: DATETIME |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "TableSchema (table_schema)" as table_schema { |
| created_on: DATETIME |
| changed_on: DATETIME |
| extra_json: TEXT |
| id: INTEGER |
| tab_state_id: INTEGER |
| database_id: INTEGER |
| schema: VARCHAR(256) |
| table: VARCHAR(256) |
| description: TEXT |
| expanded: BOOLEAN |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "Query (query)" as query { |
| tracking_url: TEXT |
| extra_json: TEXT |
| id: INTEGER |
| client_id: VARCHAR(11) |
| database_id: INTEGER |
| tmp_table_name: VARCHAR(256) |
| tmp_schema_name: VARCHAR(256) |
| user_id: INTEGER |
| status: VARCHAR(16) |
| tab_name: VARCHAR(256) |
| sql_editor_id: VARCHAR(256) |
| schema: VARCHAR(256) |
| sql: TEXT |
| select_sql: TEXT |
| executed_sql: TEXT |
| limit: INTEGER |
| limiting_factor: VARCHAR(18) |
| select_as_cta: BOOLEAN |
| select_as_cta_used: BOOLEAN |
| ctas_method: VARCHAR(16) |
| progress: INTEGER |
| rows: INTEGER |
| error_message: TEXT |
| results_key: VARCHAR(64) |
| start_time: NUMERIC(20, 6) |
| start_running_time: NUMERIC(20, 6) |
| end_time: NUMERIC(20, 6) |
| end_result_backend_time: NUMERIC(20, 6) |
| changed_on: DATETIME |
| } |
| entity "TabState (tab_state)" as tab_state { |
| created_on: DATETIME |
| changed_on: DATETIME |
| extra_json: TEXT |
| id: INTEGER |
| user_id: INTEGER |
| label: VARCHAR(256) |
| active: BOOLEAN |
| database_id: INTEGER |
| schema: VARCHAR(256) |
| sql: TEXT |
| query_limit: INTEGER |
| latest_query_id: INTEGER |
| autorun: BOOLEAN |
| template_params: TEXT |
| hide_left_bar: BOOLEAN |
| saved_query_id: INTEGER |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| } |
| rectangle "Core" #black { |
| entity "FavStar (favstar)" as favstar { |
| id: INTEGER |
| user_id: INTEGER |
| class_name: VARCHAR(50) |
| obj_id: INTEGER |
| dttm: DATETIME |
| } |
| entity "Dashboard (dashboards)" as dashboards { |
| uuid: BINARY(16) |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| dashboard_title: VARCHAR(500) |
| position_json: TEXT |
| description: TEXT |
| css: TEXT |
| certified_by: TEXT |
| certification_details: TEXT |
| json_metadata: TEXT |
| slug: VARCHAR(255) |
| published: BOOLEAN |
| is_managed_externally: BOOLEAN |
| external_url: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "Annotation (annotation)" as annotation { |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| start_dttm: DATETIME |
| end_dttm: DATETIME |
| layer_id: INTEGER |
| short_descr: VARCHAR(500) |
| long_descr: TEXT |
| json_metadata: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "EmbeddedDashboard (embedded_dashboards)" as embedded_dashboards { |
| created_on: DATETIME |
| changed_on: DATETIME |
| uuid: BINARY(16) |
| allow_domain_list: TEXT |
| dashboard_id: INTEGER |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "Slice (slices)" as slices { |
| uuid: BINARY(16) |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| slice_name: VARCHAR(250) |
| datasource_id: INTEGER |
| datasource_type: VARCHAR(200) |
| datasource_name: VARCHAR(2000) |
| viz_type: VARCHAR(250) |
| params: TEXT |
| query_context: TEXT |
| description: TEXT |
| cache_timeout: INTEGER |
| perm: VARCHAR(1000) |
| schema_perm: VARCHAR(1000) |
| last_saved_at: DATETIME |
| last_saved_by_fk: INTEGER |
| certified_by: TEXT |
| certification_details: TEXT |
| is_managed_externally: BOOLEAN |
| external_url: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "TaggedObject (tagged_object)" as tagged_object { |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| tag_id: INTEGER |
| object_id: INTEGER |
| object_type: VARCHAR(9) |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "AnnotationLayer (annotation_layer)" as annotation_layer { |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| name: VARCHAR(250) |
| descr: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "DynamicPlugin (dynamic_plugin)" as dynamic_plugin { |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| name: TEXT |
| key: TEXT |
| bundle_url: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "Tag (tag)" as tag { |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| name: VARCHAR(250) |
| type: VARCHAR(12) |
| description: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "CssTemplate (css_templates)" as css_templates { |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| template_name: VARCHAR(250) |
| css: TEXT |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "UserAttribute (user_attribute)" as user_attribute { |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| user_id: INTEGER |
| welcome_dashboard_id: INTEGER |
| avatar_url: VARCHAR(100) |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| } |
| rectangle "Inherited from Flask App Builder (FAB)" #black { |
| entity "ViewMenu (ab_view_menu)" as ab_view_menu { |
| id: INTEGER |
| name: VARCHAR(250) |
| } |
| entity "Permission (ab_permission)" as ab_permission { |
| id: INTEGER |
| name: VARCHAR(100) |
| } |
| entity "User (ab_user)" as ab_user { |
| id: INTEGER |
| first_name: VARCHAR(64) |
| last_name: VARCHAR(64) |
| username: VARCHAR(64) |
| password: VARCHAR(256) |
| active: BOOLEAN |
| email: VARCHAR(320) |
| last_login: DATETIME |
| login_count: INTEGER |
| fail_login_count: INTEGER |
| created_on: DATETIME |
| changed_on: DATETIME |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "RegisterUser (ab_register_user)" as ab_register_user { |
| id: INTEGER |
| first_name: VARCHAR(64) |
| last_name: VARCHAR(64) |
| username: VARCHAR(64) |
| password: VARCHAR(256) |
| email: VARCHAR(64) |
| registration_date: DATETIME |
| registration_hash: VARCHAR(256) |
| } |
| entity "PermissionView (ab_permission_view)" as ab_permission_view { |
| id: INTEGER |
| permission_id: INTEGER |
| view_menu_id: INTEGER |
| } |
| entity "Role (ab_role)" as ab_role { |
| id: INTEGER |
| name: VARCHAR(64) |
| } |
| } |
| rectangle "Alerts & Reports" #black { |
| entity "ReportRecipients (report_recipient)" as report_recipient { |
| created_on: DATETIME |
| changed_on: DATETIME |
| id: INTEGER |
| type: VARCHAR(50) |
| recipient_config_json: TEXT |
| report_schedule_id: INTEGER |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| entity "ReportExecutionLog (report_execution_log)" as report_execution_log { |
| id: INTEGER |
| uuid: BINARY(16) |
| scheduled_dttm: DATETIME |
| start_dttm: DATETIME |
| end_dttm: DATETIME |
| value: FLOAT |
| value_row_json: TEXT |
| state: VARCHAR(50) |
| error_message: TEXT |
| report_schedule_id: INTEGER |
| } |
| entity "ReportSchedule (report_schedule)" as report_schedule { |
| created_on: DATETIME |
| changed_on: DATETIME |
| extra_json: TEXT |
| id: INTEGER |
| type: VARCHAR(50) |
| name: VARCHAR(150) |
| description: TEXT |
| context_markdown: TEXT |
| active: BOOLEAN |
| crontab: VARCHAR(1000) |
| creation_method: VARCHAR(255) |
| timezone: VARCHAR(100) |
| report_format: VARCHAR(50) |
| sql: TEXT |
| chart_id: INTEGER |
| dashboard_id: INTEGER |
| database_id: INTEGER |
| last_eval_dttm: DATETIME |
| last_state: VARCHAR(50) |
| last_value: FLOAT |
| last_value_row_json: TEXT |
| validator_type: VARCHAR(100) |
| validator_config_json: TEXT |
| log_retention: INTEGER |
| grace_period: INTEGER |
| working_timeout: INTEGER |
| force_screenshot: BOOLEAN |
| custom_width: INTEGER |
| custom_height: INTEGER |
| created_by_fk: INTEGER |
| changed_by_fk: INTEGER |
| } |
| } |
| ' Relationships |
| |
| sql_metrics }|--|| tables |
| sql_metrics }|--|| ab_user |
| |
| database_user_oauth2_tokens }|--|| ab_user |
| database_user_oauth2_tokens }|--|| dbs |
| |
| sl_tables }|--|| dbs |
| sl_tables }|--|{ sl_columns |
| sl_tables }|--|| ab_user |
| sl_tables }|--|{ sl_datasets |
| |
| dbs }|--|| ab_user |
| dbs ||--|{ tables |
| dbs ||--|{ sl_datasets |
| |
| sl_datasets }|--|{ sl_columns |
| sl_datasets }|--|{ ab_user |
| |
| tables ||--|{ table_columns |
| tables }|--|{ row_level_security_filters |
| |
| table_columns }|--|| ab_user |
| |
| sl_columns }|--|| ab_user |
| |
| row_level_security_filters }|--|| ab_user |
| |
| key_value }|--|| ab_user |
| |
| ssh_tunnels }|--|| dbs |
| ssh_tunnels }|--|| ab_user |
| |
| |
| |
| |
| saved_query }|--|| ab_user |
| saved_query }|--|| dbs |
| saved_query }|--|{ tag |
| |
| table_schema }|--|| dbs |
| table_schema }|--|| ab_user |
| table_schema }|--|| tab_state |
| |
| query }|--|| dbs |
| query }|--|| ab_user |
| |
| tab_state }|--|| dbs |
| tab_state }|--|| query |
| tab_state }|--|| saved_query |
| tab_state }|--|| ab_user |
| |
| |
| dashboards }|--|{ slices |
| dashboards }|--|{ ab_user |
| dashboards }|--|{ tag |
| dashboards }|--|{ ab_role |
| dashboards ||--|{ embedded_dashboards |
| dashboards ||--|{ report_schedule |
| |
| annotation }|--|| annotation_layer |
| annotation }|--|| ab_user |
| |
| embedded_dashboards }|--|| ab_user |
| |
| slices }|--|| ab_user |
| slices }|--|{ tag |
| slices }|--|| tables |
| slices ||--|{ report_schedule |
| |
| tagged_object }|--|| tag |
| tagged_object }|--|| ab_user |
| |
| annotation_layer }|--|| ab_user |
| |
| dynamic_plugin }|--|| ab_user |
| |
| tag }|--|{ ab_user |
| |
| css_templates }|--|| ab_user |
| |
| user_attribute }|--|| dashboards |
| |
| |
| |
| ab_user }|--|{ ab_role |
| ab_user }|--|| ab_user |
| ab_user ||--|{ logs |
| ab_user ||--|{ user_attribute |
| ab_user }|--|{ tables |
| |
| |
| ab_permission_view }|--|| ab_permission |
| ab_permission_view }|--|| ab_view_menu |
| ab_permission_view }|--|{ ab_role |
| |
| ab_role }|--|{ row_level_security_filters |
| |
| report_recipient }|--|| report_schedule |
| report_recipient }|--|| ab_user |
| |
| report_execution_log }|--|| report_schedule |
| |
| report_schedule }|--|| dbs |
| report_schedule }|--|{ ab_user |
| @enduml |