1. 程式人生 > 其它 >Apache Doris ODBC外表之Postgresql使用指南

Apache Doris ODBC外表之Postgresql使用指南

Apache Doris 社群 2022 年的總體規劃,包括待開展或已開展、以及已完成但需要持續優化的功能、文件、社群建設等多方面,我們期待有更多的小夥伴參與進來討論。同時也希望多多關注Doris,給Doris加Star

Apache Doris 2022 Roadmap

 

該使用指南之針對Ubuntu環境來進行測試的,Centos環境可以參考,但是不確保一定能成功。

1.軟體環境

  1. 作業系統:ubuntu 18.04
  2. Apache Doris :0.15
  3. Postgresql資料庫:PostgreSQL 12.9
  4. UnixODBC:2.3.4
  5. Mysql Connector ODBC :5.3.13、8.0.11、8.0.26

2.安裝ODBC驅動

首先我們安裝unixODBC驅動、這裡直接給出驅動的下載地址及安裝命令

sudo wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.4.tar.gz 
tar -xvzf unixODBC-2.3.4.tar.gz 
cd unixODBC-2.3.4/
sudo ./configure --prefix=/usr/local/unixODBC-2.3.7 --includedir=/usr/include --libdir=/usr/lib -bindir=/usr/bin --sysconfdir=/etc
make
sudo make install
​
​

安裝成功後,unixODBC所需的標頭檔案都被安裝到了/usr/inlucde下,編譯好的庫檔案安裝到了/usr/lib下,與unixODBC相關的可執行檔案安裝到了/usr/bin下,配置檔案放到了/etc下。

驗證安裝是否成功

# odbcinst -j
unixODBC 2.3.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

3.安裝Postgresql資料庫

Ubuntu的預設儲存庫包含Postgres軟體包,因此您可以使用apt安裝這些軟體包。

安裝之前先用apt更新一下本地軟體包,然後,安裝Postgres包和一個附加實用程式和功能的- managed包:

$ sudo apt update
$ sudo apt install postgresql postgresql-contrib

現在已經安裝了該軟體,我們可以瞭解它的工作原理以及它與您可能使用的類似資料庫管理系統的不同之處。

3.1 使用PostgreSQL roles和資料庫

預設情況下,Postgres使用稱為“roles”的概念來處理身份驗證和授權。在某些方面,這些類似於常規的Unix風格帳戶,但Postgres不區分使用者和組,而是更喜歡更靈活的術語“roles”。

安裝後,Postgres設定為使用ident身份驗證,這意味著它將Postgresroles與匹配的Unix / Linux系統帳戶相關聯。如果Postgres中存在roles,則具有相同名稱的Unix / Linux使用者名稱可以作為該roles登入。

安裝過程建立了一個名為postgres的使用者帳戶,該帳戶與預設的Postgresroles相關聯。要使用Postgres,您可以登入該帳戶。

有幾種方法可以使用此帳戶訪問Postgres。

3.2 切換到postgres帳戶

輸入以下內容切換到伺服器上的postgres帳戶:

$ sudo -i -u postgres

您現在可以通過輸入以下內容立即訪問Postgres提示:

$ psql

這將使您進入PostgreSQL提示符,從此處您可以立即與資料庫管理系統進行互動。

輸入以下命令退出PostgreSQL提示符:

postgres=# \q

這將帶您回到postgresLinux命令提示符。

3.3 在不切換帳戶的情況下訪問Postgres

您也可以讓postgres帳戶用sudo執行您想要的命令。

例如,在最後一個示例中,您被指示通過首先切換到postgres使用者然後執行psql以開啟Postgres提示來進入Postgres提示。您可以通過psql以postgres使用者身份執行單個命令來一步完成此操作sudo,如下所示:

$ sudo -u postgres psql

這將直接登入到Postgres,中間沒有中間bashshell。

同樣,您可以通過輸入以下內容退出互動式Postgres會話:

postgres=# \q

許多用例需要多個Postgresroles。繼續閱讀以瞭解如何配置這些

3.4 建立使用者,資料庫及表

使用預設使用者登入postgresql建立使用者、建立資料庫及完成授權

$ sudo -u postgres psql

建立資料庫新使用者,如 dbuser:

postgres=# CREATE USER dbuser WITH PASSWORD 'zhangfeng';

注意:

語句要以分號結尾。 密碼要用單引號括起來。 建立使用者資料庫,你也可以通過你建立的使用者登入進去以後建立資料庫,如demo:

postgres=# CREATE DATABASE demo OWNER dbuser;

將demo資料庫的所有許可權都賦予dbuser:

postgres=# GRANT ALL PRIVILEGES ON DATABASE demo TO dbuser;

使用命令 \q 退出psql:

postgres=# \q

建立Linux普通使用者,與剛才新建的資料庫使用者同名,如 dbuser:

$ sudo adduser dbuser
$ sudo passwd dbuser

以dbuser的身份連線資料庫exampledb:

$ su - dbuser

Password: 
Last login: Wed Mar 1 11:52:07 CST 2017 on pts/

用我們建立的使用者(dbuser)登入psql

# sudo -u dbuser psql -U dbuser -d demo
could not change directory to "/root": Permission denied
psql (12.9 (Ubuntu 12.9-0ubuntu0.20.04.1))
Type "help" for help.

demo=> \d
                    List of relations
 Schema |           Name            |   Type   |  Owner
--------+---------------------------+----------+----------
 public | playground                | table    | postgres
 public | playground_1              | table    | dbuser
 public | playground_1_equip_id_seq | sequence | dbuser
 public | playground_equip_id_seq   | sequence | postgres
(4 rows)

建立表及插入資料

CREATE TABLE playground_test_odbc (
    equip_id serial PRIMARY KEY,
    type varchar (50) NOT NULL,
    color varchar (25) NOT NULL,
    location varchar(25) ,
    install_date date
);

示例資料

INSERT INTO playground_test_odbc (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
INSERT INTO playground_test_odbc (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

執行結果

demo=> CREATE TABLE playground_test_odbc (
demo(>     equip_id serial PRIMARY KEY,
demo(>     type varchar (50) NOT NULL,
demo(>     color varchar (25) NOT NULL,
demo(>     location varchar(25) ,
demo(>     install_date date
demo(> );
CREATE TABLE
demo=> INSERT INTO playground_test_odbc (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
INSERT 0 1
demo=> INSERT INTO playground_test_odbc (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');
INSERT 0 1

4.安裝Postgresql ODBC驅動

這裡我們下載是和資料版本相對於的驅動程式

Postgresql ODBC驅動下載地址:

wget https://ftp.postgresql.org/pub/odbc/versions/src/psqlodbc-12.02.0000.tar.gz
tar zxvf psqlodbc-12.02.0000.tar.gz
cd psqlodbc-12.02.0000
./configure --without-libpq   (注:由於本機未安裝postgresql,故使用without-libpq選項) 
./configure
make
make install

如果在編譯過程中出現下面的錯誤

configure: error: libpq library version >= 9.2 is required

這是因為缺少libpq的包,需要進行安裝,執行下面的命令

apt-get install libpq-dev

安裝成功,預設驅動放在/usr/local/lib/psqlodbcw.so下

5.驗證ODBC驅動是否成功

5.1 配置註冊Postgresql ODBC驅動

編輯/etc/odbcinst.ini,加入下面的內容

[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/local/lib/psqlodbcw.so
Driver64 = /usr/local/lib/psqlodbcw.so
Setup = /usr/lib/libodbc.so    ##注意這裡是在第二節安裝的unixODBC的so檔案路徑
Setup64 = /usr/lib/libodbc.so
FileUsage = 1

5.2 配置PG 資料來源

編輯/etc/odbc.ini

加入下面內容

[PostgresDB]
Driver = PostgreSQL    ###這裡的名稱和odbcinst.ini裡配置的名稱一致
Description = Postgres DSN
Servername = localhost
Database = demo
Username = dbuser
Password = zhangfeng
Port = 5432
ReadOnly = No

其他的是你的Postgresql地址及剛才建立的使用者、密碼、資料庫、埠等

5.3 驗證是否成功

isql -v PostgresDB dbuser zhangfeng
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

注意這裡的PostgresDB是我們在odbc.ini裡定義的名稱,這裡顯示ODBC正常

 

6.Apache Doris PG外表驗證

6.1 修改配置

修改BE節點conf/odbcinst.ini檔案,加入剛才/etc/odbcinst.ini新增的一樣內容,並刪除原先的PostgreSQL配置

[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/local/lib/psqlodbcw.so
Driver64 = /usr/local/lib/psqlodbcw.so
Setup = /usr/lib/libodbc.so
Setup64 = /usr/lib/libodbc.so
FileUsage = 1

6.2 驗證

建立PG ODBC Resource

CREATE EXTERNAL RESOURCE `pg_12`
 PROPERTIES (
"host" = "localhost",
 "port" = "5432",
 "user" = "dbuser",
 "password" = "zhangfeng",
 "database" = "demo",
 "table" = "playground_test_odbc",
 "driver" = "PostgreSQL",  
 "odbc_type" = "postgresql",
 "type" = "odbc_catalog"
 );

建立ODBC外表

 CREATE EXTERNAL TABLE `playground_odbc_12` (
    equip_id int NOT NULL,
    type varchar (50) NOT NULL,
    color varchar (25) NOT NULL,
    location varchar(25) ,
    install_date date
) ENGINE=ODBC
COMMENT "ODBC"
PROPERTIES (
"odbc_catalog_resource" = "pg_12", 
"database" = "demo",
"table" = "playground_test_odbc"
);

在Doris下執行查詢:

ysql> show tables;
+--------------------+
| Tables_in_demo     |
+--------------------+
| playground_odbc_12 |
| test_odbc_5        |
| test_odbc_8        |
| test_odbc_8_0_26   |
| test_odbc_mysql    |
| test_odbc_mysql_8  |
+--------------------+
6 rows in set (0.00 sec)

mysql> select * from playground_odbc_12;
+----------+-------+--------+-----------+--------------+
| equip_id | type  | color  | location  | install_date |
+----------+-------+--------+-----------+--------------+
|        1 | slide | blue   | south     | 2017-04-28   |
|        2 | swing | yellow | northwest | 2018-08-16   |
+----------+-------+--------+-----------+--------------+
2 rows in set (0.01 sec)

OK,一切正常,相對Mysql PG的ODBC驅動更簡單一些,只要你的PG版本和ODBC驅動版本對應上問題都不大