Tutorial para migrar de Teradata a BigQuery
En este documento se describe cómo migrar de Teradata a BigQuery con datos de muestra. Proporciona una prueba de concepto que te guía por el proceso de transferencia de esquemas y datos de un almacén de datos de Teradata a BigQuery.
Objetivos
- Generar datos sintéticos y subirlos a Teradata.
- Migra el esquema y los datos a BigQuery mediante BigQuery Data Transfer Service (BQDT).
- Verifica que las consultas devuelvan los mismos resultados en Teradata y BigQuery.
Costes
En esta guía de inicio rápido se usan los siguientes componentes facturables de Google Cloud:
- BigQuery en este tutorial se almacenan cerca de 1 GB de datos en BigQuery y se procesan menos de 2 GB al ejecutar las consultas una vez. Como parte del Google Cloud nivel gratuito, BigQuery ofrece determinados recursos sin coste dentro de un límite específico. Estos límites de uso gratuito están disponibles tanto durante como después del periodo de prueba gratuito. Si los superas una vez finalizado dicho periodo, se te cobrará el servicio según los precios que aparecen en la página de precios de BigQuery.
Puedes usar la calculadora de precios para generar una estimación de costes basada en el uso previsto.
Requisitos previos
- Asegúrate de tener permisos de escritura y ejecución en una máquina que tenga acceso a Internet para poder descargar la herramienta de generación de datos y ejecutarla.
- Asegúrate de que puedes conectarte a una base de datos de Teradata.
Asegúrate de que el equipo tenga instaladas las herramientas de cliente Teradata BTEQ y FastLoad. Puedes obtener las herramientas de cliente de Teradata en el sitio web de Teradata. Si necesitas ayuda para instalar estas herramientas, pide a tu administrador del sistema información sobre cómo instalarlas, configurarlas y ejecutarlas. Como alternativa o complemento de BTEQ, puedes hacer lo siguiente:
- Instala una herramienta con una interfaz gráfica, como DBeaver.
- Instala el controlador SQL de Teradata para Python para crear secuencias de comandos de interacciones con la base de datos de Teradata.
Asegúrate de que la máquina tenga conectividad de red conGoogle Cloud para que el agente de BigQuery Data Transfer Service pueda comunicarse con BigQuery y transferir el esquema y los datos.
Introducción
En esta guía de inicio rápido se explica cómo llevar a cabo una prueba de concepto de migración. Durante la guía de inicio rápido, generará datos sintéticos y los cargará en Teradata. A continuación, usa BigQuery Data Transfer Service para mover el esquema y los datos a BigQuery. Por último, ejecutas consultas en ambos lados para comparar los resultados. El resultado final es que el esquema y los datos de Teradata se asignan uno a uno en BigQuery.
Esta guía de inicio rápido está dirigida a administradores, desarrolladores y profesionales de datos en general que quieran probar la migración de esquemas y datos con BigQuery Data Transfer Service.
Generar los datos
El Transaction Processing Performance Council (TPC) es una organización sin ánimo de lucro que publica especificaciones de comparativas. Estas especificaciones se han convertido en estándares del sector de facto para ejecutar comparativas relacionadas con datos.
La especificación TPC-H es una prueba comparativa centrada en el apoyo a la toma de decisiones. En esta guía de inicio rápido, usará partes de esta especificación para crear las tablas y generar datos sintéticos como modelo de un almacén de datos real. Aunque la especificación se creó para realizar pruebas comparativas, en esta guía de inicio rápido utilizarás este modelo como parte de la prueba de concepto de la migración, no para realizar tareas de pruebas comparativas.
- En el ordenador en el que te conectarás a Teradata, usa un navegador web para descargar la última versión disponible de las herramientas de TPC-H desde el sitio web de TPC.
- Abre un terminal de comandos y ve al directorio en el que has descargado las herramientas.
Descomprime el archivo ZIP descargado. Sustituye file-name por el nombre del archivo que has descargado:
unzip file-name.zip
Se extrae un directorio cuyo nombre incluye el número de versión de las herramientas. Este directorio incluye el código fuente de TPC para la herramienta de generación de datos DBGEN y la especificación de TPC-H.
Ve al subdirectorio
dbgen
. Usa el nombre del directorio principal correspondiente a tu versión, como en el siguiente ejemplo:cd 2.18.0_rc2/dbgen
Crea un archivo makefile con la plantilla proporcionada:
cp makefile.suite makefile
Edita el archivo makefile con un editor de texto. Por ejemplo, usa vi para editar el archivo:
vi makefile
En el archivo makefile, cambia los valores de las siguientes variables:
CC = gcc # TDAT -> TERADATA DATABASE = TDAT MACHINE = LINUX WORKLOAD = TPCH
En función de tu entorno, los valores del compilador de C (
CC
) oMACHINE
pueden ser diferentes. Si es necesario, pregunta a tu administrador del sistema.Guarda los cambios y cierra el archivo.
Procesa el archivo makefile:
make
Genera los datos de TPC-H con la herramienta
dbgen
:dbgen -v
La generación de datos tarda un par de minutos. La marca
-v
(detallado) hace que el comando informe sobre el progreso. Cuando se hayan generado los datos, encontrarás 8 archivos ASCII con la extensión.tbl
en la carpeta actual. Contienen datos sintéticos delimitados por barras verticales que se cargarán en cada una de las tablas de TPC-H.
Subir datos de ejemplo a Teradata
En esta sección, subirá los datos generados a su base de datos de Teradata.
Crear la base de datos de TPC-H
El cliente de Teradata, llamado Basic Teradata Query (BTEQ), se usa para comunicarse con uno o varios servidores de bases de datos de Teradata y para ejecutar consultas de SQL en esos sistemas. En esta sección, usará BTEQ para crear una base de datos para las tablas de TPC-H.
Abre el cliente BTEQ de Teradata:
bteq
Inicia sesión en Teradata. Sustituye teradata-ip y teradata-user por los valores correspondientes de tu entorno.
.LOGON teradata-ip/teradata-user
Crea una base de datos llamada
tpch
con 2 GB de espacio asignado:CREATE DATABASE tpch AS PERM=2e+09;
Para salir de BTEQ, haz lo siguiente:
.QUIT
Cargar los datos generados
En esta sección, crearás una secuencia de comandos FastLoad para crear y cargar las tablas de ejemplo. Las definiciones de las tablas se describen en la sección 1.4 de la especificación TPC-H. La sección 1.2 contiene un diagrama de relaciones entre entidades de todo el esquema de la base de datos.
En el siguiente procedimiento se muestra cómo crear la tabla lineitem
, que es la más grande y compleja de las tablas de TPC-H. Cuando termines con la tabla lineitem
, repite este procedimiento con las tablas restantes.
Con un editor de texto, crea un archivo llamado
fastload_lineitem.fl
:vi fastload_lineitem.fl
Copia la siguiente secuencia de comandos en el archivo, que se conecta a la base de datos de Teradata y crea una tabla llamada
lineitem
.En el comando
logon
, sustituya teradata-ip, teradata-user, y teradata-pwd por los detalles de su conexión.logon teradata-ip/teradata-user,teradata-pwd; drop table tpch.lineitem; drop table tpch.error_1; drop table tpch.error_2; CREATE multiset TABLE tpch.lineitem, NO FALLBACK, NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT, DEFAULT MERGEBLOCKRATIO ( L_ORDERKEY INTEGER NOT NULL, L_PARTKEY INTEGER NOT NULL, L_SUPPKEY INTEGER NOT NULL, L_LINENUMBER INTEGER NOT NULL, L_QUANTITY DECIMAL(15,2) NOT NULL, L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL, L_DISCOUNT DECIMAL(15,2) NOT NULL, L_TAX DECIMAL(15,2) NOT NULL, L_RETURNFLAG CHAR(1) CHARACTER SET LATIN CASESPECIFIC NOT NULL, L_LINESTATUS CHAR(1) CHARACTER SET LATIN CASESPECIFIC NOT NULL, L_SHIPDATE DATE FORMAT 'yyyy-mm-dd' NOT NULL, L_COMMITDATE DATE FORMAT 'yyyy-mm-dd' NOT NULL, L_RECEIPTDATE DATE FORMAT 'yyyy-mm-dd' NOT NULL, L_SHIPINSTRUCT CHAR(25) CHARACTER SET LATIN CASESPECIFIC NOT NULL, L_SHIPMODE CHAR(10) CHARACTER SET LATIN CASESPECIFIC NOT NULL, L_COMMENT VARCHAR(44) CHARACTER SET LATIN CASESPECIFIC NOT NULL) PRIMARY INDEX ( L_ORDERKEY ) PARTITION BY RANGE_N(L_COMMITDATE BETWEEN DATE '1992-01-01' AND DATE '1998-12-31' EACH INTERVAL '1' DAY);
En primer lugar, la secuencia de comandos comprueba que no existan la tabla
lineitem
ni las tablas de errores temporales y, a continuación, crea la tablalineitem
.En el mismo archivo, añade el siguiente código, que carga los datos en la tabla que acabas de crear. Rellena todos los campos de la tabla de los tres bloques (
define
,insert
yvalues
) y asegúrate de usarvarchar
como tipo de datos de carga.begin loading tpch.lineitem errorfiles tpch.error_1, tpch.error_2; set record vartext; define in_ORDERKEY(varchar(50)), in_PARTKEY(varchar(50)), in_SUPPKEY(varchar(50)), in_LINENUMBER(varchar(50)), in_QUANTITY(varchar(50)), in_EXTENDEDPRICE(varchar(50)), in_DISCOUNT(varchar(50)), in_TAX(varchar(50)), in_RETURNFLAG(varchar(50)), in_LINESTATUS(varchar(50)), in_SHIPDATE(varchar(50)), in_COMMITDATE(varchar(50)), in_RECEIPTDATE(varchar(50)), in_SHIPINSTRUCT(varchar(50)), in_SHIPMODE(varchar(50)), in_COMMENT(varchar(50)) file = lineitem.tbl; insert into tpch.lineitem ( L_ORDERKEY, L_PARTKEY, L_SUPPKEY, L_LINENUMBER, L_QUANTITY, L_EXTENDEDPRICE, L_DISCOUNT, L_TAX, L_RETURNFLAG, L_LINESTATUS, L_SHIPDATE, L_COMMITDATE, L_RECEIPTDATE, L_SHIPINSTRUCT, L_SHIPMODE, L_COMMENT ) values ( :in_ORDERKEY, :in_PARTKEY, :in_SUPPKEY, :in_LINENUMBER, :in_QUANTITY, :in_EXTENDEDPRICE, :in_DISCOUNT, :in_TAX, :in_RETURNFLAG, :in_LINESTATUS, :in_SHIPDATE, :in_COMMITDATE, :in_RECEIPTDATE, :in_SHIPINSTRUCT, :in_SHIPMODE, :in_COMMENT ); end loading; logoff;
La secuencia de comandos FastLoad carga los datos de un archivo del mismo directorio llamado
lineitem.tbl
, que has generado en la sección anterior.Guarda los cambios y cierra el archivo.
Ejecuta la secuencia de comandos FastLoad:
fastload < fastload_lineitem.fl
Repita este procedimiento con el resto de las tablas de TPC-H que se indican en la sección 1.4 de la especificación de TPC-H. Asegúrate de ajustar los pasos para cada tabla.
Migrar el esquema y los datos a BigQuery
Las instrucciones para migrar el esquema y los datos a BigQuery se encuentran en otro tutorial: Migrar datos desde Teradata. En esta sección, hemos incluido detalles sobre cómo llevar a cabo determinados pasos de ese tutorial. Cuando hayas terminado los pasos del otro tutorial, vuelve a este documento y continúa con la siguiente sección, Verificar los resultados de las consultas.
Crear el conjunto de datos de BigQuery
Durante los pasos de configuración iniciales, se te pedirá que crees un conjunto de datos en BigQuery para alojar las tablas después de migrarlas. Google Cloud Asigna el nombre tpch
al conjunto de datos. Las consultas al final de esta guía de inicio rápido asumen este nombre y no requieren ninguna modificación.
# Use the bq utility to create the dataset
bq mk --location=US tpch
Crear una cuenta de servicio
Además, como parte de los Google Cloud pasos de configuración, debes crear una cuenta de servicio de Gestión de Identidades y Accesos (IAM). Esta cuenta de servicio se usa para escribir los datos en BigQuery y para almacenar datos temporales en Cloud Storage.
# Set the PROJECT variable
export PROJECT=$(gcloud config get-value project)
# Create a service account
gcloud iam service-accounts create tpch-transfer
Concede permisos a la cuenta de servicio para que pueda administrar los conjuntos de datos de BigQuery y el área de almacenamiento provisional en Cloud Storage:
# Set TPCH_SVC_ACCOUNT = service account email
export TPCH_SVC_ACCOUNT=tpch-transfer@${PROJECT}.iam.gserviceaccount.com
# Bind the service account to the BigQuery Admin role
gcloud projects add-iam-policy-binding ${PROJECT} \
--member serviceAccount:${TPCH_SVC_ACCOUNT} \
--role roles/bigquery.admin
# Bind the service account to the Storage Admin role
gcloud projects add-iam-policy-binding ${PROJECT} \
--member serviceAccount:${TPCH_SVC_ACCOUNT} \
--role roles/storage.admin
Crear el segmento de Cloud Storage de staging
Una tarea adicional en la configuración de Google Cloud es crear un segmento de Cloud Storage. BigQuery Data Transfer Service usa este segmento como área de almacenamiento provisional para los archivos de datos que se van a ingerir en BigQuery.
# Use gcloud storage to create the bucket
gcloud storage buckets create gs://${PROJECT}-tpch --location=us-central1
Especificar los patrones de nombre de tabla
Durante la configuración de una nueva transferencia en BigQuery Data Transfer Service, se te pide que especifiques una expresión que indique qué tablas se deben incluir en la transferencia. En esta guía de inicio rápido, se incluyen todas las tablas de la tpch
base de datos.
El formato de la expresión es database
.table
y el nombre de la tabla se puede sustituir por un comodín. Como los comodines de Java empiezan por dos puntos, la expresión para transferir todas las tablas de la base de datos tpch
es la siguiente:
tpch..*
Verás que hay dos puntos.
Verificar los resultados de las consultas
En este punto, ya has creado datos de muestra, los has subido a Teradata y los has migrado a BigQuery con BigQuery Data Transfer Service, tal como se explica en el tutorial correspondiente. En esta sección, ejecutarás dos de las consultas estándar de TPC-H para verificar que los resultados sean los mismos en Teradata y en BigQuery.
Ejecutar la consulta del informe de resumen de precios
La primera consulta es la consulta del informe de resumen de precios (sección 2.4.1 de la especificación de TPC-H). Esta consulta informa del número de artículos que se facturaron, enviaron y devolvieron en una fecha determinada.
En la siguiente lista se muestra la consulta completa:
SELECT
l_returnflag,
l_linestatus,
SUM(l_quantity) AS sum_qty,
SUM(l_extendedprice) AS sum_base_price,
SUM(l_extendedprice*(1-l_discount)) AS sum_disc_price,
SUM(l_extendedprice*(1-l_discount)*(1+l_tax)) AS sum_charge,
AVG(l_quantity) AS avg_qty,
AVG(l_extendedprice) AS avg_price,
AVG(l_discount) AS avg_disc,
COUNT(*) AS count_order
FROM tpch.lineitem
WHERE l_shipdate BETWEEN '1996-01-01' AND '1996-01-10'
GROUP BY
l_returnflag,
l_linestatus
ORDER BY
l_returnflag,
l_linestatus;
Ejecuta la consulta en Teradata:
- Ejecuta BTEQ y conéctate a Teradata. Para obtener más información, consulta la sección Crear la base de datos TPC-H de este documento.
Cambia la anchura de la pantalla de salida a 500 caracteres:
.set width 500
Copia la consulta y pégala en la petición de BTEQ.
El resultado es similar al siguiente:
L_RETURNFLAG L_LINESTATUS sum_qty sum_base_price sum_disc_price sum_charge avg_qty avg_price avg_disc count_order ------------ ------------ ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------- N O 629900.00 943154565.63 896323924.4600 932337245.114003 25.45 38113.41 .05 24746
Ejecuta la misma consulta en BigQuery:
Ve a la consola de BigQuery:
Copia la consulta en el editor de consultas.
Asegúrate de que el nombre del conjunto de datos de la línea
FROM
sea correcto.Haz clic en Ejecutar.
El resultado es el mismo que el de Teradata.
También puede elegir intervalos de tiempo más amplios en la consulta para asegurarse de que se analicen todas las filas de la tabla.
Ejecutar la consulta de volumen de proveedores locales
La segunda consulta de ejemplo es el informe de consulta de volumen de proveedores locales (sección 2.4.5 de la especificación de TPC-H). En cada país de una región, esta consulta devuelve los ingresos que ha generado cada línea de pedido en la que el cliente y el proveedor se encontraban en ese país. Estos resultados son útiles para planificar dónde colocar centros de distribución.
En la siguiente lista se muestra la consulta completa:
SELECT
n_name AS nation,
SUM(l_extendedprice * (1 - l_discount) / 1000) AS revenue
FROM
tpch.customer,
tpch.orders,
tpch.lineitem,
tpch.supplier,
tpch.nation,
tpch.region
WHERE c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND l_suppkey = s_suppkey
AND c_nationkey = s_nationkey
AND s_nationkey = n_nationkey
AND n_regionkey = r_regionkey
AND r_name = 'EUROPE'
AND o_orderdate >= '1996-01-01'
AND o_orderdate < '1997-01-01'
GROUP BY
n_name
ORDER BY
revenue DESC;
Ejecuta la consulta en Teradata BTEQ y en la consola de BigQuery tal como se describe en la sección anterior.
Este es el resultado devuelto por Teradata:
Este es el resultado que devuelve BigQuery:
Tanto Teradata como BigQuery devuelven los mismos resultados.
Ejecutar la consulta de medida de beneficio por tipo de producto
La prueba final para verificar la migración es la consulta de la medida de beneficio del tipo de producto última consulta de ejemplo (sección 2.4.9 de la especificación de TPC-H). Por cada país y cada año, esta consulta busca los beneficios de todas las piezas pedidas ese año. Filtra los resultados por una subcadena en los nombres de las piezas y por un proveedor específico.
En la siguiente lista se muestra la consulta completa:
SELECT
nation,
o_year,
SUM(amount) AS sum_profit
FROM (
SELECT
n_name AS nation,
EXTRACT(YEAR FROM o_orderdate) AS o_year,
(l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity)/1e+3 AS amount
FROM
tpch.part,
tpch.supplier,
tpch.lineitem,
tpch.partsupp,
tpch.orders,
tpch.nation
WHERE s_suppkey = l_suppkey
AND ps_suppkey = l_suppkey
AND ps_partkey = l_partkey
AND p_partkey = l_partkey
AND o_orderkey = l_orderkey
AND s_nationkey = n_nationkey
AND p_name like '%blue%' ) AS profit
GROUP BY
nation,
o_year
ORDER BY
nation,
o_year DESC;
Ejecuta la consulta en Teradata BTEQ y en la consola de BigQuery tal como se describe en la sección anterior.
Este es el resultado devuelto por Teradata:
Este es el resultado que devuelve BigQuery:
Tanto Teradata como BigQuery devuelven los mismos resultados, aunque Teradata usa notación científica para la suma.
Consultas adicionales
También puedes ejecutar el resto de las consultas de TPC-H que se definen en la sección 2.4 de la especificación de TPC-H.
También puedes generar consultas siguiendo el estándar TPC-H con la herramienta QGEN, que se encuentra en el mismo directorio que la herramienta DBGEN. QGEN se compila con el mismo archivo make que DBGEN, por lo que, al ejecutar make para compilar dbgen
, también se genera el archivo ejecutable qgen
.
Para obtener más información sobre ambas herramientas y sus opciones de línea de comandos, consulta el archivo README
de cada herramienta.
Limpieza
Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en este tutorial, elimínalos.
Eliminar el proyecto
La forma más sencilla de dejar de recibir cargos es eliminar el proyecto que has creado para este tutorial.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Siguientes pasos
- Consulta las instrucciones detalladas para migrar de Teradata a BigQuery.