En esta página se explica cómo migrar tu esquema de MySQL a un esquema de Spanner. Te recomendamos que uses la herramienta de migración de Spanner para crear un esquema de Spanner a partir de un esquema de MySQL. La herramienta asigna la mayoría de los tipos de datos de MySQL a tipos de Spanner, destaca las opciones y proporciona sugerencias para evitar posibles problemas de migración.
Comparación de tipos de datos
Asigna la siguiente lista de tipos de datos de MySQL a sus equivalentes de Spanner:
Tipo de datos de MySQL | Equivalente de Spanner | Notas |
---|---|---|
INTEGER ,
INT ,
BIGINT ,
MEDIUMINT ,
SMALLINT ,
TINYINT
|
INT64 |
|
TINYINT ,
BOOL ,
BOOLEAN ,
|
BOOLEAN |
Los valores TINYINT(1) se usan para representar valores booleanos de
"true" (distinto de cero) o "false" (0). |
BIT
|
BOOLEAN , INT64 |
|
CHAR ,
VARCHAR ,
TINYTEXT ,
TEXT ,
MEDIUMTEXT ,
LONGTEXT
|
STRING |
Spanner usa cadenas Unicode UTF8 en todo el sistema y no tiene ordenaciones configurables.VARCHAR admite una longitud máxima de 65.535 bytes, mientras que
Spanner admite hasta 2.621.440 caracteres.
|
FLOAT |
FLOAT32 |
|
DOUBLE |
FLOAT64 |
|
DECIMAL , NUMERIC |
NUMERIC
|
En MySQL, los tipos de datos NUMERIC y DECIMAL admiten hasta 65 dígitos de precisión y escala, tal como se define en la declaración de la columna. El tipo de datos NUMERIC de Spanner
admite hasta 38 dígitos de precisión y 9 dígitos decimales de escala.Si necesitas una mayor precisión, consulta el artículo sobre cómo almacenar datos numéricos de precisión arbitraria para ver otros mecanismos. |
BINARY ,
VARBINARY ,
TINYBLOB ,
BLOB ,
MEDIUMBLOB ,
LONGBLOB
|
BYTES |
Los objetos pequeños (menos de 10 MiB) se pueden almacenar como
BYTES . Puedes usar otras Google Cloud ofertas, como Cloud Storage, para almacenar objetos de mayor tamaño.
|
DATE |
DATE |
Tanto Spanner como MySQL usan el formato "yyyy-mm-dd " para las fechas, por lo que no es necesario hacer ninguna transformación. Se proporcionan funciones SQL para convertir fechas en una cadena con formato.
|
DATETIME , TIMESTAMP |
TIMESTAMP |
Spanner almacena la hora independientemente de la zona horaria. Si necesitas almacenar una zona horaria, debes usar una columna STRING independiente.
Se proporcionan funciones de SQL para convertir marcas de tiempo en una cadena con formato mediante zonas horarias. |
TEXT , TINYTEXT , ENUM |
STRING |
Los valores pequeños de TEXT (inferiores a 10 MiB) se pueden almacenar como STRING . Puedes usar otras Google Cloud ofertas
como Cloud Storage para admitir valores TEXT
más grandes.
|
ENUM |
STRING |
La validación de los valores de ENUM debe realizarse en la aplicación. |
SET |
ARRAY<STRING> |
La validación de los valores del elemento SET debe realizarse en la aplicación. |
LONGBLOB , MEDIUMBLOB |
BYTES o STRING que contiene el URI del objeto.
|
Los objetos pequeños (menos de 10 MiB) se pueden almacenar como BYTES .
Puedes usar otras Google Cloud ofertas, como Cloud Storage, para almacenar objetos de mayor tamaño.
|
LONGTEXT , MEDIUMTEXT |
STRING (que contiene datos o un URI a un objeto externo)
|
Los objetos pequeños (menos de 2.621.440 caracteres) se pueden almacenar como STRING . Puedes usar otras Google Cloud ofertas
como Cloud Storage para almacenar objetos de mayor tamaño.
|
JSON |
JSON
|
Las cadenas JSON pequeñas (menos de 2.621.440 caracteres) se pueden almacenar como JSON . Puedes usar otras Google Cloud ofertas
como Cloud Storage para almacenar objetos de mayor tamaño.
|
GEOMETRY ,
POINT ,
LINESTRING ,
POLYGON ,
MULTIPOINT ,
MULTIPOLYGON ,
GEOMETRYCOLLECTION
|
STRING ,
ARRAY
|
Spanner no admite tipos de datos geoespaciales. Debe almacenar estos datos con tipos de datos estándar e implementar cualquier lógica de búsqueda o filtrado en la aplicación. |
En muchos casos, varios tipos de MySQL se asignan a un solo tipo de Spanner. Esto se debe a que MySQL tiene un conjunto de tipos para el mismo concepto que tienen límites de longitud diferentes, mientras que Spanner tiene un tipo general con un límite único relativamente grande.
Ten en cuenta los siguientes ejemplos:
MySQL tiene
TEXT
,TINYTEXT
,MEDIUMTEXT
yLONGTEXT
. En Spanner, hay un solo tipoSTRING
con un parámetro de longitud de caracteres que se puede definir con cualquier valor de hasta 2.621.440 caracteres.MySQL tiene
INTEGER
,INT
,BIGINT
,MEDIUMINT
,SMALLINT
yTINYINT
. Spanner tiene un solo tipoINT64
que almacena valores enteros con signo de 8 bytes. La principal diferencia es queINT64
de Spanner consume más espacio de almacenamiento queMEDIUMINT
,SMALLINT
yTINYINT
. Además,INT64
no captura las limitaciones de intervalo deMEDIUMINT
,SMALLINT
yTINYINT
, aunque se pueden aplicar añadiendo restriccionesCHECK
.
Spanner no admite tipos geoespaciales. Puedes almacenar valores de estos tipos codificándolos como cadenas, bytes o arrays. Cualquier filtrado, operación y función debe realizarse a nivel de aplicación.
Consultas
Spanner usa el dialecto ANSI 2011 de SQL con extensiones y tiene muchas funciones y operadores para ayudarte a traducir y agregar tus datos. Las consultas de SQL que usen dialectos, funciones y tipos específicos de MySQL deben convertirse para que sean compatibles con Spanner.
Aunque Spanner no admite datos estructurados como definiciones de columnas, puedes usar datos estructurados en consultas de SQL con los tipos ARRAY<>
y STRUCT<>
. Por ejemplo, puedes escribir una consulta que devuelva todos los álbumes de un artista usando un ARRAY
de STRUCT
s (aprovechando los datos precombinados). Para obtener más información, consulta la sección Subconsultas de la documentación.
Puedes ejecutar consultas de SQL en la página Spanner Studio de la consola. Google Cloud En general, las consultas que realizan análisis de tabla completa en tablas grandes son muy costosas y deben usarse con moderación. Para obtener más información sobre cómo optimizar las consultas de SQL, consulta la documentación sobre las prácticas recomendadas para SQL.
Procedimientos almacenados y activadores
Spanner no admite la ejecución de código de usuario a nivel de base de datos. Como parte de la migración del esquema, mueve los procedimientos almacenados y los activadores de lógica empresarial que hayas implementado en el nivel de la base de datos MySQL a tu aplicación.
Secuencias
Spanner recomienda usar UUID versión 4 como método predeterminado para generar valores de clave principal. La función GENERATE_UUID()
devuelve valores de UUID versión 4 representados como tipo STRING
.
Si necesita generar valores enteros, Spanner admite secuencias positivas invertidas por bits, que producen valores que se distribuyen de forma uniforme en el espacio de números positivos de 64 bits. Puedes usar estos números para evitar problemas con la conexión compartida.
Para obtener más información, consulte las estrategias de valor predeterminado de clave principal.