# MySQL
Ermöglicht das Ausführen von SELECT
- und INSERT
-Abfragen auf Daten, die auf einem entfernten MySQL-Server gespeichert sind.
# Syntax
mysql('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause'])
Argumente
host:port
— MySQL-Serveradresse.database
— Name der entfernten Datenbank.table
— Name der entfernten Tabelle.user
— MySQL-Benutzer.password
— Benutzerpasswort.replace_query
— Flag, dasINSERT INTO
-Abfragen inREPLACE INTO
umwandelt. Mögliche Werte:0
- Die Abfrage wird alsINSERT INTO
ausgeführt.1
- Die Abfrage wird alsREPLACE INTO
ausgeführt.
on_duplicate_clause — Der
ON DUPLICATE KEY
-Ausdruck, der derINSERT
-Abfrage hinzugefügt wird. Kann nur mitreplace_query = 0
angegeben werden (wenn Sie gleichzeitigreplace_query = 1
undon_duplicate_clause
übergeben, generiert MyScale eine Ausnahme).Beispiel:
INSERT INTO t (c1, c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1;
Hier ist
on_duplicate_clause
UPDATE c2 = c2 + 1
. In der MySQL-Dokumentation finden Sie heraus, welcheon_duplicate_clause
Sie mit derON DUPLICATE KEY
-Klausel verwenden können.Einfache
WHERE
-Klauseln wie=
,!=
,>
,>=
,<
,<=
werden derzeit auf dem MySQL-Server ausgeführt.Der Rest der Bedingungen und die
LIMIT
-Abtastbedingung werden in MyScale erst nach Abschluss der Abfrage an MySQL ausgeführt.
Unterstützt mehrere Replikate, die durch |
aufgelistet werden müssen. Zum Beispiel:
SELECT name FROM mysql(`mysql_host{1|2|3}:3306`, '[mysql_database]', '[mysql_table]', '[mysql_user]', '[mysql_password]');
oder
SELECT name FROM mysql(`mysql_host1:3306|mysql_host2:3306|mysql_host3:3306`, '[mysql_database]', '[mysql_table]', '[mysql_user]', '[mysql_password]');
# Rückgabewert
Ein Tabellenobjekt mit den gleichen Spalten wie die ursprüngliche MySQL-Tabelle.
# Beispiele
# Tabelle in MySQL
# CREATE DATABASE
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.00 sec)
# CREATE TABLE
mysql> CREATE TABLE `test`.`test` (
-> `int_id` INT NOT NULL AUTO_INCREMENT,
-> `float` FLOAT NOT NULL,
-> PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0.01 sec)
# INSERT
mysql> INSERT INTO test.test (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0.00 sec)
# SELECT
mysql> SELECT * FROM test.test;
+--------+-------+
| int_id | float |
+--------+-------+
| 1 | 2 |
+--------+-------+
1 row in set (0.00 sec)
# Daten aus MySQL abrufen
SELECT * FROM mysql('[host:port]', 'test', 'test', '[mysql_user]', '[mysql_password]');
┌─int_id─┬─float─┐
│ 1 │ 2 │
└────────┴───────┘
# Ersetzen und Einfügen
# INSERT
INSERT INTO FUNCTION mysql('[host:port]', 'test', 'test', '[mysql_user]', '[mysql_password]') (int_id, float) VALUES (2, 3);
# REPLACE
INSERT INTO TABLE FUNCTION mysql('[host:port]', 'test', 'test', '[mysql_user]', '[mysql_password]', 0, 'UPDATE int_id = int_id + 1') (int_id, float) VALUES (2, 4);
# SELECT
SELECT * FROM mysql('[host:port]', 'test', 'test', '[mysql_user]', '[mysql_password]');
┌─int_id─┬─float─┐
│ 1 │ 3 │
│ 3 │ 3 │
└────────┴───────┘
# Kopieren von Daten aus einer MySQL-Tabelle in eine MyScale-Tabelle
# CREATE TABLE
CREATE TABLE mysql_copy
(
`id` UInt64 NOT NULL,
`score` FLOAT NOT NULL,
)
ENGINE = MergeTree
ORDER BY (id);
# INSERT
INSERT INTO mysql_copy
SELECT * FROM mysql('[host:port]', 'test', 'test', '[mysql_user]', '[mysql_password]');
# SELECT
SELECT * from mysql_copy;
┌─int_id─┬─float─┐
│ 1 │ 2 │
│ 3 │ 3 │
└────────┴───────┘
# Nur eine inkrementelle Charge von MySQL basierend auf der maximalen aktuellen ID kopieren
# INSERT
INSERT INTO mysql_copy
SELECT * FROM mysql('[host:port]', 'test', 'test', '[mysql_user]', '[mysql_password]');
WHERE int_id > (SELECT max(id) from mysql_copy);
# SELECT
SELECT * FROM mysql_copy;
┌─int_id─┬─float─┐
│ 1 │ 2 │
│ 3 │ 3 │
└────────┴───────┘