Superset oracle配置

时间:2017-07-13 17:37:51

标签: python oracle sqlalchemy airbnb superset

我正在尝试配置超集(airbnb bi plataform),但是当我尝试配置新数据库连接到oracle时,我遇到了问题, Superset使用sqlalchemy进行数据库连接,我为连接定义tnsname并传递给超集,如文档http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#database-urls所示 oracle + cx_oracle:// ifn:XXXXXX @ DBDESA但产生错误

(TypeError:期望无或字符串)

分开我尝试与sqlalchemy建立连接以测试连接

    Import sqlalchemy as sa
    Eng = sa.create_engine ('oracle + cx_oracle: // ifn: XXXXXX @ DBDESA')
    Eng.execute ('select 1 from dual') fetchall ()

但是我得到了同样的错误,还有其他需要的配置吗?编码或某些连接到oracle XE?或超集配置中的aditional params?

tnsnames.ora中

    DBDESA =
            (Description =
                    (Address_list =
            (Address = (protocol = TCP) (host = XXX.XX.X.X) (port = 1524)))
            (Connect_data = (Service_name = dbdesa)))

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我认为 URI 语法可能有误。

请参考以下示例尝试设置 URI

oracle+cx_oracle://dbname:password@ipaddress:port/?service_name=yourtnsname

例如:

oracle+cx_oracle://test_db:test_password@10.22.3.202:1521/?service_name=hoge

答案 1 :(得分:0)

虽然文档说支持oracle,但是你很难让它工作。

例如:

  1. Superset假设DB支持自动增量,而oracle则不支持。您需要在Oracle中创建所有序列,并在域类中添加对它们的引用。您必须在超集代码superset/models/core.py以及迁移superset/migrations/*中执行此操作(查找创建表的每个位置)。
  2. Oracle不支持超过30个字符的标识符(外键或列名)。你需要做一些重命名。
  3. on superset/migrations/env.py,之后:
  4. if engine.name in ('sqlite', 'mysql'):
        kwargs = {
            'transaction_per_migration': True,
            'transactional_ddl': True,
     }
    

    if engine.name in ('sqlite', 'mysql'): kwargs = { 'transaction_per_migration': True, 'transactional_ddl': True, }

    为oracle添加类似的块,如下所示:

    if engine.name in ('oracle'):
            kwargs = {
                'transactional_ddl': True,
      }
    

    请注意,我删除了if engine.name in ('oracle'): kwargs = { 'transactional_ddl': True, } 参数。你也可以在#34; 中使用equals而不是")

      方言上的
    1. 添加"行"作为保留字transaction_per_migration

    2. 每次要升级超集时再次执行此操作。

    3. 放弃这个烂摊子并使用Mysql