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-user
和 connection-password
通常是必要的,並決定連線的使用者認證,通常是服務使用者。
多個 MySQL 伺服器¶
您可以擁有所需的目錄數量,因此如果您有其他 MySQL 伺服器,只需在 etc/catalog
中新增另一個具有不同名稱的屬性檔案(確保它以 .properties
結尾)。例如,如果您將屬性檔案命名為 sales.properties
,Presto 將使用已設定的連接器建立一個名為 sales
的目錄。
一般設定屬性¶
屬性名稱 |
描述 |
預設 |
---|---|---|
|
|
|
|
|
|
|
不區分大小寫地比對資料集和表格名稱。 |
|
|
將遠端資料集和表格名稱快取的持續時間。設定為 |
|
查詢 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 類型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不支援其他類型。
PrestoDB 到 MySQL 類型映射¶
連接器會將 PrestoDB 類型映射到對應的 MySQL 類型
PrestoDB 類型 |
MySQL 類型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不支援其他類型。
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 陳述式