Nesta página, descrevemos como preparar arquivos Avro exportados de bancos de dados que não são do Spanner e importá-los para o Spanner. Esses procedimentos incluem informações para bancos de dados de dialeto do GoogleSQL e do PostgreSQL. Se você quiser importar um banco de dados do Spanner que foi exportado anteriormente, consulte Importar arquivos Avro do Spanner.
O processo usa o Dataflow. Ele importa dados de um bucket do Cloud Storage que contém um conjunto de arquivos Avro e um arquivo de manifesto JSON que especifica as tabelas de destino e os arquivos Avro que preenchem cada tabela.
Antes de começar
Para importar um banco de dados do Spanner, primeiro é preciso ativar as APIs Spanner, Cloud Storage, Compute Engine e API Dataflow:
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão serviceusage.services.enable. Se você
criou o projeto, provavelmente já tem essa permissão pelo
papel de proprietário (roles/owner). Caso contrário, é possível conseguir essa permissão pelo
papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin).
Saiba como conceder papéis.
É preciso também ter cota suficiente e as permissões obrigatórias do IAM.
Requisitos de cota
Os requisitos de cota para jobs de importação são os seguintes:
- Spanner: é preciso ter capacidade de computação suficiente para aceitar a quantidade de dados que você está importando. Nenhuma capacidade de computação extra é necessária para importar um banco de dados, mas talvez seja necessário adicionar mais capacidade de computação para que o job seja concluído em um período razoável. Consulte Otimizar jobs para mais detalhes.
- Cloud Storage: para importar, é preciso ter um bucket contendo os arquivos exportados anteriormente. Não é necessário definir um tamanho para o bucket.
- Dataflow: os jobs de importação estão sujeitos às mesmas cotas do Compute Engine para endereço IP, uso da CPU e do disco aplicadas a outros jobs do Dataflow.
Compute Engine: antes de executar um job de importação, é necessário configurar cotas iniciais para o Compute Engine, que serão usadas pelo Dataflow. Essas cotas representam o número máximo de recursos que você permite que o Dataflow use para seu job. Os valores iniciais recomendados são:
- CPUs: 200
- Endereços IP em uso: 200
- Disco permanente padrão: 50 TB
Em geral, não é necessário fazer outros ajustes. O Dataflow fornece escalonamento automático para que você pague apenas pelos recursos efetivamente utilizados durante a importação. Se seu job puder usar mais recursos, a IU do Dataflow exibirá um ícone de aviso. O job será concluído, mesmo que um ícone de aviso seja exibido.
Funções exigidas
Para receber as permissões necessárias para exportar um banco de dados, peça ao administrador para conceder a você os seguintes papéis do IAM na sua conta de serviço de worker do Dataflow:
- Leitor do Cloud Spanner (
roles/spanner.viewer) - Worker do Dataflow (
roles/dataflow.worker) - Administrador de armazenamento (
roles/storage.admin) - Leitor do banco de dados do Spanner (
roles/spanner.databaseReader) - Administrador de banco de dados (
roles/spanner.databaseAdmin)
Exportar dados de um banco de dados que não é do Spanner para arquivos Avro
O processo de importação traz dados de arquivos Avro localizados em um bucket do Cloud Storage. É possível exportar dados no formato Avro de qualquer fonte e usar qualquer método disponível para fazer isso.
Para exportar dados de um banco de dados que não é do Spanner para arquivos Avro, siga estas etapas:
Tenha isto em mente ao exportar seus dados:
- É possível exportar usando qualquer um dos tipos primitivos do Avro, bem como o tipo complexo de matriz.
Cada coluna nos seus arquivos Avro precisa usar um dos seguintes tipos de colunas:
ARRAYBOOLBYTES*DOUBLEFLOATINTLONG†STRING‡
* Uma coluna do tipo
BYTESé usada para importar umNUMERICdo Spanner. Consulte a seção de mapeamentos recomendados a seguir para mais detalhes.†,‡ É possível importar um
LONGque armazena um carimbo de data/hora ou umSTRINGque armazena um carimbo de data/hora como umTIMESTAMPdo Spanner. Consulte a seção de mapeamentos recomendados a seguir para mais detalhes.Não é necessário incluir ou gerar metadados ao exportar os arquivos Avro.
Não é necessário seguir nenhuma convenção de nomenclatura específica para os arquivos.
Se você não exportar seus arquivos diretamente para o Cloud Storage, é necessário fazer o upload dos arquivos Avro para um bucket do Cloud Storage. Para instruções detalhadas, consulte Fazer upload de objetos para o Cloud Storage.
Importar arquivos Avro de bancos de dados que não são do Spanner para o Spanner
Para importar arquivos Avro de um banco de dados que não é do Spanner para o Spanner, siga estas etapas:
- Crie tabelas de destino e defina o esquema para o banco de dados do Spanner.
- Crie um arquivo
spanner-export.jsonno bucket do Cloud Storage. - Execute um job de importação do Dataflow usando a Google Cloud CLI.
Etapa 1: criar o esquema para o banco de dados do Spanner
Antes de executar a importação, crie a tabela de destino no Spanner e defina o esquema dela.
É necessário criar um esquema que use o tipo de coluna apropriado para cada coluna nos arquivos Avro.
Mapeamentos recomendados
GoogleSQL
| Tipo de coluna Avro | Tipo de coluna do Spanner |
|---|---|
ARRAY |
ARRAY |
BOOL |
BOOL |
BYTES |
|
DOUBLE |
FLOAT64 |
FLOAT |
FLOAT64 |
INT |
INT64 |
LONG |
|
STRING |
|
PostgreSQL
| Tipo de coluna Avro | Tipo de coluna do Spanner |
|---|---|
ARRAY |
ARRAY |
BOOL |
BOOLEAN |
BYTES |
|
DOUBLE |
DOUBLE PRECISION |
FLOAT |
DOUBLE PRECISION |
INT |
BIGINT |
LONG |
|
STRING |
|
Etapa 2: criar um arquivo spanner-export.json
Também é possível criar um arquivo chamado spanner-export.json no bucket do Cloud Storage. Esse arquivo especifica o dialeto do banco de dados e
contém uma matriz tables que lista
o nome e os locais dos arquivos de dados de cada tabela.
Os conteúdos do arquivo têm o seguinte formato:
{ "tables": [ { "name": "TABLE1", "dataFiles": [ "RELATIVE/PATH/TO/TABLE1_FILE1", "RELATIVE/PATH/TO/TABLE1_FILE2" ] }, { "name": "TABLE2", "dataFiles": ["RELATIVE/PATH/TO/TABLE2_FILE1"] } ], "dialect":"DATABASE_DIALECT" }
Em que DATABASE_DIALECT = {GOOGLE_STANDARD_SQL | POSTGRESQL}
Se o elemento de dialeto for omitido, o dialeto será definido como
GOOGLE_STANDARD_SQL.
Etapa 3: executar um job de importação do Dataflow usando a CLI gcloud
Para iniciar o job de importação, siga as instruções de uso da CLI gcloud para executar um job com o modelo do Avro para o Spanner.
Depois de iniciar um job de importação, é possível ver detalhes sobre ele no console do Google Cloud .
Após a conclusão do job de importação, adicione as chaves estrangeiras e os índices secundários necessários.
Escolha uma região para o job de importação
Talvez você queira escolher uma região diferente com base no local do bucket do Cloud Storage. Para evitar cobranças de transferência de dados de saída, escolha uma região que corresponda ao local do bucket do Cloud Storage.
Se o local do bucket do Cloud Storage for uma região, será possível aproveitar o uso de rede sem custo financeiro escolhendo a mesma região para o job de importação, supondo que ela esteja disponível.
Se o local do bucket do Cloud Storage for uma birregião, você poderá aproveitar o uso de rede sem custo financeiro escolhendo uma das duas regiões que compõem a birregião para o job de importação, supondo que uma das regiões esteja disponível.
- Se uma região de colocalização não estiver disponível para o job de importação ou se o local do bucket do Cloud Storage for multirregional, serão aplicadas cobranças de transferência de dados de saída. Consulte os preços de transferência de dados do Cloud Storage para escolher uma região com as menores cobranças de transferência de dados.
Ver ou resolver problemas de jobs na interface do Dataflow
Depois de iniciar um job de importação, é possível ver os detalhes dele, incluindo registros, na seção do Dataflow do console do Google Cloud .
Ver detalhes do job do Dataflow
Para ver detalhes de jobs de importação ou exportação executados na última semana, incluindo os que estão em execução agora:
- Navegue até a página Detalhes do banco de dados.
- Clique no item de menu do painel esquerdo Importar/Exportar. A página Importar/Exportar do banco de dados exibe uma lista de jobs recentes.
Na página Importar/Exportar do banco de dados, clique no nome do job na coluna Nome do job do Dataflow:

O console do Google Cloud mostra detalhes do job do Dataflow.
Para visualizar um job executado há mais de uma semana, siga estas etapas:
Acesse a página de jobs do Dataflow no console do Google Cloud .
Encontre seu job na lista e clique no nome dele.
O console do Google Cloud exibe detalhes do job do Dataflow.
Ver os registros do Dataflow do job
Para ver os registros de um job do Dataflow, acesse a página de detalhes do job e clique em Registros à direita do nome do job.
Se um job falhar, procure erros nos registros. Se houver erros, a contagem de erros será exibida ao lado de Registros:

Para ver os erros do job, siga estas etapas:
Clique na contagem de erros ao lado de Registros.
O console do Google Cloud exibe os registros do job. Pode ser necessário rolar para visualizar os erros.
Localize entradas com o ícone de erro
.Clique em uma entrada de registro individual para abrir o conteúdo.
Para mais informações sobre como resolver problemas de jobs do Dataflow, consulte Resolver problemas do pipeline.
Resolver problemas de jobs de importação com falha
Se você vir os seguintes erros nos registros do job:
com.google.cloud.spanner.SpannerException: NOT_FOUND: Session not found --or-- com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED: Deadline expired before operation could complete.
Verifique a latência de gravação de 99% na guia Monitoramento do banco de dados do Spanner no console doGoogle Cloud . Se estiver exibindo valores altos (vários segundos), isso indicará que a instância está sobrecarregada, fazendo com que as gravações expirem e falhem.
Uma causa da alta latência é que o job do Dataflow está sendo executado com muitos workers, o que sobrecarrega a instância do Spanner.
Para especificar um limite no número de workers do Dataflow, em vez de usar a guia "Importar/Exportar" na página de detalhes da instância do banco de dados do Spanner no console do Google Cloud , é necessário iniciar a importação usando o modelo do Cloud Storage Avro para o Spanner do Dataflow e especificar o número máximo de workers conforme descrito:Console
Se você estiver usando o console do Dataflow, o parâmetro Máximo de workers estará localizado na seção Parâmetros opcionais da página Criar job usando um modelo.
gcloud
Execute o comando gcloud dataflow jobs run
e especifique o argumento max-workers. Exemplo:
gcloud dataflow jobs run my-import-job \
--gcs-location='gs://dataflow-templates/latest/GCS_Avro_to_Cloud_Spanner' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,inputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
Resolver erro de rede
O seguinte erro pode ocorrer ao exportar os bancos de dados do Spanner:
Workflow failed. Causes: Error: Message: Invalid value for field 'resource.properties.networkInterfaces[0].subnetwork': ''. Network interface must specify a subnet if the network resource is in custom subnet mode. HTTP Code: 400
Esse erro ocorre porque o Spanner pressupõe que você quer usar uma rede VPC de modo automático chamada default no mesmo projeto do job do Dataflow. Se você não tiver uma rede VPC padrão no projeto ou se ela estiver em uma rede VPC de modo personalizado, será necessário criar um job do Dataflow e especificar uma rede ou sub-rede alternativa.
Otimizar jobs de importação lentos
Se as sugestões das configurações iniciais forem seguidas, geralmente não será necessário fazer nenhum outro ajuste. Se o job estiver sendo executado lentamente, é possível tentar outras otimizações:
Otimize o local do job e dos dados: execute o job do Dataflow na mesma região em que a instância do Spanner e o bucket do Cloud Storage estão localizados.
Garanta recursos suficientes do Dataflow: se as cotas relevantes do Compute Engine limitarem os recursos do job do Dataflow, a página do Dataflow do job no console do Google Cloud vai exibir um ícone de aviso
e mensagens
de registro:
Nessa situação, é possível reduzir o ambiente de execução do job aumentando as cotas (em inglês) para CPUs, endereços IP em uso e disco permanente padrão. Porém, isso pode resultar em mais cobranças do Compute Engine.
Verifique o uso da CPU do Spanner: se o uso da CPU da instância estiver acima de 65%, aumente a capacidade de computação nessa instância. A capacidade adiciona mais recursos do Spanner, e o job deve acelerar, mas você vai receber mais cobranças do Spanner.
Fatores que afetam o desempenho do job de importação
Vários fatores influenciam o tempo necessário para concluir um job de importação.
Tamanho do banco de dados do Spanner: o processamento de mais dados leva mais tempo e recursos.
Esquema de banco de dados do Spanner, incluindo:
- O número de tabelas
- O tamanho das linhas
- O número de índices secundários
- O número de chaves externas
- O número de fluxo de alterações
Local dos dados: os dados são transferidos entre o Spanner e o Cloud Storage usando o Dataflow. O ideal é que os três componentes estejam localizados na mesma região. Se não estiverem, a movimentação dos dados pelas regiões prejudica a velocidade de execução do job.
Número de workers do Dataflow: o número ideal de workers do Dataflow é necessário para um bom desempenho. Ao usar o escalonamento automático, o Dataflow escolhe o número de workers para o job, dependendo da quantidade de trabalho que precisa ser feita. O número de workers, no entanto, será limitado pelas cotas para CPUs, endereços IP em uso e disco permanente padrão. A IU do Dataflow exibirá um ícone de aviso caso encontre limites de cotas. Nessa situação, o progresso será mais lento, mas ainda assim o job será concluído. O escalonamento automático pode sobrecarregar o Spanner, levando a erros quando há uma grande quantidade de dados para importar.
Carga atual no Spanner: um job de importação adiciona uma carga de CPU significativa a uma instância do Spanner. Se a instância já tiver uma carga atual substancial, a execução do job será mais lenta.
Quantidade de capacidade de computação do Spanner: se o uso da CPU da instância for maior que 65%, o job será executado mais lentamente.
Ajustar workers para um bom desempenho de importação
Ao iniciar um job de importação do Spanner, os workers do Dataflow precisam ser definidos com um valor ideal para um bom desempenho. Muitos workers sobrecarregam o Spanner, e poucos workers resultam em um desempenho de importação insatisfatório.
O número máximo de workers depende muito do tamanho dos dados, mas o ideal é que a utilização total da CPU do Spanner fique entre 70% e 90%. Isso proporciona um bom equilíbrio entre a eficiência do Spanner e a conclusão de jobs sem erros.
Para atingir essa meta de utilização na maioria dos esquemas e cenários, recomendamos um número máximo de vCPUs de worker entre 4 e 6 vezes o número de nós do Spanner.
Por exemplo, para uma instância do Spanner de 10 nós, usando workers n1-standard-2, você definiria o número máximo de workers como 25, fornecendo 50 vCPUs.