Hi Happen,

I have a question. If user already has a Mysql external table which uses
the mysql driver, is it all right when user updates new version of Doris?

Ling Miao

Lee Happen <happen...@hotmail.com> 于2020年8月17日周一 下午4:00写道:

>
> Motivation
>
> At present, many customers need to access the external table through
> Doris, but Doris only supports accessing the external table of MySQL at
> present. This problem makes it difficult for users of other databases to
> use Doris.
>
> Open Database Connectivity (ODBC) is a standard application programming
> interface for accessing database management systems:
> https://en.wikipedia.org/wiki/Open_Database_Connectivity
>
> So should we support ODBC Scan node as a general external table access
> method, it is provided to users. user can use Driver Manager of ODBC to
> determine the databases that need to be accessed.
>
> It can bring us the following benefits:
>
>   1.  First, Doris can eazily support a variety of different databases as
> external table, likes: Oracle, PostgreSQL, SQLServer. Not only RDMS, ODBC
> also support some NoSQL database. likes: Redis, MongoDB.
>
>   1.  ODBC help Doris have a unified development interface instead of
> focusing on the connection implementation of different databases.
>
>   2.  UNIX ODBC is a static library based on LGPL, which can avoid the
> commercial risk of using different database client APIs
>
> How To Use
>
> It is very similar to the previous use of MySQL external table. The table
> creation statement is as follows.
>
> CREATE EXTERNAL TABLE `baseall_oracle` (
>   `k1` decimal(9, 3) NOT NULL COMMENT "",
>   `k2` char(10) NOT NULL COMMENT "",
>   `k3` datetime NOT NULL COMMENT "",
>   `k5` varchar(20) NOT NULL COMMENT "",
>   `k6` double NOT NULL COMMENT ""
> ) ENGINE=ODBC
> PROPERTIES (
> "host" = "192.168.1.2",
> "port" = "4234",
> "user" = "happenlee",
> "password" = "happenlee",
> "database" = "happen",
> "table" = "baseall",
> "driver" = "Oracle 19 ODBC driver",
> "type" = "oracle"
> );
>
>
> Noted that it needs to add some additional info:
>
>   *   type: To identify which database the table belongs to. For different
> databases, there are some differences in ODBC connection and query.
>
>   *   driver: To identify which odbc driver the table use. Use should
> installed proper driver and config it in be/conf/odbcinst.ini like:
>
> # Example driver definitions
>
> # Driver from the postgresql-odbc package
> # Setup from the unixODBC package
> [PostgreSQL]
> Description = ODBC for PostgreSQL
> Driver      = /usr/lib/psqlodbc.so
> Setup       = /usr/lib/libodbcpsqlS.so
> Driver64    = /usr/lib64/psqlodbc.so
> Setup64     = /usr/lib64/libodbcpsqlS.so
> FileUsage   = 1
>
>
> # Driver from the mysql-connector-odbc package
> # Setup from the unixODBC package
> [MySQL ODBC 8.0 Unicode Driver]
> Description = ODBC for MySQL
> Driver      = /home/happen/mysql/mysql_odbc_rpm/usr/lib64/libmyodbc8w.so
> FileUsage   = 1
>
> [Oracle 19 ODBC driver]
> Description=Oracle ODBC driver for Oracle 19
> Driver=/usr/lib/oracle/19.8/client64/lib/libsqora.so.19.1
> Setup=
> FileUsage=
> CPTimeout=
> CPReuse=
>
>
>
> Implementation
>
>   1.  First, we should add third party static library of Unix ODBC.
>
>   2.  Second,Modify thrift file to determine the interface of ODBC scan
> node. like:
>
>   1.  Modify the code of be part, implementation ODBC_SCAN_NODE and
> ODBC_SCANNER
>
>   2.  Modify the code of FE part to support adding external tables of ODBC
> engine.
>
> Some Problem Need To Talk
>
>   1.  Now the odbc driver of mysql have a function library conflict with
> mysql-server-mysql-5.7.18,which may cause core of BE. So we should disable
> WITH_MYSQL compile options,when we need to use ODBC_SCAN_NODE to connect
> mysql.
>
>   2.  odbc scan node should support old external table of MySQL.
>
>
>                                  Best Wish
>
>                                    HappenLee
>
>
>

Reply via email to