MySQL 連接器

MySQL 連接器允許在外部 MySQL 資料庫中查詢和建立表格。這可用於連接不同系統(如 MySQL 和 Hive)或兩個不同 MySQL 執行個體之間的資料。

設定

若要設定 MySQL 連接器,請在 etc/catalog 中建立一個目錄屬性檔案,例如,名為 mysql.properties,以將 MySQL 連接器掛載為 mysql 目錄。使用以下內容建立檔案,並根據您的設定適當取代連線屬性

connector.name=mysql
connection-url=jdbc:mysql://example.net:3306
connection-user=root
connection-password=secret

connection-url 定義連線資訊和要傳遞給 MySQL JDBC 驅動程式的參數。URL 的支援參數可在 MySQL 開發人員指南中找到。

例如,以下 connection-url 允許您設定 JDBC 驅動程式,以根據伺服器上的時區將時間值解譯為 UTC,並作為 已知問題的因應措施

connection-url=jdbc:mysql://example.net:3306?serverTimezone=UTC

connection-userconnection-password 通常是必要的,並決定連線的使用者認證,通常是服務使用者。

多個 MySQL 伺服器

您可以擁有所需的目錄數量,因此如果您有其他 MySQL 伺服器,只需在 etc/catalog 中新增另一個具有不同名稱的屬性檔案(確保它以 .properties 結尾)。例如,如果您將屬性檔案命名為 sales.properties,Presto 將使用已設定的連接器建立一個名為 sales 的目錄。

一般設定屬性

屬性名稱

描述

預設

user-credential-name

extraCredentials 屬性的名稱,其值是 JDBC 驅動程式的使用者名稱。請參閱 參數參考中的 extraCredentials

password-credential-name

extraCredentials 屬性的名稱,其值是 JDBC 驅動程式的使用者密碼。請參閱 參數參考中的 extraCredentials

case-insensitive-name-matching

不區分大小寫地比對資料集和表格名稱。

false

case-insensitive-name-matching.cache-ttl

將遠端資料集和表格名稱快取的持續時間。設定為 0ms 以停用快取。

1m

查詢 MySQL

MySQL 連接器為每個 MySQL *資料庫* 提供一個綱要。您可以執行 SHOW SCHEMAS 來查看可用的 MySQL 資料庫

SHOW SCHEMAS FROM mysql;

如果您有一個名為 web 的 MySQL 資料庫,您可以執行 SHOW TABLES 來查看此資料庫中的表格

SHOW TABLES FROM mysql.web;

您可以使用以下任一方式查看 web 資料庫中 clicks 表格中的欄位清單

DESCRIBE mysql.web.clicks;
SHOW COLUMNS FROM mysql.web.clicks;

最後,您可以存取 web 資料庫中的 clicks 表格

SELECT * FROM mysql.web.clicks;

如果您為目錄屬性檔案使用了不同的名稱,請在上述範例中使用該目錄名稱,而不是 mysql

類型映射

PrestoDB 和 MySQL 各自支援對方不支援的類型。當從 MySQL 讀取或寫入時,Presto 會將資料類型從 MySQL 轉換為等效的 Presto 資料類型,並從 Presto 轉換為等效的 MySQL 資料類型。請參閱以下章節,瞭解每個方向的類型映射。

MySQL 到 PrestoDB 類型映射

連接器會將 MySQL 類型映射到對應的 PrestoDB 類型

MySQL 到 PrestoDB 類型映射

MySQL 類型

PrestoDB 類型

BIT

BOOLEAN

BOOLEAN

TINYINT

TINYINT

TINYINT

TINYINT UNSIGNED

TINYINT

SMALLINT

SMALLINT

SMALLINT UNSIGNED

SMALLINT

INTEGER

INTEGER

INTEGER UNSIGNED

INTEGER

BIGINT

BIGINT

BIGINT UNSIGNED

BIGINT

DOUBLE PRECISION

DOUBLE

FLOAT

REAL

REAL

DOUBLE

DECIMAL(p, s)

DECIMAL(p, s)

CHAR(n)

CHAR(n)

VARCHAR(n)

VARCHAR(n)

TINYTEXT

VARCHAR(255)

TEXT

VARCHAR(65535)

MEDIUMTEXT

VARCHAR(16777215)

LONGTEXT

VARCHAR

ENUM(n)

CHAR(n)

BINARYVARBINARYTINYBLOBBLOBMEDIUMBLOBLONGBLOB

VARBINARY

JSON

CHAR(n)

DATE

DATE

TIME(n)

TIME

DATETIME(n)

DATETIME

TIMESTAMP(n)

TIMESTAMP

不支援其他類型。

PrestoDB 到 MySQL 類型映射

連接器會將 PrestoDB 類型映射到對應的 MySQL 類型

PrestoDB 到 MySQL 類型映射

PrestoDB 類型

MySQL 類型

BOOLEAN

TINYINT

TINYINT

TINYINT

SMALLINT

SMALLINT

INTEGER

INTEGER

BIGINT

BIGINT

REAL

REAL

DOUBLE

DOUBLE PRECISION

DECIMAL(p, s)

DECIMAL(p, s)

CHAR(n)

CHAR(n)

VARCHAR(n)

TINYTEXTMEDIUMTEXT

VARCHAR

LONGTEXT

DATE

DATE

TIME

TIME

TIMESTAMP

DATETIME

VARBINARY

MEDIUMBLOB

不支援其他類型。

SQL 支援

MySQL 連接器允許查詢和建立 MySQL 表格。以下是一些支援的 SQL 操作範例

ALTER TABLE

ALTER TABLE mysql.web.page_views ADD COLUMN zipcode VARCHAR;
ALTER TABLE mysql.web.page_views RENAME COLUMN zipcode TO location;
ALTER TABLE mysql.web.page_views DROP COLUMN location;

CREATE TABLE

web 綱要中建立一個名為 page_views 的新 MySQL 表格

CREATE TABLE mysql.web.page_views (
  user_id bigint,
  page_url varchar,
  ds date,
  country varchar
);

注意

Presto 不強制執行主鍵約束。例如,以下陳述式

CREATE TABLE users (
        id INT PRIMARY KEY,
        name TEXT,
        email TEXT
    );

會傳回類似以下的錯誤

Query 20240322_095447_00010_syzb3 failed: line 2:19: mismatched input 'PRIMARY'. Expecting: ')', ','

CREATE TABLE AS SELECT

從現有表格 page_views 建立一個新表格 page_views_new

CREATE TABLE mysql.web.page_views_new AS SELECT * FROM mysql.web.page_views;

注意

CREATE TABLE AS SELECT 陳述式中不支援資料壓縮等進階 SQL 功能。

CREATE TABLE compressed_employees AS SELECT * FROM employees WITH (compression = 'Zlib');

會傳回類似以下的錯誤

查詢 20240321_103408_00015_kbd43 失敗: 1:67: 輸入不符 '('。 預期: 'DATA'、 'NO'

INSERT INTO

將資料插入 page_views 資料表

INSERT INTO mysql.web.page_views VALUES(1, 'https://example.com', current_date, 'country');

SELECT

SELECT * FROM mysql.web.page_views;

TRUNCATE

page_views 資料表中刪除所有資料,但不刪除資料表

TRUNCATE TABLE mysql.web.page_views;

MySQL 連接器限制

不支援以下 SQL 陳述式