Instructivo sobre la migración de Teradata a BigQuery

En este documento, se describe cómo migrar de Teradata a BigQuery mediante datos de muestra. Proporciona una prueba de concepto que te guía a través del 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
  • Migrar el esquema y los datos a BigQuery mediante el Servicio de transferencia de datos de BigQuery (BQDT)
  • Verificar que las consultas muestren los mismos resultados en Teradata y BigQuery

Costos

En esta guía de inicio rápido, se usan los siguientes componentes facturables de Google Cloud:

  • BigQuery: en este instructivo, se almacena cerca de 1 GB de datos en BigQuery y se procesan menos de 2 GB cuando se ejecutan las consultas una vez. Como parte del nivel gratuito de Google Cloud, BigQuery ofrece algunos recursos de forma gratuita hasta alcanzar un límite específico. Estos límites de uso sin cargo están disponibles durante el período de prueba y después de él. Si superas estos límites de uso y ya no te encuentras en el período de prueba gratuito, se te cobrará según los precios de la página de precios de BigQuery.

Puedes usar la calculadora de precios para generar una estimación de costos según 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 que puedas 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 la máquina tenga instaladas las herramientas cliente BTEQ y FastLoad de Teradata. Puedes obtener las herramientas cliente de Teradata en el sitio web de Teradata. Si necesitas ayuda para instalar estas herramientas, solicita detalles al administrador del sistema sobre cómo instalarlas, configurarlas y ejecutarlas. Como alternativa, o además de BTEQ, puedes hacer lo siguiente:

  • Asegúrate de que la máquina tenga conectividad de red con Google Cloud para que el agente del servicio de transferencia de datos de BigQuery se comunique con BigQuery y transfiera el esquema y los datos.

Introducción

En esta guía de inicio rápido, se proporcionan instrucciones para realizar una prueba de concepto de migración. Durante esta guía de inicio rápido, se generan datos sintéticos y se los carga en Teradata. Luego, se usa el Servicio de transferencia de datos de BigQuery para mover el esquema y los datos a BigQuery. Por último, se ejecutan consultas en ambos lados para comparar los resultados. El estado 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á destinada a administradores de almacenes de datos, desarrolladores y profesionales de datos en general que estén interesados en una experiencia práctica con un esquema y migración de datos mediante el Servicio de transferencia de datos de BigQuery.

Genera los datos

Transaction Processing Performance Council (TPC) es una organización sin fines de lucro que publica especificaciones de evaluaciones comparativas. Estas especificaciones se convirtieron en estándares de la industria de facto para ejecutar comparativas relacionadas con datos.

La especificación TPC-H es una evaluación comparativa que se enfoca en la asistencia para decisiones. En esta guía de inicio rápido, se usan partes de esta especificación para crear las tablas y generar datos sintéticos como un modelo de un almacén de datos real. Aunque la especificación se creó para la evaluación comparativa, en esta guía de inicio rápido, se usará este modelo como parte de la prueba de concepto de migración, no para las tareas de evaluación comparativa.

  1. En la computadora en la que te conectarás a Teradata, usa un navegador web para descargar la última versión disponible de las herramientas de TPC-H del sitio web de TPC.
  2. Abre una terminal de comando y cambia al directorio en el que descargaste las herramientas.
  3. Extrae el archivo ZIP que se descargó. Reemplaza file-name por el nombre del archivo que descargaste:

    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 superior correspondiente a tu versión, como en el siguiente ejemplo:

    cd 2.18.0_rc2/dbgen
    
  5. Crea un makefile con la plantilla provista:

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

    vi makefile
    
  7. En el makefile, cambia los valores de las siguientes variables:

    CC       = gcc
    # TDAT -> TERADATA
    DATABASE = TDAT
    MACHINE  = LINUX
    WORKLOAD = TPCH
    

    Según tu entorno, los valores del compilador C (CC) o MACHINE pueden ser diferentes. Si es necesario, consulta al administrador de sistemas.

  8. Guarda los cambios y cierra el archivo.

  9. Procesa el makefile:

    make
    
  10. Genera los datos de TPC-H mediante la herramienta de dbgen:

    dbgen -v
    

    La generación de datos lleva algunos minutos. La marca -v (verbosidad) hace que el comando informe sobre el progreso. Cuando finalice la generación de datos, encontrarás 8 archivos ASCII con la extensión .tbl en la carpeta actual. Contienen datos sintéticos delimitados por canalizaciones que se cargarán en cada una de las tablas de TPC-H.

Sube datos de muestra a Teradata

En esta sección, debes subir los datos generados en tu base de datos de Teradata.

Crea la base de datos de TPC-H

El cliente de Teradata, llamado Basic Teradata Query (BTEQ), se usa para comunicarse con uno o más servidores de bases de datos de Teradata y ejecutar consultas de SQL en esos sistemas. En esta sección, se usa BTEQ a fin de crear una base de datos nueva para las tablas de TPC-H.

  1. Abre el cliente BTEQ de Teradata:

    bteq
    
  2. Accede a Teradata. Reemplaza 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. Cierra BTEQ:

    .QUIT
    

Carga los datos generados

En esta sección, debes crear una secuencia de comandos FastLoad para crear y cargar las tablas de muestra. Las definiciones de la tabla se describen en la sección 1.4 de la especificación de TPC-H. La sección 1.2 contiene un diagrama de entidad y relación de todo el esquema de la base de datos.

Mediante 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 para las tablas restantes.

  1. Mediante un editor de texto, crea un archivo nuevo 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, reemplaza teradata-ip, teradata-user y teradata-pwd por los detalles de tu 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);
    

    La secuencia de comandos primero se asegura de que la tabla lineitem y las tablas de error temporales no existan y, luego, procede con la creación de la tabla lineitem.

  3. En el mismo archivo, agrega el siguiente código, que carga los datos en la tabla recién creada. Completa todos los campos de la tabla en los tres bloques (define, insert y values), asegúrate de usar varchar como el 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 desde un archivo en el mismo directorio llamado lineitem.tbl, que generaste 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. Repite este procedimiento para el resto de las tablas de TPC-H enumeradas en la sección 1.4 de la especificación de TPC-H. Asegúrate de adaptar los pasos para cada tabla.

Migra el esquema y los datos a BigQuery

Las instrucciones sobre la migración del esquema y los datos a BigQuery se encuentran en un instructivo aparte: Migra datos desde Teradata. En esta sección, incluimos detalles sobre cómo proceder con ciertos pasos de ese instructivo. Cuando termines los pasos del otro instructivo, regresa a este documento y continúa con la siguiente sección, Verifica los resultados de la consulta.

Crea el conjunto de datos de BigQuery

Durante los pasos iniciales de la configuración de Google Cloud, se te pide que crees un conjunto de datos en BigQuery para contener las tablas una vez que se hayan migrado. Asigna el nombre tpch al conjunto de datos. Las consultas al final de esta guía de inicio rápido adoptan este nombre y no requieren ninguna modificación.

# Use the bq utility to create the dataset
bq mk --location=US tpch

Cree una cuenta de servicio

También, como parte de los pasos de configuración de Google Cloud, debes crear una cuenta de servicio de administración de identidades y accesos (IAM). Esta cuenta de servicio se usa para escribir los datos en BigQuery y 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

Otorga permisos a la cuenta de servicio que le permitan administrar conjuntos de datos de BigQuery y el área de etapa de pruebas 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

Crea el bucket de etapa de pruebas de Cloud Storage

Una tarea adicional en la configuración de Google Cloud es la creación de un bucket de Cloud Storage. El Servicio de transferencia de datos de BigQuery usa este bucket como un área de etapa de pruebas para que los archivos de datos se transfieran a BigQuery.

# Use gcloud storage to create the bucket
gcloud storage buckets create gs://${PROJECT}-tpch --location=us-central1

Especifica los patrones de nombre de tabla

Durante la configuración de una transferencia nueva en el Servicio de transferencia de datos de BigQuery, se te solicita que especifiques una expresión que indique qué tablas incluir en la transferencia. En esta guía de inicio rápido, debes incluir todas las tablas de la base de datos tpch.

El formato de la expresión es database.table, y el nombre de la tabla se puede reemplazar por un comodín. Debido a que los comodines en Java comienzan con dos puntos, la expresión para transferir todas las tablas desde la base de datos tpch es la siguiente:

tpch..*

Observa que hay dos puntos.

Verifica los resultados de la consulta

En este punto, ya creaste datos de muestra, los subiste a Teradata y los migraste a BigQuery mediante el Servicio de transferencia de datos de BigQuery, como se explica en el instructivo aparte. En esta sección, debes ejecutar dos de las consultas estándar de TPC-H para verificar que los resultados sean los mismos en Teradata y en BigQuery.

Ejecuta 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 la cantidad de artículos facturados, enviados y devueltos hasta 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 detalles, consulta la sección anterior Crea la base de datos de TPC-H en este documento.
  2. Cambia el ancho de muestra de salida a 500 caracteres:

    .set width 500
    
  3. Copia la consulta y pégala en la ventana 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. Dirígete a la consola de BigQuery:

    Ir a la consola de BigQuery

  2. Copia la consulta en el editor de consultas.

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

  4. Haz clic en Ejecutar.

    El resultado es el mismo que el de Teradata.

De forma opcional, puedes elegir intervalos de tiempo más amplios en la consulta para garantizar que se analicen todas las filas de la tabla.

Ejecuta la consulta de volumen de proveedor local

La segunda consulta de ejemplo es el informe de la consulta de volumen de proveedor local (sección 2.4.5 de la especificación de TPC-H). Para cada nación en una región, esta consulta muestra los ingresos producidos por cada elemento de una sola línea en el que el cliente y el proveedor estaban en esa nación. Estos resultados son útiles para, por ejemplo, planificar dónde ubicar los 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 BTEQ de Teradata y en la consola de BigQuery como se describe en la sección anterior.

Este es el resultado que muestra Teradata:

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

Este es el resultado que muestra BigQuery:

Resultados de BigQuery para la consulta de resultados de volumen de proveedor local

Teradata y BigQuery muestran los mismos resultados.

Ejecuta la consulta de medición de ganancias por tipo de producto

La prueba final para verificar la migración es la consulta del último ejemplo de consulta de medición de ganancias por tipo de producto (sección 2.4.9 en la especificación de TPC-H). Para cada nación y cada año, esta consulta encuentra las ganancias correspondientes a todas las piezas pedidas durante ese año. Filtra los resultados por una substring 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 BTEQ de Teradata y en la consola de BigQuery como se describe en la sección anterior.

Este es el resultado que muestra Teradata:

Resultados de Teradata para la consulta de medición de ganancias por tipo de producto

Este es el resultado que muestra BigQuery:

Resultados de BigQuery para la consulta de medición de ganancias por tipo de producto

Teradata y BigQuery muestran los mismos resultados, aunque Teradata usa la notación científica para la suma.

Consultas adicionales

De forma opcional, 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 que sigan el estándar de TPC-H mediante la herramienta QGEN, que se encuentra en el mismo directorio que la herramienta DBGEN. QGEN se compila mediante el uso del mismo makefile que DBGEN, por lo que, cuando ejecutas make para compilar dbgen, también generas el ejecutable qgen.

Para obtener más información sobre estas herramientas y sus opciones de línea de comandos, consulta el archivo README de cada herramienta.

Limpieza

Para evitar incurrir en cargos en tu cuenta de Google Cloud por los recursos que se usaron en este instructivo, bórralos.

Borra el proyecto

La forma más sencilla de detener los cargos de facturación es borrar el proyecto que creaste para este instructivo.

  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.

¿Qué sigue?