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:
- Instale uma ferramenta com uma interface gráfica, como o DBeaver.
- Instale o Teradata SQL Driver for Python para interações de scripting com a base de dados Teradata.
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.
- 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.
- Abra um terminal de comandos e mude para o diretório onde transferiu as ferramentas.
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.
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
Crie um makefile com o modelo fornecido:
cp makefile.suite makefile
Edite o makefile com um editor de texto. Por exemplo, use o vi para editar o ficheiro:
vi makefile
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
) ouMACHINE
podem ser diferentes. Se necessário, pergunte ao administrador do sistema.Guarde as alterações e feche o ficheiro.
Processar o makefile:
make
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.
Abra o cliente BTEQ do Teradata:
bteq
Inicie sessão no Teradata. Substitua teradata-ip e teradata-user pelos valores correspondentes para o seu ambiente.
.LOGON teradata-ip/teradata-user
Crie uma base de dados denominada
tpch
com 2 GB de espaço atribuído:CREATE DATABASE tpch AS PERM=2e+09;
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.
Com um editor de texto, crie um novo ficheiro denominado
fastload_lineitem.fl
:vi fastload_lineitem.fl
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 tabelalineitem
.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
evalues
), certificando-se de que usavarchar
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.Guarde as alterações e feche o ficheiro.
Execute o script FastLoad:
fastload < fastload_lineitem.fl
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 tpch
base 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:
- 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.
Altere a largura da visualização de saída para 500 carateres:
.set width 500
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:
Aceda à consola do BigQuery:
Copie a consulta para o editor de consultas.
Certifique-se de que o nome do conjunto de dados na linha
FROM
está correto.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:
Este é o resultado devolvido pelo BigQuery:
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:
Este é o resultado devolvido pelo BigQuery:
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.
- In the Trusted 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.
O que se segue?
- Receba instruções passo a passo para migrar o Teradata para o BigQuery.