En esta página, se muestra cómo migrar tu esquema de MySQL al esquema de Spanner. Te recomendamos que uses la herramienta de migración de Spanner para compilar un esquema de Spanner a partir de un esquema de MySQL existente. La herramienta asigna la mayoría de los tipos de datos de MySQL a los 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 su equivalente en Spanner:
Tipo de datos de MySQL | Equivalente en Spanner | Notas |
---|---|---|
INTEGER ,
INT ,
BIGINT ,
MEDIUMINT ,
SMALLINT ,
TINYINT
|
INT64 |
|
TINYINT ,
BOOL ,
BOOLEAN ,
|
BOOLEAN |
Los valores TINYINT(1) se usan para representar valores booleanos de
“verdadero” (distinto de cero) o “falso” (0). |
BIT
|
BOOLEAN , INT64 |
|
CHAR ,
VARCHAR ,
TINYTEXT ,
TEXT ,
MEDIUMTEXT ,
LONGTEXT
|
STRING |
Spanner usa cadenas Unicode UTF8 en todo momento y no tiene intercalaciones 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 un total de 65 dígitos de precisión y escalamiento, 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 precisión mayor, consulta Almacena datos numéricos de precisión arbitraria para ver mecanismos alternativos. |
BINARY ,
VARBINARY ,
TINYBLOB ,
BLOB ,
MEDIUMBLOB ,
LONGBLOB
|
BYTES |
Los objetos pequeños (menos de 10 MiB) se pueden almacenar como
BYTES . Considera usar ofertas alternativas de Google Cloud como Cloud Storage para almacenar objetos más grandes.
|
DATE |
DATE |
Spanner y MySQL usan el formato “yyyy-mm-dd ”
para las fechas, por lo que no es necesario realizar ninguna transformación. Se proporcionan funciones de SQL
para convertir las fechas en una cadena con formato.
|
DATETIME , TIMESTAMP |
TIMESTAMP |
Spanner almacena el tiempo independientemente de la zona horaria. Si necesitas almacenar una zona horaria, debes usar una columna STRING independiente.
Se proporcionan funciones de SQL para convertir las marcas de tiempo en una cadena con formato usando zonas horarias. |
TEXT , TINYTEXT , ENUM |
STRING |
Los valores TEXT pequeños (menos de 10 MiB) se pueden almacenar como
STRING . Considera usar ofertas alternativas de Google Cloud , 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 contienen el URI al objeto.
|
Los objetos pequeños (menos de 10 MiB) se pueden almacenar como BYTES .
Considera usar ofertas alternativas de Google Cloud como Cloud Storage para almacenar objetos más grandes.
|
LONGTEXT , MEDIUMTEXT |
STRING (que puede contener datos o el URI de un objeto externo) |
Los objetos pequeños (menos de 2,621,440 caracteres) se pueden almacenar como STRING . Considera usar ofertas alternativas de Google Cloud como Cloud Storage para almacenar objetos más grandes.
|
JSON |
JSON
|
Las cadenas JSON pequeñas (menos de 2,621,440 caracteres) se pueden almacenar como JSON . Considera usar ofertas alternativas de Google Cloud como Cloud Storage para almacenar objetos más grandes.
|
GEOMETRY ,
POINT ,
LINESTRING ,
POLYGON ,
MULTIPOINT ,
MULTIPOLYGON ,
GEOMETRYCOLLECTION
|
STRING ,
ARRAY
|
Spanner no admite tipos de datos geoespaciales. Debes almacenar estos datos con tipos de datos estándar y, además, 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 diferentes límites de longitud, y en Spanner hay un tipo general que tiene un solo límite relativamente grande.
Considera 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 establecer en 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 de 8 bytes con signo. La principal diferencia es queINT64
de Spanner consume más almacenamiento queMEDIUMINT
,SMALLINT
yTINYINT
. Además,INT64
no captura las limitaciones de rango deMEDIUMINT
,SMALLINT
yTINYINT
, aunque estas se pueden aplicar agregando restricciones deCHECK
.
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 se debe realizar a nivel de la 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. Cualquier consulta de SQL que use dialectos, funciones y tipos específicos de MySQL deberá convertirse para ser compatible con Spanner.
Aunque Spanner no admite datos estructurados como definiciones de columnas, puedes usar datos estructurados en consultas de SQL mediante el uso de los tipos ARRAY<>
y STRUCT<>
. Por ejemplo, puedes escribir una consulta que muestre todos los álbumes de un artista usando un ARRAY
de STRUCT
(esto permite aprovechar los datos ya asociados). Para obtener más información, consulta la sección Subconsultas de la documentación.
Puedes ejecutar consultas en SQL en la página de Spanner Studio en la Google Cloud consola. En general, las consultas que realizan análisis de tablas completos 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 de prácticas recomendadas de SQL.
Procedimientos y activadores almacenados
Spanner no admite la ejecución de código de usuario a nivel de la base de datos. Como parte de la migración del esquema, traslada los procedimientos almacenados y los activadores de lógica empresarial que implementaste a nivel de la base de datos de MySQL a tu aplicación.
Secuencias
Spanner recomienda usar el UUID de la versión 4 como el método predeterminado para generar valores de clave primaria. La función GENERATE_UUID()
devuelve valores de la versión 4 del UUID representados como tipo STRING
.
Si necesitas generar valores enteros, Spanner admite secuencias positivas con inversión de bits, que producen valores que se distribuyen de manera uniforme en el espacio de números positivos de 64 bits. Puedes usar estos números para evitar problemas de hotspot.
Para obtener más información, consulta estrategias de valores predeterminados de claves primarias.