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:

  • 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.

  1. 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.
  2. Abre un terminal de comandos y ve al directorio en el que has descargado las herramientas.
  3. 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.

  4. 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
    
  5. Crea un archivo makefile con la plantilla proporcionada:

    cp makefile.suite makefile
    
  6. Edita el archivo makefile con un editor de texto. Por ejemplo, usa vi para editar el archivo:

    vi makefile
    
  7. 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) o MACHINE pueden ser diferentes. Si es necesario, pregunta a tu administrador del sistema.

  8. Guarda los cambios y cierra el archivo.

  9. Procesa el archivo makefile:

    make
    
  10. 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.

  1. Abre el cliente BTEQ de Teradata:

    bteq
    
  2. Inicia sesión en Teradata. Sustituye teradata-ip y teradata-user por los valores correspondientes de tu entorno.

    .LOGON teradata-ip/teradata-user
    
  3. Crea una base de datos llamada tpch con 2 GB de espacio asignado:

    CREATE DATABASE tpch
    AS PERM=2e+09;
    
  4. 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.

  1. Con un editor de texto, crea un archivo llamado fastload_lineitem.fl:

    vi fastload_lineitem.fl
    
  2. 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 tabla lineitem.

  3. 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 y values) y asegúrate de usar varchar 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.

  4. Guarda los cambios y cierra el archivo.

  5. Ejecuta la secuencia de comandos FastLoad:

    fastload < fastload_lineitem.fl
    
  6. 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:

  1. 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.
  2. Cambia la anchura de la pantalla de salida a 500 caracteres:

    .set width 500
    
  3. 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:

  1. Ve a la consola de BigQuery:

    Ir a BigQuery

  2. Copia la consulta en el editor de consultas.

  3. Asegúrate de que el nombre del conjunto de datos de la línea FROM sea correcto.

  4. 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:

Resultados de Teradata de la consulta de resultados de volumen de proveedor local.

Este es el resultado que devuelve BigQuery:

Resultados de BigQuery de la consulta de resultados de volumen de proveedores locales.

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:

Resultados de Teradata de la consulta de la medida de beneficio del tipo de producto.

Este es el resultado que devuelve BigQuery:

Resultados de BigQuery de la consulta de la medida de beneficio del tipo de producto.

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.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Siguientes pasos