DolphinDB proporciona dos métodos para importar datos MySQL: complemento ODBC y complemento MySQL. Recomendamos utilizar el complemento MySQL para importar datos MySQL, porque es más rápido que la importación de ODBC, la importación de datos 6.5G, el complemento MySQL es 4 veces más rápido que el complemento ODBC y no se requiere configuración para usar Complemento MySQL, mientras que el complemento ODBC necesita configurar la fuente de datos.
Antes de utilizar el complemento MySQL, consulte la Guía de instalación de DolphinDB para instalar DolphinDB.
1. Descarga el complemento
El directorio de instalación de DolphinDB / server / plugins / mysql ya contiene el complemento MySQL, y los usuarios pueden usarlo directamente. Si los usuarios necesitan compilar por sí mismos, pueden consultar https://github.com/dolphindb/DolphinDBPlugin/blob/master/mysql/README_CN.md .
2. Cargue el complemento
En la GUI, use la función loadPlugin para cargar el complemento MySQL:
loadPlugin(server_dir+"/plugins/mysql/PluginMySQL.txt")
3. Función de interfaz
El complemento MySQL de DolphinDB proporciona las siguientes funciones de interfaz:
- conectar
- showTables
- extractSchema
- carga
- loadEx
Podemos llamar a funciones de interfaz de complemento de las dos formas siguientes:
(1) nombreMódulo :: apiFunction. Por ejemplo, llame al método de conexión del complemento MySQL.
mysql::connect(host, port, user, password, db)
(2) Use moduleName y luego llame directamente a la función de interfaz. Siempre que la instrucción use se ejecute una vez, las llamadas posteriores a la función de interfaz no necesitan volver a ejecutar la función use. Por lo tanto, generalmente recomendamos este método de llamada.
use mysql
connect(host, port, user, password, db)
3.1 conectar
gramática
conectar (host, puerto, usuario, contraseña, base de datos)
parámetro
host es el nombre de host del servidor MySQL.
port es el número de puerto del servidor MySQL y el predeterminado es 3306.
usuario es el nombre de usuario en el servidor MySQL.
contraseña es la contraseña correspondiente al usuario.
db es el nombre de la base de datos en MySQL.
Detalles
Cree una conexión MySQL y devuelva el identificador de la conexión MySQL. Recomendamos que el tipo de autenticación para los usuarios de MySQL sea mysql_native_password.
ejemplo
Conéctese a la base de datos de empleados en el servidor MySQL local.
conn=connect("127.0.0.1",3306,"root","123456","employees")
3.2 tablas de presentación
gramática
showTables (conexión)
parámetro
conexión es el identificador de conexión devuelto por la función de conexión.
Detalles
Devuelve una tabla de datos de tipo DolphinDB, incluidos los nombres de todas las tablas de la base de datos MySQL.
ejemplo
Ver las tablas en la base de datos de empleados.
showTables(conn);
Tables_in_employees
current_dept_emp
departments
dept_emp
dept_emp_latest_date
dept_manager
employees
salaries
test_datatypes
titles
3.2 extractoSchema
gramática
extractSchema (conexión, tableName)
parámetro
conexión es el identificador de conexión devuelto por la función de conexión.
tableName es el nombre de la tabla de datos en la base de datos MySQL.
Detalles
El resultado devuelto es una tabla de tipo DolphinDB. La primera columna es el nombre del campo en la tabla de datos de MySQL, la segunda columna es el tipo de datos después de que los datos se importan a DolphinDB y la tercera columna es el tipo de datos en MySQL.
ejemplo
Vea el tipo de datos de cada columna en la tabla de empleados.
extractSchema(conn,`employees);
name type MySQL describe type
emp_no LONG int(11)
birth_date DATE date
first_name STRING varchar(14)
last_name STRING varchar(16)
gender SYMBOL enum('M','F')
hire_date DATE date
3.3 carga
gramática
load (conexión, tabla | consulta, [esquema], [startRow], [rowNum])
parámetro
conexión es el identificador de conexión devuelto por la función de conexión.
table es el nombre de la tabla en el servidor MySQL.
query es una declaración de consulta en MySQL.
El esquema es una tabla de tipo DolphinDB, que contiene dos columnas, la primera columna es el nombre del campo y la segunda columna es el tipo de datos. Es un parámetro opcional. Los usuarios pueden modificar el tipo de datos al cargar datos en DolphinDB especificando este parámetro.
startRow es un número entero positivo, que indica el número de fila inicial de los datos que se leerán. Es un parámetro opcional, el valor predeterminado es 0, lo que significa comenzar a leer datos desde el primer registro.
rowNum es un número entero positivo que indica el número de filas de registros leídos. Es un parámetro opcional, si no se especifica, significa leer todos los datos. Si el segundo parámetro es query, los parámetros startRow y rowNum no son válidos.
Detalles
Cargue datos de MySQL en la tabla de memoria de DolphinDB.
ejemplo
- Cargue todos los datos de la tabla de empleados en la tabla de memoria de DolphinDB.
t=load(conn,"employees");
emp_no birth_date first_name last_name gender hire_date
10,001 1953.09.02 Georgi Facello M 1986.06.26
10,002 1964.06.02 Bezalel Simmel F 1985.11.21
10,003 1959.12.03 Parto Bamford M 1986.08.28
10,004 1954.05.01 Chirstian Koblick M 1986.12.01
10,005 1955.01.21 Kyoichi Maliniak M 1989.09.12
10,006 1953.04.20 Anneke Preusig F 1989.06.02
10,007 1957.05.23 Tzvetan Zielinski F 1989.02.10
10,008 1958.02.19 Saniya Kalloufi M 1994.09.15
10,009 1952.04.19 Sumant Peac F 1985.02.18
10,010 1963.06.01 Duangkaew Piveteau F 1989.08.24
...
2. Cargue las primeras 10 filas de datos de la tabla de empleados en la tabla de memoria de DolphinDB.
t=load(conn,"select * from employees limit 10");
emp_no birth_date first_name last_name gender hire_date
10,001 1953.09.02 Georgi Facello M 1986.06.26
10,002 1964.06.02 Bezalel Simmel F 1985.11.21
10,003 1959.12.03 Parto Bamford M 1986.08.28
10,004 1954.05.01 Chirstian Koblick M 1986.12.01
10,005 1955.01.21 Kyoichi Maliniak M 1989.09.12
10,006 1953.04.20 Anneke Preusig F 1989.06.02
10,007 1957.05.23 Tzvetan Zielinski F 1989.02.10
10,008 1958.02.19 Saniya Kalloufi M 1994.09.15
10,009 1952.04.19 Sumant Peac F 1985.02.18
10,010 1963.06.01 Duangkaew Piveteau F 1989.08.24
3. Modifique el tipo de datos de last_name a SYMBOL al cargar.
schema=select name,type from extractSchema(conn,`employees)
update schema set type="SYMBOL" where name="last_name"
t=load(conn,"employees",schema)
//查看表t的结构
schema(t);
chunkPath->
partitionColumnIndex->-1
colDefs->
name typeString typeInt
---------- ---------- -------
emp_no LONG 5
birth_date DATE 6
first_name STRING 18
last_name SYMBOL 18
gender SYMBOL 17
hire_date DATE 6
3.4 loadEx
gramática
loadEx (conexión, dbHandle, tableName, partitionColumns, tabla | consulta, [esquema], [startRow], [rowNum])
parámetro
conexión es el identificador de conexión devuelto por la función de conexión.
dbHandle es el identificador de la base de datos de DolphinDB, generalmente el objeto devuelto por la función de la base de datos.
tableName es el nombre de la tabla en la base de datos DolphinDB.
partitionColumns es un escalar o vector de cadena, que representa columnas de partición.
table es una cadena que representa el nombre de la tabla en el servidor MySQL.
query es una declaración de consulta en MySQL.
El esquema es una tabla de tipo DolphinDB, que contiene dos columnas, la primera columna es el nombre del campo y la segunda columna es el tipo de datos. Es un parámetro opcional. Los usuarios pueden modificar el tipo de datos al cargar datos en DolphinDB especificando este parámetro.
startRow es un número entero positivo, que indica el número de fila inicial de los datos que se leerán. Es un parámetro opcional, el valor predeterminado es 0, lo que significa comenzar a leer datos desde el primer registro.
rowNum es un número entero positivo que indica el número de filas de registros leídos. Es un parámetro opcional, si no se especifica, significa leer todos los datos. Si el segundo parámetro es query, los parámetros startRow y rowNum no son válidos.
Detalles
Cargue los datos en MySQL en la tabla de particiones de DolphinDB. loadEx no admite la carga de datos en la tabla de particiones secuenciales de DolphinDB.
ejemplo
Cargue la tabla de empleados en la tabla de particiones VALUE del disco de DolphinDB.
db=database("H:/DolphinDB/Data/mysql",VALUE,`F`M)
pt=loadEx(conn,db,"pt","gender","employees")
select count(*) from loadTable(db,"pt");
count
300,024
Si necesita cargar datos en la tabla de particiones de memoria, solo necesita cambiar la ruta de la base de datos a una cadena vacía; si necesita cargar datos en una tabla distribuida, solo necesita modificar la ruta de la base de datos a una ruta que comience con " dfs: // ", por ejemplo," dfs: // mysql ". Es necesario utilizar tablas distribuidas en el clúster. Para la implementación de un clúster, consulte la implementación de un clúster de un solo servidor y la implementación de un clúster de varios servidores .
4. Conversión de tipos de datos
Al importar datos a DolphinDB utilizando el complemento MySQL, se realizará la conversión de tipo correspondiente. Las reglas de conversión específicas se muestran en la siguiente tabla:
Descripción:
(1) Los tipos enteros (SHORT, INT, LONG) en DolphinDB están todos firmados. Para evitar el desbordamiento, los tipos sin firmar en MySQL se convertirán a tipos con signo de orden superior en DolphinDB. Por ejemplo, unsigned tinyint se convierte en short, unsigned smallint se convierte en short, etc. Actualmente, el complemento MySQL no admite la conversión de tipos sin firmar de 64 bits.
(2) En DolphinDB, el valor mínimo de un número entero representa NULL: -128 de tipo CHAR, -32,768 de tipo SHORT, -2,147,483,648 de tipo INT y -9,223,372,036,854,775,808 de tipo LONG todos representan NULL.
(3) Para el tipo bigint unsigned en MySQL, se convertirá al tipo LONG de DolphinDB por defecto. Si se produce un desbordamiento, el usuario debe utilizar el parámetro de esquema y especificar el tipo como DOBLE o FLOAT.
(4) Los tipos char y varchar en MySQL, si la longitud es menor o igual a 10, se convertirán al tipo SYMBOL de DolphinDB, y si la longitud es mayor que 10, se convertirán al tipo STRING de DolphinDB. El tipo SYMBOL se almacena como un número entero dentro de DolphinDB, por lo que la eficiencia de la clasificación y comparación de datos será mayor y también puede ahorrar espacio de almacenamiento. Pero se necesita tiempo para asignar una cadena a un número entero, y la tabla de asignación también ocupa memoria. El usuario puede decidir si una columna usa el tipo SYMBOL de acuerdo con las siguientes reglas: Si el valor del campo se repetirá en números grandes, use el tipo SYMBOL. Por ejemplo, los códigos de acciones, las bolsas y los códigos de contrato en los datos financieros y los números de dispositivo en los datos de IoT son escenarios típicos que utilizan SYMBOL.
5. Prueba de rendimiento
Realizamos una prueba de rendimiento en una PC normal (memoria 16G, 4 núcleos y 8 subprocesos, usando SSD). El conjunto de datos utilizado son los datos de cotización diaria del mercado de valores de EE. UU. De 1990 a 2016. El volumen de datos es 6.5G, que contiene 22 campos, 50.591.907 filas de registros y el uso del disco en la base de datos MySQL es 7.2G. El uso de la función loadEx para importar datos de MySQL a la base de datos particionada de DolphinDB tomó solo 160.5 segundos, la velocidad de lectura alcanzó 41.4M / sy el uso del disco en la base de datos DolphinDB fue 1.3G. En la misma PC, el uso de ODBC para importar datos a la vez hará que se agote la memoria MySQL, por lo que importar 1 millón de datos cada vez toma 660 segundos. Importar los mismos datos a clickhouse tomó 171,9 segundos y la velocidad de lectura fue de 37,8 M / s. DolphinDB es más conveniente que clickhouse en el procesamiento de datos de series de tiempo y la administración de particiones. Si desea garantizar el rendimiento y, al mismo tiempo, admitir varios procesos de datos de series de tiempo y bases de datos distribuidas, DolphinDB será la mejor opción.