Tutorial de migração do Teradata para o BigQuery

Este documento descreve como migrar do Teradata para o BigQuery usando dados de exemplo. Fornece uma prova de conceito que explica o processo de transferência do esquema e dos dados de um armazém de dados do Teradata para o BigQuery.

Objetivos

  • Gerar dados sintéticos e carregá-los para o Teradata.
  • Migre o esquema e os dados para o BigQuery através do Serviço de transferência de dados do BigQuery (BQDT).
  • Verifique se as consultas devolvem os mesmos resultados no Teradata e no BigQuery.

Custos

Este guia de início rápido usa os seguintes componentes faturáveis do Trusted Cloud by S3NS:

  • BigQuery: Este tutorial armazena cerca de 1 GB de dados no BigQuery e processa menos de 2 GB quando executa as consultas uma vez.

Pré-requisitos

  • Certifique-se de que tem autorizações de escrita e execução numa máquina com acesso à Internet para poder transferir a ferramenta de geração de dados e executá-la.
  • Certifique-se de que consegue estabelecer ligação a uma base de dados Teradata.
  • Certifique-se de que a máquina tem as ferramentas de cliente Teradata BTEQ e FastLoad instaladas. Pode obter as ferramentas de cliente do Teradata no Website do Teradata. Se precisar de ajuda para instalar estas ferramentas, peça ao administrador de sistemas detalhes sobre a instalação, a configuração e a execução das mesmas. Em alternativa ou além do BTEQ, pode fazer o seguinte:

  • Certifique-se de que a máquina tem conetividade de rede com Trusted Cloud para que o agente do Serviço de transferência de dados do BigQuery comunique com o BigQuery e transfira o esquema e os dados.

Introdução

Este guia de início rápido explica uma validação de conceito de migração. Durante o início rápido, gera dados sintéticos e carrega-os no Teradata. Em seguida, usa o Serviço de transferência de dados do BigQuery para mover o esquema e os dados para o BigQuery. Por fim, executa consultas em ambos os lados para comparar os resultados. O estado final é que o esquema e os dados do Teradata são mapeados individualmente para o BigQuery.

Este início rápido destina-se a administradores de armazéns de dados, programadores e profissionais de dados em geral que tenham interesse em experimentar na prática uma migração de esquemas e dados através do Serviço de transferência de dados do BigQuery.

Gerar os dados

O Transaction Processing Performance Council (TPC) é uma organização sem fins lucrativos que publica especificações de testes de referência. Estas especificações tornaram-se normas da indústria de facto para a execução de testes de referência relacionados com dados.

A especificação TPC-H é uma referência que se foca no apoio à decisão. Neste início rápido, vai usar partes desta especificação para criar as tabelas e gerar dados sintéticos como um modelo de um data warehouse real. Embora a especificação tenha sido criada para testes de referência, neste início rápido, usa este modelo como parte da validação de conceito da migração e não para tarefas de testes de referência.

  1. No computador onde vai estabelecer ligação ao Teradata, use um navegador de Internet para transferir a versão mais recente disponível das ferramentas TPC-H a partir do Website do TPC.
  2. Abra um terminal de comandos e mude para o diretório onde transferiu as ferramentas.
  3. Extraia o ficheiro ZIP transferido. Substitua file-name pelo nome do ficheiro que transferiu:

    unzip file-name.zip
    

    É extraído um diretório cujo nome inclui o número da versão das ferramentas. Este diretório inclui o código fonte do TPC para a ferramenta de geração de dados DBGEN e a especificação do TPC-H.

  4. Aceda ao subdiretório dbgen. Use o nome do diretório principal correspondente à sua versão, como no exemplo seguinte:

    cd 2.18.0_rc2/dbgen
    
  5. Crie um makefile com o modelo fornecido:

    cp makefile.suite makefile
    
  6. Edite o makefile com um editor de texto. Por exemplo, use o vi para editar o ficheiro:

    vi makefile
    
  7. No makefile, altere os valores das seguintes variáveis:

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

    Consoante o seu ambiente, os valores do compilador C (CC) ou MACHINE podem ser diferentes. Se necessário, pergunte ao administrador do sistema.

  8. Guarde as alterações e feche o ficheiro.

  9. Processar o makefile:

    make
    
  10. Gere os dados do TPC-H com a ferramenta dbgen:

    dbgen -v
    

    A geração de dados demora alguns minutos. A flag -v (detalhada) faz com que o comando comunique o progresso. Quando a geração de dados estiver concluída, encontra 8 ficheiros ASCII com a extensão .tbl na pasta atual. Contêm dados sintéticos delimitados por barras verticais a serem carregados em cada uma das tabelas TPC-H.

Carregar dados de amostra para o Teradata

Nesta secção, carrega os dados gerados para a sua base de dados Teradata.

Crie a base de dados TPC-H

O cliente Teradata, denominado Basic Teradata Query (BTEQ), é usado para comunicar com um ou mais servidores de base de dados Teradata e para executar consultas SQL nesses sistemas. Nesta secção, usa o BTEQ para criar uma nova base de dados para as tabelas TPC-H.

  1. Abra o cliente BTEQ do Teradata:

    bteq
    
  2. Inicie sessão no Teradata. Substitua teradata-ip e teradata-user pelos valores correspondentes para o seu ambiente.

    .LOGON teradata-ip/teradata-user
    
  3. Crie uma base de dados denominada tpch com 2 GB de espaço atribuído:

    CREATE DATABASE tpch
    AS PERM=2e+09;
    
  4. Saia do BTEQ:

    .QUIT
    

Carregue os dados gerados

Nesta secção, cria um script FastLoad para criar e carregar as tabelas de exemplo. As definições das tabelas estão descritas na secção 1.4 da especificação TPC-H. A secção 1.2 contém um diagrama de relação entre entidades do esquema de toda a base de dados.

O procedimento seguinte mostra como criar a tabela lineitem, que é a maior e mais complexa das tabelas TPC-H. Quando terminar de trabalhar com a tabela lineitem, repita este procedimento para as tabelas restantes.

  1. Com um editor de texto, crie um novo ficheiro denominado fastload_lineitem.fl:

    vi fastload_lineitem.fl
    
  2. Copie o seguinte script para o ficheiro, que se liga à base de dados Teradata e cria uma tabela denominada lineitem.

    No comando logon, substitua teradata-ip, teradata-user, e teradata-pwd pelos detalhes da sua ligação.

    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);
    

    O script primeiro certifica-se de que a tabela lineitem e as tabelas de erros temporários não existem e, em seguida, cria a tabela lineitem.

  3. No mesmo ficheiro, adicione o seguinte código, que carrega os dados para a tabela criada recentemente. Preencha todos os campos da tabela nos três blocos (define, insert e values), certificando-se de que usa varchar como tipo de dados de carregamento.

    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;
    

    O script FastLoad carrega os dados de um ficheiro no mesmo diretório denominado lineitem.tbl, que gerou na secção anterior.

  4. Guarde as alterações e feche o ficheiro.

  5. Execute o script FastLoad:

    fastload < fastload_lineitem.fl
    
  6. Repita este procedimento para as restantes tabelas TPC-H indicadas na secção 1.4 da especificação TPC-H. Certifique-se de que ajusta os passos para cada tabela.

Migrar o esquema e os dados para o BigQuery

As instruções sobre como migrar o esquema e os dados para o BigQuery encontram-se num tutorial separado: Migre dados do Teradata. Incluímos detalhes nesta secção sobre como proceder com determinados passos desse tutorial. Quando terminar os passos no outro tutorial, regresse a este documento e continue com a secção seguinte, Validar resultados da consulta.

Crie o conjunto de dados do BigQuery

Durante os Trusted Cloud passos de configuração iniciais, é-lhe pedido que crie um conjunto de dados no BigQuery para conter as tabelas após a migração. Atribua o nome tpch ao conjunto de dados. As consultas no final deste início rápido partem do princípio de que este é o nome e não requerem modificações.

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

Criar uma conta de serviço

Além disso, como parte dos Trusted Cloud passos de configuração, tem de criar uma conta de serviço de gestão de identidade e de acesso (IAM). Esta conta de serviço é usada para escrever os dados no BigQuery e armazenar dados temporários no Cloud Storage.

# Set the PROJECT variable
export PROJECT=$(gcloud config get-value project)

# Create a service account
gcloud iam service-accounts create tpch-transfer

Conceda autorizações à conta de serviço que lhe permitam administrar conjuntos de dados do BigQuery e a área de preparação no Cloud Storage:

# Set TPCH_SVC_ACCOUNT = service account email
export TPCH_SVC_ACCOUNT=tpch-transfer@${PROJECT}.s3ns.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

Crie o contentor do Cloud Storage de preparação

Uma tarefa adicional na Trusted Cloud configuração é criar um contentor do Cloud Storage. Este contentor é usado pelo Serviço de transferência de dados do BigQuery como uma área de preparação para os ficheiros de dados a serem carregados no BigQuery.

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

Especifique os padrões de nomes de tabelas

Durante a configuração de uma nova transferência no Serviço de transferência de dados do BigQuery, é-lhe pedido que especifique uma expressão que indique as tabelas a incluir na transferência. Neste início rápido, inclui todas as tabelas da tpchbase de dados.

O formato da expressão é database.table, e o nome da tabela pode ser substituído por um caráter universal. Uma vez que os carateres universais em Java começam com dois pontos, a expressão para transferir todas as tabelas da base de dados tpch é a seguinte:

tpch..*

Repare que existem dois pontos.

Validar resultados de consultas

Neste ponto, criou dados de amostra, carregou os dados para o Teradata e, em seguida, migrou-os para o BigQuery através do Serviço de transferência de dados do BigQuery, conforme explicado no tutorial separado. Nesta secção, executa duas das consultas padrão TPC-H para verificar se os resultados são os mesmos no Teradata e no BigQuery.

Execute a consulta do relatório de resumo de preços

A primeira consulta é a consulta do relatório de resumo de preços (secção 2.4.1 da especificação TPC-H). Esta consulta comunica o número de artigos que foram faturados, enviados e devolvidos a partir de uma determinada data.

A listagem seguinte mostra a 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;

Execute a consulta no Teradata:

  1. Execute o BTEQ e estabeleça ligação ao Teradata. Para ver detalhes, consulte a secção Crie a base de dados TPC-H anteriormente neste documento.
  2. Altere a largura da visualização de saída para 500 carateres:

    .set width 500
    
  3. Copie a consulta e cole-a no comando BTEQ.

    O resultado tem um aspeto semelhante ao seguinte:

    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
    

Execute a mesma consulta no BigQuery:

  1. Aceda à consola do BigQuery:

    Aceda ao BigQuery

  2. Copie a consulta para o editor de consultas.

  3. Certifique-se de que o nome do conjunto de dados na linha FROM está correto.

  4. Clique em Executar.

    O resultado é o mesmo que o resultado do Teradata.

Opcionalmente, pode escolher intervalos de tempo mais amplos na consulta para garantir que todas as linhas na tabela são analisadas.

Execute a consulta de volume de fornecedores locais

A segunda consulta de exemplo é o relatório de consulta de volume de fornecedores locais (secção 2.4.5 da especificação TPC-H). Para cada país numa região, esta consulta devolve a receita gerada por cada elemento publicitário em que o cliente e o fornecedor estavam nesse país. Estes resultados são úteis para algo como planear onde colocar centros de distribuição.

A listagem seguinte mostra a 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;

Execute a consulta no Teradata BTEQ e na consola do BigQuery, conforme descrito na secção anterior.

Este é o resultado devolvido pelo Teradata:

Resultados do Teradata para a consulta de resultados do volume de fornecedores locais.

Este é o resultado devolvido pelo BigQuery:

Resultados do BigQuery para a consulta de resultados do volume de fornecedores locais.

O Teradata e o BigQuery devolvem os mesmos resultados.

Execute a consulta de métrica de lucro do tipo de produto

O teste final para validar a migração é a consulta de medida de lucro do tipo de produto consulta do último exemplo (secção 2.4.9 na especificação TPC-H). Para cada país e cada ano, esta consulta encontra o lucro de todas as peças encomendadas nesse ano. Filtra os resultados por uma subcadeia de carateres nos nomes das peças e por um fornecedor específico.

A listagem seguinte mostra a 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;

Execute a consulta no Teradata BTEQ e na consola do BigQuery, conforme descrito na secção anterior.

Este é o resultado devolvido pelo Teradata:

Resultados do Teradata para a consulta de medida de lucro do tipo de produto.

Este é o resultado devolvido pelo BigQuery:

Resultados do BigQuery para a consulta de métrica de lucro do tipo de produto.

O Teradata e o BigQuery devolvem os mesmos resultados, embora o Teradata use a notação científica para a soma.

Consultas adicionais

Opcionalmente, pode executar o resto das consultas TPC-H definidas na secção 2.4 da especificação TPC-H.

Também pode gerar consultas seguindo a norma TPC-H com a ferramenta QGEN, que se encontra no mesmo diretório que a ferramenta DBGEN. O QGEN é criado com o mesmo makefile que o DBGEN. Por isso, quando executa o comando make para compilar o dbgen, também produz o executável qgen.

Para mais informações sobre ambas as ferramentas e as respetivas opções de linha de comandos, consulte o ficheiro README de cada ferramenta.

Limpeza

Para evitar incorrer em custos na sua conta do Trusted Cloud by S3NS pelos recursos usados neste tutorial, remova-os.

Elimine o projeto

A forma mais simples de parar as cobranças de faturação é eliminar o projeto que criou para este tutorial.

  1. In the Trusted 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.

O que se segue?