Чтение из MySQL с помощью MySQL.sql
MySQL.sql позволяет передавать пользовательский SQL-запрос, но не поддерживает инкрементальные стратегии.
Warning
Пожалуйста, учитывайте MySQL типы
Warning
Оператор выполняется в соединении read-write, поэтому если вы вызываете какие-то функции/процедуры с DDL/DML операторами внутри, они могут изменить данные в вашей базе данных.
Поддержка синтаксиса
Поддерживаются только запросы со следующим синтаксисом:
- ✅︎
SELECT ... FROM ... - ✅︎
WITH alias AS (...) SELECT ... - ❌
SHOW ... - ❌
SET ...; SELECT ...;- несколько операторов не поддерживается
Примеры
```python
from onetl.connection import MySQL
mysql = MySQL(...)
df = mysql.sql(
"""
SELECT
id,
key,
CAST(value AS text) value,
updated_at
FROM
some.mytable
WHERE
key = 'something'
""",
options=MySQL.SQLOptions(
partitionColumn="id",
numPartitions=10,
lowerBound=0,
upperBound=1000,
),
)
```
Рекомендации
Выбирайте только необходимые столбцы
Вместо передачи SELECT * FROM ... предпочитайте указывать точные имена столбцов SELECT col1, col2, ....
Это уменьшает количество данных, передаваемых из MySQL в Spark.
Обратите внимание на значение where
Вместо фильтрации данных на стороне Spark с помощью df.filter(df.column == 'value') указывайте соответствующее условие WHERE column = 'value'.
Это уменьшает объем данных, отправляемых из MySQL в Spark, а также может улучшить производительность запроса.
Особенно если существуют индексы или в условии where, используются столбцы партиционирования.
Опции
onetl.connection.db_connection.mysql.options.MySQLSQLOptions
Bases: JDBCSQLOptions
Source code in onetl/connection/db_connection/mysql/options.py
24 25 | |