MySQL Connector¶
MySQLコネクタを使用すると、外部MySQLデータベース内のテーブルのクエリと作成が可能です。これにより、MySQLとHive、または2つの異なるMySQLインスタンス間など、異なるシステム間のデータ結合に使用できます。
設定¶
MySQLコネクタを設定するには、例としてmysql.properties
という名前でetc/catalog
にカタログプロパティファイルを作成し、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
を使用すると、サーバー上のタイムゾーンとしてUTCに基づいて時間値を解釈するようにJDBCドライバを設定でき、既知の問題の回避策として機能します。
connection-url=jdbc:mysql://example.net:3306?serverTimezone=UTC
connection-user
とconnection-password
は通常必要であり、接続のユーザー資格情報(多くの場合、サービスユーザー)を決定します。
複数のMySQLサーバー¶
必要な数のカタログを持つことができます。そのため、追加のMySQLサーバーがある場合は、.properties
で終わる別の名前で(etc/catalog
に)別のプロパティファイルを追加するだけです。たとえば、プロパティファイルにsales.properties
という名前を付けると、Prestoは設定されたコネクタを使用してsales
という名前のカタログを作成します。
一般的な設定プロパティ¶
プロパティ名 |
説明 |
デフォルト |
---|---|---|
|
JDBCドライバのユーザー名の値である |
|
|
JDBCドライバのユーザーパスワードの値である |
|
|
データセットとテーブル名を大文字と小文字を区別せずに一致させます。 |
|
|
リモートデータセットとテーブル名がキャッシュされる期間。 |
|
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からの読み取りまたは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
);
は、次のようなエラーを返します。
クエリ 20240322_095447_00010_syzb3 失敗: 2行目19文字目: 入力 'PRIMARY' が一致しません。 期待される入力: ')', ','
CREATE TABLE AS SELECT¶
既存テーブルpage_views
から新しいテーブルpage_views_new
を作成します。
CREATE TABLE mysql.web.page_views_new AS SELECT * FROM mysql.web.page_views;
注記
データ圧縮などの高度なSQL機能は、CREATE TABLE AS SELECT
文ではサポートされていません。
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文はサポートされていません。